1、前言
以下前言內容引用來源為 Postfix 官網Postfix 是 Wietse Venema 想要為使用最廣泛的郵件伺服器 Sendmail 提供替代品的一個嘗試。在 Internet 世界中,大部分的電子郵件都是通過 Sendmail 來投遞的,大約有 100 萬使用者使用 Sendmail 每天投遞上億封信件。這真是一個讓人吃驚的數字。Postfix 試圖更快、更容易管理、更安全,同時還與 Sendmail 保持足夠的相容性。
文章目錄
1、前言2、實作環境
3、安裝及設定
步驟1.安裝 postfix 套件
步驟2.修改 postifx 設定檔 (main.cf)
步驟3.修改 Sendmail 設定檔 (mailer.conf)
步驟4.修改郵件別名設定檔 (aliases)
步驟5.啟動 postfix 服務
步驟6.SASL Auth 設定
步驟7.啟動 pwcheck 服務
步驟8.安裝 popa3d 套件
步驟9.啟動 popa3d 服務
步驟10.測試相關功能
4、補充-加入 DNSBL (DNS Black-List) 機制減少垃圾信
5、參考
6、Me FAQ
Q1.使用 Port 安裝 Postfix 時出現錯誤訊息無法順利安裝?
Q2.如何清空 Postfix Mail Queued?
Q3.如何清空使用者 Mail Box?
Q4.誤把 maillog 刪除該如何使 maillog 重新統計?
Q5.Mail 無法收件並出現錯誤訊息 popa3d: Failed or refused to load /var/mail/weithenn?
Q6.無法寄信並出現 Host or domain name not found. 錯誤訊息?
2、實作環境
- FreeBSD 5.4-RELEASE-p8
- cyrus-sasl-1.5.28_4
- postfix-2.2.8_2,1
- popa3d-1.0
3、安裝及設定
步驟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) 內容如下,首先 mydestination 為設定主機能收信的網域及主機名稱,接著新增 permit_sasl_autheNticated,permit_mynetworks,check_relay_domains 及 smtpd 等,以便達成 SASL Auth 功能。# vi /usr/local/etc/postfix/main.cf
mydestination = $myhostname, localhost.$mydomain $mydomain
smtpd_recipient_restrictions = permit_sasl_autheNticated,permit_mynetworks,check_relay_domains
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 意義?
- None:將 Sendmail 完全關閉
- NO:Sendmail 只監聽 Localhost (127.0.0.1:25)
- 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)
若您的系統未啟動 popa3d 服務 (或 Inetd 服務啟動失敗?) 而當您嘗試連結 Port 110 時將顯示如下訊息:# telnet localhost 110 //測試連結 POP3 服務
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused //POP3 並未運作
telnet: Unable to connect to remote host
系統啟動 popa3d 服務成功嘗試連結 Port 110 時將顯示如下訊息:
# 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 機制是否運作,其中 ESMTP 訊息若前述步驟未更新 aliases.db 則不會出現此行 (因為 Postfix 啟動但卻找不到 DB)。# telnet localhost 25 //測試連結 SMTP 服務
Trying 127.0.0.1...
Connected to localhost.
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-XVERP
250 8BITMIME
quit //離開 (此行為自行輸入)
若使用的 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、補充-加入 DNSBL (DNS Black-List) 機制減少垃圾信
DNSBL (DNS Black-List) 簡單說為一份列管垃圾信件 IP 的清單,當這些垃圾信要寄信到您的主機時,若您的主機有設定 DNSBL 功能,則您的郵件伺服器會查詢相關的 DNSBL 主機詢問寄信來的 IP 是否在其 DNS Black-List 資料庫中,如果檢查後發現在清單中則會將此封信擋下來,目前 DNSBL 多以動態 IP 為處理要項,但亦可處理如 Open Relay 或是固定 IP 的廣告商業者,只要在 DNSBL 資料庫中加入即可達到此目的。- The Spamhaus Project - ZEN
- 小紅帽技術論壇 dns black list (針對撥接/動態 IP)
- 小紅帽技術論壇 dns black list (針對國內 Open Relay 主機)
- 小紅帽技術論壇 dns black list (針對國內惡名的廣告商發信主機)
如何加入 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
5、參考
6、Me FAQ
Q1.使用 Port 安裝 Postfix 時出現錯誤訊息無法順利安裝?
Error Message:使用 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 Message:使用者無法透過 MUA 收件,並出現必須輸入密碼進行驗證,查看 /var/log/message 出現如下錯誤訊息
popa3d36089: 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 Message:測試對外寄信到 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) 經過修改後便可以順利發信了。
/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.
/etc/resolv.conf,詳細設定內容可參考站內文章 resolv.conf
# 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