Назад | Перейти на главную страницу

Постфиксная фильтрация после очереди только для локальных адресатов

Мне нужно запустить всю почту, адресованную локальным доменам (как определено в vmail_domains), через простой фильтр содержимого после очереди, который затем повторно вводит обработанные электронные письма обратно в Postfix через sendmail.

Я успешно создал фильтр perl на основе примера простого фильтра содержимого после очереди, показанного в постфиксе FILTER_README doc:

smtp      inet  n       -       n       -       -       smtpd -o content_filter=statusFilter
statusFilter unix -     n       n       -       -       pipe user=mailFilter argv=/mydir/filter.pl ${sender} ${recipient}

К сожалению, этот фильтр фильтрует только почту, поступающую через Интернет, и пропускает все локальные доставки, такие как сообщения возврата Postfix, и мне особенно необходимо обрабатывать сообщения возврата, независимо от того, как они пришли.

Есть ли способ отфильтровать всю электронную почту, адресованную локальным доменам Postfix, с помощью простого фильтра после очереди, независимо от того, прибыла ли она из локального источника или из удаленного источника, при этом никогда не фильтруя почту, отправляемую в удаленные (интернет) домены?

К сожалению, этот фильтр фильтрует только почту, поступающую через Интернет, и пропускает все локальные доставки, такие как сообщения возврата Postfix, сообщения от других локальных пользователей и сообщения из локальных сценариев через sendmail.

Это один из ограничение из простого контентного фильтра. Цитата из Документация Postfix

Первый пример прост в настройке, но имеет серьезные ограничения, которые будут рассмотрены во втором примере. Postfix получает нефильтрованную почту из сети с помощью сервера smtpd (8) и доставляет неотфильтрованную почту в фильтр содержимого с помощью агента доставки Postfix pipe (8). Фильтр содержимого вводит отфильтрованную почту обратно в Postfix с помощью команды Postfix sendmail (1), так что Postfix может доставить ее в конечный пункт назначения.

Это означает, что почту, отправленную с помощью команды Postfix sendmail (1), нельзя фильтровать по содержанию.

Решение использует расширенный фильтр содержимого. Он использует SMTP для общения с постфиксом вместо канала. Поскольку ваш текущий сценарий не может взаимодействовать с SMTP, вы можете использовать smtpprox, как описано в документации

Для программного обеспечения фильтрации содержимого, не поддерживающего SMTP, прокси-сервер SMTP Беннета Тодда реализует удобную структуру фильтрации содержимого PERL / SMTP. Видеть: http://bent.latency.net/smtpprox/.

Он тоже написан на Perl, но выпущен более десяти лет назад. Также Джесси Норелл раздвоил его репозиторий github.


Есть ли способ отфильтровать всю электронную почту, адресованную локальным доменам Postfix, с помощью простого фильтра после очереди, независимо от того, прибыла ли она из локального или удаленного источника, при этом никогда не фильтруется почта, отправляемая на удаленные (интернет) домены?

Сам Postfix не может различать локальные / удаленные домены при выполнении content_filter. Решение о фильтре содержимого было принято до очистки маршрутизации электронной почты демона очистки Один из альтернатив - вручную проверить домен в вашем Perl-скрипте.