我想通过我的服务器从我的笔记本电脑转发邮件。我已经成功配置了 postfix 和 SASL,并且可以AUTH
成功使用 telnet。
dhcp-241:~ jgorset$ telnet mail.example.com 25
Trying 85.25.124.196...
Connected to mail.example.com.
Escape character is '^]'.
220 mail.example.com ESMTP Postfix
EHLO mail.example.com
250-mail.example.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
AUTH PLAIN ***********************
235 2.7.0 Authentication successful
MAIL FROM: <[email protected]>
250 2.1.0 Ok
RCPT TO: <[email protected]>
554 5.7.1 <[email protected]>: Recipient address rejected: Access denied
如上所示,尽管我已经通过身份验证并配置了 postfix 以允许经过身份验证的客户端中继邮件,但我仍被拒绝通过我的 postfix 服务器进行中继。
# /etc/postfix/main.cf
# SMTP authentication
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_security_options = noanonymous
smtpd_recipient_restrictions = reject, permit_sasl_authenticated
我被拒绝是因为选项smtpd_recipient_restrictions
设置为reject
,尽管明确指出permit_sasl_authenticated
?我的印象是后者会覆盖前者,因为您需要使用此选项输入reject
、defer
或。defer_if_permit
reject_unauth_destination
更新:事实证明,如果我从 localhost 进行 telnet,也会发生这种情况。如果我注释掉该smtpd_recipient_restrictions
行,我就可以向任何人发送邮件(尽管只能从 localhost 发送)。我想从任何使用 SASL 进行身份验证的计算机执行此操作。我该怎么做?
谢谢!
答案1
smtpd_receipient_restrictions 从左到右进行匹配,第一个匹配获胜。
你要smtpd_recipient_restrictions = permit_sasl_authenticated, reject
答案2
smtp_recipient_restrictions 按顺序进行评估。
你可能想要至少像这样开始的东西:
smtpd_recipient_restrictions = permit_sasl_authenticated permit_mynetworks
然后继续拒绝所有邮件(如果您只发送邮件而从未在该服务器上接收邮件)或拒绝看起来像垃圾邮件的邮件 - 查看 UCE 的 postfix 文档以获得一个良好的起点。