Но... вы уже почти все открыли!
У вас есть дополнительный smtpd
службы, которая обычно устанавливается в master.cf
как это:
smtp:10025 инет n - n - - smtpd
...
Amavis настроен на повторную отправку почты обратно в 127.0.0.1:10025
(или любой порт, который вы используете). Идея такова: вы запускаете специальную приватную службу на порту, отличном от защищенного брандмауэром по умолчанию, чтобы принимать только обработанную почту.
Такая конфигурация работает следующим образом:
- один из постфиксов
smtpd
экземпляры, почтовый обменник или отправка, получает почту извне и регистрирует это в первый раз (и служба политики звонков)
- Потом согласно конфигурации запихивает в Амавис
- Amavis после обработки реинжектит почту обратно в Postfix, но отдает ее спец.
smtpd
экземпляр, настроенный на нет возвращать почту Amavis, потому что он ожидает, что вся почта будет поступать к нему от Amavis
- Это дополнительное
smtpd
регистрирует эту почту снова (и вызывает службу политик), а затем пересылает его по обычным правилам.
В такой настройке невозможно исправить двойное ведение журнала, потому что это вызвано этим изначально неполноценным способом включения Amavis в обработку через SMTP. Но у вас все еще есть способ, по крайней мере, уменьшить влияние этой двойной регистрации. Вы можете дать дополнительную smtpd
пример отдельный префикс журнала, тем самым создавая способ различить, какой из них обрабатывает почту на этот раз. После строки, где доп. smtpd
услуга определяется в master.cf
, добавьте строку:
-o syslog_name=postfix/reinject
(или то, что вы собираетесь использовать, чтобы отличить его от других smtpd
инстансы, почтовый обменник и подача).
Кроме того, вы можете отключить обработку службы политик для этого экземпляра, чтобы postfwd
не будет считать почту дважды. Вы должны повторить все свои smtpd_*_restrictions
в master.cf
для этой услуги, где, не включая эта служба политики:
...
-o smtpd_recipient_restrictions=...,reject_unauth_destination
...
никогда не ставьте пробелы master.cf
-о параметры!
Грязный, я знаю. Это потому, что вся эта установка с реинъекцией беспорядочна.
Вероятно, у вас уже есть какие-то другие параметры; это нормально, они все еще необходимы. Также обратите внимание, это только меняет smtpd
поведение при регистрации; затем он помещает почту в общую очередь, где ее подхватывают и обрабатывают другие демоны, и, поскольку мы не создали для них специальную конфигурацию ведения журнала, вы не сможете легко отличить, обрабатывают ли они исходную почту или обработали на этот раз (подсказка: идентификатор почтовой очереди полезен для этого). Так что это лишь частичное исправление, но все же очень полезное.
Чтобы полностью исправить это двойное ведение журнала, вы должны перепроектировать свою почтовую систему так, чтобы ни одна почта не проходила через нее дважды. Таким образом, каждое письмо будет учитываться один раз, как по волшебству. В Postfix есть специальный способ обработки почты, который называется Милтер («почтовый фильтр»), который рекомендуется использовать вместо SMTP и повторной инъекции. Вы можете подключить Amavis или любое другое приложение, поддерживающее milter (их существует множество) через этот интерфейс, и вы получите гораздо более чистый путь маршрутизации почты внутри почтовой системы и меньше хлопот с журналами и другими проблемами. Postfix будет немедленно отклонять спам, вместо того, чтобы стоять в очереди, проверять и затем отбрасывать. Прочитайте совершенное руководство Postfix о Поддержка Postfix перед очередью Milter