1、前言
談到 E-Mail 就不得不提一下這三個名詞 MTA、MDA、MUA,關於 E-Mail 從使用者發信到收信如何運作可參考 twbsd.org - Wang, Chun-Pin 第十六章 郵件伺服器圖解 了解。- MTA (Mail Transfer Agent): 郵件轉送代理人,負責傳送、轉送郵件 (Relay),如:Sendmail、Postfix、Qmail
- MDA (Mail Delivery Agent): 郵件遞送代理人,負責把進來的郵件遞送、過濾到使用者信箱內,如:Procmail、MailDrop
- MUA (Mail User Agent): 郵件使用者代理人,使用者用來發信、收信的程式,如:Outlook Express、SquirrelMail
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 能讀取 SASL 設定檔
步驟3.安裝 Cyrus-Sasl2-Saslauthd 套件
步驟4.檢查 /etc/master.passwd 及 /etc/group
步驟5.修改 /etc/rc.conf
步驟6.建立 smtpd.conf
步驟7.修改 postfix 設定檔 main.cf
步驟8.建立別名 (Aliases) 資料庫
步驟9.停止/啟動相關服務
步驟10.測試 SMTP Auth 功能
4、參考
5、Me FAQ
Q1.測試 SMTP Auth 怎不是 Postfix 回應我?
2、實作環境
- FreeBSD 6.1-STABLE
- postfix-2.3.1,1
- cyrus-sasl-saslauthd-2.1.22
3、安裝及設定
本文將實作下列項目- 安裝及設定郵件伺服器 Postfix。
- 設定 SASL2 SMTP Authentication 驗證機制。
步驟1.安裝 Postfix 套件
切換至 Ports Tree 路徑安裝 postfix 套件。# cd /usr/ports/mail/postfix //切換至套件路徑
# make install clean //安裝 postfix 並勾選下列項目
[X] PCRE Perl Compatible Regular Expressions
[X] SASL2 Cyrus SASLv2 (Simple Auth. and Sec. Layer)
[X] TLS Enable SSL and TLS support
[X] BDB Berkeley DB (choose version with WITH_BDB_VER)
[X] OPENLDAP OpenLDAP maps (choose ver. with WITH_OPENLDAP_VER)
安裝途中將會尋問二個問題。
1.You need user "postfix" added to group "mail".Would you like me to add it y? y
是否將 postfix 加入 mail 群組,此例回答 y
2.Would you like to activate Postfix in /etc/mail/mailer.conf n? y
是否在 /etc/mail/mailer.conf 中啟動 Postfix,此例回答 y
安裝完後系統還會貼心的提醒說 如果使用 SASL 認證的方式,必須確定 postfix 這個代理使用者有權力讀取 sasldb 的檔案。
If you are using SASL, you need to make sure that postfix has access to read the sasldb file.
This is accomplished by adding postfix to group mail and making the /usr/local/etc/sasldb* file(s) readable by group mail (this shouldbe the default for new installs).
步驟2.設定 Postfix 能讀取 SASL 設定檔
查看 SASL 設定檔知道其擁有人 (owner) 及群組 (groups) 為 cyrus 因此我們將 postfix 加入此群組 (cyrus) 內,以便屆時 postifx 服務能順利讀取 SASL 設定檔。# ls -l /usr/local/etc/sasldb* //查看 sasldb 權限
-rw-r----- 1 cyrus mail 16384 7 27 11:36 /usr/local/etc/sasldb2.db
修改群組 (group) 檔案將 postfix 加入 cyrus 群組。
# vi /etc/group //修改群組檔案
cyrus:*:60:postfix //將 postfix 加入 cyurs 群組內
步驟3.安裝 Cyrus-Sasl2-Saslauthd 套件
切換至 Ports Tree 路徑安裝 Cyrus-Sasl2-Saslauthd 套件。# cd /usr/ports/security/cyrus-sasl2-saslauthd //切換至套件路徑
# make install clean //安裝 SASL2 套件
安裝完後系統仍貼心提醒你要使用 SASL 功能記得在 rc.conf 內加上 saslauthd_enable="YES"。
To run saslauthd from startup, add saslauthd_enable="YES" in your /etc/rc.conf.
步驟4.檢查 /etc/master.passwd 及 /etc/group
由於安裝 postfix 時系統會新增 postfix 這個使用者及群組,但這樣的動作將會我們破壞我們在 OpenLDAP-PAM NSS 設定 這篇的設定,因此記得修改回來吧!! (否則將造成登入失敗)修改系統使用者密碼及群組檔案,將認證部份導至 LDAP。
# vipw
postfix:*:125:125::0:0:Postfix Mail System:/var/spool/postfix:/usr/sbin/nologin
+:*:::::::: //確保此行在最後一行
# vim /etc/group
postfix:*:125:
+:*:0: //確保此行在最後一行
步驟5.修改 /etc/rc.conf
修改 /etc/rc.conf 加入啟動相關服務設定,以便系統重新開機時能自動帶起 Postfix、SASL 服務,由於我們 MTA 採用 Postfix 所以記得將 Sendmail 服務關閉。# vi /etc/rc.conf
sendmail_enable="NO" //關閉 Sendmail
postfix_enable="YES" //啟動 Postfix 服務
saslauthd_enable="YES" //啟動 SASL 服務
關於 Sendmail 於 rc.conf 內設定 None、No、Yes 意義?
- None:將 Sendmail 完全關閉
- NO:Sendmail 只監聽 Localhost (127.0.0.1:25)
- YES:啟用 Sendmail
步驟6.建立 smtpd.conf
修改 SMTP 設定檔。# vi /usr/local/lib/sasl2/smtpd.conf //修改 SMTP 設定檔
pwcheck_method: saslauthd //修改認證方法
mech_list: plain login cram-md5 digest-md5 //修改認證方式
步驟7.修改 postfix 設定檔 main.cf
修改 Postfix 設定檔 main.cf,以下僅列出基本設定 (即僅列出修改項目)。myhostname = mail.weithenn.org
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks_style = subnet
mynetworks = 192.168.1.0/24, 127.0.0.0/8, 61.60.59.58/32 //指定 LAN 網段及 Public IP
alias_maps = hash:/usr/local/etc/postfix/aliases //預設使用 /etc/aliases
home_mailbox = Maildir/ //採用 MailDir 方式收取 E-Mail
啟動 Authenticated Relay 功能。
broken_sasl_auth_clients = yes
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_relay_domains,
smtpd_client_restrictions = permit_sasl_authenticated
步驟8.建立別名 (Aliases) 資料庫
建立 E-Mail 別名 (Aliases) 資料庫也就是產生 /usr/local/etc/postfix/aliases.db 檔案鍵入如下指令即可,或執行 newaliases 指令。# postalias /usr/local/etc/postfix/aliases
步驟9.停止/啟動相關服務
由於我們 MTA 採用 Postfix 所以在啟動 Postfix 服務以前記得先將 Sendmail 服務關閉。# /etc/rc.d/sendmail stop //停止 Sendmail 服務
Stopping sendmail_submit.
# /usr/local/etc/rc.d/postfix start //啟動 Postfix 服務
postfix/postfix-script: starting the Postfix mail system
# /usr/local/etc/rc.d/saslauthd start //啟動 SASL 服務
Starting saslauthd.
步驟10.測試 SMTP Auth 功能
Postfix 及 SASL 服務成功啟動後,接著依如下方式來測試 SMTP Authentication 機制是否作用了,如果前述步驟未執行 postalias 將不會出現 ESMTP 訊息,也就是 postfix 啟動但卻找不到 DB。# telnet localhost 25 //連結至本機 SMTP
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.weithenn.org.
Escape character is '^'.
220 mail.weithenn.org ESMTP Postfix
ehlo localhost //測試 SASL 機制 (此行為自行輸入)
250-mail.weithenn.org
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5 //SMTP AUTH LOGIN 成功
250-AUTH=LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
quit //離開 (此行為自行輸入)
221 2.0.0 Bye
Connection closed by foreign host.
若使用的 MUA 為 Outlook Express 則請勾選 我的伺服器需要驗證 項目才能順利使用 Outlook Express 發送信件,如下圖所示:
當 MUA 通過 SASL 驗證機制寄信成功 Maillog 訊息,類似如下:
Aug 26 13:57:42 ldap postfix/smtpd51569: 8722B5C3A: client=weithenn.lan.home192.168.1.11, sasl_method=LOGIN, sasl_username=weithenn@weithenn.org
4、參考
- Postfix LDAP How to
- ldap_table - Postfix LDAP client configuration
- Postfix 功能概述
- OpenLDAP 整合方案
- 使用Outlook Express的目錄服務來查詢LDAP Server中的User憑證
- OpenLDAP 和 Postfix 的整合應用
- 建置 POSTFIX 伺服器
- Postfix Frequently Asked Questions
5、Me FAQ
Q1.測試 SMTP Auth 怎不是 Postfix 回應我?
Error Message:當測試 SMTP Auth 時怎是 Sendmail 回應我? 不是已經使用 Postfix 取代了嗎?
# telnet localhost 25
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.weithenn.org.
Escape character is '^'.
220 mail.weithenn.org. ESMTP Sendmail 8.13.6/8.13.6; Thu, 10 Aug 2006 18:37:52 +0800 (CST)
Ans:
原來是忘了把 Sendmail 服務停掉,因為系統預設 Sendmail 服務是啟動的。
# /etc/rc.d/sendmail stop
Stopping sendmail_submit.
將 Sendmail 服務停止後再度測試即為 Postfix 回應了。
# telnet localhost 25
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.weithenn.org.
Escape character is '^'.
220 mail.weithenn.org. ESMTP Postfix //Postfix 回應