URL: https://www.opennet.dev/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 97019
[ Назад ]

Исходное сообщение
"Whitelist в smtpd_relay_restrictions в Postfix"

Отправлено MarvinD , 17-Окт-17 14:17 
Всем привет.

Есть Postfix. Работает как шлюз исходящей почты (с авторизацией по паролю), и заодно перенаправляет входящую почту для одного домена (пусть domain1.com) на основной почтовый сервер. Т.е. не является конечной остановкой для почты.

Основная почта - в облаке, на Exchange Online. Там есть опция (поток обработки почты - соединители), где можно настроить, через какой промежуточный сервер можно переслать отправляемую почту. В Exchange Online указал мой Postfix.

В почтовом клиенте (Outlook) вынужден использовать не IMAP, а Microsoft Exchange, который, паразит, не дает просто указать кастомный SMTP!!! Т.е. почта из Outlook с авторизацией через Exchange Online уходит прекрасно, но если ее релеить на postfix, то он не дает открыто релеить через него почту в другие домены.

Конфиг Postfix:
main.cf:

relay_domains = domain1.com
...
smtpd_relay_restrictions =
        reject_non_fqdn_recipient,
        reject_non_fqdn_sender,
        reject_unknown_recipient_domain,
        reject_unknown_sender_domain,
        permit_mynetworks,
        permit_sasl_authenticated,
        reject_unauth_destination,
        reject_invalid_hostname,
        reject_unverified_sender,
        reject_unknown_client_hostname,
        reject_unknown_helo_hostname,
        defer_unauth_destination

И, вроде бы, прекрасно, что это не открытый релей.
Но без авторизации отправить через него почту в домен, отличный от domain1.com, невозможно. И письма из Exchange Online, пересылаемые от Microsoft на Postfix, отбрасываются. Лог на postfix, когда Exchange Online пытается переслать через него почту:

Anonymous TLS connection established from mail-ve1eur122p0672.outbound.protection.outlook.com[213.199.154.150]: TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)
NOQUEUE: reject: RCPT from mail-ve1eur122p0672.outbound.protection.outlook.com[213.199.154.150]: 454 4.7.1 <external123@partner.org>: Relay access denied; from=<my@domain1.com> to=<external123@partner.org> proto=ESMTP helo=<EUR03-VE1-obe.outbound.protection.outlook.com>
disconnect from mail-ve1eur122p0672.outbound.protection.outlook.com[213.199.154.150]

Оно и логично. С какого перепугу мой postfix будет релеить почту от "левых" *.outbound.protection.outlook.com? Он ее и отбрасывает.

Хосты (и IP) *.outbound.protection.outlook.com постоянно меняются, я не могу поступить грубо/криво и добавить нужный IP в myhostname.

Если relay_domains указать так:

relay_domains = domain1.com,partner.org

то почта на email external123@partner.org пройдет успешно. Но тогда надо просто делать открытый релей для любых доменов! Ясное дело - не хочу.

В smtpd_relay_restrictions, по моему представлению, надо указать что-то вроде:

smtpd_relay_restrictions =
        reject_non_fqdn_recipient,
        reject_non_fqdn_sender,
        reject_unknown_recipient_domain,
        reject_unknown_sender_domain,
        permit_mynetworks,
        permit_sasl_authenticated,
        check_client_access hash:/etc/postfix/trusted_servers,
        reject_unauth_destination,
        reject_invalid_hostname,
        reject_unverified_sender,
        reject_unknown_client_hostname,
        reject_unknown_helo_hostname,
        defer_unauth_destination
        
В файле /etc/postfix/trusted_servers:
.outbound.protection.outlook.com OK

Но почему-то не работает.

# postmap /etc/postfix/trusted_servers

Проверяю:
# postmap -q mail-am5eur02lp0143.outbound.protection.outlook.com /etc/postfix/trusted_servers
фиг там
# postmap -q .outbound.protection.outlook.com /etc/postfix/trusted_servers
ок

То-ли я не тот синтаксис использую, то-ли еще что-то. Есть идеи, как заставить разрешить postfix релеить почту, приходящую с хостов *.outbound.protection.outlook.com и адресованную любым адресам почты (а не моему домену), при этом не став открытым релеем?


Содержание

Сообщения в этом обсуждении
"Whitelist в smtpd_relay_restrictions в Postfix"
Отправлено MarvinD , 18-Окт-17 18:03 
Параметр relay_domains = domain1.com трогать не надо, он для тех, кто шлет почту мне. Т.е. без пароля smtp почту можно принимать только для моего домена domain1.com. Это ясное дело.

Если упростить, то как разрешить postfix релеить/отправлять почту в двух случаях:
1. клиент авторизован на этом postfix с паролем;
2. клиент принадлежит поддомену .outbound.protection.outlook.com и для этого случая пускать без пароля.

По идее, все просто должно быть.


"Whitelist в smtpd_relay_restrictions в Postfix"
Отправлено Andrey , 18-Окт-17 21:10 
> Параметр relay_domains = domain1.com трогать не надо, он для тех, кто шлет
> почту мне. Т.е. без пароля smtp почту можно принимать только для
> моего домена domain1.com. Это ясное дело.
> Если упростить, то как разрешить postfix релеить/отправлять почту в двух случаях:
> 1. клиент авторизован на этом postfix с паролем;
> 2. клиент принадлежит поддомену .outbound.protection.outlook.com и для этого случая пускать
> без пароля.
> По идее, все просто должно быть.

Он вас режет по ошибке:
> reject: RCPT from mail-ve1eur122p0672.outbound.protection.outlook.com

Правило, разрешающее пересылать с по RCPT FROM (если не ошибаюсь) должно находиться в разрешениях smtpd_client_restrictions.
Что-то типа:
smtpd_client_restriction = ...,
   check_client_access hash:/etc/postfix/permit_client,
   ...

И файл /etc/postfix/permit_client содержащий строку
   *.outbound.protection.outlook.com   OK
Возможно что домен нужно будет преобразовать по правилам regexp
Ну и не забыть сделать postmap после редактирования файла


"Whitelist в smtpd_relay_restrictions в Postfix"
Отправлено MarvinD , 19-Окт-17 12:07 
> Он вас режет по ошибке:
>> reject: RCPT from mail-ve1eur122p0672.outbound.protection.outlook.com
> Правило, разрешающее пересылать с по RCPT FROM (если не ошибаюсь) должно находиться
> в разрешениях smtpd_client_restrictions.
> Что-то типа:
> smtpd_client_restriction = ...,
>    check_client_access hash:/etc/postfix/permit_client,
>    ...

smtpd_client_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unknown_reverse_client_hostname,
reject_unknown_client_hostname,
permit

Тут не нужны еще разрешения. Любой и так может отправлять почту мне (relay_domains = domain1.com), без ограничений по клиентам.

Ограничения существуют для отправки почты в другие домены, а этим, насколько я понимаю, заведует параметр smtpd_relay_restrictions. Или же smtpd_recipient_restrictions.

http://www.postfix.org/postconf.5.html#smtpd_recipient_restr...:
...
With Postfix versions before 2.10, the rules for relay permission and spam blocking were combined under smtpd_recipient_restrictions, resulting in error-prone configuration. As of Postfix 2.10, relay permission rules are preferably implemented with smtpd_relay_restrictions, so that a permissive spam blocking policy under smtpd_recipient_restrictions will no longer result in a permissive mail relay policy.
...

В логе postfix:
NOQUEUE: reject: RCPT from mail-he1eur01lp0210.outbound.protection.outlook.com 554 5.7.1 Relay access denied

Ответка от Exchange в почтовую программу:
550 5.7.367 Отправитель не авторизован для ретрансляции

Добавил 1:
А можно в конфиге на REJECT или PERMIT действия ставить метки, чтобы отследить, где конкретно происхоидт отлуп?

Добавил 2:
debug_peer_list = /etc/postfix/trusted_servers
debug_peer_level = 2
изучаю...


"Whitelist в smtpd_relay_restrictions в Postfix"
Отправлено Andrey , 19-Окт-17 12:49 
>[оверквотинг удален]
> with smtpd_relay_restrictions, so that a permissive spam blocking policy under smtpd_recipient_restrictions
> will no longer result in a permissive mail relay policy.
> ...
> В логе postfix:
> NOQUEUE: reject: RCPT from mail-he1eur01lp0210.outbound.protection.outlook.com 554
> 5.7.1 Relay access denied
> Ответка от Exchange в почтовую программу:
> 550 5.7.367 Отправитель не авторизован для ретрансляции
> А можно в конфиге на REJECT или PERMIT действия ставить метки, чтобы
> отследить, где конкретно происхоидт отлуп?

Ок.
Добавьте в разрешенные IP вот по этому списку: https://technet.microsoft.com/en-us/library/dn163583(v=exchg...).aspx



"Whitelist в smtpd_relay_restrictions в Postfix"
Отправлено Аноним , 19-Окт-17 07:46 
> Проверяю:
> # postmap -q mail-am5eur02lp0143.outbound.protection.outlook.com /etc/postfix/trusted_servers
> фиг там
> # postmap -q .outbound.protection.outlook.com /etc/postfix/trusted_servers
> ок

postmap -q умеет проверять только точное совпадение, а поведение постфикса зависит от параметра parent_domain_matches_subdomains -- попробуйте добавить в файл /etc/postfix/trusted_servers строку:
outbound.protection.outlook.com OK
(т.е. без точки в начале).


"Whitelist в smtpd_relay_restrictions в Postfix"
Отправлено MarvinD , 19-Окт-17 12:28 
>> Проверяю:
>> # postmap -q mail-am5eur02lp0143.outbound.protection.outlook.com /etc/postfix/trusted_servers
>> фиг там
>> # postmap -q .outbound.protection.outlook.com /etc/postfix/trusted_servers
>> ок
> postmap -q умеет проверять только точное совпадение, а поведение постфикса зависит от
> параметра parent_domain_matches_subdomains -- попробуйте добавить в файл /etc/postfix/trusted_servers
> строку:
> outbound.protection.outlook.com OK
> (т.е. без точки в начале).

Спасибо за совет! Добавил. Теперь:

postmap -q outbound.protection.outlook.com /etc/postfix/trusted_servers
OK
postmap -q .outbound.protection.outlook.com /etc/postfix/trusted_servers
OK
postmap -q mail-am5eur02lp0143.outbound.protection.outlook.com /etc/postfix/trusted_servers

Postfix по-прежнему не реагирует.


"Whitelist в smtpd_relay_restrictions в Postfix"
Отправлено Аноним , 19-Окт-17 19:24 
> Postfix по-прежнему не реагирует.

Возможно блокируют правила в smtpd_recipient_restrictions, попробуйте добавить туда эту же проверку. Или замените в файле /etc/postfix/trusted_servers
OK
на
REJECT test for outbound.protection.outlook.com
и посмотрите, изменился ли ответ от вашего сервера - хоть узнаете, работает ли файл.


"Whitelist в smtpd_relay_restrictions в Postfix"
Отправлено MarvinD , 20-Окт-17 11:05 
> Возможно блокируют правила в smtpd_recipient_restrictions, попробуйте добавить туда
> эту же проверку. Или замените в файле /etc/postfix/trusted_servers
> OK
>  на
> REJECT test for outbound.protection.outlook.com
> и посмотрите, изменился ли ответ от вашего сервера - хоть узнаете, работает
> ли файл.

Здорово! Спасибо за совет. Правила работают. Reject в логи пишет (укорочу):
NOQUEUE: reject: RCPT from host1.outbound.protection.outlook.com[213.199.154.183]: 554 5.7.1 <host1.outbound.protection.outlook.com[213.199.154.183]>: Client host rejected: test for outbound.protection.outlook.com; ...

Еще раз спасибо, очень полезно для разбора.