Postfix
經過身份驗證的 Postfix SMTP 可以作為任何人發送
伺服器通過 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@virtualdomainA@example.com succeeded > MAIL FROM: <userB@example.com> [250] '2.1.0 Ok' > RCPT TO: <realremote@example.net> [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'
確實發送了電子郵件,就好像我是 userB@example.com
我們在那裡看到的第二個可能的問題是,它將它的真實域附加到虛擬域,即使
append_at_myorigin
應該禁用它。文件沒有太大幫助。他們甚至沒有建議查找表應該是什麼樣的。我不得不從其他地方學到這一點。
如我所見,您的期望是使用者不能代表其他使用者發送,因為您將reject_sender_login_mismatch放入
smtpd_sender_restrictions
. 是的,這應該有效。不幸的是,您將reject_sender_login_mismatch放在**permit_sasl_authenticated 之後 。基於後綴邏輯,如果您的客戶端通過 SASL 成功登錄,它不會檢查reject_sender_login_mismatch因為它成功通過了限制permit_sasl_authenticated。
解決方案是根據 Postfix 官方文件重新排序限制。
smtpd_sender_restrictions = ...other restriction... reject_sender_login_mismatch, permit_sasl_authenticated, ...other restriction...