我希望有一个允许邮件转发到中继主机的后缀
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
这为什么不起作用?
默认是允许一切。
指定限制列表,以逗号和/或空格分隔。通过在下一行开始使用空格来继续较长的行。限制按指定的顺序应用;匹配的第一个限制获胜。
和
check_sender_access type:table
搜索指定访问(5)数据库中的
MAIL FROM
地址、域、父域或localpart@
,并执行相应的操作。
因此,您的配置首先允许example.com
from /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