使用procmail過濾病毒

$Id: use-procmail.html,v 1.19 2004/05/12 03:29:52 ols3 Exp $

procmail 的角色已是一個功能極為強大的 MDA,並可用來過濾大多數知名的病毒。減少困擾。

小弟提供您自動更新過濾規則檔的機制。

注意:提供這個機制只希望它有用,但沒有任何擔保,使用前,
您應先進行風險評估,若有任何信件遺失且/或造成其它損害、意外,小弟不負任何責任。

做法:

  1. 下載: 自動更新程式(shell script),位址如下:

    ftp://ftp.tnc.edu.tw/Sysop/MAIL/procmail/up-procmailrc.sh

    請將該檔放入 root 目錄中(當然位置可自訂)

  2. 給執行權:

    chmod +x up-procmailrc.sh

  3. 放入自動執行工作排程:

    crontab -u root -e

    0 6 * * * /root/up-procmailrc.sh

    每日 6 時 update 一次,時段可自訂。它會將 procmailrc 放入您主機的 /etc 目錄中。

如此一來,您便可自動抓取敝中心的 procmailrc 檔,並時時更新。

先決條件:

  1. 您的 MTA 必須能支援 procmail,比如:Postfix、sendmail。
  2. 您的 MTA 必須設定正確。請參考:http://linux.tnc.edu.tw/techdoc/postfix-howto.htm
  3. 您的主機有安裝 wget

若您發現有 procmailrc 無法濾除的新病毒,可將該病毒信以另存信件的方式,然後帶檔寄至 virus@www.tnc.edu.tw,小弟會適時更新它。

放心,小弟雖不使用任何防毒軟體,但絕對不會中毒,您可大方地寄來。若能力許可,小弟每周至少會更新一次。

OLS3


FAQ1: 我如何保有我自己的過濾條件,而不會被清除?

ANS:

把您自己寫的過濾條件,存放在 /etc/my.procmailrc 中
記得該檔第一行一定要空白列,再接著放過濾條件

然後,修改一下 up-procmailrc.sh,sample 如下:


#! /bin/sh
                                                                                
if [ -f /usr/bin/wget ]; then
        /usr/bin/wget -O /etc/procmailrc.my.tmp ftp://ftp.tnc.edu.tw/Sysop/MAIL/procmailrc
        if [ -s /etc/procmailrc.my.tmp ]; then
                #mv -f /etc/procmailrc.my.tmp /etc/procmailrc
                cd /etc
                cat procmailrc.my.tmp myprocmailrc > procmailrc
                rm -f procmailrc.my.tmp
        fi
else
        echo "Hey man,I can not find any wget stuff in your box."
fi

我個人用的 myprocmailrc 列出如下,供您參考。
請注意! 這是我個人的選擇條件,使用前請確認您自己的需求。
若您要使用,請放入 /etc 目錄中:



# 拒絕由各ISP 動態 IP relay 過來的信件
:0 BH
* ^Received:.*from.*\(.*(\-|\.).*(\-|\.).*(\-|\.).*\.dynamic\..*
/dev/null

# 不要 undisclosed-recipients
:0
* ^To:.*undisclosed-recipients
/dev/null
                
# 拒絕由大陸流行的 FoxMail(China) 發的廣告信
:0
* ^X-Mailer:.*FoxMail
/dev/null

# 我不想接 gb2312 編碼的 email
:0 BH
* ^(From:.*=\?GB2312\?B\?|Subject:.*=\?GB2312\?B\?|Content-Type:.*text/html;charset="GB2312")
/dev/null


FAQ2: 請問收件者為undisclosed-recipients的郵件可否由伺服器端直接過濾? 我都設定好了,卻一樣會收到垃圾郵件。還是說哪個地方我疏忽了?

ANS:


> 請問收件者為undisclosed-recipients的郵件可否由伺服器端直接過濾? 

可以, 以前原本就設定直接濾除, 但有些單位反映他們需要 undisclosed-recipients的郵件,
因此, 後來改成預設關掉.

若您想濾掉它有二個方法:

1. 把 ftp://ftp.tnc.edu.tw/Sysop/MAIL/procmailrc 中以下三列前的 # 去除:

#:0
#* ^To:.*undisclosed-recipients.*
#/dev/null

2. 或者, 請參考: http://linux.tnc.edu.tw/techdoc/use-procmail.html

該文最後有列出我個人用的額外過濾條件, 請按該文末的 FAQ1 來處理即可。

>我都設定好了,卻一樣會收到垃圾郵件。
>還是說哪個地方我疏忽了?

SMTP 的協定本身就無法使任何一種方法可以百分之一百濾除垃圾郵件,
我們能夠做的是把漏網之魚降到最低。

以我個人而言,使用以下三個方法:

1. http://linux.tnc.edu.tw/techdoc/use-procmail.html
2. http://free.tnc.edu.tw/modules/news/article.php?storyid=832
3. http://www.tnc.edu.tw/edumsg/showmsg.php?msg_id=9623&from_unit=tnc

再配合 Mozilla Mail 的垃圾郵件過濾功能,我每天平均的垃圾郵件量都只有一二封而已
,有時甚至好幾天都沒有垃圾郵件在我的收信匣中。