︿
Top

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 資料庫中加入即可達到此目的。

如何加入 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
文章標籤: