在介紹如何配置Postfix的smtp配置之前有必要首先介紹一下它的背景和特點。Postfix是一個由IBM資助下由WietseVenema 負責開發的自由軟體工程的一個産物,其目的是為使用者提供除sendmail之外的郵件伺服器選擇。Postfix力圖做到快速、易于管理、提供盡可能的安全性,同時盡量做到和sendmail郵件伺服器保持相容性以滿足使用者的使用習慣。起初,Postfix是以VMailer這個名字釋出的,後來由于商标上的原因改名為Postfix。
Postfix是一個非常優秀的MTA,她素以高效、安全的特點而著稱。Postfix是作者在UNIX上所見過的MTA中在反垃圾郵件(Anti-Spam或Anti-UCE)方面做得最好的一個,甚至有很多公司在Postfix代碼的基礎上進行二次開發而推出反垃圾郵件網關産品。MTA的反垃圾郵件功能,實際上就是在MTA處理過程中對會話進行過濾。這個過濾不但過濾了發往自身的垃圾郵件,而且還防止了自身被惡意利用發送垃圾郵件。Postfix實作了目前所有主要的MTA過濾技術。postfix是Wietse Venema在IBM的GPL協定之下開發的MTA(郵件傳輸代理)軟體。和Sendmail相比Postfix更快、更容易管理、更靈活、更安全,同時還與sendmail保持足夠的相容性。
在Postfix中反垃圾郵件大緻有四個方法,smtp認證、逆向域名解析、黑名單過濾和内容過濾。
1、在郵件傳送代理(Mail Transport Agent,MTA)上對來自本地網絡以外的網際網路的發信使用者進行SMTP認證,僅允許通過認證的使用者(我的了解是登陸的使用者)進行遠端轉發。這樣既能夠有效避免郵件傳送代理伺服器為垃圾郵件發送者所利用,又為出差在外或在家工作的員工提供了便利。
2、如果不采取SMTP認證,則在不犧牲安全的前提下,設立面向網際網路的Web郵件網關也是可行的。
3、如果SMTP服務和POP3服務內建在同一伺服器上,在使用者試圖發信之前對其進行POP3通路驗證(POP before SMTP)就是一種更加安全的方法。
4、帶smtp認證的postfix配置:Postfix能限制哪個主機允許通過自身轉發郵件,并且支援限定什麼郵件允許接進。Postfix實作通常的控制功能:黑名單清單、RBL查找、HELO/發送者DNS核實。基于内容過濾目前沒有實作。表檢視: Postfix沒有實作位址重寫語言,而是使用了一種擴充的表檢視來實作位址重寫功能。表可以是本地 dbm或 db檔案等格式。
好,下面就來看看具體的配置過程:
版本
redhat 6.2
cyrus-sasl-1.5.24
snapshot-20010329
步驟:
1). 安裝sasl
#./configure --enable-login --with-pwcheck;make;make install
#echo /usr/local/lib>>/etc/ld.so.conf
#echo /usr/local/lib/sasl >> /etc/ld.so.conf
# ldconfig
2).安裝postfix
# make tidy
# make makefiles CCARGS="-DUSE_SASL_AUTH -I/usr/local/include"\
AUXLIBS="-L/usr/local/lib -lsasl"
# make
# adduser -s /bin/false postfix
# make install
3).修改postfix的cf檔案使支援smtp認證
在/etc/postfix/main.cf檔案最後加上:
smtpd_sasl_auth_enable = yes
smtpd_delay_reject=yes
smtpd_recipient_restrictions = permit_mynetworkspermit_sasl_authenticated permit_auth_destination reject
smtpd_client_restrictions = permit_sasl_authenticated
broken_sasl_auth_clients = yes
smtpd_sasl_security_options = noanonymous
這樣使用者的postfix就支援smtp認證了。Postfix其餘的配置請參考/etc/postfix/main.cf.default和sample-*檔案,這裡不多說了。
現在telnet 25口應該有下面的提示
telnet 127.0.0.1 25
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 mailx.bjcnuol.com ESMTP Postfix
ehlo 127.0.0.1
250-mailx.bjcnuol.com
250-PIPELINING
250-SIZE 10240000
250-ETRN
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
如果有就差不多成功了。
4).配置sasl使支援smtp認證
# touch /usr/local/lib/sasl/smtpd.conf
# echo pwcheck_method:shadow >> /usr/local/lib/sasl/smtpd.conf
5).設定密碼檔案權限
因為postfix使用者無權讀取/etc/shadow是以必須把shadow檔案的權限改成postfix,這不能不說是一個缺陷,如果你覺得不安全,你可以将認證方式該為sasldb的方式,但是這樣需要額外建立使用者和密碼不能和郵件使用者的密碼保持一緻修改密碼也不友善。此外還可以用pwcheck守護程序,但我沒試出來感興趣的朋友可以試試,如果成功了别忘了告訴我。
6).配置OE5
1.打開你的Outlook Express,修改你的賬号屬性,在伺服器選項,選取我的smtp伺服器需要認證選項,然後進入配置。
2.不要選取安全密碼認證,sendmail并不支援這個選項。是選取使用pop3同樣的密碼還是選擇另外輸入使用者密碼,這就看你的愛好和設定了,這不是關鍵。如果你在伺服器上有一個真實賬号,不妨選取使用同樣的密碼,如果沒有賬号,選用其他的使用者密碼同樣可以。
7).啟動和關閉postfix
啟動
postfix start
關閉
postfix stop
你可以把postfix start放到/etc/rc.d/rc.local檔案的最後用來每次重起後自動啟動postfix
無論哪一種認證,其目的都是避免郵件傳送代理伺服器被垃圾郵件發送者所利用,但對于發送到本地的垃圾郵件仍然無可奈何。要解決這個問題,最簡單有效的方法是對發送者的IP位址進行逆向名字解析。
1、通過DNS查詢來判斷發送者的IP與其聲稱的名字是否一緻。例如,其聲稱的名字為mx.hotmail.com,而其連接配接位址為20.200.200.200,與其DNS記錄(我的了解:這個記錄是否在MX中)不符,則予以拒收。這種方法可以有效過濾掉來自動态IP的垃圾郵件,對于某些使用動态域名的發送者,也可以根據實際情況進行屏蔽。
以上介紹的防範措施對使用自身合法域名的垃圾郵件仍然無效。對此比較有效的方法就是使用黑名單服務了。黑名單服務是基于使用者投訴和采樣積累而建立的、由域名或IP組成的資料庫,最著名的是RBL、DCC和Razor等,這些資料庫儲存了頻繁發送垃圾郵件的主機名字或IP位址,供MTA進行實時查詢以決定是否拒收相應的郵件。但是,目前各種黑名單資料庫難以保證其正确性和及時性。例如,北美的RBL和DCC包含了我國大量的主機名字和IP位址,其中有些是早期的Open Relay造成的,有些則是由于誤報造成的。但這些遲遲得不到糾正,在一定程度上阻礙了我國與北美地區的郵件聯系,也妨礙了我國的使用者使用這些黑名單服務。
Postfix 郵件伺服器中應用 RBL 的設定方法:
RBL-采用的是DNS方式的實時黑名單技術,在Postfix中都使用RBL參數來配置。Postfix1.x和Postfix 2.x在使用RBL的配置上是不同的。
Postfix 1.x:
要先用maps_rbl_domains來定義RBL表: maps_rbl_domains = rbl.anti-spam.cn
然後在過濾條件中(如smtpd_recipient_restrictions )使用reject_maps_rbl來拒絕黑名單連接配接:
smtpd_recipient_restrictions = ... reject_maps_rbl,...
Postfix 2.x:
直接在過濾條件中(如smtpd_recipient_restrictions )使用reject_rbl_client來拒絕黑名單連接配接:
smtpd_recipient_restrictions =...
reject_rbl_client rbl.anti-spam.cn,...
如果您想先測試一下RBL服務是否工作正常,可以在reject_maps_rbl指令和reject_rbl_client指令前加上warning_if_reject來改變預設的拒絕動作為警告(警告資訊會在郵件日志中看到)。等确認工作正常後再去掉警告指令。
即使使用了前面諸多環節中的技術,仍然會有相當一部分垃圾郵件漏網。對此情況,目前最有效的方法是基于郵件标題或正文的内容過濾。其中比較簡單的方法是,結合内容掃描引擎,根據垃圾郵件的常用标題語、垃圾郵件受益者的姓名、電話号碼、Web位址等資訊進行過濾。
反垃圾郵件中,内容過濾是非常重要的部分,在Postfix中有兩種内容過濾:郵件頭過濾和郵件内容過濾。
郵件頭包括郵件頭部資訊和MIME頭資訊,要使郵件頭過濾生效需要在main.cf中加入:
header_checks =regexp:/etc/postfix/checks/header_checks
mime_header_checks= regexp:/etc/postfix/checks/mime_header_checks
在這裡我們使用的是标準正規表示式過濾規則,規則檔案中的第一行都類似于如下行:
/^HEADER:.*content_to_act_on/ ACTION MESSAGE
/^HEADER:.*content_to_act_on/是正規表示式,ACTION是對滿足正規表示式時所采取的動作,MESSAGE是該規則的說明,一般用于向用戶端反回資訊或使用者郵件日志。常用的ACTION有:
REJECT 通知Postfix彈回郵件,這樣郵件在進入你的郵件伺服器前便被禁止 IGNORE 通知Postfix删除滿足過濾條件的那部分内容 HOLD 通知Postfix将郵件儲存在郵件隊列中,以便管理對之進一步處理DISCARD 通知Postfix直接删除郵件,在這種情況下,伺服器不對發送者傳回任何資訊,以便讓發送端感覺郵件已經正常發送
下面是一些有用的例子:
/^Subject: .* /REJECT Spam Header Many Spaces
/^Subject: FreeMoney/ REJECT Spam Free Money Mails
/^Date:19[0-9][0-9]/ REJECT Spam past date
/name=[^>]*\.(bat|com|exe)/REJECT Spam Executable Attachements
郵件内容過濾是指郵件的正文内容過濾,它是針對郵件正文中的文字進行過濾,其規則的用法和郵件頭過濾一樣,為了使用郵件内容過濾需要在main.cf中加入:
body_checks =regexp:/etc/postfix/checks/body_checks
下面是幾個有用的規則:
/Free Money/ REJECTSpam Free Money in Body mails
/www.disallowdsites.com/REJECT Disallowed Sites
/Real Bad Words/REJECT Bad Words
需要提醒的是,與郵件頭過濾規則不同的,郵件内容過濾規則中的正則表示式不區分大小寫。
附:通路控制清單
通路控制清單可以限制用戶端對郵件伺服器的通路,main.cf中常用的通路控制如下:
smtpd_client_restrictions SMTPD用戶端限制 smtpd_helo_restrictions SMTPD辨別限制smtpd_sender_restrictions SMTPD發送者限制 smtpd_recipient_restrictions SMTPD接收都限制
以下是通路控制清單使用的示例:
smtpd_client_restrictions = check_client_accesshash:/etc/postfix/checks/access_client
smtpd_helo_restrictions = check_client_accesshash:/etc/postfix/checks/helo_client
smtpd_sender_restrictions = check_client_access hash:/etc/postfix/checks/sender_client
smtpd_recipient_restrictions = check_client_accesshash:/etc/postfix/checks/recipient_client
通路控制表是一個hash表,其中每一行就是一條控制項,如下:
spammer.com 550 You can't sends mailfrom my server.
hacker@ 550You aren't allowed to send mail.
規則中,第一項是規則内容,第二項是對滿足規則時所采取的行動,第三項是傳回給用戶端的資訊。
其中第一條表示禁止任何spammer.com上的使用者發送郵件,第二條表示禁止任何使用者名為hacker的使用者發送郵件。
參考網址:
[1]: postfix郵件伺服器的關鍵安全政策
<a href="http://netsecurity.51cto.com/art/200912/166847_1.htm">http://netsecurity.51cto.com/art/200912/166847_1.htm</a>
[2]: 帶smtp認證的postfix配置
<a href="http://www.mailwhy.com/yjfwq/ps/303.html">http://www.mailwhy.com/yjfwq/ps/303.html</a>
[3]: Postfix 郵件伺服器中應用 RBL 的設定方法:
<a href="http://www.why100000.com/show_answer.asp?autoid=1350&Path=_email">http://www.why100000.com/show_answer.asp?autoid=1350&Path=_email</a>
[4]: Postfix反垃圾郵件簡介
<a href="http://www.mailwhy.com/yjfwq/ps/3026.html">http://www.mailwhy.com/yjfwq/ps/3026.html</a>