☛ 簡介

postgrey 是個政策伺服器,通過實施灰名單在 Postfix 郵件伺服器上過濾垃圾郵件。 灰名單的原理建基於多數垃圾郵件都發件者都是垃圾郵件程式或其它不乎合 RFC 的 MTA。 postgrey 會在預設時限內臨時以「稍後重試」450 號錯誤拒絕新郵件,並在它的資料庫內記錄客端 IP/寄件者/收件者這三組資料。 假若寄件的伺服器乎合 RFC,它應該重寄該郵件,到時 postgrey 便會在資料庫內找尋配對並接納該郵件。 這個拖延時限是可自訂的,而且 postgrey 維護一個資料庫儲存已知的組合,因此來自同一位發件人郵件只會在首封經歷延誤。

相反地,典型的垃圾郵件程式一般都會接收大量的回郵或被拒郵件,因此垃圾郵件發件人多數在臨時被拒的情況下不會重寄郵件。 故此任何來自該類來源地的郵件將會被棄置。 這樣額外帶來的好處就是減省郵件伺服器花在過濾及處理郵件上的時間,因為大部分的郵件在進入 MTA 之先便會被棄置,所以不必過濾或處理。

☛ 安裝及設定

Postgrey 在 CentOS 5.1 上是通過 RPMForge 安裝最新版本的,雖然這裡的指示也適用於其它版本。 要啟用 RPMForge 軟件庫,請參閱 RPMForge 內的指引。 首先,請安裝 postgrey:

[root@localhost ~ ]# yum install postgrey

Postgrey 是用 Perl 寫成的,因此 Perl 及某些 Perl 模塊必須被安裝。 Yum 應該會自動判斷你所仍未安裝的依賴性套件,而你亦可以在 Postgrey 的網站查閱它的要求。

我們首要是設定 Postfix 應用 Postgrey。 編輯 /etc/postfix/main.cf 仿照下面在 smtpd_recipient_restrictions 這個部份加入 check_policy_service 這一行 (假如你沒有 smtpd_recipient_restrictions 這部份,那麼下面是個不錯的列子):

smtpd_recipient_restrictions =
   permit_mynetworks,
   permit_sasl_authenticated,
   reject_unknown_sender_domain,
   reject_unknown_recipient_domain,
   reject_unauth_destination,
   ##以下網址為提供黑名單查詢的網站
   reject_rbl_client cbl.abuseat.org,
   reject_rbl_client bl.spamcop.net,
   reject_rbl_client cblless.anti-spam.org.cn,
   reject_rbl_client sbl-xbl.spamhaus.org,
   check_policy_service unix:postgrey/socket,
   permit
#過濾用戶端是黑名單內的成員:
smtpd_client_restrictions =
     check_client_access hash:/etc/postfix/access,
     reject_rbl_client cbl.abuseat.org,
     reject_rbl_client bl.spamcop.net,
     reject_rbl_client cblless.anti-spam.org.cn,
     reject_rbl_client sbl-xbl.spamhaus.org
#過濾不明的送件者網域主機
smtpd_sender_restrictions = 
     reject_non_fqdn_sender,
     reject_unknown_sender_domain

並在 main.cf 設定檔的最尾端修改為:

smtpd_sasl_auth_enable = yes

存檔後,在執行以下命令建立 access.db 的資料庫,以配合上述的設定:

[root@localhost postfix]# postmap hash:/etc/postfix/access

最後,我們須要啟動 Postgrey 這個服務及重新載入 Postfix 的設定:

[root@localhost postfix]# systemctl restart postfix
[root@localhost postfix]# systemctl start postgrey
[root@localhost postfix]# systemctl enable postgrey