OpenLDAP - Postfix With SMTP SSL TLS 設定

1、前言

談到 E-Mail 就不得不提一下這三個名詞 MTAMDAMUA,關於 E-Mail 從使用者發信到收信如何運作可參考  twbsd.org - Wang, Chun-Pin 第十六章 郵件伺服器圖解 了解。
  • MTA (Mail Transfer Agent): 郵件轉送代理人,負責傳送、轉送郵件 (Relay),如:SendmailPostfixQmail
  • MDA (Mail Delivery Agent): 郵件遞送代理人,負責把進來的郵件遞送、過濾到使用者信箱內,如:ProcmailMailDrop
  • MUA (Mail User Agent): 郵件使用者代理人,使用者用來發信、收信的程式,如:Outlook ExpressSquirrelMail


E-Mail 相關服務聆聽埠號 (Listen Port)

  • SMTP:25
  • SMTPs (SMTP Over SSL):465
  • POP3:110
  • POP3s (POP3 Over SSL):995
  • IMAP:143
  • IMAPs (IMAP Over SSL):993





文章目錄

1、前言
2、實作環境
3、安裝及設定
          步驟1.複製自行製作的根憑證給 Postfix 使用
          步驟2.製作 Postfix 伺服器用的 Private Key (mail.weithenn.org.key)
          步驟3.製作 Postfix 伺服器憑證申請書 (mail.weithenn.org.csr)
          步驟4.最高層認證中心簽發憑證 (RootCA 發給 Postfix 伺服器 mail.weithenn.org.crt)
          步驟5.修改 Postfix 設定檔加入 SSL/TLS 設定
          步驟6.測試 SMTP SSL/TLS
4、參考
5、Me FAQ
          Q1.SMTPs 寄信或 POP3s 收信時會顯示不信任憑證訊息出現?





2、實作環境

  • FreeBSD 6.1-STABLE
  • postfix-2.3.1,1





3、安裝及設定

本文實作項目如下
  • 製作 Postfix 用來加密用的憑證 (SMTP Over SSL/TLS)。
  • 設定 Postifx 啟動 SMTP Over SSL/TLS 機制。

步驟1.複製自行製作的根憑證給 Postfix 使用

OpenLDAP-SSL TLS 設定 這篇文章中我們有建立供自已伺服器使用的根憑證 (RootCA),此次實作我們將製作一份給 SMTP SSL 使用的憑證。
cd /usr/local/etc/openldap
cp -r ssl /usr/local/etc/postfix/
ll
 total 6
 -rw-r--r--  1 root  wheel  1842  8 11 11:42 rootca.crt
 -rw-r--r--  1 root  wheel  1119  8 11 11:42 rootca.csr
 -r--------  1 root  wheel  1751  8 11 11:42 rootca.key




步驟2.製作 Postfix 伺服器用的 Private Key (mail.weithenn.org.key)

建立名稱為 mail.weithenn.org.key 的 Private Key,以便屆時給 Postfix 用來當 SMTP SSL 使用。
cd /usr/local/etc/postfix/ssl
openssl genrsa -out mail.weithenn.org.key 2048  //製作 Postfix Use Private Key




步驟3.製作 Postfix 伺服器憑證申請書 (mail.weithenn.org.csr)

執行如下執行建立 Postfix Use CSR 伺服器憑證申請書,其中很重要的是憑證的 FQDN 名稱,必須要跟 Postfix 伺服器主機名稱相同!!
openssl req -new -key mail.weithenn.org.key -out mail.weithenn.org.csr
 You are about to be asked to enter information that will be incorporated into your certificate request.
 What you are about to enter is what is called a Distinguished Name or a DN.
 There are quite a few fields but you can leave some blank
 For some fields there will be a default value,If you enter '.', the field will be left blank.
 -----
 Country Name (2 letter code) AU: TW                                //國碼臺灣是 TW
 State or Province Name (full name) Some-State: Taiwan R.O.C        //國名臺灣填 Taiwan
 Locality Name (eg, city) : Taipei                                  //地名
 Organization Name (eg, company) Internet Widgits Pty Ltd: Personal //組織單位名稱
 Organizational Unit Name (eg, section) : FreeBSD Personal Reserach //部門名稱
 Common Name (eg, YOUR name) : mail.weithenn.org                    //憑證的名稱 (伺服器的 FQDN)
 Email Address : weithenn@weithenn.org                              //申請單位的連絡信箱
 Please enter the following 'extra' attributes
 to be sent with your certificate request
 A challenge password : 請按 Enter 直接跳過                           //申請書的密碼
 An optional company name : 請按 Enter 直接跳過                       //憑證代辦公司的名稱




步驟4.最高層認證中心簽發憑證 (RootCA 發給 Postfix 伺服器 mail.weithenn.org.crt)

以最高層認證中心發給伺服器 (RootCA >> Postfix Server) 十年效期的憑證。
openssl x509 -req -days 3650 -sha1 -extfile /etc/ssl/openssl.cnf -extensions v3_req -CA rootca.crt -CAkey rootca.key -CAserial rootca.srl -CAcreateserial -in mail.weithenn.org.csr -out mail.weithenn.org.crt
 Signature ok
 subject=/C=TW/ST=Taiwan R.O.C/L=Taipei/O=FreeBSD Personal Research/OU=FreeBSD  Personal Research
 /CN=mail.weithenn.org/emailAddress=weithenn@weithenn.org
 Getting CA Private Key
 Enter pass phrase for rootca.key:       //輸入密碼 (Rootca 的 Private key 密碼)

以上步驟完成後整理一下剛才產生的檔案:
  • /usr/local/etc/postfix/ssl/rootca.crt: RootCA 憑證。
  • /usr/local/etc/postfix/ssl/rootca.csr: RootCA 憑證申請書。
  • /usr/local/etc/postfix/ssl/rootca.key: RootCA Private Key (記得權限設為 400)。
  • /usr/local/etc/postfix/ssl/mail.weithenn.org.crt: Postfix Server 憑證。
  • /usr/local/etc/postfix/ssl/mail.weithenn.org.csr: Postfix Server 憑證申請書。
  • /usr/local/etc/postfix/ssl/mail.weithenn.org.key: Postfix Server Private Key (記得權限設為 400)。



步驟5.修改 Postfix 設定檔加入 SSL/TLS 設定

修改 Postfix 設定檔 main.cf 加入 SSL/TLS 設定。
vi /usr/local/etc/postfix/main.cf   //修改 Postfix 設定檔加入 TLS 設定
 smtp_use_tls = yes
 smtpd_use_tls = yes
 smtp_tls_note_starttls_offer = yes
 smtpd_tls_key_file = /usr/local/etc/postfix/ssl/mail.weithenn.org.key
 smtpd_tls_cert_file = /usr/local/etc/postfix/ssl/mail.weithenn.org.crt
 smtpd_tls_CAfile = /usr/local/etc/postfix/ssl/rootca.crt
 smtpd_tls_loglevel = 1
 smtpd_tls_received_header = yes
 smtpd_tls_session_cache_timeout = 3600s
 tls_random_source = dev:/dev/urandom

修改 Postfix 設定檔 master.cf 加入 SSL/TLS 設定。
vi /usr/local/etc/postfix/master.cf    //修改 Postfix 設定檔加入 smtps 設定
 smtps   inet  n   -   n   -   -   smtpd
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes

修改完 main.cf、master.cf 設定檔後請鍵入如下指令讓 Postfix 重新載入設定檔。
postfix reload       //重新載入 postfix 設定檔
 postfix/postfix-script: refreshing the Postfix mail system

查看 SMTPs (SMTP Over SSL) 服務 Port 465 是否啟動。
sockstat -l4
 USER     COMMAND    PID   FD PROTO  LOCAL ADDRESS   FOREIGN ADDRESS
 root     master     22757 11 tcp4   *:25            *:*
 root     master     22757 99 tcp4   *:465           *:*       //已啟動 SMTPs




步驟6.測試 SMTP SSL/TLS

Postfix 及 SMTPs 服務成功啟動後可依如下方式來測試 SMTP Over SSL/TLS 機制是否作用了。
telnet localhost 25
 Trying ::1...
 Trying 127.0.0.1...
 Connected to localhost.weithenn.org
 Escape character is '^'.
 220 mail.weithenn.org ESMTP Postfix
 ehlo localhost         //測試 TLS (此行為自行輸入)
 250-mail.weithenn.org
 250-PIPELINING
 250-SIZE 10240000
 250-VRFY
 250-ETRN
 250-STARTTLS           //主機顯示 TLS 功能成功
 250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5
 250-AUTH=LOGIN PLAIN DIGEST-MD5 CRAM-MD5
 250-ENHANCEDSTATUSCODES
 250-8BITMIME
 250 DSN
 starttls //查詢 TLS 功能是否啟動成功 (此行為自行輸入)
 220 2.0.0 Ready to start TLS //系統回應 TLS 啟動成功
 quit                   //離開 (此行為自行輸入)
 quit                   //離開 (此行為自行輸入)
 Connection closed by foreign host.

SMTP SSL/TLS 成功啟動後 Maillog 訊息如下:
Aug 26 14:12:18 ldap postfix/smtpd51668: setting up TLS connection from weithenn.lan.home192.168.1.11
Aug 26 14:12:18 ldap postfix/smtpd51668: TLS connection established from weithenn.lan.home192.168.1.11: TLSv1 with cipher RC4-MD5 (128/128 bits)






4、參考






5、Me FAQ

Q1.SMTPs 寄信或 POP3s 收信時會顯示不信任憑證訊息出現?

Error Message:
因為本次實作是自已產生 RootCA,因此使用者一定要下載 RootCA.cer 並匯入才能算是信任你的憑證,因為憑證是我們自行產生的 RootCA 所以在預設的情況下 Windows 電腦並不認識 (不信任) 您所製作的憑證。

Ans:
以下為簡述使用者如何匯入 (信任) 您所製作的根憑證 (RootCA)。為何不是匯入 RootCA 簽發給 MTA 的憑證呢? 答案當然也是可以的不過這樣對於我們整合之後的服務會更方便,因為 MTA 的憑證也是 RootCA 簽發的而二者都是自行製作的,且您只要匯入 (信任) RootCA 之後它所簽發的就會自動信任。
1. 使用者下載您所製作 RootCA.crt
2. 開啟 【Outlook Express】
     1. 點選【工具】
     2. 點選【選項】
     3. 點選【安全性】
     4. 點選【數位識別碼】
     5. 點選【信任的根憑證授權】
     6. 尋找放置 rootca.crt 路徑並匯入【rootca.crt】