Как я могу применить разные header_checks
для входящей и исходящей почты с помощью постфикса?
По умолчанию все header_checks применяются как для входящих, так и для исходящих.
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.x.x / 24, когда вы даже можете сохранить одно и то же DNS-имя и использовать DNS-представления для представления внутреннего IP-адреса для внутренних клиентов и внешнего IP-адреса для остального мира.
И третий способ - использовать постфикс ФИЛЬТР способность вместо header_check
- вместо простого сопоставления регулярных выражений он будет перенаправлять все сообщение в ваш настраиваемый сценарий для обработки, который затем может легко различать входящую и исходящую почту, проверяя заголовки, а затем выполняет любую постобработку по своему усмотрению.
Если я правильно понимаю ваш вопрос, вы сможете сделать это через /etc/postfix/header_checks
файл, что-то вроде этого для исходящей почты /^From: "spammer/ REJECT
/^To: bob@here.com/ REDIRECT bob@there.com
Я сделал это давно, поэтому не помню всех деталей, но вы можете получить больше информации здесь DOC
Это позволит вам определить действие в зависимости от того, является ли почта входящей или исходящей, надеюсь, это ответит на ваш вопрос.