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

Как повторно вставить отсканированную почту в очередь с помощью 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 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

В cleanupdaemon 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. С этим способом вы можете выборочно сканировать входящую почту. К сожалению, вы должны снова зарегистрировать свой virtual domainв этой таблице. . Вы можете избежать этого, аккуратно разместив таблицу ACCESS после permit_mynetworks, permit_sasl_authenticated. С этим способом исходящая почта будет уже разрешена, и вы будете сканировать только входящую почту. (Кредит на комментарий OP:) )

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

Связанный контент