Postfix SMTPauthentication可以作为任何人发送

服务器通过dovecot的身份validation机制正确接受/拒绝login,但之后我可以在发送电子邮件时假装成为任何人。

smtpd_sender_login_maps = texthash:/etc/postfix/permmap append_at_myorigin=no smtpd_helo_restrictions = permit_mynetworks, reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname, #reject_unknown_helo_hostname, permit smtpd_sender_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_sender_login_mismatch, # reject_non_fqdn_sender, reject_unknown_sender_domain, permit smtpd_client_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_pipelining, reject_rbl_client bl.spamcop.net, reject_rbl_client zen.spamhaus.org, permit 

我使用这个网站进行testing,因为它很方便,而且 – 除了邮件正文以外,–verbose显示了我的整个通信。

这是通讯logging,显然是识别东西和密码的审查

 > EHLO localhost [250] 'example.com' [250] 'PIPELINING' [250] 'SIZE 104857600' [250] 'ETRN' [250] 'AUTH PLAIN LOGIN' [250] 'ENHANCEDSTATUSCODES' [250] '8BITMIME' [250] 'DSN' AUTH method (PLAIN LOGIN): using LOGIN > AUTH LOGIN [334] 'VXNlcm5hbWU6' > dXNlckFAdmlydHVhbGRvbWFpbkE= [334] 'UGFzc3dvcmQ6' > dGhlcGFzc3dvcmQ= [235] '2.7.0 Authentication successful' Authentication of userA@[email protected] succeeded > MAIL FROM: <[email protected]> [250] '2.1.0 Ok' > RCPT TO: <[email protected]> [250] '2.1.5 Ok' > DATA [354] 'End data with <CR><LF>.<CR><LF>' [250] '2.0.0 Ok: queued as 73519140287' > QUIT [221] '2.0.0 Bye' 

这封电子邮件确实发送,就好像我是[email protected]

我们在那里看到的第二个可能的问题是它将真实域添加到虚拟域,尽pipeappend_at_myorigin应该禁用它。 文档没有太大的帮助。 他们甚至不build议查找表应该类似。 我必须从其他地方学习。

正如我所看到的,您的期望是用户无法代表其他用户,因为您将reject_sender_login_mismatch置于smtpd_sender_restrictions 。 是的,这应该工作。

不幸的是,你在permit_sasl_authenticated 之后 放置了reject_sender_login_mismatch 。 基于postfix逻辑,如果客户端通过SASL成功login,则不会针对reject_sender_login_mismatch进行检查,因为它已成功通过限制permit_sasl_authenticated

解决scheme是根据Postfix的官方文档重新排列限制。

 smtpd_sender_restrictions = ...other restriction... reject_sender_login_mismatch, permit_sasl_authenticated, ...other restriction...