在 FC1 建置可 SSL 安全連線的 Mail Server

  • 在 Fedora Core 1 建置可 SSL 加密連線的 sendmail 與 dovecot 環境
  • Mail Server 驚魂記 - 帳號被盜用來發廣告信的處置報告

在 Fedora Core 1 建置可 SSL 加密連線的 sendmail 與 dovecot 環境

環境:

  • Fedora Core 1
  • openssh-3.6.1p2-19
  • sendmail-8.12.10-1.1.1
  • dovecot-0.99.10-6

OpenSSL 環境設置

vi /usr/share/ssl/openssl.cnf

dir = /usr/share/ssl

openssl rand -out /usr/share/ssl/private/.rand 1024

chmod 600 /usr/share/ssl/private/.rand

產生 Root CA

openssl genrsa -des3 -out /usr/share/ssl/private/myrootca.key 2048

Enter pass phrase for /usr/share/ssl/private/myrootca.key:
(這裡輸入的字串會在以後引用 myrootca.key 時用到, 務必牢記)

openssl req -new -key /usr/share/ssl/private/myrootca.key -out /tmp/myrootca.req
(接著要輸入一連串資訊, 可在 openssl.cnf 裡設定預設內容, 以減輕打字疲累)

openssl x509 -req -days 7305 -sha1 \
-extfile /usr/share/ssl/openssl.cnf -extensions v3_ca \
-signkey /usr/share/ssl/private/myrootca.key \
-in /tmp/myrootca.req -out /usr/share/ssl/certs/myrootca.crt

rm -f /tmp/myrootca.req

以自製 Root CA 發行憑證

openssl genrsa -out /usr/share/ssl/private/myhost.key 2048

chmod 600 /usr/share/ssl/private/myhost.key

openssl req -new -key /usr/share/ssl/private/myhost.key -out /tmp/myhost.req

openssl x509 -req -days 3650 -sha1 \
-extfile /usr/share/ssl/openssl.cnf -extensions v3_req \
-CA /usr/share/ssl/certs/myrootca.crt -CAkey /usr/share/ssl/private/myrootca.key \
-CAserial /usr/share/ssl/serial -CAcreateserial \
-in /tmp/myhost.req -out /usr/share/ssl/certs/myhost.crt

rm -f /tmp/myhost.req

啟用 Sendmail STARTTLS

vi /etc/mail/sendmail.mc

define(`confCACERT_PATH', `/usr/share/ssl/certs')
define(`confCACERT', `/usr/share/ssl/certs/myrootca.crt')
define(`confSERVER_CERT', `/usr/share/ssl/certs/myhost.crt')
define(`confSERVER_KEY', `/usr/share/ssl/private/myhost.key')

m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

/etc/init.d/sendmail restart

檢查是否成功啟用 STARTTLS:

telnet localhost 25

ehlo localhost

...
250-STARTTLS
...

quit

啟用 Dovecot IMAPS & POP3S

vi /etc/dovecot.conf

protocols = imap imaps pop3 pop3s

ssl_cert_file = /usr/share/ssl/certs/myhost.crt

ssl_key_file = /usr/share/ssl/private/myhost.key

/etc/init.d/dovecot restart

檢查是否成功啟用 IMAPS / POP3S:

netstat -ntulp | grep dovecot

0.0.0.0:110 (pop3)
0.0.0.0:143 (imap)
0.0.0.0:993 (imaps)
0.0.0.0:995 (pop3s)

設定 Outlook Express 使用 SSL 安全連線收發信件


參考資料:


Mail Server 驚魂記

異常現象:

  1. postmaster (root) 收到一堆奇怪的退信通知 (Postmaster notify: see transcript for details)
    從原始郵件檔頭查出發信來源 (Received: from 59.92.241.223) 並非自己人  
  2. mailq 列出一長串 queue 住的信件, 全都是發給奇怪的帳號 
  3. 寄到某些伺服器會被退信, 原因是: Sender is listed on DNS-based RBL.
    RBL, 是 Real-time Spam Black list 的縮寫, 而 Sender 是指我們的郵件伺服器
    看到這個訊息就表示我們的網址被列入廣告信黑名單了!

追查過程:

  1. 確定 /etc/mail/access 只允許 localhost RELAY, 唯有通過 saslauthd 的密碼認證才能寄信. 經外部 telnet 連入測試, 確定排除 open relay 的可能
  2. 檢查 login 記錄、tcpwrapper / 防火牆設置、http log, 均未發現可疑訊息, 排除侵入疑慮
  3. 最後決定以 tcpdump 追蹤 port 25 封包記錄:

tcpdump port 25 -w /tmp/maillog
... 一段時間後 ...
tcpdump host 59.92.241.223 -x -r /tmp/maillog 以前述發信來源 IP 追查封包記錄, 果然找到重大線索

AUTH LOGIN
334.VXNlcm5hbWU6
dGVzdA==
334.UGFzc3dvcmQ6
dGVzdA==
235.2.0.0.OK.Authenticated

不會吧!? 竟然出現認證通過 (OK.Authenticated) 的訊息? 到底是怎麼回事呢??

後來才知道, 原來密碼驗證的時候採用 base64 編碼, 其目的是為了避免帳號密碼使用特殊字元的問題, 所以在 AUTH LOGIN 之後才會一片亂碼. 透過 http://makcoder.sourceforge.net/demo/base64.php 線上轉碼程式解碼後才恍然大悟, 原來是之前為了測試 mail server 建立的 test 帳號 (密碼也是 test) 忘了刪除, 被盜用來發廣告信了!

補救措施:

  1. 趕緊刪除 test 測試帳號: userdel -r test
  2. 透過 http://www.dnsstuff.com/ 的 spam database lookup 輸入自己的 domain name 或 public ip, 查出已有哪幾家 RBL 組織把我們納入黑名單. 能線上解除封鎖的就立刻執行; 需填寫申請單的就只好照辦; 至於有些已將某個特定地區 (如: Taiwan) 列為黑名單的, 就不用理會了.
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 安德森 的頭像
    安德森

    安德森技術備忘板

    安德森 發表在 痞客邦 留言(0) 人氣()