Рейтинг:3

Posftwd ведет двойной учет электронных писем при использовании с Posftix и amavis.

флаг mx

Наш почтовый сервер Postfix использует Amavis с убийцей спама для сканирования спама и вирусов. Мы настроили его таким образом, что postfix перенаправляет почту на amavis, а затем amavis переставляет почту в очередь обратно на postfix для отправки ее по назначению. Я настроил postfwd с простым правилом, чтобы отклонять электронные письма после порогового значения для отправителя, но Postfwd дважды считает электронные письма. Когда я отправляю одно электронное письмо через Outlook в качестве почтового клиента, Postfwd вместо этого считает его двумя. Я новичок в SMTP-протоколах и изо всех сил пытаюсь определить проблему. Если кто-то может, пожалуйста, помогите. Я вставил некоторые фрагменты конфигурации, которые, я думаю, будут полезны ниже.

Ниже приведен вывод для postconf -n

append_dot_mydomain = нет
биф = нет
сломанный_sasl_auth_clients = да
content_filter = amavis:[127.0.0.1]:10024
disable_vrfy_command = да
dovecot_destination_recipient_limit = 1
enable_original_recipient = нет
header_checks = регулярное выражение:/etc/postfix/header_checks
inet_interfaces = все
почтовый ящик_размер_лимит = 0
maximal_backoff_time = 8000 с
maximal_queue_lifetime = 7д
Minimum_backoff_time = 1000 сек.
мой пункт назначения = $имя_хоста
имя_хоста = pXXX
мои сети = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128,XXX
mynetworks_style = хост
myorigin = /etc/имя хоста
readme_directory = нет
получатель_разделитель = +
relay_domains = hash:/etc/postfix/relay_recipients
smtp_enforce_tls = нет
smtp_helo_timeout = 60 с
smtp_tls_note_starttls_offer = да
smtp_tls_security_level = может
smtp_use_tls = да
smtpd_banner = $myhostname ESMTP $mail_name
smtpd_client_connection_count_limit = 30
smtpd_client_recipient_rate_limit = 300
smtpd_client_restrictions = Permit_MyNetworks, Permit_Sasl_аутентифицированный, Check_client_access hash:/etc/postfix/whitelist, reject_rbl_client sbl.spamhaus.org
smtpd_data_restrictions = reject_unauth_pipelining
smtpd_delay_reject = да
smtpd_enforce_tls = нет
smtpd_hard_error_limit = 12
smtpd_helo_required = да
smtpd_helo_restrictions = хэш check_client_access:/etc/postfix/whitelist, allow_mynetworks, warn_if_reject reject_non_fqdn_hostname, reject_invalid_hostname
smtpd_recipient_limit = 30
smtpd_recipient_restrictions = reject_unauth_pipelining, check_policy_service inet:127.0.0.1:10040, allow_mynetworks, allow_sasl_authenticated, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, check_policy_service inet:127.0.0.1:10023
smtpd_relay_restrictions = allow_mynetworks, хэш check_client_access:/etc/postfix/whitelist, хэш check_sender_access:/etc/postfix/whitelist, allow_sasl_authenticated, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, check_policy_service inet:127.0.0.3:1002
smtpd_sasl_auth_enable = да
smtpd_sasl_authenticated_header = да
smtpd_sasl_local_domain =
smtpd_sasl_path = частный/авторизация
smtpd_sasl_type = голубятня
smtpd_sender_restrictions = хэш check_sender_access:/etc/postfix/sender_access, allow_sasl_authenticated, allow_mynetworks, reject_unknown_sender_domain, reject_unauth_pipelining, warn_if_reject reject_sender_login_mismatch, warn_if_reject reject_non_fqdn_sender, warn_if_reject rejectf_unlisted_sender
smtpd_soft_error_limit = 3
smtpd_tls_cert_file = ХХХ
smtpd_tls_key_file = ХХХ
smtpd_tls_loglevel = 1
smtpd_tls_received_header = да
smtpd_tls_security_level = может
smtpd_tls_session_cache_timeout = 3600 с
smtpd_use_tls = да
tls_random_source = dev:/dev/urandom
transport_maps = хеш:/etc/postfix/транспорт
unknown_local_recipient_reject_code = 450
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf, proxy:mysql:/etc/postfix/mysql_virtual_alias_domainaliases_maps.cf
virtual_gid_maps = статический: 125
virtual_mailbox_base = /home/vmail
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf, proxy:mysql:/etc/postfix/mysql_virtual_mailbox_domainaliases_maps.cf
виртуальный_транспорт = голубятня
виртуальные_uid_maps = статические: 150

Правила постфвда:

идентификатор = 20 в минуту; отправитель=~/[email protected]/; action=rate(sender/20/60/REJECT только 20 сообщений в минуту для $$sender)

Кто-нибудь может помочь пролить свет на эту проблему?

Рейтинг:2
флаг za

Но... вы уже почти все открыли!

У вас есть дополнительный smtpd службы, которая обычно устанавливается в master.cf как это:

smtp:10025 инет n - n - - smtpd
...

Amavis настроен на повторную отправку почты обратно в 127.0.0.1:10025 (или любой порт, который вы используете). Идея такова: вы запускаете специальную приватную службу на порту, отличном от защищенного брандмауэром по умолчанию, чтобы принимать только обработанную почту.

Такая конфигурация работает следующим образом:

  1. один из постфиксов smtpd экземпляры, почтовый обменник или отправка, получает почту извне и регистрирует это в первый раз (и служба политики звонков)
  2. Потом согласно конфигурации запихивает в Амавис
  3. Amavis после обработки реинжектит почту обратно в Postfix, но отдает ее спец. smtpd экземпляр, настроенный на нет возвращать почту Amavis, потому что он ожидает, что вся почта будет поступать к нему от Amavis
  4. Это дополнительное 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

флаг mx
Большое спасибо за помощь. Это действительно помогает объяснить вещи

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.