Grey Listing

English Version

[ 最新版本: 4.0-2 ] 為 Fedora 9


從 Fedora 7 開始 Fedora 已經支援 milter-greylist。

從 Fedora 8 升級至 Fedora 9,我發現 milter-greylist 已經有問題了。我重建 sendmail 的 sendmail.cf 對我解決了這個問題:

cd /etc/mail
m4 sendmail.mc > sendmail.cf
service milter-greylist start
service sendmail restart

任何使用 email 的人一定知道什麼是 spam (廣告或垃圾郵件),因為所有使用 email 的人一定常常收到相當多的 spam。 使用 Linux 作業系統作 mail server 的話,一般使用 spamassassin 來過濾這些不受歡迎的 spam。SpamAssassin 是一個相當好的過濾器,但是它很耗 server 的資源,特別是 RAM。如果能減輕這種負擔一定會更理想。現在就有了, 這就叫 Grey Listing。

SpamAssassin 會使用所謂的 whitelist (白名單) 和 blacklist (黑名單) 來過濾 mail server 所收到 的郵件。它缺乏的是第三種名單,就是 greylist (灰名單)。

Grey listing,Evan Harris 所提供的方法, 主要的概念是:spam 所用的 MTA (Mail Transfer Agent) 寄信之後就不管是否遠方的 mail server 有沒有收到它所寄的信。相反的,標準的 MTA 如果它寄信之後發生錯誤,它會繼續的寄這封信一直到遠方的 mail server 收到了這一封信。

所以 grey listing 的方法來過濾 spam 就是:第一次收到郵件就先拒絕這封郵件。等一段時間之後, 如果又收到同樣的郵件就接收這封郵件。看起來很簡單的方法,但是按照測試的結果 grey listing 可以攔截 95% 的 spam。 剩餘的 5% 就給 spamassassin 來處理。

你如果想安裝 milter-greylist 的話,你先確定你已經安裝了 sendmail、sendmail-cf、sendmail-devel、 bison 和 flex。使用的 sendmail、sendmail-cf 和 sendmail-devel 版本必須 >= 8.11 而且支援 milter (mail filter) 的介面。一般來說,Redhat 和 Fedora 所提供的 sendmail 就符合這個條件。

Fedora 7 支援 milter-greylist。在這裡我描寫如何在 Fedora 7 安裝 milter-greylist。

安裝程序:

  1. Fedora 7 的 milter-greylist 需要以下程式,而且先安裝然後才可以安裝 milter-greylist:

  2. 安裝兩個 milter-greylist 程式:

    安裝之後,你必須編輯 /etc/mail/greylist.conf 按照你的需要。至少以下項目必須修改:

    1. 以下必須修改按照你網路的設定:
      list "my network" addr { 127.0.0.1/8 10.0.0.0/8 192.0.2.0/24 }
    2. 要將所有進來的 email 用 greylist 來處理的話,以下五列就不需要。在每列之前放 # 把這些列便成註解:
      list "grey users" rcpt { \
      user1@example.com \
      user2@example.com \
      user3@example.com \
      }
    3. 修改這一列:
            acl greylist list "grey users" delay 30m autowhite 3d
      為:
            acl greylist default delay 30m autowhite 3d
    4. 確認設定檔沒有問題:
            /usr/sbin/milter-greylist -c
      沒有問題的話就會顯示以下的訊息,要不然請你再檢查設定檔:
            config file "/etc/mail/greylist.conf" is okay

  3. 現在我們可以啟動 milter-greylist:

  4. 這樣就安裝 milter-greylist 完畢。但是工作還沒有完。你必須告訴 sendmail 收到郵件時要先給 milter-greylist 來處理。 所以要修改 /etc/mail/sendmail.mc。在 OSTYPE(`linux')dnl 之後加以下 (註:如果你在更新的話, 請注意以下行列有一點不一樣。):
    INPUT_MAIL_FILTER(`greylist',`S=local:/var/run/milter-greylist/milter-greylist.sock')
    define(`confMILTER_MACROS_CONNECT', `j, {if_addr}')
    define(`confMILTER_MACROS_HELO', `{verify}, {cert_subject}')
    define(`confMILTER_MACROS_ENVFROM', `i, {auth_authen}')
    define(`confMILTER_MACROS_ENVRCPT', `{greylist}')
    
  5. 然後建新的 sendmail.cf
    m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
  6. 重新啟動 sendmail:
    service sendmail restart

這樣,工作就告一段落。從今以後,恭喜你,因為你會注意到你收到的 spam 就減少很多。 同時你也會注意到有病毒之 email 也會減少。

蔡由世神父
2005/02/11
更新:2008/06/10