Я хотел бы передать входящую почту с помощью 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 sendmail(1) и postdrop(1).
При моем текущем вызове sendmail /usr/sbin/sendmail -f ${sender} ${recipient}
почта зацикливается, возвращаясь в очередь, а затем обратно в spamassassin и так далее.
Насколько я понимаю из документации postfix, почта, доставленная с помощью postfix, sendmail
попадает в maildrop
каталог, а затем забирается с помощью pickup
. Я пытался добавить a -o virtual_transport=dovecot
к pickup transport, чтобы избежать очереди, но это не помогло. (Я полагаю, эти параметры можно добавлять только к smtp transports).
Как можно повторно поместить почту, отсканированную с помощью spamassassin, обратно в очередь для окончательной доставки, не создавая при этом зацикливания?
решение1
Как можно повторно поместить почту, отсканированную с помощью spamassassin, обратно в очередь для окончательной доставки, не создавая при этом зацикливания?
НЕТ Ты не можешь
Объяснение
Я понимаю, почему вы используете virtual_transport
для пересылки писем в Spam Assassin. Вы хотите только сканировать письма, предназначенные для вашего virtual_mailbox_domain
. К сожалению, это не соответствуетрекомендуемые настройка простого фильтра содержимогочто вместо этого используется content_filter
параметр virtual_transport
.
Почему я не могу передать данные virtual_transport
в pickup или 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
вместо этого в .
Еще одно замечание: по умолчанию все службы Postfix получают значение параметра, main.cf
если только вы не переопределите его с помощью-o параметр=значение на master.cf
. Но не каждый параметр man 5 postconf
используется службой. Например,контент_фильтриспользуется только 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. С этим способом вы можете выборочно сканировать входящую почту.К сожалению, вы должны снова зарегистрировать свой. Вы можете избежать этого, аккуратно разместив таблицу ACCESS послеvirtual domain
в этой таблице.permit_mynetworks
,permit_sasl_authenticated
. С этим способом исходящая почта будет уже разрешена, и вы будете сканировать только входящую почту. (Кредит на комментарий OP:) )С использованиемПостфикс Множественные экземпляры. Таким образом, вы можете сохранить
virtual_transport
параметр, и spamc внедрит письмо во второй экземпляр. И затем вы можете определить разные значенияvirtual_transport
в разных экземплярах. Но это немного излишне, если вы хотите сохранить простоту настройки.