postfix安裝指南

一、 postfix概述 CHkLinux聯盟
postfix是Wietse Venema在IBM的GPL協議之下開發的MTA(郵件傳輸 CHkLinux聯盟
代理)軟件。下面一段話摘自postfix的官方站點(http://www.postfix.org): CHkLinux聯盟
“postfix 是Wietse Venema想要爲使用最廣泛的sendmail提供替代品的一個嘗試。在Internet世界中,大部分的電子郵件都是通過sendmail來投遞的, 大約有100萬用戶使用sendmail,每天投遞上億封郵件。這真實一個讓人吃驚的數字。Postfix試圖更快、更容易管理、更安全,同時還與 sendmail保持足夠的兼容性。” CHkLinux聯盟
CHkLinux聯盟
1.1 postfix的特點 CHkLinux聯盟
1. postfix是免費的: CHkLinux聯盟
postfix想要作用的範圍是廣大的Internet用戶,試圖影響大多數的Internet上的電子郵件系統,因此它是免費的。 CHkLinux聯盟
2. 更快: CHkLinux聯盟
postfix在性能上大約比sendmail快三倍。一部運行postfix的臺式PC每天可以收發上百萬封郵件。 CHkLinux聯盟
3. 兼容性好: CHkLinux聯盟
postfix是sendmail兼容的,從而使sendmail用戶可以很方便地遷移到postfix。Postfix支持/var[/spool]/mail、/etc/aliases、 NIS、和 ~/.forward 文件。 CHkLinux聯盟
4. 更健壯: CHkLinux聯盟
postfix被設計成在重負荷之下仍然可以正常工作。當系統運行超出了可用的內存或磁盤空間時,postfix會自動減少運行進程的數目。當處理的郵件數目增長時,postfix運行的進程不會跟着增加。 CHkLinux聯盟
5. 更靈活: CHkLinux聯盟
postfix是由超過一打的小程序組成的,每個程序完成特定的功能。你可以 CHkLinux聯盟
通過配置文件設置每個程序的運行參數。 CHkLinux聯盟
6. 安全性 CHkLinux聯盟
postfix具有多層防禦結構,可以有效地抵禦惡意入侵者。如大多數的postfix程序可以運行在較低的權限之下,不可以通過網絡訪問安全性相關的本地投遞程序等等。 CHkLinux聯盟
CHkLinux聯盟
1.2 postfix的總體結構 CHkLinux聯盟
postfix由十幾個具有不同功能的半駐留進程組成,並且在這些進程中並無特定的進程間父子關係。某一個特定的進程可以爲其他進程提供特定的服務。 CHkLinux聯盟
大多數的postfix進程由一個進程統一進行管理,該進程負責在需要的時候調用其他進程,這個管理進程就是master進程。該進程也是一個後臺程序。 CHkLinux聯盟
這些postfix進程是可以配置的,我們可以配置每個進程運行的數目,可重用的次數,生存的時間等等。通過靈活的配置特性可以使整個系統的運行成本大大降低。 CHkLinux聯盟
CHkLinux聯盟
CHkLinux聯盟
1.2.1 postfix的郵件隊列(mail queues) CHkLinux聯盟
postfix有四種不同的郵件隊列,並且由隊列管理進程統一進行管理: CHkLinux聯盟
1. maildrop:本地郵件放置在maildrop中,同時也被拷貝到incoming中。 CHkLinux聯盟
2. incoming:放置正在到達或隊列管理進程尚未發現的郵件。 CHkLinux聯盟
3. active:放置隊列管理進程已經打開了並正準備投遞的郵件,該隊列有 CHkLinux聯盟
長度的限制。 CHkLinux聯盟
4. deferred:放置不能被投遞的郵件。 CHkLinux聯盟
隊列管理進程僅僅在內存中保留active隊列,並且對該隊列的長度進行限 CHkLinux聯盟
制,這樣做的目的是爲了避免進程運行內存超過系統的可用內存。 CHkLinux聯盟
CHkLinux聯盟
1.2.2 postfix對郵件風暴的處理 CHkLinux聯盟
當 有新的郵件到達時,postfix進行初始化,初始化時postfix同時只接受兩個併發的連接請求。當郵件投遞成功後,可以同時接受的併發連接的數目就 會緩慢地增長至一個可以配置的值。當然,如果這時系統的消耗已到達系統不能承受的負載就會停止增長。還有一種情況時,如果postfix在處理郵件過程中 遇到了問題,則該值會開始降低。 CHkLinux聯盟
當接收到的新郵件的數量超過postfix的投遞能力時,postfix會暫時停止投遞deferred隊列中的郵件而去處理新接收到的郵件。這是因爲處理新郵件的延遲要小於處理deferred隊列中的郵件。Postfix會在空閒時處理deferred中的郵件。 CHkLinux聯盟
CHkLinux聯盟
1.2.3 postfix對無法投遞的郵件的處理 CHkLinux聯盟
當 一封郵件第一次不能成功投遞時,postfix會給該郵件貼上一個將來的時間郵票。郵件隊列管理程序會忽略貼有將來時間郵票的郵件。時間郵票到期時, postfix會嘗試再對該郵件進行一次投遞,如果這次投遞再次失敗,postfix就給該郵件貼上一個兩倍於上次時間郵票的時間郵票,等時間郵票到期時 再次進行投遞,依此類推。當然,經過一定次數的嘗試之後,postfix會放棄對該郵件的投遞,返回一個錯誤信息給該郵件的發件人。 CHkLinux聯盟
CHkLinux聯盟
1.2.4 postfix對不可到達的目的地郵件的處理 CHkLinux聯盟
postfix會在內存中保存一個有長度限制的當前不可到達的地址列表。這樣就避免了對那些目的地爲當前不可到達地址的郵件的投遞嘗試。從而大大提高了系統的性能。 CHkLinux聯盟
CHkLinux聯盟
1.2.2 postfix的安全性 CHkLinux聯盟
postfix通過一系列的措施來提高系統的安全性,這些措施包括: CHkLinux聯盟
1. 動態分配內存,從而防止系統緩衝區溢出; CHkLinux聯盟
2. 把大郵件分割成幾塊進行處理,投遞時再重組; CHkLinux聯盟
3. Postfix的各種進程不在其他用戶進程的控制之下運行,而是運行在駐留 CHkLinux聯盟
主進程master的控制之下,與其他用戶進程無父子關係,所有有很好的 CHkLinux聯盟
絕緣性。 CHkLinux聯盟
4. Postfix的隊列文件有其特殊的格式,只能被postfix本身識別; CHkLinux聯盟
CHkLinux聯盟
二、 postfix對郵件的處理過程 CHkLinux聯盟
2.1 接收郵件的過程 CHkLinux聯盟
CHkLinux聯盟
圖二、postfix對接收郵件的處理 CHkLinux聯盟
CHkLinux聯盟
當postfix接收到一封新郵件時,新郵件首選在incoming隊列處停留,然後針對不同的情況進行不同的處理: CHkLinux聯盟
1.對於來自於本地的郵件:sendmail進程負責接收來自本地的郵件放在maildrop隊列中,然後pickup進程對maildrop中的郵件進行完整性檢測。maildrop目錄的權限必須設置爲某一用戶不能刪除其他用戶的郵件。 CHkLinux聯盟
2.對於來自於網絡的郵件:smtpd進程負責接收來自於網絡的郵件,並且進行安全性檢測。可以通過UCE(unsolicited commercial email)控制smtpd的行爲。 CHkLinux聯盟
3.由postfix進程產生的郵件:這是爲了將不可投遞的信息返回給發件人。這些郵件是由bounce後臺程序產生的。 CHkLinux聯盟
5. 由postfix自己產生的郵件:提示postmaster(也即postfix管理員)postfix CHkLinux聯盟
運行過程中出現的問題。(如SMTP協議問題,違反UCE規則的記錄等等。) CHkLinux聯盟
CHkLinux聯盟
關於cleanup後臺程序的說明:cleanup是對新郵件進行處理的最後一道工序 CHkLinux聯盟
它對新郵件進行以下的處理:添加信頭中丟失的Form信息;爲將地址重寫成標準的[email protected]in格式進行排列;重信頭中抽出收件人的地址;將郵件投入incoming隊列中,並請求郵件隊列管理進程處理該郵件;請求trivial-rewrite進程將地址轉換成標準的[email protected]in格式。 CHkLinux聯盟
CHkLinux聯盟
2.2 投遞郵件的過程 CHkLinux聯盟
新郵件一旦到達incoming隊列,下一步就是開始投遞郵件,postfix投遞郵件時的處理過程如圖三所示。相關的說明如下: CHkLinux聯盟
郵 件隊列管理進程是整個postfix郵件系統的心臟。它和local、smtp、pipe等投遞代理相聯繫,將包含有隊列文件路徑信息、郵件發件人地址、 郵件收件人地址的投遞請求發送給投遞代理。隊列管理進程維護着一個deferred隊列,那些無法投遞的郵件被投遞到該隊列中。除此之外,隊列管理進程還 維護着一個active隊列,該隊列中的郵件數目是有限制的,這是爲了防止在負載太大時內存溢出。郵件隊列管理程序還負責將收件人地址在 relocated表中列出的郵件返回給發件人,該表包含無效的收件人地址。 CHkLinux聯盟
CHkLinux聯盟
CHkLinux聯盟
如果郵件隊列管理進程請求,rewrite後臺程序對收件人地址進行解析。但是缺省地,rewrite只對郵件收件人是本地的還是遠程的進行區別。 CHkLinux聯盟
如果郵件對你管理進程請求,bounce後臺程序可以生成一個郵件不可投遞的報告。 CHkLinux聯盟
本 地投遞代理local進程可以理解類似UNIX風格的郵箱,sendmail風格的系統別名數據庫和sendmail風格的.forward文件。可以同 時運行多個local進程,但是對同一個用戶的併發投遞進程數目是有限制的。你可以配置local將郵件投遞到用戶的宿主目錄,也可以配置local將郵 件發送給一個外部命令,如流行的本地投遞代理procmail。在流行的linux發行版本RedHat中,我們就使用procmail作爲最終的本地投 遞代理。 CHkLinux聯盟
遠程投遞代理SMTP進程根據收件人地址查詢一個SMTP服務器列表,按照順序連接每一個SMTP服務器,根據性能對該表進行排序。在系統負載太大時,可以有數個併發的SMTP進程同時運行。 CHkLinux聯盟
pipe是用於UUCP協議的投遞代理。 CHkLinux聯盟
CHkLinux聯盟
三、 postfix的安裝過程 CHkLinux聯盟
3.1源代碼包的安裝 CHkLinux聯盟
1. 獲取postfix的源代碼包 CHkLinux聯盟
從postfix官方站點www.postfix.org取得postfix的源代碼包postfix-19991231-pl08.tar.gz。將其拷貝到/tmp CHkLinux聯盟
2.解開源代碼包,將生成/tmp/ postfix-19991231-pl08目錄。 CHkLinux聯盟
tar xvzf postfix-19991231-pl08.tar.gz CHkLinux聯盟
3.編譯源代碼包 CHkLinux聯盟
cd /tmp/ postfix-19991231-pl08 CHkLinux聯盟
make CHkLinux聯盟
4. 建立一個新用戶“postfix”,該用戶必須具有唯一的用戶id和組id號,同時應該讓該用戶不能登錄到系統,也即不爲該用戶指定可執行的登錄外殼程序 和可用的用戶宿主目錄。我們可以先用adduser postfix 添加用戶再編輯/etc/passwd文件中的相關條目如下所示: CHkLinux聯盟
postfix:*:12345:12345:postfix:/no/where:/no/shell CHkLinux聯盟
5.確定/etc/aliases文件中包含如下的條目: CHkLinux聯盟
postfix: root CHkLinux聯盟
6. 以root用戶登錄,在/tmp/ postfix-19991231-pl08目錄下執行命令: CHkLinux聯盟
./INSTALL.sh CHkLinux聯盟
7. 啓動postfix CHkLinux聯盟
# postfix start CHkLinux聯盟
8.關於maildrop目錄權限的說明: CHkLinux聯盟
postfix可以使用一個所有用戶都可寫的(也即目錄權限爲1773)的maildrop CHkLinux聯盟
目 錄來讓本地用戶提交郵件。這種方法避免了使用set-uid 或 set-gid 軟件,並且在郵件系統不可用時,用戶仍然可以提交郵件。其他用戶沒有訪問該目錄中的隊列文件的權限。接收來自網絡的郵件時postfix不使用 maildrop目錄。但是,由於該目錄的權限是733,其他用戶可以建立一個硬連接到該目錄中的文件從而導致該郵件被投遞多次或無法刪除,也就是說這將 導致安全性問題。如果你想要使用這種方式來讓用戶提交郵件,就要在INSTALL.sh 腳本問你是否需要set-gid 時回答no。 CHkLinux聯盟
如果你的系統有多個用戶的話,最好取消以上的方式而採用利用set-gid 用 CHkLinux聯盟
戶權限提交郵件的方式。這時,我們首先需要建立一個組id唯一的組"maildrop" 並且確定該組中沒有用戶成員。然後在INSTALL.sh 問你是否需要set-gid 時指定"maildrop"。 CHkLinux聯盟
提示:在安裝postfix之前,請刪除已經安裝的sendmail。 CHkLinux聯盟
CHkLinux聯盟
3.2 rpm包的安裝 CHkLinux聯盟
1. 獲取postfix的rpm軟件包。 CHkLinux聯盟
我們可以從http://www.alltrading.es/postfix/RPMS/i386/ 獲得postfix的rpm軟件包。當前的最新版本是postfix-20000531-2.i386.rpm。 CHkLinux聯盟
2. 備份你的/etc/aliases和/etc/aliases.db,因爲postfix要使用該別名數據庫。 CHkLinux聯盟
3. 用以下命令查看系統是否安裝了sendmail: CHkLinux聯盟
[root@mail /root]# rpm -qa │grep sendmail CHkLinux聯盟
sendmail-doc-8.9.3-15 CHkLinux聯盟
sendmail-8.9.3-15 CHkLinux聯盟
sendmail-cf-8.9.3-15 CHkLinux聯盟
4. 用以下命令強行卸載sendmail: CHkLinux聯盟
[root@mail /root]# rpm -e sendmail sendmail-cf sendmail-doc --nodeps CHkLinux聯盟
5. 用以下命令殺死運行中的sendmail進程: CHkLinux聯盟
[root@mail /root]# killall sendmail CHkLinux聯盟
6. 安裝postfix: CHkLinux聯盟
[root@mail /root]# rpm -Uvh postfix-20000531-2.i386.rpm CHkLinux聯盟
postfix ################################################## CHkLinux聯盟
postfix-script: warning: creating missing Postfix pid directory CHkLinux聯盟
postfix-script: warning: creating missing Postfix incoming directory CHkLinux聯盟
postfix-script: warning: creating missing Postfix active directory CHkLinux聯盟
postfix-script: warning: creating missing Postfix bounce directory CHkLinux聯盟
postfix-script: warning: creating missing Postfix defer directory CHkLinux聯盟
postfix-script: warning: creating missing Postfix deferred directory CHkLinux聯盟
postfix-script: warning: creating missing Postfix saved directory CHkLinux聯盟
postfix-script: warning: creating missing Postfix corrupt directory CHkLinux聯盟
postfix-script: warning: creating missing Postfix public directory CHkLinux聯盟
postfix-script: warning: creating missing Postfix private directory CHkLinux聯盟
[root@mail /root]# CHkLinux聯盟
7. 啓動postfix CHkLinux聯盟
[root@mail /root]# /etc/rc.d/init.d/postfix start CHkLinux聯盟
CHkLinux聯盟
3.3 配置系統每次啓動時自動啓動postfix CHkLinux聯盟
1.如果你安裝的是postfix的源代碼包,可以在/etc/rc.d/rc.local文件中加入如下的語句讓系統每次啓動時自動啓動postfix: CHkLinux聯盟
if [ -f /usr/libexec/postfix ]; then CHkLinux聯盟
/usr/libexec/postfix start CHkLinux聯盟
fi CHkLinux聯盟
2.如果你安裝的是postfix的rpm包,可以通過setup命令來設置在系統啓動時啓動postfix。 CHkLinux聯盟
四、 postfix的配置詳解 CHkLinux聯盟
4.1 postfix的配置文件結構 CHkLinux聯盟
postfix的配置文件位於/etc/postfix下,安裝完postfix以後,我們可以通過ls命令查看postfix的配置文件: CHkLinux聯盟
[root@mail postfix]# ls CHkLinux聯盟
install.cf main.cf master.cf postfix-script CHkLinux聯盟
CHkLinux聯盟
這四個文件就是postfix最基本的配置文件,它們的區別在於: CHkLinux聯盟
mail.cf:是postfix主要的配置文件。 CHkLinux聯盟
Install.cf:包含安裝過程中安裝程序產生的postfix初始化設置。 CHkLinux聯盟
master.cf:是postfix的master進程的配置文件,該文件中的每一行都是用來配置postfix的組件進程的運行方式。 CHkLinux聯盟
postfix-script:包裝了一些postfix命令,以便我們在linux環境中安全地執行這些postfix命令。 CHkLinux聯盟
CHkLinux聯盟
CHkLinux聯盟
請引用或摘抄本站文章信息的朋友,保留本站鏈接及作者信息,保護版權,謝謝。CHkLinux聯盟
CHkLinux聯盟
構建高性能大容量開源郵件系統- ExtMailCHkLinux聯盟
CHkLinux聯盟
Postfix在中國官方網站 CHkLinux聯盟
[樓 主] From:廣州新ADSL用戶 | Posted:2002-06-06 05:04|   CHkLinux聯盟
CHkLinux聯盟
CHkLinux聯盟
hzqbbcCHkLinux聯盟
CHkLinux聯盟
CHkLinux聯盟
CHkLinux聯盟
CHkLinux聯盟
CHkLinux聯盟
級別: 管理員CHkLinux聯盟
精華: 50CHkLinux聯盟
發帖: 1054CHkLinux聯盟
威望: 439 點CHkLinux聯盟
金錢: 3468 RMBCHkLinux聯盟
貢獻值: 0 點CHkLinux聯盟
在線時間:143(小時)CHkLinux聯盟
註冊時間:2001-07-25CHkLinux聯盟
最後登陸:2005-12-09   CHkLinux聯盟
--------------------------------------------------------------------------------CHkLinux聯盟
CHkLinux聯盟
CHkLinux聯盟
CHkLinux聯盟
4.2 postfix的基本配置 CHkLinux聯盟
postfix大約有100個配置參數,這些參數都可以通過main.cf 指定。配置的格式是這樣的,用等號連接參數和參數的值。如: CHkLinux聯盟
myhostname = mail.mydomain.com CHkLinux聯盟
等號的左邊是參數的名稱,等號的右邊是參數的值; 當然,我們也可以在參數的前面加上$來引用該參數,如: CHkLinux聯盟
myorigin = $myhostname CHkLinux聯盟
雖 然postfix有100個左右的參數,但是postfix爲大多數的參數都設置了缺省值,所以在讓postfix正常爲你服務之前,你只需要配置爲數不 多的幾個參數。下面我們一起來看一看這些基本的postfix參數。需要注意的是,一旦你更改了main.cf文件的內容,則必須運行postfix reload命令使其生效。 CHkLinux聯盟
CHkLinux聯盟
1. myorigin CHkLinux聯盟
myorigin參數指明發件人所在的域名。如果你的用戶的郵件地址爲[email protected],則該參數指定@後面的域名。缺省地,postfix使用本地主機名作爲myorigin,但是建議你最好使用你的域名,因爲這樣更具有可讀性。比如:安裝postfix的主機爲mail.domain.com則我們可以這樣指定myorigin: CHkLinux聯盟
myorigin = domain.com CHkLinux聯盟
當然我們也可以引用其他參數,如: CHkLinux聯盟
myorigin = $mydomain CHkLinux聯盟
CHkLinux聯盟
2. mydestination CHkLinux聯盟
mydestination參數指定postfix接收郵件時收件人的域名,換句話說,也就 CHkLinux聯盟
是你的postfix系統要接收什麼樣的郵件。比如:你的用戶的郵件地址爲[email protected], 也就是你的域爲domain.com, 則你就需要接收所有收件人爲[email protected]的郵件。與myorigin一樣,缺省地,postfix使用本地主機名作爲mydestination。如: CHkLinux聯盟
mydestination = $mydomain CHkLinux聯盟
mydestination = domain.com CHkLinux聯盟
CHkLinux聯盟
3. notify_classes CHkLinux聯盟
在postfix系統中,必須指定一個postfix系統管理員的別名指向一個用戶, CHkLinux聯盟
只有這樣,在用戶遇到問題時纔有報告的對象,postfix也才能將系統的問題報告給管理員。notify_classes參數就是用來指定向postfix管理員報告錯誤時的信息級別。共有以下幾種級別: CHkLinux聯盟
CHkLinux聯盟
bounce:將不可以投遞的郵件的拷貝發送給postfix管理員。出於個人隱私的緣故,該郵件的拷貝不包含信頭。 CHkLinux聯盟
CHkLinux聯盟
2bounce:將兩次不可投遞的郵件拷貝發送給postfix管理員。 CHkLinux聯盟
CHkLinux聯盟
delay:將郵件的投遞延遲信息發送給管理員,僅僅包含信頭。 CHkLinux聯盟
CHkLinux聯盟
policy:將由於UCE規則限制而被拒絕的用戶請求發送給postfix管理員,包含整個SMTP會話的內容。 CHkLinux聯盟
CHkLinux聯盟
protocol:將協議的錯誤信息或用戶企圖執行不支持的命令的記錄發送給postfix管理員。同樣包含整個SMTP會話的內容。 CHkLinux聯盟
CHkLinux聯盟
resource:將由於資源錯誤而不可投遞的錯誤信息發送給postfix管理員,比如:隊列文件寫錯誤等等。 CHkLinux聯盟
CHkLinux聯盟
software:將由於軟件錯誤而導致不可投遞的錯誤信息發送給postfix管理員。 CHkLinux聯盟
CHkLinux聯盟
缺省值爲: CHkLinux聯盟
notify_classes = resource, software CHkLinux聯盟
CHkLinux聯盟
4.myhostname CHkLinux聯盟
myhostname 參數指定運行postfix郵件系統的主機的主機名。缺省地,該值被設定爲本地機器名。你也可以指定該值,需要注意的是,要指定完整的主機名。如: CHkLinux聯盟
myhostname = mail.domain.com CHkLinux聯盟
CHkLinux聯盟
5.mydomain CHkLinux聯盟
mydomain參數指定你的域名,缺省地,postfix將myhostname的第一部分刪除而作爲mydomain的值。你也可以自己指定該值,如: CHkLinux聯盟
mydomain = domain.com CHkLinux聯盟
CHkLinux聯盟
6.mynetworks CHkLinux聯盟
mynetworks 參數指定你所在的網絡的網絡地址,postfix系統根據其值來區別用戶是遠程的還是本地的,如果是本地網絡用戶則允許其訪問。你可以用標準的A、B、C類網絡地址,也可以用CIDR(無類域間路由)地址來表示,如: CHkLinux聯盟
192.168.1.0/24 CHkLinux聯盟
192.168.1.0/26 CHkLinux聯盟
CHkLinux聯盟
7.inet_interfaces CHkLinux聯盟
inet_interfaces 參數指定postfix系統監聽的網絡接口。缺省地,postfix監聽 CHkLinux聯盟
所有的網絡接口。如果你的postfix運行在一個虛擬的ip地址上,則必須指定其監聽的地址。如: CHkLinux聯盟
inet_interfaces = all CHkLinux聯盟
inet_interface = 192.168.1.1 CHkLinux聯盟
CHkLinux聯盟
4.3 postfix的UCE(unsolicited commercial email)控制 CHkLinux聯盟
所謂UCE控制就是指控制postfix接收或轉發來自於什麼地方的郵件。 CHkLinux聯盟
CHkLinux聯盟
缺省地,postfix轉發符合以下條件的郵件: CHkLinux聯盟
* 來自客戶端ip地址符合$mynetworks的郵件。 CHkLinux聯盟
* 來自客戶端主機名符合$relay_domains及其子域的郵件。 CHkLinux聯盟
* 目的地爲$relay_domains及其子域的郵件。 CHkLinux聯盟
CHkLinux聯盟
缺省地,postfix接受符合以下條件的郵件: CHkLinux聯盟
* 目的地爲$inet_interfaces的郵件。 CHkLinux聯盟
* 目的地爲$mydestination的郵件。 CHkLinux聯盟
* 目的地爲$virtual_maps的郵件。 CHkLinux聯盟
但是我們也可以通過下面的規則來實現更強大的控制功能。 CHkLinux聯盟
CHkLinux聯盟
1. 信頭過濾 CHkLinux聯盟
通過header_checks參數限制接收郵件的信頭的格式,如果符合指定的格式,則拒絕接收該郵件。可以指定一個或多個查詢列表,如果新郵件的信頭符合列表中的某一項則拒絕該接收郵件。如: CHkLinux聯盟
header_checks = regexp:/etc/postfix/header_checks CHkLinux聯盟
header_checks = pcre:/etc/postfix/header_checks CHkLinux聯盟
缺省地,postfix不進行信頭過濾。 CHkLinux聯盟
CHkLinux聯盟
2.客戶端主機名/地址限制 CHkLinux聯盟
通過smtpd_client_restrictions參數限制可以向postfix發起SMTP 連接的客戶端的主機名或ip地址。可以指定一個或多個參數值,中間用逗號隔開。限制規則是按照查詢的順序進行的,第一條符合條件的規則被執行。可用的規則有: CHkLinux聯盟
CHkLinux聯盟
reject_unknown_client: 如果客戶端的ip地址在DNS中沒有PTR記錄則拒絕轉發該客戶端的連接請求。可以用unknown_client_reject_code參數指定返回 給客戶機的錯誤代碼(缺省爲450)。如果你有用戶沒有作DNS記錄則不要啓用該選項。 CHkLinux聯盟
CHkLinux聯盟
permit_mynetworks:如果客戶端的ip地址符合$mynetworks參數定義的範圍則接受該客戶端的連接請求,並轉發該郵件。 CHkLinux聯盟
CHkLinux聯盟
check_client_access maptype:mapname:根據客戶端的主機名、父域名、ip地址或屬於的網絡搜索access數據庫。如果搜索的結果爲REJECT 或者 "[45]XX text" 則拒絕該客戶端的連接請求;如果搜索的結果爲OK、RELAY 或數字則接受該客戶端的連接請求,並轉發該郵件。。可以用access_map_reject_code參數指定返回給客戶機的錯誤代碼(缺省爲 554)。 CHkLinux聯盟
CHkLinux聯盟
reject_maps_rbl:如果客戶端的網絡地址符合$maps_rbl_domains參數的值則拒絕該客戶端的連接請求。可以用maps_rbl_reject_code參數指定返回給客戶機的錯誤代碼(缺省爲554)。 CHkLinux聯盟
CHkLinux聯盟
示例: CHkLinux聯盟
smtpd_client_restrictions = hash:/etc/postfix/access, reject_maps_rbl CHkLinux聯盟
smtpd_client_restrictions = permit_mynetworks, reject_unknown_client CHkLinux聯盟
該參數的缺省值爲: CHkLinux聯盟
smtpd_client_restrictions = CHkLinux聯盟
也即接收來自任何客戶端的SMTP連接。 CHkLinux聯盟
CHkLinux聯盟
3. 是否請求HELO命令 CHkLinux聯盟
可以通過smtpd_helo_required參數指定客戶端在SMTP會話的開始是否發 CHkLinux聯盟
送一個HELO命令。你可以指定該參數的值爲yes或no。缺省值爲: CHkLinux聯盟
smtpd_helo_required = no CHkLinux聯盟
CHkLinux聯盟
4. HELO主機名限制 CHkLinux聯盟
可以通過smtpd_helo_restrictions參數指定客戶端在執行HELO命令時發送 CHkLinux聯盟
給postfix的主機名。缺省地,postfix接收客戶端發送的任意形式的主機名。可以指定一個或多個參數值,中間用逗號隔開。限制規則是按照查詢的順序進行的,第一條符合條件的規則被執行。可用的規則有: CHkLinux聯盟
reject_invalid_hostname:如果HELO命令所帶的主機名參數不符合語法規範則拒絕客戶機的連接請求。可以用invalid_hostname_reject_code參數指定返回給客戶機的錯誤代碼(缺省爲501)。 CHkLinux聯盟
CHkLinux聯盟
permit_naked_ip_address:RFC要求客戶端的HELO命令包含的ip地址放在方括號內,你可以用permit_naked_ip_address參數取消該限制。因爲有的mail客戶端不遵守該RFC的規定。 CHkLinux聯盟
CHkLinux聯盟
reject_unknown_hostname: 如果客戶端執行HELO命令時的主機名在DNS中沒有相應的A 或 MX 記錄則拒絕該客戶端的連接請求。可以用invalid_hostname_reject_code參數指定返回給客戶機的錯誤代碼(缺省爲450)。 CHkLinux聯盟
CHkLinux聯盟
reject_non_fqdn_hostname:如果客戶端執行HELO命令時的主機名不是RFC規定的完整的域名則拒絕客戶端的連接請求。可以用invalid_hostname_reject_code參數指定返回給客戶機的錯誤代碼(缺省爲504)。 CHkLinux聯盟
CHkLinux聯盟
check_helo_access maptype:mapname:根據客戶端HELO的主機名、父域名搜索access數據庫。如果搜索的結果爲REJECT 或者 "[45]XX text" 則拒絕該客戶端的連接請求;如果搜索的結果爲OK、RELAY 或數字則接受該客戶端的連接請求。可以用access_map_reject_code參數指定返回給客戶機的錯誤代碼(缺省爲554)。 CHkLinux聯盟
CHkLinux聯盟
示例: CHkLinux聯盟
smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname CHkLinux聯盟
CHkLinux聯盟
5. RFC 821信頭限制 CHkLinux聯盟
RFC 821對郵件的信頭做了嚴格的規定,但是廣泛使用的sendmail並不支 CHkLinux聯盟
持該規定,所以對於該參數我們只能說不,即: CHkLinux聯盟
strict_rfc821_envelopes = no CHkLinux聯盟
CHkLinux聯盟
6. 通過發件人地址進行限制 CHkLinux聯盟
可以用smtpd_sender_restrictions參數通過發件人在執行MAIL FROM命令時提供的地址進行限制。可以指定一個或多個參數值,中間用逗號隔開。限制規則是按照查詢的順序進行的,第一條符合條件的規則被執行。可用的規則有: CHkLinux聯盟
CHkLinux聯盟
reject_unknown_sender_domain: 如果MAIL FROM命令提供的主機名在DNS中沒有相應的A 或 MX 記錄則拒絕該客戶端的連接請求。可以用unknown_address_reject_code參數指定返回給客戶機的錯誤代碼(缺省爲450)。 CHkLinux聯盟
CHkLinux聯盟
check_sender_access maptype:mapname:根據MAIL FROM命令提供的主機名、父域搜索access數據庫。如果搜索的結果爲REJECT 或者 "[45]XX text" 則拒絕該客戶端的連接請求;如果搜索的結果爲OK、RELAY 或數字則接受該客戶端的連接請求。可以用access_map_reject_code參數指定返回給客戶機的錯誤代碼(缺省爲554)。可以通過該參數 過濾來自某些不受歡迎的發件人的郵件。 CHkLinux聯盟
CHkLinux聯盟
reject_non_fqdn_sender:如果MAIL FROM命令提供的主機名不是RFC規定的完整的域名則拒絕客戶端的連接請求。可以用non_fqdn_reject_code 參數指定返回給客戶機的錯誤代碼(缺省爲504)。 CHkLinux聯盟
缺省地,postfix接受來自任何發件人的郵件。 CHkLinux聯盟
示例: CHkLinux聯盟
smtpd_sender_restrictions = hash:/etc/postfix/access, reject_unknown_sender_domain CHkLinux聯盟
CHkLinux聯盟
7. 通過收件人地址進行過濾 CHkLinux聯盟
可以用smtpd_recipient_restrictions參數通過發件人在執行RCPT TO命令 CHkLinux聯盟
時提供的地址進行限制。缺省值爲: CHkLinux聯盟
smtpd_recipient_restrictions = permit_mynetworks, check_relay_domains CHkLinux聯盟
可以指定一個或多個參數值,中間用逗號隔開。限制規則是按照查詢的順序 CHkLinux聯盟
進行的,第一條符合條件的規則被執行。可用的規則有: CHkLinux聯盟
CHkLinux聯盟
check_relay_domains:如果符合以下的條件,則接受SMTP連接請求,否則拒絕該連接,可以用relay_domains_reject_code 參數指定返回給客戶機的錯誤代碼(缺省爲504)。 CHkLinux聯盟
* 客戶端主機名符合$relay_domains及其子域 CHkLinux聯盟
* 目的地爲$inet_interfaces、$mydestination或$virtual_maps CHkLinux聯盟
CHkLinux聯盟
permit_auth_destination:不管客戶端的主機名,只要符合以下的條件,就 CHkLinux聯盟
接受SMTP連接請求: CHkLinux聯盟
* 解析後的目標地址符合$relay_domains及其子域 CHkLinux聯盟
* 解析後的目標地址符合$inet_interfaces、$mydestination或$virtual_maps CHkLinux聯盟
CHkLinux聯盟
reject_unauth_destination:不管客戶端的主機名,只要符合以下的條件, CHkLinux聯盟
就拒絕該客戶端SMTP連接請求: CHkLinux聯盟
* 解析後的目標地址符合$relay_domains及其子域 CHkLinux聯盟
* 解析後的目標地址符合$inet_interfaces、$mydestination或$virtual_maps CHkLinux聯盟
CHkLinux聯盟
check_recipient_access: 根據解析後的目標地址、父域搜索access數據庫。如果搜索的結果爲REJECT 或者 "[45]XX text" 則拒絕該客戶端的連接請求;如果搜索的結果爲OK、RELAY 或數字則接受該客戶端的連接請求。可以用access_map_reject_code參數指定返回給客戶機的錯誤代碼(缺省爲554)。 CHkLinux聯盟
CHkLinux聯盟
reject_unknown_recipient_domain: 如果收件人的郵件地址在DNS中沒有相應的A 或 MX 記錄則拒絕該客戶端的連接請求。可以用unknown_address_reject_code參數指定返回給客戶機的錯誤代碼(缺省爲450)。 CHkLinux聯盟
CHkLinux聯盟
reject_non_fqdn_recipient:如果發件人在執行RCPT TO命令時提供的地址 CHkLinux聯盟
不是完整的域名則拒絕其SMTP連接請求。可以用The non_fqdn_reject_code參數指定返回給客戶機的錯誤代碼(缺省爲504)。 CHkLinux聯盟
CHkLinux聯盟
4.4 posftfix的性能控制 CHkLinux聯盟
之 所以對postfix的性能進行控制,是爲了在遇到郵件風暴時保證postfix可以正常運行。通常,我們可以通過對下列postfix參數的配置來調節 postfix的性能,這些參數都是通過mail.cf配置文件進行配置的,修改以後不要忘了運行postfix reload命令來使配置生效。 CHkLinux聯盟
CHkLinux聯盟
1. 進程數限制 CHkLinux聯盟
可以通過default_process_limit 參數來控制postfix系統同時可以運行的最 CHkLinux聯盟
大進程數目。缺省值是50個。 CHkLinux聯盟
CHkLinux聯盟
2. 對同一目標主機的併發連接限制 CHkLinux聯盟
當向同一目標主機發出SMTP連接時,postfix初始化發出兩個SMTP連接, CHkLinux聯盟
如果投遞成功則增加併發的SMTP連接數目,遇到擁塞時又減少併發連接的數目。postfix中通過以下的參數對同一目標主機的併發連接進行控制: CHkLinux聯盟
* initial_destination_concurrency:控制對同一目標主機的初始化併發連接數目。缺省值爲2。 CHkLinux聯盟
* default_destination_concurrency_limit:控制初始化連接後對同一目標主機的最大併發連接數目。缺省值爲10。 CHkLinux聯盟
* local_destination_concurrency_limit:控制對同一本地收件人的最大同時投遞的郵件數目。缺省值爲2,因爲對本地同一收件人投遞郵件時投遞工作只能一個接一個的進行,所以設得在大也沒用。 CHkLinux聯盟
CHkLinux聯盟
3. 對同一封郵件的收件人數目限制 CHkLinux聯盟
通過default_destination_recipient_limit參數來控制postfix的投遞代理(如 CHkLinux聯盟
smtp進程)可以將同一封郵件發送給多少個收件人。缺省值爲50。也可以用明確指出該投遞代理的參數來覆蓋該缺省值。如用smtpd_recipient_limit來指定smtp投遞代理可以將同一封郵件發送給多少個收件人,該參數的缺省值爲1000。 CHkLinux聯盟
CHkLinux聯盟
4. 推遲投遞控制 CHkLinux聯盟
通過defer_transports參數,我們可以推遲投遞該參數指定的郵件直到postfix明確的提出投遞要求。下面我們看一個例子: CHkLinux聯盟
有一個小型的局域網,用戶都將郵件發送給局域網內燦始�系統postfix安裝與配置 CHkLinux聯盟
一、 postfix概述 CHkLinux聯盟
postfix是Wietse Venema在IBM的GPL協議之下開發的MTA(郵件傳輸 CHkLinux聯盟
代理)軟件。下面一段話摘自postfix的官方站點(http://www.postfix.org): CHkLinux聯盟
“postfix 是Wietse Venema想要爲使用最廣泛的sendmail提供替代品的一個嘗試。在Internet世界中,大部分的電子郵件都是通過sendmail來投遞的, 大約有100萬用戶使用sendmail,每天投遞上億封郵件。這真實一個讓人吃驚的數字。Postfix試圖更快、更容易管理、更安全,同時還與 sendmail保持足夠的兼容性。” CHkLinux聯盟
CHkLinux聯盟
1.1 postfix的特點 CHkLinux聯盟
1. postfix是免費的: CHkLinux聯盟
postfix想要作用的範圍是廣大的Internet用戶,試圖影響大多數的Internet上的電子郵件系統,因此它是免費的。 CHkLinux聯盟
2. 更快: CHkLinux聯盟
postfix在性能上大約比sendmail快三倍。一部運行postfix的臺式PC每天可以收發上百萬封郵件。 CHkLinux聯盟
3. 兼容性好: CHkLinux聯盟
postfix是sendmail兼容的,從而使sendmail用戶可以很方便地遷移到postfix。Postfix支持/var[/spool]/mail、/etc/aliases、 NIS、和 ~/.forward 文件。 CHkLinux聯盟
4. 更健壯: CHkLinux聯盟
postfix被設計成在重負荷之下仍然可以正常工作。當系統運行超出了可用的內存或磁盤空間時,postfix會自動減少運行進程的數目。當處理的郵件數目增長時,postfix運行的進程不會跟着增加。 CHkLinux聯盟
5. 更靈活: CHkLinux聯盟
postfix是由超過一打的小程序組成的,每個程序完成特定的功能。你可以 CHkLinux聯盟
通過配置文件設置每個程序的運行參數。 CHkLinux聯盟
6. 安全性 CHkLinux聯盟
postfix具有多層防禦結構,可以有效地抵禦惡意入侵者。如大多數的postfix程序可以運行在較低的權限之下,不可以通過網絡訪問安全性相關的本地投遞程序等等。 CHkLinux聯盟
CHkLinux聯盟
1.2 postfix的總體結構 CHkLinux聯盟
postfix由十幾個具有不同功能的半駐留進程組成,並且在這些進程中並無特定的進程間父子關係。某一個特定的進程可以爲其他進程提供特定的服務。 CHkLinux聯盟
大多數的postfix進程由一個進程統一進行管理,該進程負責在需要的時候調用其他進程,這個管理進程就是master進程。該進程也是一個後臺程序。 CHkLinux聯盟
這些postfix進程是可以配置的,我們可以配置每個進程運行的數目,可重用的次數,生存的時間等等。通過靈活的配置特性可以使整個系統的運行成本大大降低。 CHkLinux聯盟
CHkLinux聯盟
CHkLinux聯盟
1.2.1 postfix的郵件隊列(mail queues) CHkLinux聯盟
postfix有四種不同的郵件隊列,並且由隊列管理進程統一進行管理: CHkLinux聯盟
1. maildrop:本地郵件放置在maildrop中,同時也被拷貝到incoming中。 CHkLinux聯盟
2. incoming:放置正在到達或隊列管理進程尚未發現的郵件。 CHkLinux聯盟
3. active:放置隊列管理進程已經打開了並正準備投遞的郵件,該隊列有 CHkLinux聯盟
長度的限制。 CHkLinux聯盟
4. deferred:放置不能被投遞的郵件。 CHkLinux聯盟
隊列管理進程僅僅在內存中保留active隊列,並且對該隊列的長度進行限 CHkLinux聯盟
制,這樣做的目的是爲了避免進程運行內存超過系統的可用內存。 CHkLinux聯盟
CHkLinux聯盟
1.2.2 postfix對郵件風暴的處理 CHkLinux聯盟
當 有新的郵件到達時,postfix進行初始化,初始化時postfix同時只接受兩個併發的連接請求。當郵件投遞成功後,可以同時接受的併發連接的數目就 會緩慢地增長至一個可以配置的值。當然,如果這時系統的消耗已到達系統不能承受的負載就會停止增長。還有一種情況時,如果postfix在處理郵件過程中 遇到了問題,則該值會開始降低。 CHkLinux聯盟
當接收到的新郵件的數量超過postfix的投遞能力時,postfix會暫時停止投遞deferred隊列中的郵件而去處理新接收到的郵件。這是因爲處理新郵件的延遲要小於處理deferred隊列中的郵件。Postfix會在空閒時處理deferred中的郵件。 CHkLinux聯盟
CHkLinux聯盟
1.2.3 postfix對無法投遞的郵件的處理 CHkLinux聯盟
當 一封郵件第一次不能成功投遞時,postfix會給該郵件貼上一個將來的時間郵票。郵件隊列管理程序會忽略貼有將來時間郵票的郵件。時間郵票到期時, postfix會嘗試再對該郵件進行一次投遞,如果這次投遞再次失敗,postfix就給該郵件貼上一個兩倍於上次時間郵票的時間郵票,等時間郵票到期時 再次進行投遞,依此類推。當然,經過一定次數的嘗試之後,postfix會放棄對該郵件的投遞,返回一個錯誤信息給該郵件的發件人。 CHkLinux聯盟
CHkLinux聯盟
1.2.4 postfix對不可到達的目的地郵件的處理 CHkLinux聯盟
postfix會在內存中保存一個有長度限制的當前不可到達的地址列表。這樣就避免了對那些目的地爲當前不可到達地址的郵件的投遞嘗試。從而大大提高了系統的性能。 CHkLinux聯盟
CHkLinux聯盟
1.2.2 postfix的安全性 CHkLinux聯盟
postfix通過一系列的措施來提高系統的安全性,這些措施包括: CHkLinux聯盟
1. 動態分配內存,從而防止系統緩衝區溢出; CHkLinux聯盟
2. 把大郵件分割成幾塊進行處理,投遞時再重組; CHkLinux聯盟
3. Postfix的各種進程不在其他用戶進程的控制之下運行,而是運行在駐留 CHkLinux聯盟
主進程master的控制之下,與其他用戶進程無父子關係,所有有很好的 CHkLinux聯盟
絕緣性。 CHkLinux聯盟
4. Postfix的隊列文件有其特殊的格式,只能被postfix本身識別; CHkLinux聯盟
CHkLinux聯盟
二、 postfix對郵件的處理過程 CHkLinux聯盟
2.1 接收郵件的過程 CHkLinux聯盟
CHkLinux聯盟
圖二、postfix對接收郵件的處理 CHkLinux聯盟
CHkLinux聯盟
當postfix接收到一封新郵件時,新郵件首選在incoming隊列處停留,然後針對不同的情況進行不同的處理: CHkLinux聯盟
1.對於來自於本地的郵件:sendmail進程負責接收來自本地的郵件放在maildrop隊列中,然後pickup進程對maildrop中的郵件進行完整性檢測。maildrop目錄的權限必須設置爲某一用戶不能刪除其他用戶的郵件。 CHkLinux聯盟
2.對於來自於網絡的郵件:smtpd進程負責接收來自於網絡的郵件,並且進行安全性檢測。可以通過UCE(unsolicited commercial email)控制smtpd的行爲。 CHkLinux聯盟
3.由postfix進程產生的郵件:這是爲了將不可投遞的信息返回給發件人。這些郵件是由bounce後臺程序產生的。 CHkLinux聯盟
5. 由postfix自己產生的郵件:提示postmaster(也即postfix管理員)postfix CHkLinux聯盟
運行過程中出現的問題。(如SMTP協議問題,違反UCE規則的記錄等等。) CHkLinux聯盟
CHkLinux聯盟
關於cleanup後臺程序的說明:cleanup是對新郵件進行處理的最後一道工序 CHkLinux聯盟
它對新郵件進行以下的處理:添加信頭中丟失的Form信息;爲將地址重寫成標準的[email protected]in格式進行排列;重信頭中抽出收件人的地址;將郵件投入incoming隊列中,並請求郵件隊列管理進程處理該郵件;請求trivial-rewrite進程將地址轉換成標準的[email protected]in格式。 CHkLinux聯盟
CHkLinux聯盟
2.2 投遞郵件的過程 CHkLinux聯盟
新郵件一旦到達incoming隊列,下一步就是開始投遞郵件,postfix投遞郵件時的處理過程如圖三所示。相關的說明如下: CHkLinux聯盟
郵 件隊列管理進程是整個postfix郵件系統的心臟。它和local、smtp、pipe等投遞代理相聯繫,將包含有隊列文件路徑信息、郵件發件人地址、 郵件收件人地址的投遞請求發送給投遞代理。隊列管理進程維護着一個deferred隊列,那些無法投遞的郵件被投遞到該隊列中。除此之外,隊列管理進程還 維護着一個active隊列,該隊列中的郵件數目是有限制的,這是爲了防止在負載太大時內存溢出。郵件隊列管理程序還負責將收件人地址在 relocated表中列出的郵件返回給發件人,該表包含無效的收件人地址。 CHkLinux聯盟
CHkLinux聯盟
CHkLinux聯盟
如果郵件隊列管理進程請求,rewrite後臺程序對收件人地址進行解析。但是缺省地,rewrite只對郵件收件人是本地的還是遠程的進行區別。 CHkLinux聯盟
如果郵件對你管理進程請求,bounce後臺程序可以生成一個郵件不可投遞的報告。 CHkLinux聯盟
本 地投遞代理local進程可以理解類似UNIX風格的郵箱,sendmail風格的系統別名數據庫和sendmail風格的.forward文件。可以同 時運行多個local進程,但是對同一個用戶的併發投遞進程數目是有限制的。你可以配置local將郵件投遞到用戶的宿主目錄,也可以配置local將郵 件發送給一個外部命令,如流行的本地投遞代理procmail。在流行的linux發行版本RedHat中,我們就使用procmail作爲最終的本地投 遞代理。 CHkLinux聯盟
遠程投遞代理SMTP進程根據收件人地址查詢一個SMTP服務器列表,按照順序連接每一個SMTP服務器,根據性能對該表進行排序。在系統負載太大時,可以有數個併發的SMTP進程同時運行。 CHkLinux聯盟
pipe是用於UUCP協議的投遞代理。 CHkLinux聯盟
CHkLinux聯盟
三、 postfix的安裝過程 CHkLinux聯盟
3.1源代碼包的安裝 CHkLinux聯盟
1. 獲取postfix的源代碼包 CHkLinux聯盟
從postfix官方站點www.postfix.org取得postfix的源代碼包postfix-19991231-pl08.tar.gz。將其拷貝到/tmp CHkLinux聯盟
2.解開源代碼包,將生成/tmp/ postfix-19991231-pl08目錄。 CHkLinux聯盟
tar xvzf postfix-19991231-pl08.tar.gz CHkLinux聯盟
3.編譯源代碼包 CHkLinux聯盟
cd /tmp/ postfix-19991231-pl08 CHkLinux聯盟
make CHkLinux聯盟
4. 建立一個新用戶“postfix”,該用戶必須具有唯一的用戶id和組id號,同時應該讓該用戶不能登錄到系統,也即不爲該用戶指定可執行的登錄外殼程序 和可用的用戶宿主目錄。我們可以先用adduser postfix 添加用戶再編輯/etc/passwd文件中的相關條目如下所示: CHkLinux聯盟
postfix:*:12345:12345:postfix:/no/where:/no/shell CHkLinux聯盟
5.確定/etc/aliases文件中包含如下的條目: CHkLinux聯盟
postfix: root CHkLinux聯盟
6. 以root用戶登錄,在/tmp/ postfix-19991231-pl08目錄下執行命令: CHkLinux聯盟
./INSTALL.sh CHkLinux聯盟
7. 啓動postfix CHkLinux聯盟
# postfix start CHkLinux聯盟
8.關於maildrop目錄權限的說明: CHkLinux聯盟
postfix可以使用一個所有用戶都可寫的(也即目錄權限爲1773)的maildrop CHkLinux聯盟
目 錄來讓本地用戶提交郵件。這種方法避免了使用set-uid 或 set-gid 軟件,並且在郵件系統不可用時,用戶仍然可以提交郵件。其他用戶沒有訪問該目錄中的隊列文件的權限。接收來自網絡的郵件時postfix不使用 maildrop目錄。但是,由於該目錄的權限是733,其他用戶可以建立一個硬連接到該目錄中的文件從而導致該郵件被投遞多次或無法刪除,也就是說這將 導致安全性問題。如果你想要使用這種方式來讓用戶提交郵件,就要在INSTALL.sh 腳本問你是否需要set-gid 時回答no。 CHkLinux聯盟
如果你的系統有多個用戶的話,最好取消以上的方式而採用利用set-gid 用 CHkLinux聯盟
戶權限提交郵件的方式。這時,我們首先需要建立一個組id唯一的組"maildrop" 並且確定該組中沒有用戶成員。然後在INSTALL.sh 問你是否需要set-gid 時指定"maildrop"。 CHkLinux聯盟
提示:在安裝postfix之前,請刪除已經安裝的sendmail。 CHkLinux聯盟
CHkLinux聯盟
3.2 rpm包的安裝 CHkLinux聯盟
1. 獲取postfix的rpm軟件包。 CHkLinux聯盟
我們可以從http://www.alltrading.es/postfix/RPMS/i386/ 獲得postfix的rpm軟件包。當前的最新版本是postfix-20000531-2.i386.rpm。 CHkLinux聯盟
2. 備份你的/etc/aliases和/etc/aliases.db,因爲postfix要使用該別名數據庫。 CHkLinux聯盟
3. 用以下命令查看系統是否安裝了sendmail: CHkLinux聯盟
[root@mail /root]# rpm -qa │grep sendmail CHkLinux聯盟
sendmail-doc-8.9.3-15 CHkLinux聯盟
sendmail-8.9.3-15 CHkLinux聯盟
sendmail-cf-8.9.3-15 CHkLinux聯盟
4. 用以下命令強行卸載sendmail: CHkLinux聯盟
[root@mail /root]# rpm -e sendmail sendmail-cf sendmail-doc --nodeps CHkLinux聯盟
5. 用以下命令殺死運行中的sendmail進程: CHkLinux聯盟
[root@mail /root]# killall sendmail CHkLinux聯盟
6. 安裝postfix: CHkLinux聯盟
[root@mail /root]# rpm -Uvh postfix-20000531-2.i386.rpm CHkLinux聯盟
postfix ################################################## CHkLinux聯盟
postfix-script: warning: creating missing Postfix pid directory CHkLinux聯盟
postfix-script: warning: creating missing Postfix incoming directory CHkLinux聯盟
postfix-script: warning: creating missing Postfix active directory CHkLinux聯盟
postfix-script: warning: creating missing Postfix bounce directory CHkLinux聯盟
postfix-script: warning: creating missing Postfix defer directory CHkLinux聯盟
postfix-script: warning: creating missing Postfix deferred directory CHkLinux聯盟
postfix-script: warning: creating missing Postfix saved directory CHkLinux聯盟
postfix-script: warning: creating missing Postfix corrupt directory CHkLinux聯盟
postfix-script: warning: creating missing Postfix public directory CHkLinux聯盟
postfix-script: warning: creating missing Postfix private directory CHkLinux聯盟
[root@mail /root]# CHkLinux聯盟
7. 啓動postfix CHkLinux聯盟
[root@mail /root]# /etc/rc.d/init.d/postfix start CHkLinux聯盟
CHkLinux聯盟
3.3 配置系統每次啓動時自動啓動postfix CHkLinux聯盟
1.如果你安裝的是postfix的源代碼包,可以在/etc/rc.d/rc.local文件中加入如下的語句讓系統每次啓動時自動啓動postfix: CHkLinux聯盟
if [ -f /usr/libexec/postfix ]; then CHkLinux聯盟
/usr/libexec/postfix start CHkLinux聯盟
fi CHkLinux聯盟
2.如果你安裝的是postfix的rpm包,可以通過setup命令來設置在系統啓動時啓動postfix。 CHkLinux聯盟
四、 postfix的配置詳解 CHkLinux聯盟
4.1 postfix的配置文件結構 CHkLinux聯盟
postfix的配置文件位於/etc/postfix下,安裝完postfix以後,我們可以通過ls命令查看postfix的配置文件: CHkLinux聯盟
[root@mail postfix]# ls CHkLinux聯盟
install.cf main.cf master.cf postfix-script CHkLinux聯盟
CHkLinux聯盟
這四個文件就是postfix最基本的配置文件,它們的區別在於: CHkLinux聯盟
mail.cf:是postfix主要的配置文件。 CHkLinux聯盟
Install.cf:包含安裝過程中安裝程序產生的postfix初始化設置。 CHkLinux聯盟
master.cf:是postfix的master進程的配置文件,該文件中的每一行都是用來配置postfix的組件進程的運行方式。 CHkLinux聯盟
postfix-script:包裝了一些postfix命令,以便我們在linux環境中安全地執行這些postfix命令。 CHkLinux聯盟
CHkLinux聯盟
4.2 postfix的基本配置 CHkLinux聯盟
postfix大約有100個配置參數,這些參數都可以通過main.cf 指定。配置的格式是這樣的,用等號連接參數和參數的值。如: CHkLinux聯盟
myhostname = mail.mydomain.com CHkLinux聯盟
等號的左邊是參數的名稱,等號的右邊是參數的值; 當然,我們也可以在參數的前面加上$來引用該參數,如: CHkLinux聯盟
myorigin = $myhostname CHkLinux聯盟
雖 然postfix有100個左右的參數,但是postfix爲大多數的參數都設置了缺省值,所以在讓postfix正常爲你服務之前,你只需要配置爲數不 多的幾個參數。下面我們一起來看一看這些基本的postfix參數。需要注意的是,一旦你更改了main.cf文件的內容,則必須運行postfix reload命令使其生效。 CHkLinux聯盟
CHkLinux聯盟
1. myorigin CHkLinux聯盟
myorigin參數指明發件人所在的域名。如果你的用戶的郵件地址爲[email protected],則該參數指定@後面的域名。缺省地,postfix使用本地主機名作爲myorigin,但是建議你最好使用你的域名,因爲這樣更具有可讀性。比如:安裝postfix的主機爲mail.domain.com則我們可以這樣指定myorigin: CHkLinux聯盟
myorigin = domain.com CHkLinux聯盟
當然我們也可以引用其他參數,如: CHkLinux聯盟
myorigin = $mydomain CHkLinux聯盟
CHkLinux聯盟
2. mydestination CHkLinux聯盟
mydestination參數指定postfix接收郵件時收件人的域名,換句話說,也就 CHkLinux聯盟
是你的postfix系統要接收什麼樣的郵件。比如:你的用戶的郵件地址爲[email protected], 也就是你的域爲domain.com, 則你就需要接收所有收件人爲[email protected]的郵件。與myorigin一樣,缺省地,postfix使用本地主機名作爲mydestination。如: CHkLinux聯盟
mydestination = $mydomain CHkLinux聯盟
mydestination = domain.com CHkLinux聯盟
CHkLinux聯盟
3. notify_classes CHkLinux聯盟
在postfix系統中,必須指定一個postfix系統管理員的別名指向一個用戶, CHkLinux聯盟
只有這樣,在用戶遇到問題時纔有報告的對象,postfix也才能將系統的問題報告給管理員。notify_classes參數就是用來指定向postfix管理員報告錯誤時的信息級別。共有以下幾種級別: CHkLinux聯盟
CHkLinux聯盟
bounce:將不可以投遞的郵件的拷貝發送給postfix管理員。出於個人隱私的緣故,該郵件的拷貝不包含信頭。 CHkLinux聯盟
CHkLinux聯盟
2bounce:將兩次不可投遞的郵件拷貝發送給postfix管理員。 CHkLinux聯盟
CHkLinux聯盟
delay:將郵件的投遞延遲信息發送給管理員,僅僅包含信頭。 CHkLinux聯盟
CHkLinux聯盟
policy:將由於UCE規則限制而被拒絕的用戶請求發送給postfix管理員,包含整個SMTP會話的內容。 CHkLinux聯盟
CHkLinux聯盟
protocol:將協議的錯誤信息或用戶企圖執行不支持的命令的記錄發送給postfix管理員。同樣包含整個SMTP會話的內容。 CHkLinux聯盟
CHkLinux聯盟
resource:將由於資源錯誤而不可投遞的錯誤信息發送給postfix管理員,比如:隊列文件寫錯誤等等。 CHkLinux聯盟
CHkLinux聯盟
software:將由於軟件錯誤而導致不可投遞的錯誤信息發送給postfix管理員。 CHkLinux聯盟
CHkLinux聯盟
缺省值爲: CHkLinux聯盟
notify_classes = resource, software CHkLinux聯盟
CHkLinux聯盟
4.myhostname CHkLinux聯盟
myhostname 參數指定運行postfix郵件系統的主機的主機名。缺省地,該值被設定爲本地機器名。你也可以指定該值,需要注意的是,要指定完整的主機名。如: CHkLinux聯盟
myhostname = mail.domain.com CHkLinux聯盟
CHkLinux聯盟
5.mydomain CHkLinux聯盟
mydomain參數指定你的域名,缺省地,postfix將myhostname的第一部分刪除而作爲mydomain的值。你也可以自己指定該值,如: CHkLinux聯盟
mydomain = domain.com CHkLinux聯盟
CHkLinux聯盟
6.mynetworks CHkLinux聯盟
mynetworks 參數指定你所在的網絡的網絡地址,postfix系統根據其值來區別用戶是遠程的還是本地的,如果是本地網絡用戶則允許其訪問。你可以用標準的A、B、C類網絡地址,也可以用CIDR(無類域間路由)地址來表示,如: CHkLinux聯盟
192.168.1.0/24 CHkLinux聯盟
192.168.1.0/26 CHkLinux聯盟
CHkLinux聯盟
7.inet_interfaces CHkLinux聯盟
inet_interfaces 參數指定postfix系統監聽的網絡接口。缺省地,postfix監聽 CHkLinux聯盟
所有的網絡接口。如果你的postfix運行在一個虛擬的ip地址上,則必須指定其監聽的地址。如: CHkLinux聯盟
inet_interfaces = all CHkLinux聯盟
inet_interface = 192.168.1.1 CHkLinux聯盟
CHkLinux聯盟
4.3 postfix的UCE(unsolicited commercial email)控制 CHkLinux聯盟
所謂UCE控制就是指控制postfix接收或轉發來自於什麼地方的郵件。 CHkLinux聯盟
CHkLinux聯盟
缺省地,postfix轉發符合以下條件的郵件: CHkLinux聯盟
* 來自客戶端ip地址符合$mynetworks的郵件。 CHkLinux聯盟
* 來自客戶端主機名符合$relay_domains及其子域的郵件。 CHkLinux聯盟
* 目的地爲$relay_domains及其子域的郵件。 CHkLinux聯盟
CHkLinux聯盟
缺省地,postfix接受符合以下條件的郵件: CHkLinux聯盟
* 目的地爲$inet_interfaces的郵件。 CHkLinux聯盟
* 目的地爲$mydestination的郵件。 CHkLinux聯盟
* 目的地爲$virtual_maps的郵件。 CHkLinux聯盟
但是我們也可以通過下面的規則來實現更強大的控制功能。

1. 信頭過濾 CHkLinux聯盟
通過header_checks參數限制接收郵件的信頭的格式,如果符合指定的格式,則拒絕接收該郵件。可以指定一個或多個查詢列表,如果新郵件的信頭符合列表中的某一項則拒絕該接收郵件。如: CHkLinux聯盟
header_checks = regexp:/etc/postfix/header_checks CHkLinux聯盟
header_checks = pcre:/etc/postfix/header_checks CHkLinux聯盟
缺省地,postfix不進行信頭過濾。 CHkLinux聯盟
CHkLinux聯盟
2.客戶端主機名/地址限制 CHkLinux聯盟
通過smtpd_client_restrictions參數限制可以向postfix發起SMTP 連接的客戶端的主機名或ip地址。可以指定一個或多個參數值,中間用逗號隔開。限制規則是按照查詢的順序進行的,第一條符合條件的規則被執行。可用的規則有: CHkLinux聯盟
CHkLinux聯盟
reject_unknown_client: 如果客戶端的ip地址在DNS中沒有PTR記錄則拒絕轉發該客戶端的連接請求。可以用unknown_client_reject_code參數指定返回 給客戶機的錯誤代碼(缺省爲450)。如果你有用戶沒有作DNS記錄則不要啓用該選項。 CHkLinux聯盟
CHkLinux聯盟
permit_mynetworks:如果客戶端的ip地址符合$mynetworks參數定義的範圍則接受該客戶端的連接請求,並轉發該郵件。 CHkLinux聯盟
CHkLinux聯盟
check_client_access maptype:mapname:根據客戶端的主機名、父域名、ip地址或屬於的網絡搜索access數據庫。如果搜索的結果爲REJECT 或者 "[45]XX text" 則拒絕該客戶端的連接請求;如果搜索的結果爲OK、RELAY 或數字則接受該客戶端的連接請求,並轉發該郵件。。可以用access_map_reject_code參數指定返回給客戶機的錯誤代碼(缺省爲 554)。 CHkLinux聯盟
CHkLinux聯盟
reject_maps_rbl:如果客戶端的網絡地址符合$maps_rbl_domains參數的值則拒絕該客戶端的連接請求。可以用maps_rbl_reject_code參數指定返回給客戶機的錯誤代碼(缺省爲554)。 CHkLinux聯盟
CHkLinux聯盟
示例: CHkLinux聯盟
smtpd_client_restrictions = hash:/etc/postfix/access, reject_maps_rbl CHkLinux聯盟
smtpd_client_restrictions = permit_mynetworks, reject_unknown_client CHkLinux聯盟
該參數的缺省值爲: CHkLinux聯盟
smtpd_client_restrictions = CHkLinux聯盟
也即接收來自任何客戶端的SMTP連接。 CHkLinux聯盟
CHkLinux聯盟
3. 是否請求HELO命令 CHkLinux聯盟
可以通過smtpd_helo_required參數指定客戶端在SMTP會話的開始是否發 CHkLinux聯盟
送一個HELO命令。你可以指定該參數的值爲yes或no。缺省值爲: CHkLinux聯盟
smtpd_helo_required = no CHkLinux聯盟
CHkLinux聯盟
4. HELO主機名限制 CHkLinux聯盟
可以通過smtpd_helo_restrictions參數指定客戶端在執行HELO命令時發送 CHkLinux聯盟
給postfix的主機名。缺省地,postfix接收客戶端發送的任意形式的主機名。可以指定一個或多個參數值,中間用逗號隔開。限制規則是按照查詢的順序進行的,第一條符合條件的規則被執行。可用的規則有: CHkLinux聯盟
reject_invalid_hostname:如果HELO命令所帶的主機名參數不符合語法規範則拒絕客戶機的連接請求。可以用invalid_hostname_reject_code參數指定返回給客戶機的錯誤代碼(缺省爲501)。 CHkLinux聯盟
CHkLinux聯盟
permit_naked_ip_address:RFC要求客戶端的HELO命令包含的ip地址放在方括號內,你可以用permit_naked_ip_address參數取消該限制。因爲有的mail客戶端不遵守該RFC的規定。 CHkLinux聯盟
CHkLinux聯盟
reject_unknown_hostname: 如果客戶端執行HELO命令時的主機名在DNS中沒有相應的A 或 MX 記錄則拒絕該客戶端的連接請求。可以用invalid_hostname_reject_code參數指定返回給客戶機的錯誤代碼(缺省爲450)。 CHkLinux聯盟
CHkLinux聯盟
reject_non_fqdn_hostname:如果客戶端執行HELO命令時的主機名不是RFC規定的完整的域名則拒絕客戶端的連接請求。可以用invalid_hostname_reject_code參數指定返回給客戶機的錯誤代碼(缺省爲504)。 CHkLinux聯盟
CHkLinux聯盟
check_helo_access maptype:mapname:根據客戶端HELO的主機名、父域名搜索access數據庫。如果搜索的結果爲REJECT 或者 "[45]XX text" 則拒絕該客戶端的連接請求;如果搜索的結果爲OK、RELAY 或數字則接受該客戶端的連接請求。可以用access_map_reject_code參數指定返回給客戶機的錯誤代碼(缺省爲554)。 CHkLinux聯盟
CHkLinux聯盟
示例: CHkLinux聯盟
smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname CHkLinux聯盟
CHkLinux聯盟
5. RFC 821信頭限制 CHkLinux聯盟
RFC 821對郵件的信頭做了嚴格的規定,但是廣泛使用的sendmail並不支 CHkLinux聯盟
持該規定,所以對於該參數我們只能說不,即: CHkLinux聯盟
strict_rfc821_envelopes = no CHkLinux聯盟
CHkLinux聯盟
6. 通過發件人地址進行限制 CHkLinux聯盟
可以用smtpd_sender_restrictions參數通過發件人在執行MAIL FROM命令時提供的地址進行限制。可以指定一個或多個參數值,中間用逗號隔開。限制規則是按照查詢的順序進行的,第一條符合條件的規則被執行。可用的規則有: CHkLinux聯盟
CHkLinux聯盟
reject_unknown_sender_domain: 如果MAIL FROM命令提供的主機名在DNS中沒有相應的A 或 MX 記錄則拒絕該客戶端的連接請求。可以用unknown_address_reject_code參數指定返回給客戶機的錯誤代碼(缺省爲450)。 CHkLinux聯盟
CHkLinux聯盟
check_sender_access maptype:mapname:根據MAIL FROM命令提供的主機名、父域搜索access數據庫。如果搜索的結果爲REJECT 或者 "[45]XX text" 則拒絕該客戶端的連接請求;如果搜索的結果爲OK、RELAY 或數字則接受該客戶端的連接請求。可以用access_map_reject_code參數指定返回給客戶機的錯誤代碼(缺省爲554)。可以通過該參數 過濾來自某些不受歡迎的發件人的郵件。 CHkLinux聯盟
CHkLinux聯盟
reject_non_fqdn_sender:如果MAIL FROM命令提供的主機名不是RFC規定的完整的域名則拒絕客戶端的連接請求。可以用non_fqdn_reject_code 參數指定返回給客戶機的錯誤代碼(缺省爲504)。 CHkLinux聯盟
缺省地,postfix接受來自任何發件人的郵件。 CHkLinux聯盟
示例: CHkLinux聯盟
smtpd_sender_restrictions = hash:/etc/postfix/access, reject_unknown_sender_domain CHkLinux聯盟
CHkLinux聯盟
7. 通過收件人地址進行過濾 CHkLinux聯盟
可以用smtpd_recipient_restrictions參數通過發件人在執行RCPT TO命令 CHkLinux聯盟
時提供的地址進行限制。缺省值爲: CHkLinux聯盟
smtpd_recipient_restrictions = permit_mynetworks, check_relay_domains CHkLinux聯盟
可以指定一個或多個參數值,中間用逗號隔開。限制規則是按照查詢的順序 CHkLinux聯盟
進行的,第一條符合條件的規則被執行。可用的規則有: CHkLinux聯盟
CHkLinux聯盟
check_relay_domains:如果符合以下的條件,則接受SMTP連接請求,否則拒絕該連接,可以用relay_domains_reject_code 參數指定返回給客戶機的錯誤代碼(缺省爲504)。 CHkLinux聯盟
* 客戶端主機名符合$relay_domains及其子域 CHkLinux聯盟
* 目的地爲$inet_interfaces、$mydestination或$virtual_maps CHkLinux聯盟
CHkLinux聯盟
permit_auth_destination:不管客戶端的主機名,只要符合以下的條件,就 CHkLinux聯盟
接受SMTP連接請求: CHkLinux聯盟
* 解析後的目標地址符合$relay_domains及其子域 CHkLinux聯盟
* 解析後的目標地址符合$inet_interfaces、$mydestination或$virtual_maps CHkLinux聯盟
CHkLinux聯盟
reject_unauth_destination:不管客戶端的主機名,只要符合以下的條件, CHkLinux聯盟
就拒絕該客戶端SMTP連接請求: CHkLinux聯盟
* 解析後的目標地址符合$relay_domains及其子域 CHkLinux聯盟
* 解析後的目標地址符合$inet_interfaces、$mydestination或$virtual_maps CHkLinux聯盟
CHkLinux聯盟
check_recipient_access: 根據解析後的目標地址、父域搜索access數據庫。如果搜索的結果爲REJECT 或者 "[45]XX text" 則拒絕該客戶端的連接請求;如果搜索的結果爲OK、RELAY 或數字則接受該客戶端的連接請求。可以用access_map_reject_code參數指定返回給客戶機的錯誤代碼(缺省爲554)。 CHkLinux聯盟
CHkLinux聯盟
reject_unknown_recipient_domain: 如果收件人的郵件地址在DNS中沒有相應的A 或 MX 記錄則拒絕該客戶端的連接請求。可以用unknown_address_reject_code參數指定返回給客戶機的錯誤代碼(缺省爲450)。 CHkLinux聯盟
CHkLinux聯盟
reject_non_fqdn_recipient:如果發件人在執行RCPT TO命令時提供的地址 CHkLinux聯盟
不是完整的域名則拒絕其SMTP連接請求。可以用The non_fqdn_reject_code參數指定返回給客戶機的錯誤代碼(缺省爲504)。 CHkLinux聯盟
CHkLinux聯盟
4.4 posftfix的性能控制 CHkLinux聯盟
之 所以對postfix的性能進行控制,是爲了在遇到郵件風暴時保證postfix可以正常運行。通常,我們可以通過對下列postfix參數的配置來調節 postfix的性能,這些參數都是通過mail.cf配置文件進行配置的,修改以後不要忘了運行postfix reload命令來使配置生效。 CHkLinux聯盟
CHkLinux聯盟
1. 進程數限制 CHkLinux聯盟
可以通過default_process_limit 參數來控制postfix系統同時可以運行的最 CHkLinux聯盟
大進程數目。缺省值是50個。 CHkLinux聯盟
CHkLinux聯盟
2. 對同一目標主機的併發連接限制 CHkLinux聯盟
當向同一目標主機發出SMTP連接時,postfix初始化發出兩個SMTP連接, CHkLinux聯盟
如果投遞成功則增加併發的SMTP連接數目,遇到擁塞時又減少併發連接的數目。postfix中通過以下的參數對同一目標主機的併發連接進行控制: CHkLinux聯盟
* initial_destination_concurrency:控制對同一目標主機的初始化併發連接數目。缺省值爲2。 CHkLinux聯盟
* default_destination_concurrency_limit:控制初始化連接後對同一目標主機的最大併發連接數目。缺省值爲10。 CHkLinux聯盟
* local_destination_concurrency_limit:控制對同一本地收件人的最大同時投遞的郵件數目。缺省值爲2,因爲對本地同一收件人投遞郵件時投遞工作只能一個接一個的進行,所以設得在大也沒用。 CHkLinux聯盟
CHkLinux聯盟
3. 對同一封郵件的收件人數目限制 CHkLinux聯盟
通過default_destination_recipient_limit參數來控制postfix的投遞代理(如 CHkLinux聯盟
smtp進程)可以將同一封郵件發送給多少個收件人。缺省值爲50。也可以用明確指出該投遞代理的參數來覆蓋該缺省值。如用smtpd_recipient_limit來指定smtp投遞代理可以將同一封郵件發送給多少個收件人,該參數的缺省值爲1000。 CHkLinux聯盟
CHkLinux聯盟
4. 推遲投遞控制 CHkLinux聯盟
通過defer_transports參數,我們可以推遲投遞該參數指定的郵件直到postfix明確的提出投遞要求。下面我們看一個例子: CHkLinux聯盟
有一個小型的局域網,用戶都將郵件發送給局域網內部的一臺postfix CHkLinux聯盟
郵件服務器,然後通過在該服務器上撥號將郵件發送出去。這時我們可以這樣指定該參數的值: CHkLinux聯盟
defer_transports = smtp CHkLinux聯盟
該語句表示postfix推遲投遞所有的郵件直到執行sendmail -q命令,這樣 CHkLinux聯盟
我們就可以在ppp的腳本中加上sendmail -q,以便在撥號成功後讓postfix開始投遞郵件。 CHkLinux聯盟
CHkLinux聯盟
CHkLinux聯盟
5. 關於延遲郵件的再投遞控制 CHkLinux聯盟
可以通過以下的幾個參數實現對延遲郵件的再投遞控制: CHkLinux聯盟
queue_run_delay:設置隊列管理進行掃描deferred郵件隊列的頻率,缺省值爲1000秒。 CHkLinux聯盟
maximal_queue_lifetime:設置postfix在放棄投遞而返回不可投遞信息前,被延遲郵件再deferred郵件隊列中的生存時間。 CHkLinux聯盟
minimal_backoff_time:當一封郵件投遞失敗後,郵件隊列將在一段時間內忽視該郵件的存在,也就是我們前面講的時間郵票。該參數就是用來設置最小的時間郵票。缺省值爲1000秒。 CHkLinux聯盟
maximal_backoff_time:設置最大的時間郵票。 CHkLinux聯盟
CHkLinux聯盟
6. 對拒絕服務攻擊的處理 CHkLinux聯盟
postfix對每一個SMTP會話都設置一個錯誤計數器,當該客戶端的請求未 CHkLinux聯盟
被接受或違反那UCE規則時,該計數器就增1。隨着計數器的增加,postfix將採取不同的措施來防止惡意用戶的拒絕服務攻擊。 CHkLinux聯盟
smtpd_error_sleep_time:當該錯誤計數器的值還很小時,postfix將暫停 CHkLinux聯盟
smtpd_error_sleep_time指定的時間,然後向客戶端報告一個錯誤。該參數的缺省值爲5秒。 CHkLinux聯盟
smtpd_soft_error_limit:當錯誤計數器的值超過該參數指定的值時,postfix在響應該客戶端請求前將沉睡一段時間。缺省值爲10。 CHkLinux聯盟
smtpd_hard_error_limit:當錯誤計數器的值超過該參數指定的值時,postfix CHkLinux聯盟
中斷同該客戶端的連接。缺省值爲100。 CHkLinux聯盟
CHkLinux聯盟
4.5 postfix對使用資源的控制 CHkLinux聯盟
通過特定的postfix配置參數,我們可以實現postfix運行時對所消耗的資源的靈活控制。可以通過以下幾個方面來控制postfix消耗的資源: CHkLinux聯盟
CHkLinux聯盟
1. 限制內存中的對象的大小 CHkLinux聯盟
要控制對內存資源的消耗,必須控制內存中對象的大小。可以用以下的參數來進行對象大小的控制: CHkLinux聯盟
line_length_limit:控制讀入數據時每一行的大小,如果太長則強行將其分割成更短的行,太長的行在投遞時再重組。缺省值爲2048 bytes。 CHkLinux聯盟
header_size_limit:限制信頭長度。缺省值爲102400bytes。 CHkLinux聯盟
message_size_limit:限制postfix隊列文件的大小。缺省值爲10240000 bytes。 CHkLinux聯盟
queue_minfree:郵件隊列中可用的空間大小。缺省爲無限制。建議該值最好時message_size_limit的數倍以便於處理大郵件。 CHkLinux聯盟
bounce_size_limit:限制某一郵件不可投遞時,返回給發件人不可投遞報告的大小,缺省值爲50000 bytes。 CHkLinux聯盟
CHkLinux聯盟
2. 限制內存中對象的數目 CHkLinux聯盟
qmgr_message_recipient_limit:設置內存中收件人地址的最大數目。缺省值爲10000。 CHkLinux聯盟
qmgr_message_active_limit:設置active郵件隊列中郵件數目的最大值。缺省值爲1000。 CHkLinux聯盟
duplicate_filter_limit:設置需要local和cleanup後臺程序記住的收件人地址的最大數目。缺省值爲1000。 CHkLinux聯盟
CHkLinux聯盟
3.限制等待一個外部命令完成的時間 CHkLinux聯盟
command_time_limit:設置local程序等待一個外部命令完成的時間。缺省值爲1000秒。 CHkLinux聯盟
CHkLinux聯盟
4. 限制文件鎖定的操作時間 CHkLinux聯盟
deliver_lock_attempts:設置鎖定一個文件的最大嘗試次數。缺省值爲5次。 CHkLinux聯盟
deliver_lock_delay:設置如果鎖定一個文件失敗後再次嘗試的等待時間,缺省值爲1秒。 CHkLinux聯盟
CHkLinux聯盟
5. 控制錯誤恢復 CHkLinux聯盟
在某些情況下(如高負載),postfix的某個進程可能會死掉,這時master進 CHkLinux聯盟
程會試圖重新啓動該進程,我們可以通過下面的參數來控制這種行爲: CHkLinux聯盟
fork_attempts:試圖重啓動一個進程的最大嘗試次數。缺省值爲5次。 CHkLinux聯盟
fork_delay:每兩次嘗試之間的等待時間,缺省值爲1秒。 CHkLinux聯盟
transport_retry_time:隊列管理進程每兩次嘗試連接一個不正常的投遞代理進程之間的等待時間。缺省爲60秒。 CHkLinux聯盟
CHkLinux聯盟
4.6 postfix中的地址操作 CHkLinux聯盟
CHkLinux聯盟
1. 將地址改寫爲標準格式 CHkLinux聯盟
在cleanup進程進行表查詢之前,它首選請求trivial-rewrite進程將新 CHkLinux聯盟
郵件地址改寫成標準的[email protected]in格式。改寫的目的是爲了減少查詢表中的條目,從而提供查詢的效率。trivial-rewrite進程可以實現以下的地址改寫: CHkLinux聯盟
* 將包含源路由信息的地址如@hosta,@hostb:user@site寫成user@site,因爲postfix不支持包含源路由信息的地址格式。 CHkLinux聯盟
* 將形如user%domain的地址改寫成user@domain的形式。該特性可通過allow_percent_hack參數進行控制,其缺省值爲yes。 CHkLinux聯盟
* 將只包含user的地址改寫成user@$myorigin。該特性可通過append_at_myorigin參數進行控制,其缺省值爲yes。最好不要改動其缺省值,因爲大多數的postfix進程更擅長處理地址形如user@$myorigin的郵件。 CHkLinux聯盟
* 將形如user@host的地址改寫成user@host.$mydomain。該特性可通過append_dot_mydomain參數進行控制,其缺省值爲yes。 CHkLinux聯盟
* 將形如user@site.的地址改寫成 user@site,也即除去了最後的點號。 CHkLinux聯盟
CHkLinux聯盟
2. 規範地址映射 CHkLinux聯盟
在cleanup進程將一封新郵件存入incoming郵件隊列之前,cleanup進程 CHkLinux聯盟
將根據查詢規範表來進行地址改寫,從而使之更具可讀性。主要是替換形如Firstname.Lastname 風格的地址以及清除無效的域。缺省postfix是不進行規範地址改寫的,你可以通過指定canonical_maps參數的值來使其生效。如: CHkLinux聯盟
canonical_maps = hash:/etc/postfix/canonical CHkLinux聯盟
也可以分別爲收件人和發件人地址分別指定不同的改寫規範,這時參數sender_canonical_maps和recipient_canonical_maps的優先級比canonical_maps高。如: CHkLinux聯盟
sender_canonical_maps = hash:/etc/postfix/sender_canonical CHkLinux聯盟
recipient_canonical_maps = hash:/etc/postfix/recipient_canonical CHkLinux聯盟
CHkLinux聯盟
3. 地址欺騙 CHkLinux聯盟
就是將形如[email protected]in的地址改寫成user@domain或[email protected]in, CHkLinux聯盟
好像是從其他的郵件服務器發出的一樣。缺省該功能是被禁止的,可以用參數masquerade_domains使其生效,如: CHkLinux聯盟
masquerade_domains = $mydomain CHkLinux聯盟
也可以通過masquerade_exceptions參數對特定的用戶不進行地址欺騙,如: CHkLinux聯盟
masquerade_exceptions = root CHkLinux聯盟
注意:地址欺騙只對發件人地址有作用。 CHkLinux聯盟
CHkLinux聯盟
4. 虛擬地址映射 CHkLinux聯盟
在運用了規範地址映射和地址欺騙之後,cleanup將使用虛擬表映射將郵件 CHkLinux聯盟
重定向到所有的收件人。注意,該操作僅僅作用於信頭上的收件人地址。這樣,我們就可以將發送到虛擬域的郵件投遞到真實用戶的郵箱。系統的別名數據庫同樣可以起到相同的作用。缺省該功能是被禁止的,可以用參數virtual_maps使其生效,如: CHkLinux聯盟
virtual_maps = hash:/etc/postfix/virtual CHkLinux聯盟
CHkLinux聯盟
5. Relocated數據庫查詢 CHkLinux聯盟
Relocated表格提供如何將郵件發送給在系統中沒有帳號的用戶。缺省該功能是被禁止的,可以用參數relocated_maps使其生效,如: CHkLinux聯盟
relocated_maps = hash:/etc/postfix/relocated CHkLinux聯盟
CHkLinux聯盟
6. 別名數據庫查詢 CHkLinux聯盟
當郵件在本地投遞時,local投遞代理進程會在別名數據庫(linux下爲 CHkLinux聯盟
/etc/aliases)中查詢收件人的別名。該操作不會作用於郵件信頭中的地址。可以用alias_maps指定使用的別名數據庫。缺省地,該功能是有效的,如: CHkLinux聯盟
alias_maps = hash:/etc/aliases CHkLinux聯盟
可以通過alias_database參數控制別名數據庫的路徑,如: CHkLinux聯盟
alias_database = hash:/etc/aliases CHkLinux聯盟
CHkLinux聯盟
五、 postfix的配置實例 CHkLinux聯盟
5.1爲撥號用戶配置postfix CHkLinux聯盟
假 設有一個小公司使用撥號上網,公司通過ISP的SMTP服務器(假設其域名爲mail.isp.com,ip地址爲201.110.1.100)發送郵 件;公司內部的員工通過公司的SMTP服務器(運行postfix)收發郵件,下面我們一起來配置公司內部的SMTP服務器。 CHkLinux聯盟
CHkLinux聯盟
1. 因爲沒有自己的固定ip和域名,所以必須指定ISP的SMTP服務器作 CHkLinux聯盟
爲郵件網關(智能主機)。可以用如下的參數指定: CHkLinux聯盟
relayhost = [201.110.1.100] CHkLinux聯盟
注意:relayhost的值可以是domain、host、host:port、[address]或[address:port]。 CHkLinux聯盟
CHkLinux聯盟
2. 當接收到新郵件時,postfix就會嘗試投遞該郵件。如果將該公司內部的 CHkLinux聯盟
SMTP服務器設置爲按需撥號,也就是一有程序請求外聯就撥號,則會增加上網的費用。這時我們可以通過postfix的defer_transports參數推遲投遞新郵件直到postfix提出明確的要求,如指定: CHkLinux聯盟
defer_transports = smtp CHkLinux聯盟
這時如果我們在ppp的腳本(如/etc/ppp/ip-up.local)加上如下命令,則postfix只在撥號成功後投遞新郵件: CHkLinux聯盟
/usr/sbin/sendmail CHkLinux聯盟
CHkLinux聯盟
3. 因爲我們是將郵件轉發到郵件網關(201.110.1.100)而不是自己進行投 CHkLinux聯盟
遞,所以我們沒有必要使用DNS,因此我們通過如下的參數取消DNS查詢: CHkLinux聯盟
disable_dns_lookups = yes CHkLinux聯盟
CHkLinux聯盟
4. 爲了保證我們能收到回信,我們必須進行域僞裝。 CHkLinux聯盟
masquerade_domains = isp.com CHkLinux聯盟
CHkLinux聯盟
下面就是我們的配置文件mail.cf: CHkLinux聯盟
CHkLinux聯盟
#指定郵件網關 CHkLinux聯盟
relayhost = [201.110.1.100] CHkLinux聯盟
# 在撥號成功後才投遞郵件 CHkLinux聯盟
defer_transports = smtp CHkLinux聯盟
#取消DNS查詢 CHkLinux聯盟
disable_dns_lookups = yes CHkLinux聯盟
#一般常規配置 CHkLinux聯盟
queue_directory = /var/spool/postfix CHkLinux聯盟
program_directory = /usr/libexec/postfix CHkLinux聯盟
command_directory = /usr/sbin CHkLinux聯盟
daemon_directory = /usr/libexec/postfix CHkLinux聯盟
mail_owner = postfix CHkLinux聯盟
default_privs = nobody CHkLinux聯盟
mail_spool_directory = /var/spool/mail CHkLinux聯盟
mailbox_command = /usr/bin/procmail CHkLinux聯盟
local_destination_concurrency_limit = 2 CHkLinux聯盟
default_destination_concurrency_limit = 10 CHkLinux聯盟
debug_peer_level = 2 CHkLinux聯盟
debugger_command=PATH=/usr/bin:/usr/X11R6/bin,xxgdb$ CHkLinux聯盟
daemon_directory/$ process_name $process_id & sleep 5 CHkLinux聯盟
# 假設本地網絡爲192.168.1.1/24 CHkLinux聯盟
mynetworks = 192.168.1.1/24 CHkLinux聯盟
# host specific information CHkLinux聯盟
myhostname = yourhost.isp.com CHkLinux聯盟
mydomain = local.isp.com CHkLinux聯盟
myorigin = $mydomain CHkLinux聯盟
where do we receive mail and who do we accept/receive mail for? CHkLinux聯盟
inet_interfaces = all CHkLinux聯盟
mydestination = $myhostname, localhost.$mydomain, $mydomain CHkLinux聯盟
default_transport = smtp CHkLinux聯盟
masquerade_domains = isp.com CHkLinux聯盟
CHkLinux聯盟
需 要注意的是:這裏的$mydomain、$myorigin、$mydestination不能爲isp.com, 因爲你如果設定爲isp.com,內部SMTP服務器就會認爲你的郵件是轉發給它的,故而在本地嘗試投遞郵件,結果只會返回“unknown user”的錯誤。其次,該配置只實現了將郵件通過SMTP發送到ISP的SMTP服務器的手段,缺乏從ISP的郵件服務器取信的方法,這一點就只能通過 如outlook或foxmail等的mail客戶端軟件來實現了。 CHkLinux聯盟
CHkLinux聯盟
5.2爲中小型企業用戶配置postfix CHkLinux聯盟
假設有一家數千名員工的公司,該公司通過租用專線上網。現在公司決定 CHkLinux聯盟
通過postfix來建立自己的郵件系統。在這裏我們假設該公司的域爲some.com, 郵件服務器的域名mail.some.com,地址爲202.200.180.2,DNS服務器的域名爲dns.some.com,地址爲202.200.180.1。 CHkLinux聯盟
1. 配置DNS服務器,設置MX記錄指向mail.some.com。相關的配置文件 CHkLinux聯盟
爲/var/named/some.com(假設其zone文件就叫some.com, 有關DNS配置的內容請參看本書的相關章節)的內容如下: CHkLinux聯盟
CHkLinux聯盟
@ IN SOA dns.some.com. root.dns.some.com ( CHkLinux聯盟
2000011307 ; serial CHkLinux聯盟
28800 ; refresh, seconds CHkLinux聯盟
14400 ; retry, seconds CHkLinux聯盟
3600000 ; expire, seconds CHkLinux聯盟
86400 ; minimum, seconds CHkLinux聯盟
) CHkLinux聯盟
CHkLinux聯盟
@ IN NS dns.some.com. CHkLinux聯盟
@ IN A 202.200.180.1 CHkLinux聯盟
@ IN MX 10 mail.some.com. CHkLinux聯盟
CHkLinux聯盟
localhost IN A 127.0.0.1 CHkLinux聯盟
dns IN A 202.200.180.1 CHkLinux聯盟
mail IN A 202.200.180.2 CHkLinux聯盟
host1 IN A 202.200.180.3 CHkLinux聯盟
host2 IN A 202.200.180.4 CHkLinux聯盟
CHkLinux聯盟
2. 配置postfix,其配置文件及相關的解釋如下: CHkLinux聯盟
CHkLinux聯盟
#設置一般的路徑信息 CHkLinux聯盟
queue_directory = /var/spool/postfix CHkLinux聯盟
command_directory = /usr/sbin CHkLinux聯盟
daemon_directory = /usr/libexec/postfix CHkLinux聯盟
mail_spool_directory = /var/spool/mail CHkLinux聯盟
CHkLinux聯盟
#設置郵件及郵件隊列的所有者爲postfix CHkLinux聯盟
mail_owner = postfix CHkLinux聯盟
CHkLinux聯盟
#設置郵件服務器的主機名 CHkLinux聯盟
myhostname = mail.some.com CHkLinux聯盟
CHkLinux聯盟
#設置mydomain、myorigin和mydomain參數 CHkLinux聯盟
mydomain = some.com CHkLinux聯盟
myorigin =$mydomain CHkLinux聯盟
mydestination = $mydomain CHkLinux聯盟
CHkLinux聯盟
#設置postfix服務監聽的端口 CHkLinux聯盟
inet_interfaces = all CHkLinux聯盟
CHkLinux聯盟
#設置本地收件人的用戶名查詢手段,缺省是查詢/etc/passwd文件 CHkLinux聯盟
#和別名數據庫 CHkLinux聯盟
local_recipient_maps = $alias_maps unix:passwd.byname CHkLinux聯盟
alias_maps = hash:/etc/aliases CHkLinux聯盟
alias_database = hash:/etc/aliases CHkLinux聯盟
CHkLinux聯盟
#設置最終的本地投遞代理程序,在這裏我們使用流行的procmail CHkLinux聯盟
mailbox_command = /usr/bin/procmail CHkLinux聯盟
CHkLinux聯盟
#設置該值爲$mydomain以便客戶端的連接 CHkLinux聯盟
relay_domains = $mydomain CHkLinux聯盟
mynetworks = 202.200.180.0/24 CHkLinux聯盟
CHkLinux聯盟
#設置向用戶顯示的主機名和版本信息 CHkLinux聯盟
smtpd_banner = $myhostname ESMTP $mail_name CHkLinux聯盟
CHkLinux聯盟
#對於併發進程的限制,保持系統缺省值就可以滿足要求了。 CHkLinux聯盟
local_destination_concurrency_limit = 2 CHkLinux聯盟
default_destination_concurrency_limit = 10 CHkLinux聯盟
CHkLinux聯盟
#如果你不知道你在做什麼,最好不要改變下面的設置 CHkLinux聯盟
debug_peer_level = 2 CHkLinux聯盟
debugger_command = CHkLinux聯盟
PATH=/usr/bin:/usr/X11R6/bin CHkLinux聯盟
xxgdb $daemon_directory/$process_name $process_id & sleep 5 CHkLinux聯盟
CHkLinux聯盟
3. 在RedHat中我們通常使用imap作爲pop3服務器,可以通過rpm -q imap CHkLinux聯盟
命令查看系統有沒有安裝imap。如果沒有安裝則插入linux光盤,用rpm -ivh imap-4.5-4.rpm 進行安裝。 CHkLinux聯盟
CHkLinux聯盟
4. 缺省地,pop3服務器是由inet 啓動的,所以必須去掉/etc/inetd.conf文 CHkLinux聯盟
件中有關pop3的一行註釋。如下所示: CHkLinux聯盟
pop-3 stream tcp nowait root /usr/sbin/ipop3d ipop3d CHkLinux聯盟
CHkLinux聯盟
5. 重新啓動inet服務器,啓動postfix: CHkLinux聯盟
#/etc/rc.d/init.d/inet restart CHkLinux聯盟
#postfix start CHkLinux聯盟
CHkLinux聯盟
5.3在防火牆內部配置postfix CHkLinux聯盟
假 設一公司通過租用專線上網,公司內部使用192.168.0.0的私有ip, 然後通過防火牆(雙宿主主機)的ip欺騙上網,公司的郵件服務器(mail.some.com)也在內部網中,也使用私有ip。我們假設在防火牆上進行了 端口轉發,可以將Internet對防火牆25端口的請求包轉發到內部的郵件服務器上,並且運行DNS服務的防火牆的MX記錄指向防火牆本身。 CHkLinux聯盟
在這個例子中,我想着重說明的是有關映射文件的用法。main.cf配置文件和相關的解釋如下所示: CHkLinux聯盟
CHkLinux聯盟
CHkLinux聯盟
#表明自己的身份 CHkLinux聯盟
myhostname = mail.some.com CHkLinux聯盟
mydomain = some.com CHkLinux聯盟
mydestination = $mydomain, $myhostname, localhost.$mydomain CHkLinux聯盟
myorigin = $mydomain CHkLinux聯盟
#讓postfix監聽所有接口 CHkLinux聯盟
inet_interfaces = all CHkLinux聯盟
CHkLinux聯盟
#通過mynetworks參數接受內部網用戶的SMTP連接請求 CHkLinux聯盟
mynetworks = 192.168.0.0/8 CHkLinux聯盟
CHkLinux聯盟
#向postfix管理員報告的信息量 CHkLinux聯盟
notify_classes = resource, software, bounce, policy CHkLinux聯盟
CHkLinux聯盟
#如果客戶端的ip地址符合$maps_rbl_domains參數中列出的則拒絕之 CHkLinux聯盟
maps_rbl_domains = rbl.maps.vix.com, dul.maps.vix.com CHkLinux聯盟
CHkLinux聯盟
#對可以連接的客戶端進行嚴格的限制 CHkLinux聯盟
smtpd_client_restrictions = CHkLinux聯盟
#客戶端ip符合$mynetworks定義的範圍則接受連接 CHkLinux聯盟
permit_mynetworks, CHkLinux聯盟
#根據access的查詢結果判斷客戶端連接的合法性 CHkLinux聯盟
check_client_access hash:/etc/postfix/access, CHkLinux聯盟
#拒絕ip符合$maps_rbl_domains定義範圍的連接 CHkLinux聯盟
reject_maps_rbl, CHkLinux聯盟
#如果客戶端在DNS中沒有記錄則拒絕連接,要慎用 CHkLinux聯盟
reject_unknown_hostname CHkLinux聯盟
CHkLinux聯盟
#通過發件人的地址進行限制 CHkLinux聯盟
smtpd_sender_restrictions = CHkLinux聯盟
permit_mynetworks, CHkLinux聯盟
check_sender_access hash:/etc/postfix/access CHkLinux聯盟
CHkLinux聯盟
#設置虛擬主機數據庫,別忘了執行"postmap virtual"進行格式轉換 CHkLinux聯盟
virtual_maps = hash:/etc/postfix/virtual CHkLinux聯盟
CHkLinux聯盟
#對無系統帳號的郵件進行轉發設置,如離開公司的員工 CHkLinux聯盟
relocated_maps = hash:/etc/postfix/relocated CHkLinux聯盟
CHkLinux聯盟
#設置別名數據庫 CHkLinux聯盟
alias_maps = hash:/etc/postfix/aliases CHkLinux聯盟
CHkLinux聯盟
# 我們使用smtp投遞代理 CHkLinux聯盟
default_transport = smtp CHkLinux聯盟
CHkLinux聯盟
# 一些常規設置 CHkLinux聯盟
mail_owner = postfix CHkLinux聯盟
default_privs = nobody CHkLinux聯盟
CHkLinux聯盟
#設置路徑信息 CHkLinux聯盟
queue_directory = /var/spool/postfix CHkLinux聯盟
program_directory = /usr/libexec/postfix CHkLinux聯盟
command_directory = /usr/sbin CHkLinux聯盟
daemon_directory = /usr/libexec/postfix CHkLinux聯盟
mail_spool_directory = /var/spool/mail CHkLinux聯盟
mailbox_command = /usr/bin/procmail CHkLinux聯盟
CHkLinux聯盟
#併發連接設置 CHkLinux聯盟
local_destination_concurrency_limit = 2 CHkLinux聯盟
default_destination_concurrency_limit = 10 CHkLinux聯盟
CHkLinux聯盟
然後,我們執行以下命令: CHkLinux聯盟
CHkLinux聯盟
#進入postfix配置目錄 CHkLinux聯盟
cd /etc/postfix CHkLinux聯盟
#用newaliases初始化別名數據庫 CHkLinux聯盟
newaliases CHkLinux聯盟
#用postmap分別建立virtual、access和relocated查詢數據庫 CHkLinux聯盟
postmap virtual CHkLinux聯盟
postmap access CHkLinux聯盟
postmap relocated CHkLinux聯盟
#啓動postfix CHkLinux聯盟
/etc/rc.d/init.d/postfix start CHkLinux聯盟
CHkLinux聯盟
現在我們來看看virtual、access和reloacted幾個查詢文件的格式,下面是這幾個文件的示例和註釋: CHkLinux聯盟
CHkLinux聯盟
#virtual文件示例 CHkLinux聯盟
#假設在這個例子中我們有個虛擬域爲other.com CHkLinux聯盟
other.com CHkLinux聯盟
CHkLinux聯盟
#access 文件示例 CHkLinux聯盟
#如果符合前面的條件則進行後面操作,可以有三種操作: CHkLinux聯盟
#1. [45]XX $messag:拒絕接受並且向客戶端顯示預定義的信息 CHkLinux聯盟
#2. REJECT:拒絕接受,不顯示信息 CHkLinux聯盟
#3. OK允許連接 CHkLinux聯盟
[email protected] 550 Go away CHkLinux聯盟
friend.com OK CHkLinux聯盟
202.192 REJECT CHkLinux聯盟
CHkLinux聯盟
#relocated 文件示例 CHkLinux聯盟
#該文件主要是將發給無系統帳號的郵件進行轉發 CHkLinux聯盟
[email protected] [email protected] CHkLinux聯盟
六、 postfix中的命令行工具及其它 CHkLinux聯盟
下面我們來看一看postfix的命令行工具,通過這些工具的使用可能會使你 CHkLinux聯盟
對postfix的管理更簡單。 CHkLinux聯盟
CHkLinux聯盟
6.1 sendmail兼容的命令行工具 CHkLinux聯盟
CHkLinux聯盟
1. mailq 對郵件隊列文件進行列表。表中的每一個條目包含有以下信息: CHkLinux聯盟
隊列文件ID、郵件的大小、到達的時間、發件人、收件人和投遞延遲的原因(如果投遞有延遲的話)。該命令主要是與showq後臺程序通信來獲取隊列文件的相關信息。該命令無參數。 CHkLinux聯盟
CHkLinux聯盟
2. newaliases 該工具進行別名數據庫的初始化。如果沒有指定數據庫的類 CHkLinux聯盟
型,則使用系統默認的數據庫類型(在linux下爲hash)。該命令可以不帶參數執行。 CHkLinux聯盟
CHkLinux聯盟
6.2 postfix自帶的命令行工具 CHkLinux聯盟
CHkLinux聯盟
1. postcat 打印郵件隊列文件的內容。後面界要顯示的隊列文件名,可以 CHkLinux聯盟
帶一個-v的參數進行冗餘顯示。 CHkLinux聯盟
CHkLinux聯盟
2. postconf 打印配置參數設置後的值或postfix的其他信息。 CHkLinux聯盟
-d 打印配置參數的缺省值。 CHkLinux聯盟
-m 列出所有支持的查詢表類型。 CHkLinux聯盟
不帶參數則打印配置參數設置後的值。 CHkLinux聯盟
CHkLinux聯盟
3. postmap 建立postfix查詢數據庫。在linux下可以直接跟上原始文件 CHkLinux聯盟
而不帶任何參數來建立該數據庫。 CHkLinux聯盟
CHkLinux聯盟
6.3 postfix的日誌 CHkLinux聯盟
postfix的日誌文件位於/etc/log/maillog, 文件中包含有postfix的啓動信息、出錯信息以及同其他SMTP服務器的會話等等。如下所示: CHkLinux聯盟
CHkLinux聯盟
Sep 10 05:54:17 mail postfix/smtpd[5072]: disconnect from unknown[204.140.244.150] CHkLinux聯盟
Sep 10 06:06:00 mail postfix/qmgr[467]: 50D403DF8: from=, size=6591 (queue active) CHkLinux聯盟
Sep 10 06:11:06 mail postfix/smtp[5085]: connect to bjmx2.163.net[202.108.255.241]: read timeout (port 25) CHkLinux聯盟
Sep 10 06:16:07 mail postfix/smtp[5085]: connect to bjmx3.163.net[202.108.255.242]: read timeout (port 25) CHkLinux聯盟
Sep 10 06:21:08 mail postfix/smtp[5085]: connect to bjmx1.163.net[202.108.255.240]: read timeout (port 25) CHkLinux聯盟
CHkLinux聯盟
6.4 在postfix中使用MySQL數據庫 CHkLinux聯盟
Scott Cotton 和 Joshua Marcus寫了一段可以在postfix中添加mysql映射類型的代碼,從而我們可以將postfix查詢的別名數據庫等數據存儲在mysql數據庫 中,讓postfix進行mysql查詢來得到結果。這樣做將有助於提供postfix的運行效率, 有其對需要不斷對映射數據的站點特別有用。 CHkLinux聯盟
CHkLinux聯盟
1.爲postfix添加識別mysql數據庫映射的功能 CHkLinux聯盟
a. 由於這段代碼使用了mysql客戶端庫,所以我們必須安裝mysql的開包。 CHkLinux聯盟
可以到www.redhat.com等linux相關站點下載mysql開發包,也可以從某些linux的資源光盤中取得mysql的開發包,如MySQL-client-3.22.30-1.i386.rpm。 CHkLinux聯盟
b. 安裝該開發包: CHkLinux聯盟
rpm -ivh MySQL-client-3.22.30-1.i386.rpm CHkLinux聯盟
c. 下載postfix的源代碼包,根據本章“3.1源代碼包的安裝”的提示進行 CHkLinux聯盟
安裝,但是注意在執行make命令之前先執行以下命令: CHkLinux聯盟
make -f Makefile.init makefiles CCARGS=-DHAS_MYSQL -I /usr/include/mysql CHkLinux聯盟
AUXLIBS=/usr/lib/mysql/libmysqlclient.a -lm CHkLinux聯盟
CHkLinux聯盟
5. 配置postfix使用mysql數據庫映射 CHkLinux聯盟
我們以alias_maps進行說明。在main.cf中指定: CHkLinux聯盟
alias_maps = mysql:/etc/postfix/mysql-aliases.cf CHkLinux聯盟
CHkLinux聯盟
6. 編輯mysql-aliases.cf CHkLinux聯盟
CHkLinux聯盟
#首先指定登錄到mysql服務器的用戶名和密碼 CHkLinux聯盟
user = your_user_name CHkLinux聯盟
password = your_password CHkLinux聯盟
CHkLinux聯盟
#連接的數據庫名稱 CHkLinux聯盟
dbname = your_database_name CHkLinux聯盟
CHkLinux聯盟
#查詢的表名 CHkLinux聯盟
table = mytable CHkLinux聯盟
CHkLinux聯盟
#添加表的字段名稱 CHkLinux聯盟
#forward_addr爲轉發地址 CHkLinux聯盟
#alias爲別名數據 CHkLinux聯盟
select_field=forward_addr CHkLinux聯盟
where_field=alias CHkLinux聯盟
#添加附加的查詢條件 CHkLinux聯盟
additional_conditions=and status=paid CHkLinux聯盟
CHkLinux聯盟
#指定要連接的MySQL服務器 CHkLinux聯盟
hosts=your.mysql.server CHkLinux聯盟
CHkLinux聯盟
這樣,當發生一個查詢的時候,postfix是以這樣的SQL語句進行查詢的: CHkLinux聯盟
select forward_addr from mytable where alias=$lookup and status=paid

SMTP 命令簡介CHkLinux聯盟
CHkLinux聯盟
CHkLinux聯盟
CHkLinux聯盟
什麼是 SMTPCHkLinux聯盟
SMTP (Simple Mail Transfer Protocol) : 電子郵件從客戶機傳輸到服務器或從某一個服務器傳輸到另一個服務器使用的傳輸協議。 SMTP 是請求/響應協議,命令和響應都是基於 ASCII 文本,並以 CR 和 LF 符結束。響應包括一個表示返回狀態的三位數字代碼。SMTP 在 TCP 協議 25 端口監聽連接請求。CHkLinux聯盟
CHkLinux聯盟
什麼是 ESMTPCHkLinux聯盟
ESMTP (Extended SMTP),顧名思義,擴展 SMTP 就是對標準 SMTP 協議進行的擴展。它與 SMTP 服務的區別僅僅是,使用 SMTP 發信不需要驗證用戶帳戶,而用 ESMTP 發信時,服務器會要求用戶提供用戶名和密碼以便驗證身份。驗證之後的郵件發送過程與 SMTP 方式沒有兩樣。CHkLinux聯盟
CHkLinux聯盟
SMTP 命令CHkLinux聯盟
SMTP 命令包括:CHkLinux聯盟
HELO 向服務器標識用戶身份。發送者能欺騙,說謊,但一般情況下服務器都能檢測到。 CHkLinux聯盟
EHLO 向服務器標識用戶身份。發送者能欺騙,說謊,但一般情況下服務器都能檢測到。CHkLinux聯盟
MAIL FROM 命令中指定的地址是發件人地址CHkLinux聯盟
RCPT TO 標識單個的郵件接收人;可有多個 RCPT TO;常在 MAIL 命令後面。CHkLinux聯盟
DATA 在單個或多個 RCPT 命令後,表示所有的郵件接收人已標識,並初始化數據傳輸,以 CRLF.CRLF 結束 CHkLinux聯盟
VRFY 用於驗證指定的用戶/郵箱是否存在;由於安全方面的原因,服務器常禁止此命令 CHkLinux聯盟
EXPN 驗證給定的郵箱列表是否存在,擴充郵箱列表,也常被禁用 CHkLinux聯盟
HELP 查詢服務器支持什麼命令 CHkLinux聯盟
NOOP 無操作,服務器應響應 OK CHkLinux聯盟
RSET 重置會話,當前傳輸被取消CHkLinux聯盟
QUIT 結束會話 CHkLinux聯盟
CHkLinux聯盟
連接到 Postfix 使用 SMTP 命令發送郵件CHkLinux聯盟
例如:安裝 Postfix 的郵件服務器IP是192.168.0.1 (藍色字體內容由客戶端輸入,紅色字體內容是服務返回的) CHkLinux聯盟
CHkLinux聯盟
telnet 192.168.0.1 25 --------------------------------------- 使用 telnet 命令連接服務器 25 端口 CHkLinux聯盟
Trying 192.168.0.1... --------------------------------------- 正在連接服務器 25 端口 CHkLinux聯盟
Connected to 192.168.0.1. ----------------------------------- 連接服務器 25 端口成功 CHkLinux聯盟
220 localhost ESMTP Postfix - by ExtMail -------------------- 顯示服務器標識 ( 修改main.cf 的smtpd_banner) CHkLinux聯盟
helo test.com ----------------------------------------------- 向服務器標識用戶身份,發信不要認證,跳過下面幾步直接發送 mail from 命令 CHkLinux聯盟
250 localhostCHkLinux聯盟
ehlo test.com ------------------------------------------------ ESMTP 命令,發信需要認證。CHkLinux聯盟
250-localhostCHkLinux聯盟
250-PIPELININGCHkLinux聯盟
250-SIZE 102400000CHkLinux聯盟
250-VRFYCHkLinux聯盟
250-ETRNCHkLinux聯盟
250-AUTH LOGIN PLAINCHkLinux聯盟
250-AUTH=LOGIN PLAINCHkLinux聯盟
250-ENHANCEDSTATUSCODESCHkLinux聯盟
250-8BITMIMECHkLinux聯盟
250 DSNCHkLinux聯盟
auth login ------------------------------------------------- 進行用戶身份認證 CHkLinux聯盟
334 VXNlcm5hbWU6 CHkLinux聯盟
Y29zdGFAYW1heGl0Lm5ldA== ----------------------------------- BASE64 加密後的用戶名 CHkLinux聯盟
334 UGFzc3dvcmQ6 CHkLinux聯盟
MTk4MjIxNA== ----------------------------------------------- BASE64 加密後的密碼 CHkLinux聯盟
235 authentication successfully ---------------------------- 身份認證成功 CHkLinux聯盟
(535 authentication failed --------------------------------- 身份認證失敗)CHkLinux聯盟
發到本系統中域名下的賬戶可跳過身份認證。CHkLinux聯盟
mail from: <[email protected]> ------------------------------ mail from 地址 [email protected]CHkLinux聯盟
250 ok ----------------------------------------------------- 命令執行成功 CHkLinux聯盟
rcpt to: <[email protected]> -------------------------------- 遞送給地址 [email protected]CHkLinux聯盟
250 ok ----------------------------------------------------- 命令執行成功 CHkLinux聯盟
data ------------------------------------------------------- 數據傳輸初始化 CHkLinux聯盟
354 End data with .----------------------------------------- 開始傳輸數據 CHkLinux聯盟
From: [email protected]CHkLinux聯盟
To: [email protected]CHkLinux聯盟
Date: Mon, 25 Oct 2004 14:24:27 +0800CHkLinux聯盟
Subject: test mail CHkLinux聯盟
CHkLinux聯盟
Hi, test2 CHkLinux聯盟
This is a test mail, you don't reply it. CHkLinux聯盟
CHkLinux聯盟
.CHkLinux聯盟
------------------------------------------------------------ 數據內容,包括BASE64加密後的郵件內容, 以 CRLF.CRLF 結束數據傳輸 CHkLinux聯盟
250 OK: queued as 2F6DE3929--------------------------------- 命令執行成功 CHkLinux聯盟
quit ------------------------------------------------------- 結束會話 CHkLinux聯盟
221 ByeCHkLinux聯盟
Connection closed by foreign host .------------------------- 斷開連接 CHkLinux聯盟
什麼是 POP3CHkLinux聯盟
POP3 (Post Office Protocol 3) 即郵局協議的第 3 個版本,它規定怎樣將個人計算機連接到 Internet 的郵件服務器和下載電子郵件的電子協議。它是因特網電子郵件的     CHkLinux聯盟
第一個離線協議標準, POP3 允許用戶從服務器上把郵件存儲到本地主機(即自己的計算機)上,同時刪除保存在郵件服務器上的郵件,而POP3服務器則是遵循 POP3 協議的接收郵件服務器,用來接收電子郵件的。CHkLinux聯盟
CHkLinux聯盟
CHkLinux聯盟
CHkLinux聯盟
POP3 命令CHkLinux聯盟
POP3 命令包括:CHkLinux聯盟
USER username 認證用戶名     CHkLinux聯盟
PASS password 認證密碼認證,認證通過則狀態轉換     CHkLinux聯盟
APOP name,digest 認可一種安全傳輸口令的辦法,執行成功導致狀態轉換,請參見 RFC 1321 。     CHkLinux聯盟
STAT 處理請求 server 回送郵箱統計資料,如郵件數、 郵件總字節數     CHkLinux聯盟
UIDL n 處理 server 返回用於該指定郵件的唯一標識, 如果沒有指定,返回所有的。     CHkLinux聯盟
LIST n 處理 server 返回指定郵件的大小等     CHkLinux聯盟
RETR n 處理 server 返回郵件的全部文本     CHkLinux聯盟
DELE n 處理 server 標記刪除,QUIT 命令執行時才真正刪除     CHkLinux聯盟
RSET 處理撤消所有的 DELE 命令     CHkLinux聯盟
TOP n,m 處理 返回 n 號郵件的前 m 行內容,m 必須是自然數     CHkLinux聯盟
NOOP 處理 server 返回一個肯定的響應     CHkLinux聯盟
QUIT 希望結束會話。如果 server 處於"處理" 狀態,則現在進入"更新"狀態,刪除那些標記成刪除的郵件。如果 server 處於"認可"狀態,則結束會話時 server 不進入"更新"狀態 。CHkLinux聯盟
CHkLinux聯盟
  CHkLinux聯盟
CHkLinux聯盟
使用 telnet 連接 Winmail Server 收信CHkLinux聯盟
例如:安裝 Winmail 的郵件服務器 IP 是 192.168.0.1(藍色字體內容由客戶端輸入,紅色字體內容是服務返回的) CHkLinux聯盟
CHkLinux聯盟
CHkLinux聯盟
telnet 119.119.119.212 110 ----------------------------- 使用 telnet 命令連接服務器 110 端口   CHkLinux聯盟
Trying 119.119.119.212... ------------------------------ 正在連接服務器 110 端口   CHkLinux聯盟
Connected to 119.119.119.212. -------------------------- 連接服務器 110 端口成功   CHkLinux聯盟
+OK Winmail Mail Server POP3 ready     CHkLinux聯盟
user username ------------------------------------------ 輸入用戶名, username 爲具體的用戶名   CHkLinux聯盟
+OK ---------------------------------------------------- 執行命令成功CHkLinux聯盟
pass password ------------------------------------------ 輸入用戶密碼,password 爲具體的密碼,這裏要注意,當密碼輸入錯誤後要重新user username後再運行此命令,否則提示命令無效   CHkLinux聯盟
+OK 2 messages ----------------------------------------- 密碼認證通過 CHkLinux聯盟
(-ERR authorization failed ----------------------------- 密碼認證失敗)   CHkLinux聯盟
stat --------------------------------------------------- 郵箱狀態 CHkLinux聯盟
+OK 2 6415 --------------------------------------------- 2 爲該信箱總郵件數,6415 爲總字節數   CHkLinux聯盟
list --------------------------------------------------- 列出每封郵件的字節數 CHkLinux聯盟
+OK ---------------------------------------------------- 執行命令成功,開始顯示,左邊爲郵件的序號,右邊爲該郵件的大小 CHkLinux聯盟
1 537 -------------------------------------------------- 第 1 封郵件,大小爲 537 字節   CHkLinux聯盟
2 5878 ------------------------------------------------- 第 2 封郵件,大小爲 5878 字節   CHkLinux聯盟
.CHkLinux聯盟
top 1 -------------------------------------------------- 接收第 1 封郵件 CHkLinux聯盟
+OK ---------------------------------------------------- 接收成功, 返回第 1 封郵件頭CHkLinux聯盟
Return-Path: <[email protected]>CHkLinux聯盟
Delivered-To: [email protected]CHkLinux聯盟
Received: (winmail server invoked for smtp delivery); Mon, 25 Oct 2004 14:24:27 +0800CHkLinux聯盟
From: [email protected]CHkLinux聯盟
To: [email protected]CHkLinux聯盟
Date: Mon, 25 Oct 2004 14:24:27 +0800CHkLinux聯盟
Subject: test mail CHkLinux聯盟
.   CHkLinux聯盟
retr 1 ------------------------------------------------- 接收第 1 封郵件   CHkLinux聯盟
+OK ---------------------------------------------------- 接收成功, 返回第 1 封郵件全部內容CHkLinux聯盟
Return-Path: <[email protected]>CHkLinux聯盟
Delivered-To: [email protected]CHkLinux聯盟
Received: (winmail server invoked for smtp delivery); Mon, 25 Oct 2004 14:24:27 +0800CHkLinux聯盟
CHkLinux聯盟
From: [email protected]CHkLinux聯盟
To: [email protected]CHkLinux聯盟
Date: Mon, 25 Oct 2004 14:24:27 +0800CHkLinux聯盟
Subject: test mail CHkLinux聯盟
CHkLinux聯盟
Hi, test2 CHkLinux聯盟
This is a test mail, you don't reply it.CHkLinux聯盟
CHkLinux聯盟
.CHkLinux聯盟
CHkLinux聯盟
dele 1 ------------------------------------------------- 刪除第 1 封郵件   CHkLinux聯盟
+OK ---------------------------------------------------- 刪除成功   CHkLinux聯盟
dele 2 ------------------------------------------------- 刪除第 2 封郵件   CHkLinux聯盟
+OK ---------------------------------------------------- 刪除成功   CHkLinux聯盟
quit --------------------------------------------------- 結束會話 CHkLinux聯盟
+OK ---------------------------------------------------- 執行命令成功

main.cf中常用參數介紹CHkLinux聯盟
外發域配置CHkLinux聯盟
 CHkLinux聯盟
參數:CHkLinux聯盟
CHkLinux聯盟
myorigin CHkLinux聯盟
CHkLinux聯盟
說明:CHkLinux聯盟
CHkLinux聯盟
myorigin參數用於指定該服務器使用哪個域名來外發郵件。CHkLinux聯盟
CHkLinux聯盟
缺省的情況下myorigin採用本機主機名稱(與參數myhostname相同)。CHkLinux聯盟
CHkLinux聯盟
建議:在很小的網絡中,採用缺省配置。而在Internet中,我們建議你保持myorigin與mydomain參數相同。也就是說採用該服務器所在的域名稱。CHkLinux聯盟
CHkLinux聯盟
例如:CHkLinux聯盟
CHkLinux聯盟
myorigin = $myhostname (缺省) CHkLinux聯盟
myorigin = $mydomain (推薦) CHkLinux聯盟
 CHkLinux聯盟
CHkLinux聯盟
接收域配置CHkLinux聯盟
CHkLinux聯盟
參數:CHkLinux聯盟
CHkLinux聯盟
mydestinationCHkLinux聯盟
CHkLinux聯盟
說明:CHkLinux聯盟
CHkLinux聯盟
用於指定該服務器的使用哪個域名來接收郵件。CHkLinux聯盟
CHkLinux聯盟
我們建議,系統安裝好後,儘量不要改動這個參數。CHkLinux聯盟
CHkLinux聯盟
例如:CHkLinux聯盟
CHkLinux聯盟
缺省設置: CHkLinux聯盟
mydestination = $myhostname localhost.$mydomain CHkLinux聯盟
CHkLinux聯盟
廣泛設置: CHkLinux聯盟
mydestination = $myhostname localhost.$mydomain $mydomain CHkLinux聯盟
CHkLinux聯盟
多DNS設置: CHkLinux聯盟
mydestination = $myhostname localhost.$mydomain www.$mydomain ftp.$mydomain CHkLinux聯盟
CHkLinux聯盟
轉發限定CHkLinux聯盟
CHkLinux聯盟
參數:CHkLinux聯盟
CHkLinux聯盟
mynetworksCHkLinux聯盟
relay_domains CHkLinux聯盟
mydestinationCHkLinux聯盟
CHkLinux聯盟
說明:CHkLinux聯盟
CHkLinux聯盟
轉發限定在郵件系統中非常重要。C-Link爲客戶缺省配置了最安全的轉發限定參數。CHkLinux聯盟
CHkLinux聯盟
與轉發限定的參數有很多:主要請參看mynetworks、relay_domains、mydestination。CHkLinux聯盟
CHkLinux聯盟
系統故障報告配置CHkLinux聯盟
CHkLinux聯盟
參數:CHkLinux聯盟
CHkLinux聯盟
notify_classes CHkLinux聯盟
CHkLinux聯盟
說明:CHkLinux聯盟
CHkLinux聯盟
該參數用於告知系統,在哪種情況下用哪種方式通知用戶。CHkLinux聯盟
CHkLinux聯盟
可以選擇的參數類型有:CHkLinux聯盟
CHkLinux聯盟
bounce 郵件原封不動彈回;CHkLinux聯盟
CHkLinux聯盟
2bounce 將雙份彈回郵件發送給Postmaster;CHkLinux聯盟
CHkLinux聯盟
delay 將拖延的郵件的頭部信息通知Postmaster;CHkLinux聯盟
CHkLinux聯盟
policy 將被系統過濾掉的信息通知Postmaster;CHkLinux聯盟
CHkLinux聯盟
protocol 將協議錯誤信息通知Postmaster;CHkLinux聯盟
CHkLinux聯盟
resource 將因系統資源短缺而投遞失敗的信息通知Postmaster;CHkLinux聯盟
CHkLinux聯盟
software 將因軟錯誤而投遞失敗的信息通知Postmaster.CHkLinux聯盟
CHkLinux聯盟
CHkLinux聯盟
例如:CHkLinux聯盟
缺省: CHkLinux聯盟
notify_classes = resource, software CHkLinux聯盟
CHkLinux聯盟
主機名配置CHkLinux聯盟
CHkLinux聯盟
參數:CHkLinux聯盟
CHkLinux聯盟
myhostnameCHkLinux聯盟
CHkLinux聯盟
說明:CHkLinux聯盟
CHkLinux聯盟
myhostname參數用於描述運行C-Link系統的服務器所符合規則的域名全稱。在許多UNIX系統中,C-Link會自動檢測出正確的名稱。但在某些操作系統中需要手工配置,如TurboLinux。CHkLinux聯盟
CHkLinux聯盟
例如: CHkLinux聯盟
CHkLinux聯盟
myhostname = host.local.domain (local hostname is not FQDN) CHkLinux聯盟
myhostname = host.virtual.domain (virtual interface) CHkLinux聯盟
myhostname = virtual.domain (virtual interface) CHkLinux聯盟
CHkLinux聯盟
原始域配置CHkLinux聯盟
CHkLinux聯盟
參數:CHkLinux聯盟
CHkLinux聯盟
mydomainCHkLinux聯盟
CHkLinux聯盟
說明:CHkLinux聯盟
CHkLinux聯盟
系統自己檢測。暫不開放。CHkLinux聯盟
CHkLinux聯盟
系統內部網絡子網配置CHkLinux聯盟
CHkLinux聯盟
參數:CHkLinux聯盟
CHkLinux聯盟
mynetworks_stype CHkLinux聯盟
CHkLinux聯盟
mynetworksCHkLinux聯盟
CHkLinux聯盟
說明:CHkLinux聯盟
CHkLinux聯盟
mynetworks_stype用於設定郵件系統內部子網的限制情況。通常情況下設定爲subnet。在單機情況下設置爲host.CHkLinux聯盟
CHkLinux聯盟
設定的子網內部,郵件可以開放式轉發。這對於配置郵件集羣很有作用。但要小心使用,防止將郵件系統設置爲OPEN RELAY。CHkLinux聯盟
CHkLinux聯盟
例如:CHkLinux聯盟
CHkLinux聯盟
mynetworks_style = subnet CHkLinux聯盟
CHkLinux聯盟
mynetworks_style = hostCHkLinux聯盟
CHkLinux聯盟
 CHkLinux聯盟
CHkLinux聯盟
mynetworks = 168.100.189.0/28, 127.0.0.0/8 CHkLinux聯盟
 CHkLinux聯盟
CHkLinux聯盟
統內部網絡地址配置CHkLinux聯盟
CHkLinux聯盟
參數:CHkLinux聯盟
CHkLinux聯盟
inet_interfacesCHkLinux聯盟
CHkLinux聯盟
說明:CHkLinux聯盟
CHkLinux聯盟
inet_interfaces用於指定特定的網絡地址。CHkLinux聯盟
CHkLinux聯盟
系統保留,暫不開放。CHkLinux聯盟
CHkLinux聯盟
例如:CHkLinux聯盟
CHkLinux聯盟
inet_interfaces = all CHkLinux聯盟
CHkLinux聯盟
inet_interfaces = virtual.host.name (virtual domain) CHkLinux聯盟
CHkLinux聯盟
inet_interfaces = $myhostname localhost.$mydomain (non-virtual mailer) CHkLinux聯盟
 CHkLinux聯盟
CHkLinux聯盟
進程限制CHkLinux聯盟
CHkLinux聯盟
參數:CHkLinux聯盟
CHkLinux聯盟
default_process_limit CHkLinux聯盟
CHkLinux聯盟
說明:CHkLinux聯盟
CHkLinux聯盟
用於限定SMTP服務的最大同時連接數量。缺省爲50。根據服務器配置及操作系統的不同,可以做非常寬限的配置。CHkLinux聯盟
CHkLinux聯盟
例如:CHkLinux聯盟
CHkLinux聯盟
default_process_limit = 1024CHkLinux聯盟
CHkLinux聯盟
本地同時同址分發限制CHkLinux聯盟
CHkLinux聯盟
參數:CHkLinux聯盟
CHkLinux聯盟
local_destination_concurrency_limitCHkLinux聯盟
 CHkLinux聯盟
CHkLinux聯盟
說明:CHkLinux聯盟
CHkLinux聯盟
系統保留,暫不開放。CHkLinux聯盟
CHkLinux聯盟
例如:CHkLinux聯盟
CHkLinux聯盟
local_destination_concurrency_limit = 2 CHkLinux聯盟
 CHkLinux聯盟
CHkLinux聯盟
缺省同時同址分發限制CHkLinux聯盟
CHkLinux聯盟
參數:CHkLinux聯盟
CHkLinux聯盟
default_destination_concurrency_limitCHkLinux聯盟
 CHkLinux聯盟
CHkLinux聯盟
說明:CHkLinux聯盟
CHkLinux聯盟
系統保留,暫不開放。CHkLinux聯盟
CHkLinux聯盟
例如:CHkLinux聯盟
CHkLinux聯盟
default_destination_concurrency_limit = 10CHkLinux聯盟
CHkLinux聯盟
隊列重發週期CHkLinux聯盟
CHkLinux聯盟
參數:CHkLinux聯盟
CHkLinux聯盟
queue_run_delay CHkLinux聯盟
CHkLinux聯盟
說明:CHkLinux聯盟
CHkLinux聯盟
用於設定隊列處理程序對拖延郵件的掃描週期。CHkLinux聯盟
CHkLinux聯盟
缺省爲1000秒。CHkLinux聯盟
CHkLinux聯盟
例如:CHkLinux聯盟
CHkLinux聯盟
queue_run_delay = 1000CHkLinux聯盟
CHkLinux聯盟
最長隊列生命期CHkLinux聯盟
CHkLinux聯盟
參數:CHkLinux聯盟
CHkLinux聯盟
maximal_queue_lifetimeCHkLinux聯盟
CHkLinux聯盟
說明:CHkLinux聯盟
CHkLinux聯盟
用於設定隊列處理程序對滯留郵件的最長保存期。CHkLinux聯盟
CHkLinux聯盟
缺省爲5天。CHkLinux聯盟
CHkLinux聯盟
例如:CHkLinux聯盟
CHkLinux聯盟
maximal_queue_lifetime = 5CHkLinux聯盟
CHkLinux聯盟
最小投遞失敗週期CHkLinux聯盟
CHkLinux聯盟
參數:CHkLinux聯盟
CHkLinux聯盟
minimal_backoff_timeCHkLinux聯盟
CHkLinux聯盟
說明:CHkLinux聯盟
CHkLinux聯盟
用於設定隊列處理程序對無法投遞的郵件的最短巡迴時間。CHkLinux聯盟
CHkLinux聯盟
缺省爲1000秒。CHkLinux聯盟
CHkLinux聯盟
例如:CHkLinux聯盟
CHkLinux聯盟
minimal_backoff_time= 1000CHkLinux聯盟
CHkLinux聯盟
最長投遞失敗週期CHkLinux聯盟
CHkLinux聯盟
參數:CHkLinux聯盟
CHkLinux聯盟
maximal_backoff_timeCHkLinux聯盟
CHkLinux聯盟
說明:CHkLinux聯盟
CHkLinux聯盟
用於設定隊列處理程序對無法投遞的郵件的最長巡迴時間。CHkLinux聯盟
CHkLinux聯盟
缺省爲4000秒。CHkLinux聯盟
CHkLinux聯盟
例如:CHkLinux聯盟
CHkLinux聯盟
maximal_backoff_time= 4000CHkLinux聯盟
CHkLinux聯盟
錯誤命令緩衝時間CHkLinux聯盟
CHkLinux聯盟
參數:CHkLinux聯盟
CHkLinux聯盟
smtpd_error_sleep_timeCHkLinux聯盟
CHkLinux聯盟
說明:CHkLinux聯盟
CHkLinux聯盟
當SMTP服務端口接收到非法的命令時,系統將緩衝處理的時間間隔。CHkLinux聯盟
CHkLinux聯盟
這個參數對於防止惡意攻擊非常有效。CHkLinux聯盟
CHkLinux聯盟
例如:CHkLinux聯盟
CHkLinux聯盟
smtpd_error_sleep_time = 5CHkLinux聯盟
CHkLinux聯盟
smtpd_error_sleep_time =0CHkLinux聯盟
CHkLinux聯盟
軟錯誤容忍次數CHkLinux聯盟
CHkLinux聯盟
參數:CHkLinux聯盟
CHkLinux聯盟
smtpd_soft_error_limit CHkLinux聯盟
CHkLinux聯盟
說明:CHkLinux聯盟
CHkLinux聯盟
SMTP服務所允許的軟錯誤次數。這個參數對於防止惡意攻擊非常有效。CHkLinux聯盟
CHkLinux聯盟
缺省10次。CHkLinux聯盟
CHkLinux聯盟
例如:CHkLinux聯盟
CHkLinux聯盟
smtp_soft_error_limit = 5CHkLinux聯盟
CHkLinux聯盟
硬誤容忍次數CHkLinux聯盟
CHkLinux聯盟
參數:CHkLinux聯盟
CHkLinux聯盟
smtpd_hard_error_limit CHkLinux聯盟
CHkLinux聯盟
說明:CHkLinux聯盟
CHkLinux聯盟
SMTP服務所允許的硬錯誤次數。這個參數對於防止惡意攻擊非常有效。CHkLinux聯盟
CHkLinux聯盟
缺省100次。CHkLinux聯盟
CHkLinux聯盟
例如:CHkLinux聯盟
CHkLinux聯盟
smtp_hard_error_limit = 100CHkLinux聯盟
CHkLinux聯盟
郵件頭部過濾 CHkLinux聯盟
CHkLinux聯盟
參數:CHkLinux聯盟
CHkLinux聯盟
header_checksCHkLinux聯盟
CHkLinux聯盟
說明:CHkLinux聯盟
CHkLinux聯盟
用於過濾郵件的頭部信息。CHkLinux聯盟
CHkLinux聯盟
例如:CHkLinux聯盟
CHkLinux聯盟
header_checks = regexp:/wdpost/filter/header_checksCHkLinux聯盟
CHkLinux聯盟
文件header_checks內容遵循完全的regexp強大的字符串語法匹配規則。CHkLinux聯盟
CHkLinux聯盟
如,/^to: *friend@public/.com$/ REJECT CHkLinux聯盟
CHkLinux聯盟
SMTP連接控制過濾CHkLinux聯盟
CHkLinux聯盟
參數:CHkLinux聯盟
CHkLinux聯盟
smtpd_client_restrictions CHkLinux聯盟
CHkLinux聯盟
說明:CHkLinux聯盟
CHkLinux聯盟
smtpd_client_restrictions 參數的功能非常強大。它可以對連接到C-Link郵件服務器的各種客戶端以及其他服務器進行限制。CHkLinux聯盟
CHkLinux聯盟
該參數有以下的選項可以靈活配置設定。CHkLinux聯盟
CHkLinux聯盟
reject_unknown_client 拒絕不能IP反向解析的地址;CHkLinux聯盟
CHkLinux聯盟
permit_mynetworks 允許子網中的連接;CHkLinux聯盟
CHkLinux聯盟
check_client_access maptype:mapname 檢測在mapname文件中設定的規則;CHkLinux聯盟
CHkLinux聯盟
reject_maps_rbl拒絕符合rbl行爲條件的連接。CHkLinux聯盟
CHkLinux聯盟
reject_unauth_pipelining 拒絕爲認證的管道連接。CHkLinux聯盟
CHkLinux聯盟
CHkLinux聯盟
缺省狀態下,該參數不做設定。CHkLinux聯盟
CHkLinux聯盟
例如:CHkLinux聯盟
CHkLinux聯盟
smtpd_client_restrictions = CHkLinux聯盟
CHkLinux聯盟
HELO握手要求控制過濾CHkLinux聯盟
CHkLinux聯盟
參數:CHkLinux聯盟
CHkLinux聯盟
smtpd_helo_requiredCHkLinux聯盟
CHkLinux聯盟
說明:CHkLinux聯盟
CHkLinux聯盟
設定C-Link郵件系統是否在SMTP連接時必須進行HELO或EHLO握手。CHkLinux聯盟
CHkLinux聯盟
缺省爲不需要。CHkLinux聯盟
CHkLinux聯盟
例如:CHkLinux聯盟
smtpd_helo_required = no CHkLinux聯盟
CHkLinux聯盟
HELO握手主機控制過濾CHkLinux聯盟
CHkLinux聯盟
參數:CHkLinux聯盟
CHkLinux聯盟
smtpd_helo_restrictionsCHkLinux聯盟
CHkLinux聯盟
說明:CHkLinux聯盟
CHkLinux聯盟
當HELO握手必須時。該參數用於驗證握手信息是否符合要求。CHkLinux聯盟
CHkLinux聯盟
可以選擇的參數有:CHkLinux聯盟
CHkLinux聯盟
reject_invalid_hostname 拒絕錯誤的hostname。CHkLinux聯盟
CHkLinux聯盟
permit_naked_ip_address 拒絕裸IP地址。CHkLinux聯盟
CHkLinux聯盟
reject_unknown_hostname 拒絕爲被DNS A或MX紀錄指定的域名。CHkLinux聯盟
CHkLinux聯盟
reject_non_fqdn_hostname 拒絕不符合域名規則的域名。CHkLinux聯盟
CHkLinux聯盟
check_helo_access maptype:mapname 根據mapname中設定的信息限制。CHkLinux聯盟
CHkLinux聯盟
CHkLinux聯盟
RFC821類型信封地址控制過濾 CHkLinux聯盟
CHkLinux聯盟
參數:CHkLinux聯盟
CHkLinux聯盟
strict_rfc821_envelopesCHkLinux聯盟
CHkLinux聯盟
說明:CHkLinux聯盟
CHkLinux聯盟
設定C-Link系統是否必須只接受符合RFC821所定義的負荷規則的郵件地址。CHkLinux聯盟
 CHkLinux聯盟
CHkLinux聯盟
缺省爲no.CHkLinux聯盟
CHkLinux聯盟
例如:CHkLinux聯盟
CHkLinux聯盟
strict_rfc821_envelopes = yesCHkLinux聯盟
CHkLinux聯盟
發信人地址限定過濾CHkLinux聯盟
CHkLinux聯盟
參數:CHkLinux聯盟
CHkLinux聯盟
smtpd_sender_restrictions =CHkLinux聯盟
CHkLinux聯盟
說明:CHkLinux聯盟
CHkLinux聯盟
設定發信人地址必須符合的規則。確實爲任意。CHkLinux聯盟
CHkLinux聯盟
可以設定爲以下參數:CHkLinux聯盟
CHkLinux聯盟
reject_unknown_sender_domain 拒絕爲沒有DNS A或MX紀錄的發信人域名。CHkLinux聯盟
CHkLinux聯盟
check_sender_access maptype:mapname 根據mapname文件中的規則設定。CHkLinux聯盟
CHkLinux聯盟
reject_non_fqdn_sender 拒絕不符合規則的發信人地址。CHkLinux聯盟
CHkLinux聯盟
CHkLinux聯盟
收信人地址限定過濾CHkLinux聯盟
CHkLinux聯盟
參數:CHkLinux聯盟
CHkLinux聯盟
smtpd_recipient_restrictionsCHkLinux聯盟
CHkLinux聯盟
說明:CHkLinux聯盟
CHkLinux聯盟
設定特殊的發信人地址參數限制。CHkLinux聯盟
CHkLinux聯盟
可以選擇的參數有:CHkLinux聯盟
CHkLinux聯盟
check_relay_domains 檢測轉發域。CHkLinux聯盟
CHkLinux聯盟
permit_auth_destination 允許經過認證的目的地。CHkLinux聯盟
CHkLinux聯盟
reject_unauth_destination 拒絕爲經過認證的目的地。CHkLinux聯盟
CHkLinux聯盟
permit_mx_backup 允許反查詢MX主機名稱。CHkLinux聯盟
CHkLinux聯盟
check_recipient_access maptype:mapname 根據mapname文件中設定的規則限制。CHkLinux聯盟
CHkLinux聯盟
reject_unknown_recipient_domain 拒絕轉發到沒有DNS A或MX紀錄的域名。CHkLinux聯盟
CHkLinux聯盟
reject_non_fqdn_recipient 拒絕不符合規則的轉發目標。CHkLinux聯盟
CHkLinux聯盟
reject_unknown_sender_domain 拒絕沒有IP反解析紀錄的發件人域名。CHkLinux聯盟
CHkLinux聯盟
CHkLinux聯盟
ETRN命令限定過濾CHkLinux聯盟
CHkLinux聯盟
系統保留,不開放。CHkLinux聯盟
CHkLinux聯盟
反垃圾郵件組織過濾 CHkLinux聯盟
CHkLinux聯盟
參數:CHkLinux聯盟
CHkLinux聯盟
maps_rbl_domains CHkLinux聯盟
CHkLinux聯盟
說明:CHkLinux聯盟
CHkLinux聯盟
這是一個非常有特色的反垃圾郵件功能。這個參數通常設定爲CHkLinux聯盟
CHkLinux聯盟
maps_rbl_domains = blackholes.mail-abuse.org CHkLinux聯盟
CHkLinux聯盟
如果RBL lookup打開,系統回自動與全球著名的反垃圾郵件組織mail-abuse進行同步。組織來自mail-abuse所列舉的不安全的電子郵件服務器。CHkLinux聯盟
CHkLinux聯盟
在缺省狀態下這個功能是關閉的。CHkLinux聯盟
CHkLinux聯盟
SMTP對話行長度限定過濾CHkLinux聯盟
CHkLinux聯盟
參數:CHkLinux聯盟
CHkLinux聯盟
line_length_limitCHkLinux聯盟
CHkLinux聯盟
說明:CHkLinux聯盟
CHkLinux聯盟
設定SMTP所接受的最長字符行的長度。CHkLinux聯盟
CHkLinux聯盟
缺省爲2048字節。CHkLinux聯盟
CHkLinux聯盟
郵件頭部長度限定過濾CHkLinux聯盟
CHkLinux聯盟
參數:CHkLinux聯盟
CHkLinux聯盟
header_size_limitCHkLinux聯盟
CHkLinux聯盟
CHkLinux聯盟
說明:CHkLinux聯盟
CHkLinux聯盟
設定SMTP所接受的最長郵件頭部信息的長度。CHkLinux聯盟
CHkLinux聯盟
缺省爲102400字節CHkLinux聯盟
CHkLinux聯盟
收件人數量限定過濾CHkLinux聯盟
CHkLinux聯盟
參數:CHkLinux聯盟
CHkLinux聯盟
extract_recipient_limit CHkLinux聯盟
CHkLinux聯盟
說明:CHkLinux聯盟
CHkLinux聯盟
限制擴展的收件人數量限制。這通常用於防止採用"sendmail -t"的方式來進行的攻擊行爲。CHkLinux聯盟
CHkLinux聯盟
郵件長度限定過濾CHkLinux聯盟
CHkLinux聯盟
參數:CHkLinux聯盟
CHkLinux聯盟
message_size_limit CHkLinux聯盟
CHkLinux聯盟
說明:CHkLinux聯盟
這個參數很重要。用於限定系統所接受的最大的單封郵件長度。CHkLinux聯盟
缺省爲10240000 字節。CHkLinux聯盟
例如:CHkLinux聯盟
message_size_limit = 20480000CHkLinux聯盟
彈回郵件長度過濾CHkLinux聯盟
參數:CHkLinux聯盟
bounce_size_limitCHkLinux聯盟
說明:CHkLinux聯盟
這個參數非常重要,用於設定彈回的最大郵件尺寸。CHkLinux聯盟
缺省爲50000 字節。

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章