站長新書 站長開講 首頁 最新文章 站長著作及審校 FreeBSD 筆記 Linux 筆記 Windows 筆記 虛擬化筆記 網管人雜誌 遊山玩水 關於本站
站長新書 VMware vSphere ICM 團購開跑了!!

Postfix-配合 SASLv1 達成 SMTP Auth

前言

以下前言內容引用來源為 [Postfix 官網]

[Postfix][Wietse Venema] 想要為使用最廣泛的郵件伺服器 [Sendmail] 提供替代品的一個嘗試。在 Internet 世界中,大部分的電子郵件都是通過 [Sendmail] 來投遞的,大約有 100 萬使用者使用 [Sendmail] 每天投遞上億封信件。這真是一個讓人吃驚的數字。[Postfix] 試圖更快、更容易管理、更安全,同時還與 [Sendmail] 保持足夠的相容性。

實作環境

安裝及設定

步驟1.安裝 postfix 套件

切換至 Ports Tree 路徑安裝 Postfix 套件

 #cd /usr/ports/mail/postfix             //切換到安裝路徑 
 #make install clean                     //安裝並清除過程中不必要的檔案

出現 Postfix Configuration Options 選單時,請勾選 SASL 項目

 [X] SASL      Cyrus SASLv1 (Simple Authentication and Security Layer)

出現 Additional SASL Options 選單時,請勾選 PWCHECK 項目

 [X] PWCHECK   Use pwcheck for password Authentication

安裝到中途時將出現詢問訊息,詢問您是否要把 Postfix 這個 User 加到系統 Mail 群組內

 You need user "postfix" added to group "mail".Would you like me to add it [y]?      //此次實作輸請入 y 後按下 Enter 繼續安裝

再次出現詢問訊息

 Would you like to activate Postfix in /etc/mail/mailer.conf [n]?                    //此次實作輸請入 n 後按下 Enter 繼續安裝

因為上述詢問若回答 yes 的話必須至 /etc/rc.conf 內加一堆東西,因此此次實作輸請入 no 之後會修改 mailer.conf 內的相關設定

步驟2.修改 postifx 設定檔 (main.cf)

修改 postifx 設定檔 (main.cf) 內容如下

 #vi /usr/local/etc/postfix/main.cf
 mydestination = $myhostname, localhost.$mydomain $mydomain                                       //設定主機能收信的網域及主機名稱
 smtpd_recipient_restrictions = permit_sasl_autheNticated,permit_mynetworks,check_relay_domains   //新增此五行以便達成 SASL Auth 功能
 smtpd_client_restrictions = permit_sasl_authenticated
 smtpd_sasl_auth_enable= yes
 smtpd_sasl_security_options= noanonymous
 smtpd_sasl_local_domain = $myhostname

步驟3.修改 Sendmail 設定檔 (mailer.conf)

修改 Sendmail 設定檔 (mailer.conf) 將主機 Sendmail 執行位置更改為如下內容

 #vi /etc/mail/mailer.conf
 sendmail /usr/local/sbin/sendmail
 send-mail /usr/local/sbin/sendmail
 mailq /usr/local/sbin/sendmail
 newaliases /usr/local/sbin/sendmail

步驟4.修改郵件別名設定檔 (aliases)

修改郵件別名設定檔 (aliases),在 postmaster 項目加入您的帳號以便有任何狀況時會寄 Mail 通知您。

 #vi /etc/aliases
 postmaster:root, weithenn                     //加入 weithenn 帳號

修改完成後鍵入如下指令來更新 /etc/mail/aliases.db 也就是使剛才的修改生效 (請依個人喜好擇一即可)

 #newaliases                                   //方式一
 postalias /usr/local/etc/postfix/aliases      //方式二

步驟5.啟動 postfix 服務

修改 /etc/rc.conf 以便系統重新開機時能自動帶起 Postfix 服務

 #vi /etc/rc.conf                              //修改內容如下
 sendmail_enable="NO"                          //關閉 Sendmail
 postfix_enable="YES"                          //啟動 Postfix 服務

啟動 Postfix 服務以前請先確定已停止 Sendmail 服務,以免相互衝突

 #/etc/rc.d/sendmail stop                      //停止 Sendmail 服務
 #/usr/local/etc/rc.d/postfix.sh start         //啟動 Postfix 服務

關於 Sendmail 於 rc.conf 內設定 None、No、Yes 意義?

  1. None:將 Sendmail 完全關閉
  2. NO:Sendmail 只監聽 Localhost (127.0.0.1:25)
  3. YES:啟用 Sendmail

步驟6.SASL Auth 設定

此次實作所使用的 SASL 認證方式,必須讓 Postfix 服務可以讀取 /usr/local/etc/sasldb 此檔案,因此請將 Postfix 這個帳號加入至 cyrus 群組中。

 #vi /etc/group                                //編輯 group 內容如下
 cyrus:*:60:postfix                            //將 postfix 加入至 cyrus 群組

編寫 SASL smtpd 的認證設定檔 (smtpd.conf)

 #vi /usr/local/lib/sasl/smtpd.conf            //編輯內容如下
 pwcheck_method: pwcheck                       //加入此行

步驟7.啟動 pwcheck 服務

在啟動 pwcheck 服務以前請先查看 pwcheck 服務檔案內容是否有 cyrus_pwcheck_enable="yes" 內容,以確保啟動 cyrus 功能。

 #less /usr/local/etc/rc.d/cyrus_pwcheck.sh    //查看 cyrus_pwcheck.sh 內容
 cyrus_pwcheck_enable="yes"                    //確定有此選項
 #/usr/local/etc/rc.d/cyrus_pwcheck.sh start   //啟動 cyrus_pwcheck 服務

步驟8.安裝 popa3d 套件

切換至 Ports Tree 路徑安裝 popa3d 套件

 #cd /usr/ports/mail/popa3d                    //切換到安裝路徑 
 #make install clean                           //安裝並清除過程中不必要的檔案

安裝完成後請修改 inetd.conf 來取代預設的 POP3 服務

 #vi /etc/inetd.conf 
 pop3  stream  tcp  nowait  root  /usr/local/libexec/popper  popper    //預設值 
 pop3  stream  tcp  nowait  root  /usr/local/libexec/popa3d  popa3d    //修改後

步驟9.啟動 popa3d 服務

修改 /etc/rc.conf 以便系統重新開機時能自動帶起 Inetd 服務 (順便帶起 popa3 服務)

 #vi /etc/rc.conf
 inetd_enable="YES"                            //加入此行

修改完成後鍵入下列指令重新啟動 Inetd 服務

 #/etc/rc.d/inetd restart                      //重新啟動 inetd 服務

步驟10.測試相關功能

步驟10-1.測試 POP3 是否運作 (Port 110)

 #telnet localhost 110                                             //測試連結 POP3 服務
 Trying 127.0.0.1...
 telnet: connect to address 127.0.0.1: Connection refused          //Connection refused 代表 POP3 並未運作
 telnet: Unable to connect to remote host
 #telnet localhost 110                         //測試連結 POP3 服務
 Trying 127.0.0.1...
 Connected to localhost.
 Escape character is '^]'.
 +OK                                           //POP3 服務運作中

步驟10-2.測試 SMTP SASL Auth 是否運作 (Port 25)

測試上面步驟設定的 SMTP SASL Auth 機制是否運作

 #telnet localhost 25                          //測試連結 SMTP 服務
 Trying 127.0.0.1...
 Connected to localhost.
 Escape character is '^]'.
 220 mail.weithenn.org ESMTP Postfix           //若前述步驟未更新 aliases.db 則不會出現此行 (因為 Postfix 啟動但卻找不到 DB)
 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-XVERP
 250 8BITMIME
 quit                                          //離開 (此行為自行輸入)

若使用的 [MUA] 為 Outlook Express 則請勾選 我的伺服器需要驗證 項目才能順利使用 Outlook Express 發送信件,如下圖所示

Outlook Express - 我的伺服器需要驗證

[MUA] 通過 SASL 驗證機制寄信成功 Maillog 訊息,類似如下

 Aug 26 13:57:42 ldap postfix/smtpd[51569]: 8722B5C3A: client=weithenn.lan.home[192.168.1.11], sasl_method=LOGIN, sasl_username=weithenn@weithenn.org

補充-加入 DNSBL (DNS Black-List) 機制減少垃圾信

DNSBL (DNS Black-List) 簡單說為一份列管垃圾信件 IP 的清單,當這些垃圾信要寄信到您的主機時,若您的主機有設定 DNSBL 功能,則您的郵件伺服器會查詢相關的 DNSBL 主機詢問寄信來的 IP 是否在其 DNS Black-List 資料庫中,如果檢查後發現在清單中則會將此封信擋下來,目前 DNSBL 多以動態 IP 為處理要項,但亦可處理如 Open Relay 或是固定 IP 的廣告商業者,只要在 DNSBL 資料庫中加入即可達到此目的。

如何加入 DNSBL 機制? 設定的方法很簡單只要在您的 Postfix 設定檔 main.cf 中加入 DNSBL 主機即可

 smtpd_client_restrictions = reject_rbl_client dialup.ecenter.idv.tw, reject_rbl_client spam.ecenter.idv.tw, reject_rbl_client or.ecenter.idv.tw

參考

[ FreeBSD Newbie Project]

[ MC104- FreeBSD postfix + SMTP AUTH]

[ Postfix SMTP AUTH (and TLS) HOWTO]

[ 信件系統postfix安裝與配置(一)]

[ 信件系統postfix安裝與配置(二)]

[為你的 mail server 加上 dnsbl 功能]

[How do I use ORDB to protect my mailserver?]

[SMTP 代碼]

Me FAQ

Q1.使用 Port 安裝 Postfix 時出現錯誤訊息無法順利安裝?

Error Meaage:

使用 Port 安裝 /usr/ports/mail/postfix 但安裝到一半卻出現如下錯誤訊息並停止安裝!!

 Dependency warning: used OpenSSL version contains known vulnerabilities Please update or define either WITH_OPENSSL_BASE or WITH_OPENSSL_PORT 

Ans:

系統告知您因為套件相依性的關係,請您順便更新 Openssl 套件,只要鍵入如下指令將 Openssl 也更新即可

 make WITH_OPENSSL_BASE=yes install clean

Q2.如何清空 Postfix Mail Queued?

Meaage:

執行指令 mailq 查看在 Postfix Mail Queued 情況時發現 Q住一堆信該如何刪除呢?

Ans:

執行如下指令即可刪除 Postfix Mail Queued

 #cd /var/spool/postfix                         //切換至 Postfix Mail Queued 資料夾
 #find defer deferred -type f                   //顯示 Postfix Mail Queued 信件
 #find defer deferred -type f -delete           //刪除 Postfix Mail Queued 信件

Q3.如何清空使用者 Mail Box?

Meaage:

有使用者已經離職,該如何直接將他的 Mail Box 清空呢?

Ans:

執行如下指令即可

 #cd /var/mail                                 //切換至 User Mail Box 資料夾
 #ls -lh                                     //顯示 User Mail Box 大小
 #: > jiakai                                   //清空使用者 jiakai 的 Mail Box

Q4.誤把 maillog 刪除該如何使 maillog 重新統計?

Meaage:

不小心將 /var/log/maillog 誤刪之後沒有 maillog 訊息可以查看,該如何重新建立並使 MTA 寫入訊息呢?

Ans:

 #touch /var/log/maillog                      //需先建立空檔
 #killall -1 syslogd                      //重新啟動 syslogd 服務

Q5.Mail 無法收件並出現錯誤訊息 popa3d: Failed or refused to load /var/mail/weithenn?

Error Meaage:

使用者無法透過 MUA 收件,並出現必須輸入密碼進行驗證,查看 /var/log/message 出現如下錯誤訊息

 popa3d[36089]: Failed or refused to load /var/mail/weithenn

Ans:

原因為不小心改到 User Mail Box Owner 所造成,修改後使用者即可順利收信

 #chown weithenn /var/mail/weithenn                         //修改使用者帳號 weithenn 的 owner
 -rw------- 1 root wheel 12900 Aug 18 14:35 weithenn        //修改前
 -rw------- 1 weithenn wheel 12900 Aug 18 14:35 weithenn    //修改後

Q6.無法寄信並出現 Host or domain name not found. 錯誤訊息?

Error Meaage:

測試對外寄信到 weithenn@gmail.com 時無法寄信且 /var/log/maillog 出現如下錯誤訊息?

 status=bounced (Host or domain name not found. Name service error for name=gmail.com type=A: Host found but no data record of requested type)

Ans:

在 Google 找到此這篇後 [趨勢科技-諮詢百科-解決方案 ESB2189] 檢查一下系統中的 /etc/resolv.conf、/etc/hosts 後發現真的是這二個檔案忘了修改,因為新安裝此台機器時還未將正式的 Domain Name 導入 (所以安裝時為了方便Hostname 就隨便填),後來 NAT 將正式的 Domain Name 導入後也有解析了,但 /etc/resolv.conf、/etc/hosts 這二個檔卻忘了修改 (因為 DNS 查詢的過程是先詢問本機檔案 ex. /etc/hosts) 經過修改後便可以順利發信了。

 #cat /etc/hosts
 ::1                     localhost.weithenn.org localhost
 127.0.0.1               localhost.weithenn.org localhost
 61.60.59.58             mail.weithenn.org mail
 61.60.59.58             mail.weithenn.org.
 #cat /etc/resolv.conf
 domain  weithenn.org
 nameserver      127.0.0.1
 nameserver      61.60.59.58
 nameserver      168.95.192.1
 nameserver      168.95.1.1
Go To Oddmuse OrgGo To FreeBSD OrgCreative Commons 2.5 Taiwansitestates.com