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

Postfix After-Queue Content Filter, расширенный фильтр не работает

Я следовал инструкциям на сайте postfix на как настроить фильтр содержимогоУ меня простой пример заработал довольно быстро, но после долгих часов борьбы я не смог заставить работать расширенный фильтр.

Я настраиваю все, как в примере, smtp прослушивает порт 25 на предмет нефильтрованных сообщений, у него есть фильтр, настроенный для передачи сообщений на порт 10025, который вызывает сценарий фильтра, и еще один прослушиватель smtp для отфильтрованных сообщений на порту 10026.

В простом примере сценарий является последней остановкой в ​​потоке сообщений, он получает сообщение через стандартный ввод, выполняет свою работу и повторно вводит его с помощью sendmail.

В расширенном примере я не понимаю сообщения и не могу передать его. Мне удалось вернуть ответ: «550 материалов отклонено».

Я предполагаю, что мой вопрос в том, как сценарий получает тело письма и как он возвращает его в очередь почты? и как мне заставить все это работать?

main.conf:

content_filter = scan:localhost:10025

master.conf:

scan      unix  -       -       n       -       10      smtp
        -o smtp_send_xforward_command=yes
        -o disable_mime_output_conversion=yes
        -o smtp_generic_maps=

localhost:10025 inet  n       n       n       -       10      spawn
        user=filter argv=/home/omri/filter.sh localhost 10026

localhost:10026 inet  n       -       n       -       10      smtpd
        -o content_filter= 
        -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks,no_milters
        -o smtpd_helo_restrictions=
        -o smtpd_client_restrictions=
        -o smtpd_sender_restrictions=
        # Postfix 2.10 and later: specify empty smtpd_relay_restrictions.
        -o smtpd_relay_restrictions=
        -o smtpd_recipient_restrictions=permit_mynetworks,reject
        -o mynetworks=127.0.0.0/8
        -o smtpd_authorized_xforward_hosts=127.0.0.0/8

В разделе Пример простого фильтра содержимого, вы можете использовать канал (например, stdin) для получения тела письма. В продвинутые, ваш сценарий должен работать как SMTP-сервер, так и как SMTP-клиент.

  • В качестве SMTP-сервера postfix будет использовать SMTP для отправки электронной почты скрипту. Таким образом, ваш сценарий должен самостоятельно обрабатывать SMTP-транзакцию. Процесс создания не делает этого с вами, вместо этого он обрабатывается как inetd.
  • Как SMTP-клиент, ваш скрипт вернет почту postfix localhost: 10026 с транзакцией SMTP.

Фрагмент с той страницы.

Второй пример более сложен, но может дать лучшую производительность и с меньшей вероятностью будет возвращать почту, когда на машине возникают проблемы с ресурсами. Этот фильтр содержимого получает нефильтрованную почту с SMTP на порт localhost 10025., и отправляет отфильтрованную почту обратно в Postfix с SMTP на порт localhost 10026.

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