Используя postfix 2.9 на debian, я настроил прокси-фильтр до очереди для сканирования спама и вирусов. smtpd_proxy_filter=127.0.0.1:27
. Я использую прокси-фильтр, а не фильтр содержимого, поэтому я могу напрямую отклонить электронное письмо (с фильтром содержимого после очереди я могу только отбросить электронное письмо и, при необходимости, отправить обратное рассеяние на поддельный адрес отправителя).
Я также хочу использовать службу политики, чтобы ограничить количество отправляемых писем на одно имя пользователя SASL. Это настроено в smtpd_recipient_restrictions
прямо перед permit_sasl_authenticated
. Демон политики работает нормально, но postfix жалуется, что не может УДЕРЖАТЬ письмо с таким сообщением:
warning: access table inet:127.0.0.1:10031: with smtpd_proxy_filter
specified, action HOLD is unavailable
Согласно этому нить, это невозможно напрямую:
Чтобы УДЕРЖИВАТЬ почту с помощью smtpd_proxy_filter, укажите действие УДЕРЖАТЬ с помощью smtpd ПОСЛЕ фильтра.
Я пробовал это, однако, когда я помещаю службу политики в демон smtpd после прокси-фильтра (smtpd на порт 26 в моем случае), он не получает никакой информации SASL (подтвержденной с помощью tcpdump).
smtpd :25 ---> before-queue proxy localhost:27 ---> smtpd localhost:26
Итак, как мне совместить эти две проверки?
РЕДАКТИРОВАТЬ: Может быть, вложенные фильтры до очереди будут работать? Затем мне нужно будет использовать другую программу для проверок SASL или переписать протокол фильтра / политики ...
Наконец, мне удалось найти решение, которое работает нормально, хотя это двухэтапный подход.
Во-первых, я изменил конфигурацию демона политики (postfix cluebringer v2), чтобы вернуть ПРЕДУПРЕЖДЕНИЕ директива вместо HOLD. Я добавляю специальный заголовок, который будет оценен позже: PREPEND X-cust-policy: Hold
. Это работает даже в сочетании с прокси-фильтром до очереди.
Во-вторых, я использовал директиву header_checks
pcre:/etc/postfix/header_hold
в main.cf
чтобы проверить добавленные позже. Эта проверка оценивается cleanup(8)
демон до того, как почта попадет в очередь. Таким образом, после того, как электронное письмо проходит через все проверки, включая демон политики, оно проходит через фильтр до очереди, а затем обрабатывается cleanup(8)
демон. Обычно он должен поместить сообщение в входящий очереди, но когда он находит этот заголовок, письмо помещается прямо в держать очередь.
Вот содержание Таблица PCRE файл /etc/postfix/header_hold
:
### PCRE format, no postmap command!
# Hold all email with specified header (which is inserted by policy service)
/^X-cust-policy: Hold/ HOLD
Единственное предостережение заключается в том, что проверка на основе заголовка также срабатывает для возвращенного недоставленного письма (но это не часто случается, когда электронное письмо отправляется из держать очередь будет возвращена обратно).
Также мне пришлось обновить cluebringer webui для поддержки действия PREPEND для модуля Quotas, хотя сам демон уже поддерживает его (версия в Debian wheezy).