postfix - различные проверки заголовков для входящей и исходящей почты
Как я могу применить разные header_checks
для входящей и исходящей почты с использованием postfix?
По умолчанию все header_checks применяются как к входящим, так и к исходящим.
3 ответа
header_checks
сделано cleanup
поэтому я не думаю, что вы можете применять его только для входящих или исходящих.
smtp_header_checks
применяется только для исходящей почты (клиент smtp)
Если есть почтовый заголовок, который вы можете использовать для определения того, что является входящим, а какое - исходящей почтой, в postfix 3.2 или новее вы можете замкнуть header_checks, например:
/^Received: .*detect_outgoing_mails/ PASS
/^X-Something: this rule will only match on incoming mails/ HOLD
(но он по-прежнему дает вам возможность сопоставлять ВСЕ (как и прежде) или сопоставлять только входящую или только исходящую почту и требует относительно новой версии постфикса)
В качестве лучшей альтернативы, если вы всегда можете получать "исходящую" почту (почту от клиентов, для которых вы действуете как почтовый ретранслятор) на один порт (отправка: tcp/587) и входящую почту на tcp/25, вы должны иметь возможность использование master.cf
переопределить header_checks для каждого, например так:
submission inet n - n - - smtpd
-o smtpd_enforce_tls=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o header_checks=pcre:/etc/postfix/header_checks.relay
smtp inet n - - - 200 smtpd
-o strict_rfc821_envelopes=yes
-o header_checks=pcre:/etc/postfix/header_checks.mx
но это не сработает, если ваши клиенты, для которых вы ретранслируете, также используют tcp / 25 как остальной мир. Если они это сделают, вы можете настроить альтернативный порт для них, и это будет работать, но выполнимость этого зависит от вашей способности убедить всех ваших пользователей изменить их настройки.
Если у вас есть запасной IP-адрес, вы также можете сделать его в основном прозрачным для пользователей: скажем, у вас есть smtp.example.org
как сервер ретрансляции для пользователей и как ваш MX с IP a.a.a.a
, вы можете изменить MX домена на IP b.b.b.b
, а затем использовать один сервер smtpd в a.a.a.a
с одним набором проверок заголовков и другим сервером smtpd в b.b.b.b
с другим набором проверок заголовка. Это даже проще, если вы ретранслируете только для пользователей, скажем, 192.168.xx/24, когда вы можете даже сохранить то же имя DNS и использовать представления DNS для представления внутреннего IP-адреса для внутренних клиентов и внешнего IP-адреса для остального мира.
И третий способ - использовать возможность постфиксного FILTER вместо header_check
- вместо простого сопоставления с регулярным выражением, оно будет пересылать целое сообщение в ваш пользовательский сценарий для обработки, который затем может легко различить входящую и исходящую почту, проверяя заголовки, а затем выполнять любую постобработку по желанию.
Если я правильно понимаю ваш вопрос, вы сможете сделать это через /etc/postfix/header_checks
файл, что-то вроде этого для исходящей почты/^From: "spammer/ REJECT
/^To: bob@here.com/ REDIRECT bob@there.com
Я сделал это давным-давно, поэтому не помню все детали, но вы можете получить больше информации здесь DOC
Это позволит вам определить действие в зависимости от того, является ли почта входящей или исходящей, я надеюсь, что это ответ на ваш вопрос.