Почему это не работает?

Почему это не работает?

Я хотел бы иметь постфикс, который позволяет ретранслировать почту на ретранслятор, когда

а) домен-отправитель разрешен

и один из:

б) отправитель прошел аутентификацию в) у клиента есть запись в белом списке 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

Почему это не работает?

Thesmtpd_sender_restrictions:

По умолчанию разрешено всё.

Укажите список ограничений, разделенных запятыми и/или пробелами. Продолжайте длинные строки, начиная следующую строку с пробела. Ограничения применяются в указанном порядке; первое совпадающее ограничение побеждает.

и

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
    

Связанный контент