3.1原始碼包的安裝
1. 獲取postfix的原始碼包
從postfix官方站點www.postfix.org取得postfix的原始碼包postfix-19991231-pl08.tar.gz。將其拷貝到/tmp
2.解開原始碼包,將生成/tmp/ postfix-19991231-pl08目錄。
tar xvzf postfix-19991231-pl08.tar.gz
3.編譯原始碼包
cd /tmp/ postfix-19991231-pl08
make
4.建立壹個新用戶“postfix”,該用戶必須具有唯壹的用戶id和組id號,同時應該讓該用戶不能登錄到系統,也即不為該用戶指定可執行的登錄外殼程式和可用的用戶宿主目錄。我們能先用adduser postfix 添加用戶再編輯/etc/passwd文件中的相關條目如下所示:
postfix:*:12345:12345:postfix:/no/where:/no/shell
5.確定/etc/aliases文件中包含如下的條目:
postfix: root
6. 以root用戶登錄,在/tmp/ postfix-19991231-pl08目錄下執行命令:
./install.sh
7. 啟動postfix
# postfix start
8.關於maildrop目錄權限的說明:
postfix能使用壹個所有用戶都可寫的(也即目錄權限為1773)的maildrop
目錄來讓本地用戶提交郵件。這種方法避免了使用set-uid 或 set-gid 軟件,並且在郵件系統不可用時,用戶仍然能提交郵件。其他用戶沒有訪問該目錄中的隊列文件的權限。接收來自網絡的郵件時postfix不使用maildrop目錄。不過,由於該目錄的權限是733,其他用戶能建立壹個硬連接到該目錄中的文件從而導致該郵件被投遞多次或無法刪除,也就是說這將導致安全性問題。如果妳想要使用這種方式來讓用戶提交郵件,就要在install.sh 腳本問妳是否需要set-gid 時回答no。
如果妳的系統有多個用戶的話,最佳取消以上的方式而采用利用set-gid 用
戶權限提交郵件的方式。這時,我們首先需要建立壹個組id唯壹的組"maildrop" 並且確定該組中沒有用戶成員。然後在install.sh 問妳是否需要set-gid 時指定"maildrop"。
提示:在安裝postfix之前,請刪除已安裝的sendmail。
3.2 rpm包的安裝
1. 獲取postfix的rpm軟件包。
我們能從
等號的左邊是參數的名稱,等號的右邊是參數的值; 當然,我們也能在參數的前面加上$來引用該參數,如:
myorigin = $myhostname
雖然postfix有100個左右的參數,不過postfix為大多數的參數都設置了缺省值,所以在讓postfix正常為妳服務之前,妳只需要設置為數不多的幾個參數。下面我們壹起來看壹看這些基本的postfix參數。需要註意的是,壹旦妳更改了main.cf文件的內容,則必須運行postfix reload命令使其生效。
1. myorigin
myorigin參數指明發件人所在的域名。如果妳的用戶的郵件地址為user@domain.com,則該參數指定@後面的域名。缺省地,postfix使用本地主機名作為myorigin,不過建議妳最佳使用妳的域名,因為這樣更具有可讀性。比如:安裝postfix的主機為mail.domain.com則我們能這樣指定myorigin:
myorigin = domain.com
當然我們也能引用其他參數,如:
myorigin = $mydomain
2. mydestination
mydestination參數指定postfix接收郵件時收件人的域名,換句話說,也就
是妳的postfix系統要接收什麽樣的郵件。比如:妳的用戶的郵件地址為user@domain.com, 也就是妳的域為domain.com, 則妳就需要接收所有收件人為user_name@domain.com的郵件。和myorigin相同,缺省地,postfix使用本地主機名作為mydestination。
3. notify_classes
在postfix系統中,必須指定壹個postfix系統管理員的別名指向壹個用戶,
只有這樣,在用戶遇見問題時才有報告的對象,postfix也才能將系統的問題報告給管理員。notify_classes參數就是用來指定向postfix管理員報告錯誤時的信息級別。***有以下幾種級別:
bounce:將不能投遞的郵件的拷貝發送給postfix管理員。出於個人隱私的緣故,該郵件的拷貝不包含信頭。
2bounce:將兩次不可投遞的郵件拷貝發送給postfix管理員。
delay:將郵件的投遞延遲信息發送給管理員,僅僅包含信頭。
policy:將由於uce規則限制而被拒絕的用戶請求發送給postfix管理員,包含整個smtp會話的內容。
protocol:將協議的錯誤信息或用戶企圖執行不支持的命令的記錄發送給postfix管理員。同樣包含整個smtp會話的內容。
resource:將由於資源錯誤而不可投遞的錯誤信息發送給postfix管理員,比如:隊列文件寫錯誤等等。
software:將由於軟件錯誤而導致不可投遞的錯誤信息發送給postfix管理員。
缺省值為:
notify_classes = resource, software
4.myhostname
myhostname 參數指定運行postfix郵件系統的主機的主機名。缺省地,該值被設定為本地機器名。妳也能指定該值,需要註意的是,要指定完整的主機名。如:
myhostname = mail.domain.com
5.mydomain
mydomain參數指定妳的域名,缺省地,postfix將myhostname的第壹部分刪除而作為mydomain的值。妳也能自己指定該值,
6.mynetworks
mynetworks 參數指定妳所在的網絡的網絡地址,postfix系統根據其值來差別用戶是遠程的還是本地的,如果是本地網絡用戶則允許其訪問。妳能用標準的a、b、c類網絡地址,也能用cidr(無類域間路由)地址來表示,
7.inet_interfaces
inet_interfaces 參數指定postfix系統監聽的網絡接口。缺省地,postfix監聽
所有的網絡接口。如果妳的postfix運行在壹個虛擬的ip地址上,則必須指定其監聽的地址。
4.3 postfix的uce(unsolicited commercial email)控制
所謂uce控制就是指控制postfix接收或轉發來自於什麽地方的郵件。
缺省地,postfix轉發符合以下條件的郵件:
* 來自客戶端ip地址符合$mynetworks的郵件。
* 來自客戶端主機名符合$relay_domains及其子域的郵件。
* 目的地為$relay_domains及其子域的郵件。
缺省地,postfix接受符合以下條件的郵件:
* 目的地為$inet_interfaces的郵件。
* 目的地為$mydestination的郵件。
* 目的地為$virtual_maps的郵件。
不過我們也能通過下面的規則來實現更強大的控制功能。
1. 信頭過濾
通過header_checks參數限制接收郵件的信頭的格式,如果符合指定的格式,則拒絕接收該郵件。能指定壹個或多個查詢列表,如果新郵件的信頭符合列表中的某壹項則拒絕該接收郵件。
2.客戶端主機名/地址限制
通過smtpd_client_restrictions參數限制能向postfix發起smtp 連接的客戶端的主機名或ip地址。能指定壹個或多個參數值,中間用逗號隔開。限制規則是按照查詢的順序進行的,第壹條符合條件的規則被執行。
3. 是否請求helo命令
能通過smtpd_helo_required參數指定客戶端在smtp會話的開始是否發
送壹個helo命令。妳能指定該參數的值為yes或no。
4. helo主機名限制
能通過smtpd_helo_restrictions參數指定客戶端在執行helo命令時發送
給postfix的主機名。缺省地,postfix接收客戶端發送的任意形式的主機名。能指定壹個或多個參數值,中間用逗號隔開。限制規則是按照查詢的順序進行的,第壹條符合條件的規則被執行。
5. rfc 821信頭限制
rfc 821對郵件的信頭做了嚴格的規定,不過廣泛使用的sendmail並不支
持該規定,所以對於該參數我們只能說不,
6. 通過發件人地址進行限制
能用smtpd_sender_restrictions參數通過發件人在執行mail from命令時提供的地址進行限制。能指定壹個或多個參數值,中間用逗號隔開。限制規則是按照查詢的順序進行的,第壹條符合條件的規則被執行。
reject_unknown_sender_domain:如果mail from命令提供的主機名在dns中沒有相應的a 或 mx 記錄則拒絕該客戶端的連接請求。能用unknown_address_reject_code參數指定返回給客戶機的錯誤代碼(缺省為450)。
check_sender_access maptype:mapname:根據mail from命令提供的主機名、父域搜索access數據庫。如果搜索的結果為reject 或 "[45]xx text" 則拒絕該客戶端的連接請求;如果搜索的結果為ok、relay 或數字則接受該客戶端的連接請求。能用access_map_reject_code參數指定返回給客戶機的錯誤代碼(缺省為554)。能通過該參數過濾來自某些不受歡迎的發件人的郵件。
reject_non_fqdn_sender:如果mail from命令提供的主機名不是rfc規定的完整的域名則拒絕客戶端的連接請求。能用non_fqdn_reject_code 參數指定返回給客戶機的錯誤代碼(缺省為504)。
缺省地,postfix接受來自所有發件人的郵件。
7. 通過收件人地址進行過濾
能用smtpd_recipient_restrictions參數通過發件人在執行rcpt to命令
時提供的地址進行限制。缺省值為:
smtpd_recipient_restrictions = permit_mynetworks, check_relay_domains
能指定壹個或多個參數值,中間用逗號隔開。限制規則是按照查詢的順序
進行的,第壹條符合條件的規則被執行。可用的規則有:
check_relay_domains:如果符合以下的條件,則接受smtp連接請求,否則拒絕該連接,能用relay_domains_reject_code 參數指定返回給客戶機的錯誤代碼(缺省為504)。
* 客戶端主機名符合$relay_domains及其子域
* 目的地為$inet_interfaces、$mydestination或$virtual_maps
permit_auth_destination:不管客戶端的主機名,只要符合以下的條件,就
接受smtp連接請求:
* 解析後的目標地址符合$relay_domains及其子域
* 解析後的目標地址符合$inet_interfaces、$mydestination或$virtual_maps
reject_unauth_destination:不管客戶端的主機名,只要符合以下的條件,
就拒絕該客戶端smtp連接請求:
* 解析後的目標地址符合$relay_domains及其子域
* 解析後的目標地址符合$inet_interfaces、$mydestination或$virtual_maps
check_recipient_access:根據解析後的目標地址、父域搜索access數據庫。如果搜索的結果為reject 或 "[45]xx text" 則拒絕該客戶端的連接請求;如果搜索的結果為ok、relay 或數字則接受該客戶端的連接請求。能用access_map_reject_code參數指定返回給客戶機的錯誤代碼(缺省為554)。
reject_unknown_recipient_domain:如果收件人的郵件地址在dns中沒有相應的a 或 mx 記錄則拒絕該客戶端的連接請求。能用unknown_address_reject_code參數指定返回給客戶機的錯誤代碼(缺省為450)。
reject_non_fqdn_recipient:如果發件人在執行rcpt to命令時提供的地址
不是完整的域名則拒絕其smtp連接請求。能用the non_fqdn_reject_code參數指定返回給客戶機的錯誤代碼(缺省為504)。
回答不容易,希望能幫到您,滿意請幫忙采納壹下,謝謝 !