
Я хотел бы иметь постфикс, который позволяет ретранслировать почту на ретранслятор, когда
а) домен-отправитель разрешен
и один из:
б) отправитель прошел аутентификацию в) у клиента есть запись в белом списке IP-адресов
Мой текущий подход на данный момент таков:
relayhost = [RELAYHOST]:25
smtpd_reject_unlisted_sender = yes
smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/restricted_senders
smtpd_recipient_restrictions =
check_client_access cidr:/etc/postfix/ip_whitelist,
permit_sasl_authenticated,
reject_unauth_destination
с restricted_senders, содержащими
example.com OK
и ip_whitelist содержащий
192.168.1.3 OK
Хотя отправка писем от аутентифицированных клиентов или клиентов из белого списка IP работает, ограничение домена отправителя не работает. Кажется, как только аутентификация или client_access совпадают, ограничение отправителя больше не проверяется.
решение1
Почему это не работает?
По умолчанию разрешено всё.
Укажите список ограничений, разделенных запятыми и/или пробелами. Продолжайте длинные строки, начиная следующую строку с пробела. Ограничения применяются в указанном порядке; первое совпадающее ограничение побеждает.
и
check_sender_access type:table
Поиск указанногодоступ(5)базу данных для
MAIL FROM
адреса, домена, родительских доменов илиlocalpart@
и выполнить соответствующее действие.
Поэтому ваша конфигурация сначала разрешает example.com
из /etc/postfix/restricted_senders
, а затем разрешает все остальное.smtpd_reject_unlisted_sender
не меняет этого, потому что:
Адрес считается «неизвестным», если 1) он не соответствуетвиртуальный(5)псевдоним иликанонический(5)отображение, и 2) адрес недействителен для своего класса адреса. Определение проверки адреса на основе класса см.ADDRESS_CLASS_README.
Домен, например, example.org
не находится вместный,виртуальный псевдоним,виртуальный почтовый ящикнирелекласс домена, поэтому он попадает вкласс домена по умолчанию. Этот класс не имеет ни назначения, ни допустимых таблиц получателей. Очевидно, любой адрес, который не принадлежит другим классам домена, допустим для этого класса адресов. Это логично, так как локальная система не будет знать, какие адреса доступны в удаленной системе.
smtpd_sender_restrictions
для этого достаточно
Забудьте оsmtpd_reject_unlisted_sender
так как это можно было бы сделать и smtpd_sender_restrictions
в одиночку.
Самая простая конфигурация будет такой:
smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/restricted_senders, reject
Альтернативой может быть использование
regex:
таблиц:smtpd_sender_restrictions = check_sender_access regex:/etc/postfix/restricted_senders
Это позволяет использоватьобычные выражения:
/example\.com$/ OK // 550 You are not allowed to use this sender address.
Вы можете проверить результаты поиска с помощью
postmap -q
:$ /usr/sbin/postmap -q [email protected] regexp:/etc/postfix/restricted_senders 550 You are not allowed to use this sender address. $ /usr/sbin/postmap -q [email protected] regexp:/etc/postfix/restricted_senders OK