这为什么不起作用?

这为什么不起作用?

我希望有一个允许邮件转发到中继主机的后缀

a) 发件人域名被允许

以及以下之一:

b)发送者已经通过身份验证 c)客户端有 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 白名单客户端发送邮件,但发件人域限制不起作用。似乎只要身份验证或客户端访问匹配,就不再检查发件人限制。

答案1

这为什么不起作用?

smtpd_sender_restrictions

默认是允许一切。

指定限制列表,以逗号和/或空格分隔。通过在下一行开始使用空格来继续较长的行。限制按指定的顺序应用;匹配的第一个限制获胜。

check_sender_access type:table

搜索指定访问(5)数据库中的MAIL FROM地址、域、父域或localpart@,并执行相应的操作。

因此,您的配置首先允许example.comfrom /etc/postfix/restricted_senders,然后允许其他所有内容。smtpd_reject_unlisted_sender不会改变这一点,因为:

当地址不符合以下条件时,该地址被视为“未知”:1)虚拟(5)别名或规范(5)映射,以及 2) 该地址对于其地址类别无效。有关基于类别的地址验证的定义,请参阅地址类自述文件

例如,该域名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
    

相关内容