首先让我解释我的设置。 我在Debian Wheezy上使用了postfix 2.9.6。 我不允许在端口25上使用AUTH,而是强制MUA使用端口587上的提交服务。 Debian在master.cf中使用以下configuration(默认情况下为注释):
submission inet n - - - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o milter_macro_daemon_name=ORIGINATING
我不明白为什么permit_sasl_authenticated是在smtpd_client_restrictions。 要允许中继访问,还必须在main.cf中添加到smtpd_recipient_restrictions(或smtpd_relay_restrictions,后缀> = 2.10),或者最好在master.cf中提交服务的附加覆盖中添加中继。
-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
无论哪种方式都会导致validation两次,并且延迟评估限制列表,两个检查都在RCPT TO阶段完成。 没有中继访问,AUTH客户端可能会发送到$ mydestination,但端口25上的MTA已经允许。 如果没有延迟的评估,smtpd在客户端检查时甚至不会获得有关AUTH的信息。
在smtpd_client_restrictions中拥有permit_sasl_authenticate是否有任何好处? 这是什么用例?
这只是一个干净的方法来覆盖main.cf,因为通常情况下,main.cf中的smtpd_client_restrictions没有被使用,这和默认情况下说smtpd_client_restrictions = permit是一样的。
您可以通过重写smtpd_recipient_restrictions来达到相同的结果,就像您在问题中所说的那样,在这种情况下,您将不需要smtpd_client_restrictions语句,这可能会带来不明显的性能优势,但是如果main.cf中的smtpd_recipient_restrictions中存在其他限制为了validation客户端,您还必须将它们添加到master.cf中,并记住将它们与未来的编辑保持同步。
同样从debian打包者的angular度来看,重写smtpd_client_restrictions更安全,因为与smtpd_recipient_restrictions相比,它在main.cf中做任何事情的可能性都小得多。
Postfix开始支持混合限制列表。 来自: Postfix Docs的线条
Around the time that smtpd_delay_reject was introduced, Postfix was also changed to support mixed restriction lists that combine information about the client, helo, sender and recipient or etrn command. Mixing is needed for complex whitelisting policies. For example, in order to reject local sender addresses in mail from non-local clients, you need to be able to mix restrictions on client information with restrictions on sender information in the same restriction list. Without this ability, many per-user access restrictions would be impossible to express.
以上段落清楚地解释了为什么混合限制被支持和要求。
在你的情况下,你不想在client (连接IP /主机)上执行任何限制,一旦他们通过身份validation。 假设你有一个像“即使用户authentication,他们不应该能够发送电子邮件到[email protected] ”的要求,那么你的smtpd_recipient_restrictions应该是
#/etc/postfix/main.cf smtpd_recipient_restrictions = check_recipient_access hash:/etc/postfix/blocked_rcptto permit_sasl_authenticated #/etc/postfix/blocked_rcptto [email protected] REJECT No mails can reach this user from us
希望有所帮助。
回答我自己的问题,但我想一个可能的用例是这样的:
如果稍后我将smtpd_client_restrictions添加到main.cf(默认情况下为空),要阻止垃圾邮件或其他任何内容,那么已经存在用于在master.cf中提交的覆盖将允许AUTH客户端跳过这些限制。 不重写smtpd_client_restrictions可能会让AUTH客户端受到垃圾邮件检查而感到惊讶。 当然,这可能不一定是坏事。