為防止postfix郵件伺服器被人冒用,使用它發送偽造的垃圾郵件,進行了以下實驗,添加了smtp驗證。
分析smtp發送
把內部IP從郵件 的信任網路中去掉, 然後測試郵件發送(依靠郵件寄件者)
- root@slackbox[~]# telnet mail.XXXXXX.com 25
- Trying 10.70.253.52...
- Connected to mail.XXXXXX.com.
- Escape character is '^]'.
- 220 mail.XXXXXX.com ESMTP Postfix
- mail from: abc@XXXXXX.com #直接發起郵件, 未進行SMTP認證,並偽造寄件者為abc@XXXXXX.com, abc為實際不存在的使用者
- 250 2.1.0 Ok #伺服器返回OK, 說明伺服器未對sender進行認證
- rcpt to: jhuang@XXXXXX.com #指定收件者為我本人
- 250 2.1.5 Ok #伺服器返回OK
- data #寫郵件
- 354 End data with <CR><LF>.<CR><LF>
- sfafafdsfafasfasfas
- afsdasfsfasfsafas
- . #結束寫郵件並發送
- 250 2.0.0 Ok: queued as 6C0FC3D5288 #伺服器返回郵件已進入發送隊列
同時, 郵件伺服器的日誌顯示,郵件已經發送:status=sent,上述實驗表明了 郵件伺服器沒有經過smtp認證。
增加smtp認證, 堵住漏洞
Postfix配置
- #指定寄件者認證登入
- smtpd_sender_login_maps = ldap:/etc/postfix/ldap-users.cf,
- ldap:/etc/postfix/ldap-mailbox.cf
- #不允許不在列表中的寄件者
- smtpd_reject_unlisted_sender = yes
- #需要helo資訊
- smtp_helo_required = yes
- smtpd_recipient_restrictions 段增加下面內容:
- reject_sender_login_mismatch
- reject_authenticated_sender_login_mismatch,
- reject_unauthenticated_sender_login_mismatch,
- reject_non_fqdn_hostname,
- reject_non_fqdn_sender,
- reject_non_fqdn_recipient,
- reject_invalid_hostname,
測試一: 試圖不通過驗證直接發郵件
- #telnet mail.XXXXXX.com 25
- Trying 10.70.253.52...
- connected to mail.XXXXXX.com.
- Escape character is '^]'.
- 220 "mail.XXXXXX.com Mail System"
- mail from: jhuang@XXXXXX.com
- 50 2.1.0 Ok
- rcpt to: jhuang@XXXXXX.com
- 553 5.7.1 <jhuang@XXXXXX.com>: Sender address rejected: not logged in
證明發送郵件需要作SMTP認證, 沒有認證的不允許發送郵件。
測試二: 試圖SMTP認證, 並以偽造不存在的郵件地址發送郵件
- # telnet mail.XXXXXX.com 25
- Trying 10.70.253.52...
- Connected to mail.XXXXXX.com.
- Escape character is '^]'.
- 220 "mail.XXXXXX.com Mail System"
- auth login
- 334 VXNlcm5hbWU6
- amh1YW5n
- 334 UGFzc3dvcsfafafafmQ6
- bG92ZXdpbm5pZXlpbg==
- 235 2.7.0 Authentication successful
- mail from: abc@XXXXXX.com
- 250 2.1.0 Ok
- rcpt to: jhuang@XXXXXX.com
- 550 5.1.0 <abc@XXXXXX.com>: Sender address rejected: User unknown in local recipient tabl
證明不允許偽造不存在的本地郵件地址發郵件
測試三:試圖通過SMTP認證, 並仿冒他人郵件地址發送郵件
- # telnet mail.XXXXXX.com 25
- Trying 10.70.253.52...
- Connected to mail.XXXXXX.com.
- 220 "mail.XXXXXX.com Mail System"
- auth login
- 334 VXNlcm5hbWU6
- amh1YW5n
- 334 UGFzlllllkokopkc3dvcmQ6
- bG92ZXdpbm5pZXlpbg==
- 235 2.7.0 Authentication successful
- mail from: lxiong@XXXXXX.com
- 250 2.1.0 Ok
- rcpt to: jhuang@XXXXXX.com
- 553 5.7.1 <lxiong@XXXXXX.com>: Sender address rejected: not owned by user jhuang
證明登入使用者與郵件發送人不一致時, 禁止發送郵件
測試四:禁止漏洞轉發匿名郵件
- #telnet mail.XXXXXX.com 25
- Trying 10.70.253.52...
- Connected to mail.XXXXXX.com.
- Escape character is '^]'.
- 220 mail.XXXXXX.com ESMTP Postfix
- mail from: address1@163.com
- 250 2.1.0 Ok
- rcpt to: address2@yeah.net
- 554 5.7.1 <address2@yeah.net>: Recipient address rejected: Access denied