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

Как повторно вставить отсканированную почту в очередь с помощью sendmail

Я хочу передавать входящую почту, используя virtual_transport к транспорту spamassassin (main.cf: virtual_transport=spamassassin), а затем повторно вставьте отсканированное письмо в postfix с помощью sendmail.

Транспорт выглядит так:

spamassassin unix   -    n     n   -   -    pipe
    flags=hu user=vmail:mail argv=/usr/bin/spamc -u ${recipient} -e /usr/sbin/sendmail -f ${sender} ${recipient}

Это должно быть возможно в соответствии с документация по postfix:

Сайтам с большим объемом сообщений следует избегать использования "простых" фильтров содержимого, которые повторно вводят сканированную почту через Postfix sendmail (1) и postdrop (1).

С моим текущим вызовом sendmail /usr/sbin/sendmail -f ${sender} ${recipient}, почта зацикливается, возвращаясь в очередь, а затем обратно в spamassassin и так далее.

Насколько я понимаю из документации postfix, почта доставляется с использованием postfix sendmail падает в maildrop каталог, а затем взял с помощью pickup. Я попытался добавить -o virtual_transport=dovecot в пикап, чтобы не стоять в очереди, но это не помогло. (Я полагаю, эти параметры могут быть добавлены только к транспортам smtp).

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

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

НЕТ, ты не можешь

Объяснение

Я понимаю причину, по которой вы используете virtual_transport направлять электронную почту в Spam Assassin. Вы хотите отсканировать только письмо, предназначенное для вашего virtual_mailbox_domain. К сожалению, это не соответствует рекомендуемые настройка простого фильтра содержимого это использование content_filter параметр вместо virtual_transport.

Почему я не могу пройти virtual_transport самовывоз или smtpd?

Как правило, здесь путь электронной почты через постфиксный код

Input  --> cleanup --> qmgr --> Output 
*smtpd                          *local     
*pickup                         *virtual
*qmqpd                          *smtp
                                *lmtp
                                *pipe

В cleanup daemon, postfix будет «маршрутизировать» вашу электронную почту, независимо от того, принадлежат ли они виртуальному, локальному, smtp или другому транспорту. Одно исключение - непустое content_filter параметр был передан в службу ввода (smtpd, pickup, qmqpd). Когда это произойдет, postfix переопределит маршрут сообщения и отправит электронное письмо в content_filter вместо.

Еще одно замечание, по умолчанию все постфиксные службы получали значение параметра из main.cf если вы не переопределите его, используя -o параметр = значение на master.cf. Но не каждый параметр в man 5 postconf используется службой. Например, content_filter используется только pickup, smtpd и qmqpd так что вы можете положить -o content_filter = amavis: [127.0.0.1:10025 на них. Другой пример, не имеет смысла ставить -o smtp_bind_address в smtpd поскольку этот параметр используется только в smtp служба.

Тот же аргумент можно применить к вашему вопросу: «Почему я могу передать -o виртуальный_транспорт в pickup? "

Итак, вот несколько альтернатив для вашей установки

  • Использовать content_filter как описано в документации postfix. Обратной стороной является то, что вы также сканируете электронную почту, которая ретранслируется за пределы вашего домена.

  • Использовать content_filter через таблицу ACCESS и действие FILTER. Таким образом вы можете выборочно сканировать входящую электронную почту. К сожалению, вы должны заручиться своим virtual domain снова в этой таблице.. Избежать этого можно, аккуратно поставив таблицу ДОСТУП после permit_mynetworks, permit_sasl_authenticated. Таким образом, исходящая электронная почта будет уже разрешена, а вы сканируете только входящую почту. (Кредит на комментарий OP :))

  • С помощью Множественный экземпляр Postfix. Таким образом, вы можете сохранить virtual_transport параметр, а spamc отправит письмо на ваш второй экземпляр. И тогда вы можете определить разные virtual_transport в ином случае. Но это немного перебор, если вы хотите упростить настройку.