Postfix

經過身份驗證的 Postfix SMTP 可以作為任何人發送

  • December 20, 2014

伺服器通過 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...

引用自:https://serverfault.com/questions/653910