Статья подготовлена на основе http://postfix.ru/viewtopic.php?t=229&start=30
На самом деле, момент истины заключается в том, что правила smtpd_*_restrictions работают в демоне smtpd, а header/body_checks – в демоне cleanup. Т.е. обработка письма идет так:
-> smtp -> cleanup -> qmgr -> ..., и, конечно, cleanup не знает, что smtp уже хочет отдать письмо в hold (это поймет только qmgr, а он идет уже после cleanup).
Обойти cleanup невозможно в принципе, но он берет параметры *_checks из main.cf. Итак... что нужно сделать? Правильно – поменять main.cf так, чтобы в нем либо *_checks отсутствовали, либо игнорировались. Это достигается путем запуска еще одного listener'а с условием -o receive_override_options=no_header_body_checks (ВНИМАНИЕ: решение не предусматривает запуска 2-го экземпляра postfix).
Теперь, собственно, остается решить только одно: как перенаправлять входящие сообщения для определенного клиента на этот листенер.
Рассмотрим, во-первых, порядок работы listener'ов. Назовем их «фильтрующий» – в котором включены проверки header/body, и «простой» – в котором проверки header/body выключены.
Напомню постулат – cleanup невозможно обойти в принципе. И если письмо будет сначала проходить фильтрующий listener, то в нем правила header/body_checks сработают обязательно. А вот если сначала будет простой, тогда можно письма для всех клиентов пересылать на фильтрующий, а для спец-супер-дупер-без-проверок-клиента – просто отправлять далее в очередь (без фильтрации, она же отключена в простом).
Во-вторых, надо выбрать способ перенаправления. В postfix'е их несколько, но, например, если использовать перенаправление через таблицу транспортов (transport_maps = ....), то эта таблица будет работать в обоих listener'ах сразу, а это приведет к зацикливанию фильтрующего. Чем же еще можно манипулировать? Да теми же фильтрующими правилами, относящимися к проверке, скажем, реципиентов.
Итак, скелет рабочей схемы:
Код:
1) master.cf:
2) main.cf:
3) vip_client_checks:
ВАЖНО! Проверку regexp:<path_to_config_dir>/vip_client_checks нужно разместить так, чтобы через нее проходили все реципиенты Вашего домена.
На этом все.
P.S. Работает, проверено, postfix v2.2.5.