服务器通过 dovecot 的身份验证机制正确地接受/拒绝登录,但之后我可以在发送电子邮件时假装是任何人。
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
我用本网站用于测试,因为它很方便,并且 --verbose 可以向我显示除消息正文之外的整个通信内容。
这是通讯记录,显然已对身份信息和密码进行了审查
> 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'
电子邮件确实被发送了,就好像我[电子邮件保护]
第二个可能的问题我们在那里看到的是,它将真实域附加到虚拟域,即使append_at_myorigin
应该禁用它。文档没有太大帮助。他们甚至没有建议查找表应该是什么样子。我不得不从其他地方学到这一点。
答案1
正如我所看到的,你的期望是用户不能代表其他用户发送,因为你把拒绝发送者登录不匹配在smtpd_sender_restrictions
。是的,那应该可行。
不幸的是,你把拒绝发送者登录不匹配 后 允许_sasl_已认证. 根据 postfix 逻辑,如果您的客户端通过 SASL 成功登录,则不会检查拒绝发送者登录不匹配因为它成功通过了限制允许_sasl_已认证。
解决方案是重新排序限制根据 Postfix 官方文档。
smtpd_sender_restrictions =
...other restriction...
reject_sender_login_mismatch,
permit_sasl_authenticated,
...other restriction...