Назад | Перейти на главную страницу

postfix - разные проверки заголовков для входящей и исходящей почты

Как я могу применить разные 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

Это позволит вам определить действие в зависимости от того, является ли почта входящей или исходящей, надеюсь, это ответит на ваш вопрос.