2009年9月29日 星期二

postfix 說明

postfix 說明
轉載

以下是個人在 FreeBSD 上裝 postfix 的一些說明文件,由於檔案較大,故分成七個部份,希望對有需要的人有所幫助。

Postfix 是一套使用於架設 mail server 的軟體,其協定為 smpt (port 25),亦是各信件主機傳送信件或是你要將信件傳送至信件主機的通訊協定,在一般 unix-like 中大多是使用 sendmail ,那麼改用 Postfix 有何好處呢?請看以下說明:

1.安全性:sendmail 最為人詬病的就是其安全性,而 Postfix 可有效的改善這種現象,因其在執行時並不以 root 身份執行

2.簡單、快速:使用過 sendmail 的人便知道,sendmail 的設定檔並不很友善,而 Postfix 的設定檔簡單,只需設定一個重要的檔案 main.cf,且其說明詳細,如此在設定時可讓人快速的,省掉一些設定時的麻煩。另外,Postfix 的執行時是由一些分開的小程式個別執行,因此其執行效率較佳

3.相容性:Postfix 就是為了改善 sendmail 的一些缺點而設計的,因此其和 sendmail 的相容性極佳,在轉移上無任何問題

4.使用資源較少

5.為一免費的開放碼軟體

6.是供一些有用的工具軟體,便於日常管理及加強與 sendmail 的溝通

如同在 Postfix 概說中所說的,Postfix 是提供發信的功能,因此一個完整的 mail server 尚需提供收信功能。在 FreeBSD 中提供 qpopper 可達到此功能,以下介紹透過 FreeBSD 的 ports 來安裝 qpopper:

# cd /usr/ports/mail/qpopper
# make install

當安裝完成後,還需修改以下事項:

將 sendmail disable,請編輯 /etc/rc.conf ,將 sendmail_enable="YES" 設定為 sendmail_enable="NO",使用 killall -9 sendmail 停止掉 sendmail daemon

編輯 /etc/inetd.conf ,修改此行 pop3 stream tcp nowait root /usr/local/libexec/qpopper popper -s ,-s 的意思是啟動記錄檔

重新啟動 inetd,執行 killall -HUP inetd

經過以上 step ,測試一下 pop3 是否正常:

# telnet 0 110
Trying 0.0.0.0...
Connect to 0.
Escape character is '^]'.
+OK Qpopper (Version 以下省略..)

出現以上訊息,代表你的 Qpopper 已能正常工作,請鍵入 quit 結束連線..

Postfix 是提供發信的功能(透過 port 25),同樣的,我們透過方便的 ports 來安裝:

# cd /usr/ports/mail/postfix
# make install

在安裝過程中,會問你是否安裝帳號,請按 yes 確定

當安裝完成後,還需修改以下事項。由於 postfix 執行方式,是透過 standalone 而非由 inetd 來控制,因此我們需在 /usr/local/etc/rc.d 中建立一個 shell script 檔,以便開機時能啟動 postfix,建立方式如下:

# cd /usr/local/etc/rc.d
# ee postfixd.sh <- 這個名稱你可自取

在 postfixd.sh 中輸入以下資料:

#!/bin/sh
/usr/local/sbin/postfix start &
echo " postfix "

存檔後,啟動 postfix ,執行

# /bin/sh /usr/local/etc/rc.d/postfixd.sh

# /usr/local/sbin/postfix start

測試 Postfix 是否正常執行:

# telnet 0 25
Trying 0.0.0.0...
Connect to 0.
Escape character is '^]'.
220 cmlab.idv.tw ESMTP Postfix

出現以上訊息,代表你的 Postfix 已能正常執行,現在鍵入 quit 結束連線

在設定 Postfix ,我們需先了解 Postfix 的設定檔案,請參照以下說明:

Postfix 的設定檔案在 /usr/local/etc/postfix 目錄下,檔案分為以下類型
main.cf 這是 Postfix 最重要的設定檔,所有的設定都在此設定,這也是我們討論的重點
1.master.cf 這是用來設定 Postfix 信件處理時程式的相關設定( Postfix 是由於多個小程式共同處理信件的),一般我們不需也不建議去更改它

2.以 sample -* .cf ,這些是一些 sample 參考檔案,如 sample-main.cf、sample-master.cf .. 等,我們不需更改這些檔案,因為 Postfix 的主要設定檔是在 main.cf ,這些只是提供參考用

3.sample.access 和 sample-aliases 這二個檔和 sendmail 中的一樣,用來設定別名及存取控制

4.設定時我們可參考 sample-*.cf 檔案,將想變動的部份加至 main.cf 中即可

一般我們在設定 mail server 時,重點皆是擺在網域的設定、relay 的存取控制、以及一些安全措施(如信箱大小..等),因此我們就這些問題討論:

以下以網域名稱為 cmlab.idv.tw、主機名稱為 mail.cmlab.idv.tw 來做說明:

=> 設定網域名稱
mydomain = cmlab.idv.tw

=> 設定主機名稱(host name)
myhostname = mail.cmlab.idv.tw

=> 設定 aliases 的目錄
alias_maps = hash:/usr/local/etc/postfix/aliases
建立好你的 aliases 檔後(亦可由原先 sendmail 的 aliases 檔案拷貝過來,或將 sample-aliases 改為 aliases 使用),並轉換為 aliases.db

=> 將 aliases 檔轉換為 aliases.db
# cd /usr/local/etc/postfix
# /usr/local/sbin/postalias hash:aliases

=> 利用 access 檔來做存取限制,可參考在 /usr/local/etc/postfix/sample-access 檔案
在 access 中的設定格式如下:
設定對象 <設定方式>
其中設定對象可用主機名稱、主機 ip、網域、或郵件地址..
<設定方式> 主要有 REJECT、OK
如以下的設定
61.219.230.5 OK
cmlab.idv.tw OK
bad.com REJECT
test@com.tw OK

=> 用 postmap 將 access 轉換成 access.db
# cd /usr/local/etc/postfix
# /usr/local/sbin/postmap hash:access

=> 另外建議在 main.cf 中自行加上以下設定
mailbox_size_limit = 102400000 ->這是用來設定信箱大小,單位是 byte,如沒設定則內定值為 50 M,如本例將信箱大小設為 100 M
disable_vrfy_command = yes -> 將vrfy 功能關掉
smtpd_recipient_limit = 100 -> 限定每一封信可寄給幾個人,如本例為 100


=> 經過以上設定後,你便可測試你的 mail server 是否正常(通常可借由寄一封信到外面的主機,及從外面的主機寄一封信到 local 來確定 mail server 是否正常)

在設定 Postfix 後,我們來了解 Postfix 的檔案結構,請參照以下說明:

Postfix 的設定檔案在 /usr/local/etc/postfix 目錄下,檔案分為以下類型

1.main.cf 這是 Postfix 最重要的設定檔,所有的設定都在此設定,這也是我們討論的重點

2.master.cf 這是用來設定 Postfix 信件處理時程式的相關設定( Postfix 是由於多個小程式共同處理信件的),一般我們不需也不建議去更改它

3.以 sample -* .cf ,這些是一些 sample 參考檔案,如 sample-main.cf、sample-master.cf .. 等,我們不需更改這些檔案,因為 Postfix 的主要設定檔是在 main.cf ,這些只是提供參考用

4.sample-access 和 sample-aliases 這二個檔和 sendmail 中的一樣,用來設定別名及存取控制

5.Postfix 的執行檔在 /usr/local/sbin 目錄下,都是一些 post* 的檔案,如 postcat、postsuper,另還有一個和 sendmail (沒錯,就和 sendmail 一樣),可用來取代 sendmail 用的

6.信件放在 /var/mail 之下

7.mail queue 在 /var/spool/postfix 目錄下,是由一些分門別類的目錄所構成,有興趣的朋友可自行研究看看

8.系統日誌檔在 /var/log/maillog,建議時時查看,以維護系統的安全,亦可檢查信件來往正不正常

Postfix 在設計初,便是為了取代 sendmail ,因此和 sendmail 的相容性極佳,在此我們來研究一下 Postfix 如何和 sendmail 互通有無。

Postfix 的設定檔 mail.cf 和 sendmail 的 sendmail.cf 相當,不過簡單易懂

Postfix 可以使用 sendmail 的 access 及 aliases 檔,方法如下:
=> 將 aliases 檔轉換為 aliases.db
# cd /usr/local/etc/postfix
# /usr/local/sbin/postalias hash:aliases

=> 用 postmap 將 access 轉換成 access.db
# cd /usr/local/etc/postfix
# /usr/local/sbin/postmap hash:acces

sendmail 提供的一些指令,如 mailq .. ,Postfix 亦可達到其功能,方法如下:
=> 將 /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

如此則可在 Postfix 中使用 mailq 來查看目前 mail queue 的狀況,另外 Posfix 所提供的 sendmail 指令,亦可提供大部份先前 sendmail 的功能,各位朋友可用好男人 man sendmail 來查看,以下提供一些說明(請注意路徑):

=> 查詢目前 mail queue,和原 sendmail 的 mailq 功能一樣
# /usr/local/sbin/sendmail -bp

=> 立即送出信件
# /usr/local/sbin/sendmail -q

=> 模仿原 sendmail 的 newaliases 功能
# /usr/local/sbin/sendmail -I

在 /usr/local/sbin 這個目錄中,Postfix 提供了一些工具程式,皆是以 post 開頭,如 postcat、postfix、postsuper .. 等,其中有些是在信件處理時使用的,不建議在一般 command line 下用,我們就一些實用的指令來做說明:

=> postfix 這個指令用來啟動、停止、重新啟動 postfix daemon,如
# /usr/local/sbin/postfix start -> 啟動 postfix
# /usr/local/sbin/postfix stop -> 停止postfix
# /usr/local/sbin/postfix reload -> 重新啟動 postfix

=> postalias 這個指令用來將 aliases 檔轉為 aliases.db 檔
# cd /usr/local/etc/postfix
# /usr/local/sbin/postalias hash:aliases

=> postmap 將 access 檔轉為 access.db 檔
# cd /usr/local/etc/postfix
# /usr/local/sbin/postmap hash:access

=> postsuper 從其名稱不難得知,這是 Postfix 中最 super 的指令了,其詳細用法可用 man postsuper 查看,在此只做簡單說明:
# /usr/local/sbin/postsuper -d -> 將某一封 queue message 刪掉
# /usr/local/sbin/postsuper -d ALL -> 刪除所有的 queue
# /usr/local/sbin/postsuper -sv -> 檢查和修復 postfix 的信件檔

沒有留言:

張貼留言