1、前言
POP3 vs IMAP,如下表格為比較二者的優缺點如何選擇就看您的環境及喜好了。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.安裝 Courier-imap 套件
步驟2.產生 POP3 SSL 憑證
步驟3.修改 /etc/rc.conf
步驟4.啟動相關服務
步驟5.設定 Courier-imap 使用 OpenLDAP 認證
步驟6.對 OpenLDAP 的連接設定 (Courier IMAP 認證後端機制的設定)
步驟7.測試 Courier IMAP 利用 OpenLDAP 帳號認證
4、補充:若無自已的 RootCA 怎辦?
5、參考
6、Me FAQ
Q1.SMTPs 寄信或 POP3s 收信時顯示不信任憑證訊息出現?
Q2.無法成功使用 Courier IMAP 透過 OpenLDAP 進行帳號認證?
2、實作環境
- FreeBSD 6.1-STABLE
- courier-imap 4.1.1,1
3、安裝及設定
Courier-imap 可支援 POP3 及 IMAP 並支援 SSL 模式,採用 MailDir 來儲存使用者郵件,當然最重要的是它 支援 OpenLDAP 認證。本文將實作下列項目:- 安裝及設定 Courier-imap 可透過 OpenLDAP 進行認證使用者。
- 製作 POP3 SSL 憑證。
步驟1.安裝 Courier-imap 套件
切換至 Ports Tree 路徑安裝 courier-imap 套件。# cd /usr/ports/mail/courier-imap //切換至套件路徑
# make install clean //勾選下列項目
[X] OPENSSL Build with OpenSSL support
[X] AUTH_LDAP LDAP support
步驟2.產生 POP3 SSL 憑證
本次實做利用自行產生的根憑證 RootCA (參考 OpenLDAP-SSL TLS 設定) 來簽發 POP3 SSL 需要的 pem 檔即可 (pem = Private Key + Certificate)。# cd /usr/local/share/courier-imap
# cat /usr/local/etc/postfix/ssl/mail.weithenn.org.key > pop3d.pem
# cat /usr/local/etc/postfix/ssl/mail.weithenn.org.crt >> pop3d.pem
步驟3.修改 /etc/rc.conf
修改 /etc/rc.conf 以便系統重新開機時能自動帶起相關服務。# vi /etc/rc.conf //設定預設開機啟動程式
courier_authdaemond_enable="YES"
courier_imap_pop3d_enable="YES" //啟動 POP3 (Port 110)
courier_imap_pop3d_ssl_enable="YES" //啟動 POP3s (Port 995)
步驟4.啟動相關服務
上述修改完成後鍵入如下指令來啟動相關服務:啟動 Courier-Authdaemond 服務。
# /usr/local/etc/rc.d/courier-authdaemond start
Starting courier_authdaemond.
啟動 POP3 (Port 110) 服務。
# /usr/local/etc/rc.d/courier-imap-pop3d.sh start
Starting courier_imap_pop3d.
啟動 POP3s (Port 995) 服務。
# /usr/local/etc/rc.d/courier-imap-pop3d-ssl.sh start
Starting courier_imap_pop3d_ssl.
步驟5.設定 Courier-imap 使用 OpenLDAP 認證
上述相關服務啟動成功後,請測試是否能成功進行認證。# telnet localhost 110
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.weithenn.org.
Escape character is '^'.
+OK Hello there.
user weithenn@weithenn.org //E-Mail Address (此行為自行輸入)
+OK Password required.
pass 123456789 //密碼 (此行為自行輸入)
-ERR Temporary problem, please try again later //出現認證錯誤 (Why?)
Connection closed by foreign host.
此時 Maillog 顯示無法認證? 因為我們尚未設定 Courier-imap 認證方式,所以 Courier-imap 不知找誰要帳號資訊因此認證失敗。
Aug 12 09:58:33 ldap authdaemond: ldap_simple_bind_s failed: Can't contact LDAP server
Aug 12 09:58:33 ldap pop3d: LOGIN FAILED, user=weithenn@weithenn.org, ip=127.0.0.1
Aug 12 09:58:33 ldap pop3d: authentication error: Input/output error
前面步驟僅設定讓 Courier-imap 開啟 POP3、POP3s 服務,但尚未設定帳號資訊找誰要? 請指定 Courier IMAP 使用 OpenLDAP 方式來認證帳號,因此請修改 Courier IMAP 認證 (Authdaemon) 服務的設定,Courier IMAP 認證支援如下方式:
- authpam: 使用 PAM 進行認證
- authldap: 使用 LDAP 進行認證
- authpgsql: 使用 PostGreSQL 進行認證
- authmysql: 使用 MySQL 進行認證
修改 Courier IMAP 認證 (Authdaemon) 服務方式,在設定內容中加入 authdaemond.ldap 的用意,僅是在於使認證機制只找 LDAP,因為預設是以第一個發現的 authdaemond.* 模組為準。
# vi /usr/local/etc/authlib/authdaemonrc
authmodulelist="authldap" //使用 LDAP 認證
authmodulelistorig="authldap" //使用 LDAP 認證
version="authdaemond.ldap" //加入此行
另外值得注意的是雖然 Courier-imap 可以支援不同的認證伺服器,但是不可以同一時間處理不同認証使用者資料庫下的使用者,也就是說要麻你必須把使用者全放在 LDAP 下,不然就把它全放在 MySQL 或 PostgreSQL 下;您不行把某些使用者放在 LDAP 而某些使用者放在 MySQL 下。
步驟6.對 OpenLDAP 的連接設定 (Courier IMAP 認證後端機制的設定)
修改 Courier IMAP 認證後端對於 OpenLDAP 機制的設定,其中比較重要的二個欄位 LDAP_AUTHBIND、LDAP_MAIL。- LDAP_AUTHBIND: 指定先尋找使用 Entry 的 DN,然後使用這 DN 和所輸入的 password 來作認證工作,如果認證工作順利的話,使用者就被認證成功。
- LDAP_MAIL: 使用者登入資料會使用 Mail Address 來作為使用者的登入帳號 (屆時 Outlook Express 填的內送伺服器-帳號名稱)。
# vi /usr/local/etc/authlib/authldaprc
LDAP_URI ldap://ldap.weithenn.org
LDAP_PROTOCOL_VERSION 3
LDAP_BASEDN dc=weithenn, dc=org
LDAP_TIMEOUT 5
LDAP_AUTHBIND 1
LDAP_MAIL mail
LDAP_FILTER (objectClass=inetOrgPerson)
LDAP_HOMEDIR homeDirectory
LDAP_MAILDIR ./Maildir
LDAP_FULLNAME cn
LDAP_CRYPTPW userPassword
LDAP_UID uidNumber
LDAP_GID gidNumber
步驟7.測試 Courier IMAP 利用 OpenLDAP 帳號認證
上述修改完成後,我們可以再次測試 Courier IMAP 透過 OpenLDAP 方式來進行使用者認證。# telnet localhost 110
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.weithenn.org.
Escape character is '^'.
+OK Hello there.
user weithenn@weithenn.org //E-Mail Address (此行為自行輸入)
+OK Password required.
pass 123456789 //密碼 (此行為自行輸入)
+OK logged in. //系統顯示認證成功
quit //離開 (此行為自行輸入)
+OK Bye-bye.
Connection closed by foreign host.
此時 ldap.log 顯示認證成功資訊。
Aug 26 13:11:48 ldap slapd77165: conn=22885 op=2 SRCH base="dc=weithenn,dc=org" scope=2 deref=0
filter="(&(objectClass=inetOrgPerson)(mail=weithenn@weithenn.org))"
Aug 26 13:11:48 ldap slapd77165: conn=22885 op=2 SRCH attr=homeDirectory ./Maildir uid userPassword uidNumber gidNumber mail
Aug 26 13:11:48 ldap slapd77165: conn=22885 op=2 SEARCH RESULT tag=101 err=0 nentries=1 text=
Aug 26 13:11:48 ldap slapd77165: conn=22886 op=1 BIND anonymous mech=implicit ssf=0
Aug 26 13:11:48 ldap slapd77165: conn=22886 op=1 BIND dn="uid=weithenn,ou=People,dc=weithenn,dc=org" method=128
Aug 26 13:11:48 ldap slapd77165: conn=22886 op=1 BIND dn="uid=weithenn,ou=People,dc=weithenn,dc=org" mech=SIMPLE ssf=0
Aug 26 13:11:48 ldap slapd77165: conn=22886 op=1 RESULT tag=97 err=0 text=
此時 Maillog 也顯示登入成功 (POP3)。
Aug 26 13:08:04 ldap pop3d: LOGIN, user=weithenn@weithenn.org, ip=127.0.0.1
Aug 26 13:08:12 ldap pop3d: LOGOUT, user=weithenn@weithenn.org, ip=127.0.0.1, top=0, retr=0, rcvd=6, sent=30, time=8
此時 Maillog 也顯示登入成功 (POP3 Over SSL)。
Aug 11 15:35:49 ldap pop3d-ssl: LOGIN, user=weithenn, ip=192.168.1.11
Aug 11 15:35:49 ldap pop3d-ssl: LOGOUT, user=weithenn, ip=192.168.1.11, top=0, retr=2717, rcvd=34, sent=2917, time=0
使用 SMTPs 及 POP3s 注意事項,Outlook Express 的內送郵件-POP3 及外送郵件-SMTP 設定欄位內容即為當時產生給 Postfix 使用憑證的 CN。
4、補充:若無自已的 RootCA 怎辦?
請依如下步驟來產生給 POP3 用的 pem。# cd /usr/local/etc/courier-imap //切換到產生憑證路徑
# cp /usr/local/etc/courier-imap/pop3d.cnf . //複製 POP3 憑證設定檔
# vi pop3d.cnf //設定 POP3 憑證內容
RANDFILE = /usr/local/share/courier-imap/pop3d.rand
req
default_bits = 1024
encrypt_key = yes
distinguished_name = req_dn
x509_extensions = cert_type
prompt = no
req_dn
C=TW
ST=Taiwan
L=Taipei
O=FreeBSD Personal Reserach
OU=FreeBSD Personal Reserach
CN=mail.weithenn.org
emailAddress=weithenn@weithenn.org
cert_type
nsCertType = server
# /usr/local/sbin/mkpop3dcert //產生 POP3 憑證 (pop3d.pem)
5、參考
- ldap, postfix and courier-imap howto
- Virtual Mailserver using Postfix, OpenLDAP, and Courier HOWTO
- 《網路與通訊》 電子郵件使用介紹:IMAP與POP之比較
- Mail Receive Agent - OSWikiHK
6、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】
Q2.無法成功使用 Courier IMAP 透過 OpenLDAP 進行帳號認證?
Error Message:# telnet localhost 110
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.weithenn.org.
Escape character is '^'.
+OK Hello there.
user weithenn@weithenn.org
+OK Password required.
pass 918273645
-ERR chdir Maildir failed //出現說找不到 Maildir
Connection closed by foreign host.
而 Maillog 訊息也出現說找不到 Maildir。
Aug 26 13:19:15 ldap pop3d: chdir Maildir: No such file or directory
Ans:
MailDir 如何產生?正常情況下,當設定 Courier IMAP 利用 OpenLDAP 帳號認證成功的話,只要使用者收到 E-Mail 則系統會自動在該使用者家目錄下建立 MailDir 資料夾 (裡面又包含三個資料夾 cur、new、tmp),當然若無法順利建立的話你也可手動幫使用者建立 MailDir 資料夾。
正常情況下使用者收到 E-Mail 後可以看到 Maillog 有如下訊息:
Aug 26 13:28:13 ldap postfix/local51429: AC1105C3A: to=<weithenn@mail.weithenn.org>,
relay=local, delay=1.1, delays=1/0.01/0/0.09, dsn=2.0.0, status=sent (delivered to maildir) //此時 Maildir 資料夾同步建立
如何手動建立 MailDir? 詳細內容可參考 LinuxHall - Courier-imap - Mail client 同 Postfix 的中間人 以下為簡述步驟:
# cd /home/user/weithenn //切換到使用者家目錄
# maildirmake Maildir //建立使用者 MailDir 資料夾
# chown -R weithenn Maildir //更改為該使用者可存取權限
# cd /home/user/weithenn/Maildir;ll //列出 MailDir 下相關資料夾
total 6
drwx------ 2 weithenn weithenn 512 8 11 15:20 cur
drwx------ 2 weithenn weithenn 512 8 11 15:20 new
drwx------ 2 weithenn weithenn 512 8 11 15:20 tmp