Я хочу передавать входящую почту, используя 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
в ином случае. Но это немного перебор, если вы хотите упростить настройку.