Postfix (3) 反垃圾郵件的措施(1)

我們知道在現在網絡環境中, 存在大量的spam。

就筆者目前負責的一個在線郵件安全系統,每天爲客戶擋掉的spam就有200M 這麼多, 而且這還是已經下降了60%的結果,一年前, 大概每天spam的數量在1B左右。


龐大的垃圾郵件, 浪費的大量的網絡帶寬與磁盤空間。 如何來處理垃圾郵件呢。


一般來說, 有以下幾種選擇

1. 在SMTP對話中,當場拒收垃圾郵件。 這也在第一時間將垃圾郵件拒之門外, 但是也有可能會有合法郵件被認爲是垃圾郵件而被處理掉, 如果客戶不能接收這樣的損失, 可以採用方法2

2. 暫時將可疑的郵件存儲在另外的專用的郵箱中, 再研究可選的程序來處理他們。 比如定期檢閱被 集中起來的可疑郵件, 確定沒有合法郵件之後,一併刪除。

3. 將可疑的郵件打上某種特殊標記, 投遞到用戶的郵箱, 讓用戶收下後自行判斷。 (microsoft的outlook exchange就使用的這種方法)


Postfix的擋信機制

1) 客戶端判別規則

2)語法檢查參數

3)內容檢查

4)自定義規則


一、客戶端判別規則

smtpd_client_restrictions
smtpd_helo_restrictions
smtpd_sender_restrictions
smtpd_recipient_restrictions
smtp_dta_restrictions

如下:


讓我們來簡單看一個完整的SMTP對話過程



上面 0 對應是smtp_client_restriction過程, 這時已經知道了客戶端的IP地址。 就可以做出接受或者拒收的決定。

連接成功後, 客戶端發出 HELO命令, 就是1內容, postfix會依據smtp_helo_restriction來檢查主機名。

3是smtp_sender_restriction的依據與smtp_recipient_restriction的依據

4 是已經經過了header check 與body check,進入下一跳了。


限制條件 客戶端提供的受檢信息
check_client_access type:mapname  
reject_rbl_client 客戶端的IP地址或者主機名
reject_rhsbl_client  
reject_unknown_client  
   
check_helo_access type:mapname  
permit_naked_ip_address  
reject_invalid_hostname  
reject_not_fqdn_hostname HELO 提供的主機名
reject_unknown_hostname  
   
check_sender_access type:mapname  
reject_non_fqdn_sender  
reject_rhsbl_sender Mail From提供的寄件人的郵件地址 
reject_unknown_sender_domain  
   
permit_auth_destination  
permit_mx_backup RCPT TO提供的收件人郵件地址 
reject_non_fqdn_recipient  
reject_unauth_destination  
reject_unknow_recipient_domain  
check_recipient_access type:mapname  
   
reject_unauth_pipelining Data命令
permit 無條件批准
reject 無條件拒絕
defer 無條件延遲
warn_if_reject 將原來的REJECT變成WARN


POSTFIX的限制條件分爲三大類
1) 內置的條件, 名稱是以permit_ 與 reject_開關的,不需要參數

2)自定義條件, 名稱是以check_開頭的,需要一個type:mapname自變量,mapname用來指定訪問表的名稱。

3)通用條件,它們沒有額外的自變量,也不檢查任何個信息,用來直接改變郵件的處理流程


對於內置的條件, 處理方式包括 OK(略過同一過濾規則的其餘條件,繼續下一個,直到所有的規則都完畢或者遇到REJECT), REJECT(立即拒收),DUNNO(看其他的結果)

如果整個的規則沒有明確的結果(全部是DUNNO),默認是收下郵件。

當處理是REJECT,Postfix並不是立即拒收, 而是等到RCPT TO命令時,纔會響應REJECT。如果想改變這種機制,讓其立即RJECT, 在main.cf中,設置 smtpd_delay_reject=no就可以了


當我們新加入一個規則,想調試的時候,

1) 將soft_bounce設置爲yes,這樣服務器返回的5xx會自動轉換爲4xx,這樣允許smtp client保留郵件以再次的嘗試。

如果確定沒有問題了, 再將其關掉。

2) 使用warn_if_reject,將原來的reject動作變成warn,留下log。


下面用一個例子還說明Postfix處理的過程 。

smtp_recipient_restrictions=
              permit_my_network
              reject_unauth_destination
              reject_invalid_hostname
              reject_unknown_sender_domain

其處理流程如下:


下一篇,將繼續介紹,

Postfix (3) 反垃圾郵件的措施(2)


(未完,待續。。。)



發佈了72 篇原創文章 · 獲贊 4 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章