☛ 简介

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