BKJIA獨家特稿】Postfix是Linux上常用的郵件伺服器之一。本文對Postfix郵件伺服器的參數進行了簡述,並著重介紹了配置過程中需要注意的安全事項。
快速配置Postfix郵件伺服器
Postfix最被人稱道的地方就在於其設定檔的可讀性很高。Postfix的主設定檔是/etc/postfix/main.cf。
在main.cf檔案中,參數都是以類似變數的設定方法來設定的,這些參數的使用主要包含兩部分的內容:
1)定義和聲明變數:例如definename = good-better-best。等號左邊是變數的名稱,等號右邊是變數的值。
2)引用變數:可以在變數的前面加上符號“$”來引用該變數,如:myname = $ definename相當於definename = good-better-best)。
需要注意的是:等號兩邊需要有空白字元。此外,如果變數有兩個以上的設定值,就必須用逗號“,”或者空格符“ ”將它們分開。
在熟悉了上述變數的定義和引用方法後,下面詳細介紹如何安全、高效地配置Postfix伺服器的相關選項。
1.設定Postfix服務監聽的網路介面
預設情況下,inet_interfaces參數的值被設定為localhost,這表明只能在本地郵件主機上寄信。如果郵件主機上有多個網路介面,而又不想使全部的網路介面都開放Postfix服務,就可以用主機名稱指定需要開放的網路介面。不過,通常是將所有的網路介面都開放,以便接收從任何網路介面來的郵件,即將inet_interfaces參數的值設定為“all”,如下所示:
inet_interfaces = all
2.安全設定可內送郵件的主機名稱或網域名稱
mydestination參數非常重要,因為只有當發來的郵件的收件者地址與該參數值相匹配時,Postfix才會將該郵件接收下來。通過該選項的設定可以過濾掉許多沒有經過認證和授權的郵件,從而節省伺服器的儲存空間,以及節省使用者的郵件處理時間。
舉一個簡單的例子,使用者可以將該參數值設定為如下:
accept_domain = test.netmydestination = $accept_domain
這就表明無論來信的收件者地址是X@test.net其中X表示某使用者在test.net域中的郵件賬戶名),Postfix都會接收這些郵件。而除此之外的郵件,Postfix都不會接受。
3.安全設定可轉寄郵件的網路IP設定)
有關安全設定可轉寄郵件的網路可以使用mynetworks參數來設定。可將該參數值設定為所信任的某台主機的IP地址,也可設定為所信任的某個IP子網或多個IP子網採用“,”或者“ ”分隔)。
比如,使用者可以將mynetworks參數值設定為172.168.96.0/24,則表示這台郵件主機只轉寄子網172.168.96.0/24中的用戶端所發來的郵件,而拒絕為其他子網轉寄郵件:
mynetworks = 172.168.96.0/24
除了mynetworks參數外,還有一個用於控制網路郵件轉寄的參數是mynetworks-style,它主要用來設定可轉寄郵件網路的方式。通常有以下三種方式:
1)class:在這種方式下,Postfix會自動根據郵件主機的IP地址得知它所在的IP網路類型即A類、B類或是C類),從而開放的它所在的IP網段。
2)subnet:這是postfix的預設值,postfix會根據郵件主機的網路介面上所設定的IP地址、子網路遮罩來得知所要開放的IP網段。
3)host:在這種方式下,postfix只會開放本機。
通常,使用者一般不需要設定mynetworks-style參數,而直接設定mynetworks參數。如果這兩個參數都進行了設定,那麼mynetworks參數的設定有效。
4.設定可轉寄郵件的網路網域名稱設定)
上面介紹的mynetworks參數是針對郵件來源的IP來設定的,而relay_domains參數則是針對郵件來源的網域名稱或主機名稱來設定的,其實從原理上來說是一致的,不過是區分了IP地址和網域名稱而已,不過,relay_domains還需要依賴DNS這個基礎設施。
例如,使用者可以將relay_domains參數值設定為test.net,則表示任何由域test.net發來的郵件都會被認為是信任的,Postfix會自動對這些郵件進行轉寄,如下所示:
relay_domains = test.net
那麼,要使它能在實際網路中更好地轉寄郵件,還必須進行相應的DNS設定。那麼,需要在該網路的DNS伺服器上定義了一個主地區test.net,並在該地區設定檔中定義了以下記錄:
//定義郵件伺服器的IP地址patterson.test.net. IN  A  172.168.96.254//定義郵件伺服器的別名mail.test.net. IN CNAME  patterson.test.net.//定義優先順序別test.net.  IN MX  10 mail.test.net.
上述記錄只對郵件伺服器進行了定義,還有諸如SOA、NS等的定義,在這裡就不再贅述。
配置Postfix使用SMTP安全認證
Postfix預設不會對外開放轉寄功能,而僅對本機localhost)開放轉寄功能。但是,在實際應用中,必須在Postfix主設定檔中通過設定mynetworks、relay_domains參數來開放一些所信任的網段或網域,否則該郵件伺服器幾乎沒有什麼用處。在開放了這些所信任的網段或網域後,還可以通過設定SMTP認證,對要求轉寄郵件的用戶端進行使用者身份使用者賬戶名與密碼)驗證。只有通過了驗證,才能接收該使用者寄來的郵件並協助轉寄。同樣,Postfix中目前比較常用的SMTP認證機制是通過Cyrus SASL包來實現的。
預設情況下,Postfix並沒有啟用SMTP認證機制。要讓Postfix啟用SMTP認證,就必須對Postfix的主設定檔/etc/postfix/main.cf進行修改。使用者需要在main.cf檔案中添加如下有關SMTP認證的設定部分:
smtpd_sasl_auth_enable = yessmtpd_sasl_local_domain = ''smtpd_recipient_restrictions = permit_mynetworkspermit_sasl_authenticated, reject_unauth_destinationbroken_sasl_auth_clients=yessmtpd_client_restrictions = permit_sasl_authenticatedsmtpd_sasl_security_options = noanonymous
其中,每個選項的具體含義如下:
1)smtpd_sasl_auth_enable:指定是否要啟用SASL作為SMTP認證方式。預設不啟用,這裡必須將它啟用,所以要將該參數值設定為yes。
2)smtpd_sasl_local_domain:如果採用Cyrus-SASL版進行認證,那麼這裡不做設定。
3)smtpd_recipient_restrictions:表示通過收件者地址對用戶端發來的郵件進行過濾。通常有以下幾種限制規則:
4)broken_sasl_auth_clients:表示是否相容非標準的SMTP認證。有一些Microsoft的SMTP用戶端採用非標準的SMTP認證協議,只需將該參數設定為yes就可解決這類不相容問題。
5)smtpd_client_restrictions:表示限制可以向Postfix發起SMTP串連的用戶端。如果要禁止未經過認證的用戶端向Postfix發起SMTP串連,則可將該參數值設定為permit_sasl_authenticated。
6)smtpd_sasl_security_options:用來限制某些登入的方式。如果將該參數值設定為noanonymous,則表示禁止採用匿名登入方式。
在完成上述設定後,必須使用
/etc/init.d/postfix reload
重新載入設定檔,或使用
/etc/init.d/postfix restart
重新啟動Postfix服務,以使該配置生效。這兩個命令的具體使用需要根據不同的Linux版本來選用。
此外,由於當Postfix要使用SMTP認證時,會讀取/usr/lib/sasl2/smtpd.conf檔案中的內容,以確定所採用的認證方式,因此如果要使用saslauthd這個守護進程來進行密碼認證,就必須確保/usr/lib/sasl2/smtpd.conf檔案中的內容為:
pwcheck_method: saslauthd
bkjia.com獨家特稿,轉載請註明原文作者和出處。】
作者介紹:李洋部落格),博士畢業於中科院計算所。10多年來一直從事電腦網路資訊安全研發工作,曾主持和參與多項國家重點項目以及資訊安全系統和公司資訊安全系統的研發工作。具有Linux系統應用、管理、安全及核心的研發經驗,擅長網路安全技術、協議分析、Linux系統安全技術、Linux系統及網路管理、Linux核心開發等。