我想配置 postfix 以仅中继来自特定发件人地址的邮件。Postfix 应根据发件人的地址(“MAIL FROM:”)将邮件中继到不同的中继主机(/智能主机)(Gmail、AOL 等)。
到目前为止,我的当前配置如下:
通常情况下,用户在 Postfix 上进行邮件中继验证。如果无法验证,则无法进行中继。请注意,此验证与中继主机的验证不同。
根据发件人的地址(“MAIL FROM:”),选择特定的中继主机(
smtp_sender_dependent_authentication
,sender_dependent_relayhost_maps
,smtp_sasl_password_maps
)。这也可以正常工作。然而,如果用户可以通过身份验证,并且发件人地址未在 中涵盖
sender_dependent_relayhost_maps
,则 Postfix 会尝试直接中继邮件 - 由于 IP 地址限制(黑名单),这通常不起作用。
我现在的问题是:如何拒绝直接转发的邮件(没有智能主机),即发件人的地址未在 中列出sender_dependent_relayhost_maps
?有什么提示可以实现吗?
答案1
你需要进行一些限制性测试前 permit_sasl_authenticated
. 前提条件是,在端口上有一个单独的 smtpd25
用于接收邮件,另一个 smtpd 用于提交在端口 上587
。否则,此限制会导致传入邮件被拒绝,因为它不会通过测试。然后,permit_sasl_authenticated
从端口中25
完全删除 ,并将测试添加到 中的提交配置中master.cf
。
从字面上回答你的问题,
check_sender_access
将是一个合适的测试,将列出的所有域列入白名单sender_dependent_relayhost_maps
并拒绝其余域的邮件。check_sender_access type:table
搜索指定访问(5)数据库中的
MAIL FROM
地址、域、父域或localpart@
,并执行相应的操作。可以将其添加到
smtpd_sender_restrictions
或者smtpd_recipient_restrictions
。可以做同样的事情,但进一步阻止用户使用彼此的地址的方法是使用
reject_sender_login_mismatch
.这需要额外的smtpd_sender_login_maps
表,但如果您的virtual_alias_maps
条目已经形成为[email protected] username
,则可以使用相同的文件,并且只要您使用 更新虚拟别名数据库,允许的发件人地址就会自动更新postmap
。此类提交配置的示例如下master.cf
:submission inet n - - - - smtpd # Other parameters -o smtpd_sender_login_maps=hash:/etc/postfix/virtual -o smtpd_sender_restrictions=reject_sender_login_mismatch -o smtpd_client_restrictions=permit_sasl_authenticated,reject # Other parameters