使用 TLS/SSL 讓你的 sendmail 更安全 |
尚未結案
|
jackkcg
站務副站長 ![]() ![]() ![]() ![]() ![]() 發表:891 回覆:1050 積分:848 註冊:2002-03-23 發送簡訊給我 |
http://netlab.kh.edu.tw/document/張毓麟/sendmail-ssl-auth.txt 張毓麟先生的文件集 Enable Secure-Connection and User-Authentication in Sendmail on FreeBSD
------------------------------------------------------------------------------
by Yu-lin Chang (May.10,2001) 安全連線(Transport Layer Security & Secure Sockets Layer; TLSv1 & SSLv2/v3)
對於公眾網路(Internet) 的使用者傳送資料時的私密性有相當好的保護功能. TLS/SSL 會
將網路上送的資料進行編碼加密, 使得駭客在合理的時間之內無法破解而得知郵件內容,
進而達到保障資料私密性的目的. 使用者身分認證(User-Authentication) 的功能, 則是用來確認發信人的身分, 使得通
過認證的使用者, 不論身在何方, 均可以使用郵件系統上的資源. 也因為身分的認證使得
郵件系統無法為惡意的廣告商人所濫用, 不但減少資源的浪費, 也能避免正常使用者的困
擾. 本文不欲探討安全連線或是身分認證的理論或是技術細節. 僅使用 FreeBSD 4.3-STABLE
為作業系統, 示範於 sendmail 8.11.3 郵件郵件系統上啟動安全連線與使用者認證功能.
安全連線的部分, 使用的是 OpenSSL 安全程式庫所提供的 TLS/SSL 功能. 使用者認證的
部分, 將採用 Carnegie Mellon University 所發展的 Cyrus-SASL 身分認證程式庫. 由於 FreeBSD 系統內建 OpenSSL 安全程式庫, 因此下文將略過 OpenSSL 的安裝程序,
直接說明 Cyrus-SASL 程式庫的安裝, 安全連線金鑰(key-pair)與授權憑證(CA; Certi-
fication Autority)的製作, 以及 sendmail 的設定方法. *) 設定安全連線金鑰(key-pair)與授權憑證(CA; Certification Authority) 通常, 我們會向獨立公正單位(例如 VeriSign 或 GlobalSign 等等公司)購買安全金
鑰以及授權憑證. 但如果不願意花錢購買, 也可以自行製作金鑰以及授權憑證. 自行製
作的安全金鑰與授權憑證, 在功能上與買來的相同, 但是向獨立公正單位購買, 會讓使
用者心理上覺得比較有保障.
安全連線至少需要三個檔案才能啟用. 請將公正單位核發的 key-pair 與 CA 放置於下
列目錄,
server 端的 key-pair, 存放於 /etc/mail/cert/mykey.pem
server 端的 CA, 存放於 /etc/mail/cert/mycert.pem
公正單位的 CA, 存放於 /etc/mail/cert/cacert.pem 請注意! 如果使用由公正單位所發出的 key-par, 務必通知公正單位不可將 mykey.pem
做 DES 編碼, 否則 sendmail 將無法於開機時自動啟動.
如果想自行製作 key-pair 與 CA, 請依照下列指令操作,
mkdir /usr/local/CA
cd /usr/local/CA
mkdir certs crl newcerts private
echo "01" > serial
cp /dev/null index.txt
cp /etc/ssl/openssl.cnf openssl.cnf
編輯 openssl.cnf 檔案, 將檔案中約第 38 行的路徑設定由 ./demoCA 改成
/usr/local/CA
執行以下指令, 假裝自己是公正單位, 做一個 cacert.pem 出來. 請按螢幕上的指示,
輸入相關的系統資料. 當螢幕上提示輸入公正單位密碼(PEM pass phrase) 的時候, 請
自行設定一個密碼, 並請牢記這個密碼, 以便日後使用.
cd /usr/local/CA
openssl req -new -x509 -keyout private/cakey.pem -out cacert.pem \
-days 365 -config openssl.cnf 執行以下指令, 建立 server 端的 CA 與 key-pair.
請特別留意, 當畫面上提示輸入 Common Name 的時候, 請務必輸入機器的全名(FQDN)
否則將來 user 連線都時候將會出現警告訊息, 造成 user 的困擾.
當螢幕提示輸入 PEM pass phrase 的時候, 請輸入上一步驟中的公正單位密碼. cd /usr/local/CA
openssl req -nodes -new -x509 -keyout mykey.pem -out myreq.pem \
-days 365 -config openssl.cnf
openssl x509 -x509toreq -in myreq.pem -signkey mykey.pem -out tmp.pem
openssl ca -config openssl.cnf -policy policy_anything \
-out mycert.pem -infiles tmp.pem
rm -f tmp.pem
以下列指令, 將 key-pair 與 CA 複製到 /etc/mail/cert 目錄之下, 並設定正確權限
mkdir /etc/mail/cert
cp /usr/local/CA/mykey.pem /etc/mail/cert/
cp /usr/local/CA/mycert.pem /etc/mail/cert/
cp /usr/local/CA/cacert.pem /etc/mail/cert/
chmod og-rwx /etc/mail/cert/mykey.pem
chmod og=r /etc/mail/cert/mycert.pem
chmod og=r /etc/mail/cert/cacert.pem
這樣就完成了自行建立 key-pair 與 CA 的程序. 這組 key-pair 與 CA 將可被
sendmail 使用於 TLS/SSL 安全連線的資料加密功能上. *) 安裝 Cyrus-SASL 程式庫 在 FreeBSD 的軟體資料庫(ports-collections) 裡面, 已經收錄了最新的 Cyrus-
SASL, 安裝的方法十分簡單, 只需輸入下列指令, 即可完成安裝:
cd /usr/ports/security/cyrus-sasl
make install
完成上述指令後, Cyrus-SASL 程式庫即可被其他程式使用. *) 安裝新的 sendmail 程式 FreeBSD 對於系統軟體的編譯時的選項, 統一由 /etc/make.conf 來設定, 以下列指令
產生預設的 /etc/make.conf 檔案
cp /etc/defaults/make.conf /etc/
編輯 /etc/make.conf 在檔案尾部加入以下三行設定 SENDMAIL_CFLAGS=-I/usr/local/include/sasl -DSASL
SENDMAIL_LDFLAGS=-L/usr/local/lib
SENDMAIL_LDADD=-lsasl 以下列指令重新安裝 sendmail 程式
cd /usr/src/usr.sbin/sendmail
make clean
make
make install
完成上述指令後, sendmail 的安全連線與身分認證功能已經被啟動, 但仍需進一部的
設定才能正常運作. *) 設定 sendmail 的安全連線與身分認證功能 編輯 /etc/mail/freebsd.mc 檔案, 在檔案末端加入以下 11 行設定
dnl The following lines are used to enable the STARTTLS function
define(`CERT_DIR', `/etc/mail/cert')dnl
define(`confCACERT_PATH', `CERT_DIR')dnl
define(`confCACERT', `CERT_DIR/cacert.pem')dnl
define(`confSERVER_CERT', `CERT_DIR/mycert.pem')dnl
define(`confSERVER_KEY', `CERT_DIR/mykey.pem')dnl
define(`confCLIENT_CERT', `CERT_DIR/mycert.pem')dnl
define(`confCLIENT_KEY', `CERT_DIR/mykey.pem')dnl
dnl The following lines are used to enable CYRUS-SASL function
TRUST_AUTH_MECH(`LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `LOGIN PLAIN')dnl 請特別注意大小寫, 以及引號的方向, 建議使用複製的方式將以上 11 行設定貼入
/etc/mail/freebsd.mc 檔案末端, 以免發生意外的打字錯誤. 接下來以下列指令, 建立新的 sendmail 控制檔案(cf file)
cd /etc/mail
make cf
make install 使用以下的指令建立 CA 的 hash link (建議剪貼以下指令,以免不小心打字失誤) cd /etc/mail/cert
set C=cacert.pem
ln -s $C `openssl x509 -noout -hash < $C`.0 完成以上設定程序之後, sendmail 的安全連線與認證功能已經被正確的設定完成,
可以進行下一步驟, 檢查是否正確運作. *) 檢查安全連線與身分認證的功能是否正確運作 首先, 以下列指令重新啟動 sendmail
killall -9 sendmail
/usr/sbin/sendmail -bd -q30m 以下列指令檢查安全連線與身分認證功能是否正確啟動
telnet localhost 25
ehlo localhost
若螢幕上出現的訊息包含以下兩行, 則表示安全連線與身分認證功能已經正確啟動了.
250-AUTH LOGIN PLAIN
250-STARTTLS 若沒有出現這兩個訊息, 表示前述的操做發生了錯誤, 請檢查 /var/log/maillog 內
的訊息, 了解錯誤發生的詳細狀況. *) 設定郵件程式使用安全連線與身分認證 本節中, 以 Microsoft OutLook Express 郵件程式為範例, 說明如何在讓 user 在
發送郵件的時候, 受到安全連線以及身分認證機制的保護. [圖片]
[OutLookExpress]-->[工具]-->[帳號]-->[郵件]-->[內容]-->[伺服器]
-->[我的伺服器需要查驗身分] (打勾) [OutLookExpress]-->[工具]-->[帳號]-->[郵件]-->[內容]-->[進階]
-->[外寄郵件-SMTP]-->[這個伺服器需要安全連線-SSL] (打勾) *) 檢視原始郵件的標頭(mail header) 確認安全連線與身分認證功能正常運作 使用 TLS/SSL 安全連線與通過使用者認證程序所發出的郵件, 在標頭(mail header)
中會出現如下列的紀錄資料 (以下資料為 OutLook Express 的範例)
Received: from chang (abcd.wsl.sinica.edu.tw [140.109.7.99])
(authenticated)
by xxxx.sinica.edu.tw (8.11.3/8.11.3) with ESMTP id f4B2sEM88174
(using TLSv1/SSLv3 with cipher RC4-MD5 (128 bits) verified NO)
for
------
********************************************************** 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |