歡迎您光臨本站 註冊首頁

SpamAssassin的中文垃圾郵件過濾規則集

←手機掃碼閱讀     火星人 @ 2014-03-04 , reply:0

SpamAssassin的中文垃圾郵件過濾規則集

CCERT於2004年9月7日推出了第一個開放式中文垃圾郵件過濾規則集(參見:
http://www.ccert.edu.cn/spam/sa/Chinese_rules.cf),用於業界廣泛
使用的免費垃圾郵件過濾系統SpamAssassin,對於中文垃圾郵件的過濾起到很好的效果,在業界引起了廣泛關注。
  
    SpamAssassin 是目前最為廣泛的免費反垃圾郵件系統,擁有超過3000萬用戶(郵件伺服器)。但是,由於以前沒有中文的過濾規則集,SpamAssassin 對中文郵件過濾的準確性不高。CCERT反垃圾郵件研究小組在陳光英博士的帶領下,推出了中國第一個基於SpamAssassin的中文垃圾郵件過濾規則集,該規則集從CCERT垃圾郵件投訴信箱中提取大量垃圾郵件樣本,利用統計方法和遺傳演算法來訓練和優化每條規則的權重,過濾的準確率超過了99%。利用CCERT所掌握的豐富的樣本數據,該規則集目前每周更新一次,時效性很好。

    該規則集是目前在SpamAssassin 官方網站上發布的唯一一個中文垃圾郵件過濾規則集(參見 :http://wiki.apache.org/spamassassin/CustomRulesets),也是用google搜索能夠找到的唯一一個中文過濾規則集,自從在網路上發布以來,引起
了較大的反響。
《解決方案》

SpamAssassin的中文垃圾郵件過濾規則集

自己寫一套,還比較好:
http://211.72.210.251/spamcop.html

那個東西無法解決 QP/Base64 encoding 吧..
而且我寫的可以做到 summary 統計等,全部用 procmail+mysql 來實現
User 都可以從網頁自訂 Filter rule (Patten,RBL,White List...),且完全將信件的 encoding 解碼
核心的 procmailrc 只有 100 行程式
被檔的信件不會到 User 信箱,但每天會給 user Block list
User 只要在 Block List( EMAIL notify) 點一下就可以取回來了
而且,我們還養 spamcop.net 這個 RBL, 你可以看到最下面的地方有一個
Submit, 可以自動將這份 List 發給 RBL 組織,再自動 submit RBL 的
commit , 個人認為再也不能做得更好了(或有限) ... :mrgreen:
《解決方案》

SpamAssassin的中文垃圾郵件過濾規則集

原帖由 "abel" 發表:
自己寫一套,還比較好:
http://211.72.210.251/spamcop.html

那個東西無法解決 QP/Base64 encoding 吧..
而且我寫的可以做到 summary 統計等,全部用 procmail+mysql 來實現
User 都可以從網頁自訂 Filter rule ..........

兄弟能不能share一下啊
《解決方案》

SpamAssassin的中文垃圾郵件過濾規則集

講個主題吧...
不然光 procmailrc 語法就死一堆人...
自動 submit spamcop 也是
中文解碼還原也是 ...
...
因為若沒有根基,就沒有荿盛的葉子呀 ...

我一天會收到平均三百封 spam, 自完成這個後, 95% 以上的 spam
都可以被檔下來,誤檔率也不到 1%,且也有充份的補救措施,
可以再從 mail server 自動取回來
《解決方案》

SpamAssassin的中文垃圾郵件過濾規則集

原帖由 "abel" 發表:
自己寫一套,還比較好:
http://211.72.210.251/spamcop.html

那個東西無法解決 QP/Base64 encoding 吧..
而且我寫的可以做到 summary 統計等,全部用 procmail+mysql 來實現
User 都可以從網頁自訂 Filter rule ..........

amavisd-new配合SA可以做到QP/base64 decode..因此原則上沒有問題的。。至於說垃圾郵件的digest,不知道abel兄台是怎麼設計的?

是每封信到達時檢測看新信箋夠了n封后再發digest還是。。?願聞其詳。
《解決方案》

SpamAssassin的中文垃圾郵件過濾規則集


amavisd-new配合SA可以做到QP/base64 decode..因此原則上沒有問題的。。至於說垃圾郵件的digest,不知道abel兄台是怎麼設計的?

是每封信到達時檢測看新信箋夠了n封后再發digest還是。。?願聞其詳。

hzqbbc 兄,您的 pm 我就不回了,我想大家在這個串裏討論即可,也方便後
進可以看看大家的推演,只有我們兩個用 email 討論的話,大概其他人也
不會受益 ...

我們不是做 Mail Server 或 Anti-Spam 的,研究這些東西主要只是為了給
我們這種三十人的小單位使用,以練練自己技術, amavisd-new 是好東西,但
是和某些 MTA 搭配時,尤其是 sendmail 會有 "Lost input" 問題,至於 SA
,有人說吃 Resource 很兇...並不是說這些東西好或不好,但站在個人角度
或公司立場,我們是希望自己有一套方法來 anti-spam/anti-virus,而
anti-spam 是 User 自己決定做不做, anti-virus 站在公司角度來說是一定
要執行的,所以切合自己的需要是最重要的.

anti-virus 很簡單,用 procmailrc 常用的語法及公司政策就可以全部打死
政策就是:拒收所有的可執行檔,像 .com .pif .js ...都擋掉,並教育 user
觀念,因為我們人少,流動率低,所以三年來從沒有人中過什麼 email virus,
個人認為從政策面入手,再由技術面配合, anti-virus 實在不用什麼技巧

anti-spam 就不同了,我個人一天有400~500 封的信件,其中九成是 Spam,XD~
不擋怎受得了, SA 的作法符合大家的需求,所以很多人都用,但是 SA 並不能
滿足我們,尤其是 Forward 的信件或網頁或 mailing-list 常會誤判,甚至我
們請商業公司給我們適用一些產品,像 eShield 等,結果也是亂七八糟,判對
了就算了,判錯了你還給我加一堆 header 或是改 Subject: SPAM-xxxx, 造
成回信的困擾

anti-spam 最多人用的技術不外乎是 RBL,網路上隨便抄都有各種 MTA 設定的
Sample,不過講實在話,我相信 99.99% 人永遠不知道 Connection 就被 RBL
設定 Reject 的信有多少,到底是真 Spam 還是重要信件你也很難檢驗.個人的態
度則不然,既然我自己要寫符合公司使用的 anti-spam ,我就得做實驗,我用
我的 EMAIL account 做了一項測試,每封收進來的信由 procmail 來判讀,並計
數統計,做成像
http://www.sdsc.edu/~jeff/spam/Blacklists_Compared.html
的比較表,找出最符合我們特性的 RBL ,當然,不只計數如此而以,你還得看該
RBL 準確度,該 RBL 的運作機制等(例如檢舉/移除/可靠度..),最後找出三個
來使用(使用過多的 RBL 一點意義都沒有),有些 RBL 只是敵視某些國家或 ISP
等,其實這都不值得使用的.

我使用 procmail 來做上述的一些檢測,當然技術層面一定要夠了才做得了,
當然,我也可以使用 procmail 來做寄出/寄入的條件性備份(我是 sendmail 派的),
只是,講實在話,我看這裡的人大多都只重表面,不重實際,只要文檔,不要原理,只要
結果,不思過程,當然也有些非常重實際的人,像您一般.
我三年前,我學 procmail 相關的運用,可是花了整整一個星期,我看遍 manpage
相關的說明 (procmail/formail/procmailrc/procmailex/procmailsx..),
各大小相關的 procmail 網站都逛過,基本上這些都是做過不斷的實驗與實作,
所累積下來的經驗,即使我貼出來我的做法,我想以這個版的風氣,大概就是
"怎麼不行/mysql 連不到/我要怎麼自己加 Patten/CGI 不 Work/
Http 500 Internal Error" , XD~ ,這個版上也從沒有一篇有關 procmail
像樣的說明...,我看到的精華區幾篇關於 procmail 感覺都只是抄過來的而以

當然, procmail 如同 SA 一般給人的感覺都是吃資源,這是多數人的感覺,
一則以我們單位不大,二則以掌握度高,三則以 LDA 為 filter 對像,其實
在我們來看,並不會佔用太多 Mail Server Resource

我的個人觀點, anti-spam ,你就要懂 Mail Server, SPAM 原理,Mail Format/
Encoding 等相關東西,不然就用人家寫好的就好,實在沒必要自己做這種苦力
---------------------------------------------------------------------

以上只是個人一些在這版看到的一些感想,言歸正傳


amavisd-new配合SA可以做到QP/base64 decode..因此原則上沒有問題的。。至於說垃圾郵件的digest,不知道abel兄台是怎麼設計的?

是每封信到達時檢測看新信箋夠了n封后再發digest還是。。?願聞其詳。


hzqbbc 兄問得應該是我怎麼做的原理吧~我就只用 procmail 來做而以,procmail
這個東西在許多 MTA 上都是預設的 LDA,所以 postfix 應也是一樣做法,只是我專
走 sendmail 的研究,而版上諸友看來都是 Qmail.

procmail 收到信後往 local deliver 送時,自然會讀 $HOME/.procmailrc 是否存在,
所以,我只要把 .procmailrc 丟到該 USER 的 $HOME 下,過濾機制自然對他生效,
每封信進來就會判斷,儘量不要把 procmailrc 設在 /etc 下,因為那會對整個 MTA
生效,我做過實驗,你每個 USER 放一個 .procmailrc ,和放 /etc/procmailrc ,其
實對系統的 Loading 差很多,尤其是在一封信寄給很多人的情形,如果一封信寄到
一個 aliases, 裡面有 10 個 account , 在 /etc 下, procmail 會跑 100 次,
而 $HOME 下只會有十次, 最好的方式像 amavisd-new/Mail-Scanner 則只會做一次
當然,這是他們在進信的過程中所處的位置不同所造成的差異...(您應看得懂,其他
大概九成的人不懂).

所以,信件判斷,照多數人只看中文教學的人來說,大概只會做:

#procmailrc sample1,符合 domain.net 來信的要過濾掉
:0 H
* ^From: .*domain.net.*
/path/to/save

# 進來的信件要複製轉寄一份給 other_server_email@domain
:0c
! other_server_email@domain

# 高明一點知道如何避免 Loop
:0c
* ! ^Have-Filter: 1
| formail -A "Have-Filter: 1" | sendmail -oi -t email


好了,現在我們看到,信轉走了,或丟到別的位置去了,這都是大家從別人的 sample 學來的
但是有沒有發現 可以 pipe (|) 給一隻程式處理,這裡我們只要做一些手腳,就可以那來
做很多事了(其實像上面例子的 From: 就可以是程式)
我們可以來美化一下:

# MYSQL 變數就是你拿來存 spam info 的連接參數
MYSQL="mysql -u username -ppassword -h hostname dbname"
# 取出誰寄給你信
FROM=`formail -zxFrom:| sed -e 's/.*<\(.*\)>;.*/\1/g'`
# 取一個檔名來歸信件檔
FILE=`echo $HOME`/procmail/mail_folder/mail-`echo $$`-`date +%Y%m%d%H%I%S`.eml
# 將每個人的信件單獨存成一個檔案
tmp=`formail >; $FILE`
# 取出主旨列內容,主旨列可能是 8bit,或是有 charset, 或是有 QP 編碼及 MIME BASE64 編碼等情形
tmp=`formail -zxSubject:`
# 一個自己寫的簡單解碼程式,將編碼還原成 Big5
SUBJ=`/etc/parser_subj "$tmp"|sed -e 's/ //g'`

# flag HD 或下面的 fw 自己 manpage 吧
# 儘量少用 小寫 h,因為會濾掉 header,不過大概沒有人看得懂這句話
:0 HD
* (^From:|^Received:|Return-Path:) .*(mailserver.idv.tw|mailserver.com|worldad.net|mailnews.com.tw).*
{
        :0 fw
        | echo "insert into SPAM(MAIL_FROM,RCPT_TO,SUBJ,FILE_NAME,MAIL_TYPE,USERNAME,REASON,PATTEN ) values('$FROM','$TO','$SUBJ','$FILE',1,'$LOGNAME','發信軟體','mailserver 信商發出')"    | $MYSQL

        :0
        /dev/null
}


好了,如此我們即可判斷出 (From 或 Reveived 或 Return-Path) 有 (mailserver.idv.tw 或 mailserver.....)
的信,要導給一個程式做處理,這個程式只是將必要資訊存入 mysql 中

最後,信件存入 /dev/null (就是殺掉了)

再來看一個我的範例:

:0 hD
* ! ^From: .*mydomain.net.tw.*
{
        :0 fh
# 取出的 $SUBJ 和資料庫中的該 USER 定義的中文字做比對
        | ( patten=`echo "select concat(PATTEN,\" \") from SPAM_PATTEN where USERNAME='$LOGNAME' and instr('$SUBJ',PATTEN)"|$MYSQL      | grep -v 'PATTEN'`; \
# 比對結果長度不為0,表示 Match
        if [ ${#patten} -ne 0 ] ; \
# 在信件加一個表頭欄位, Spam: 符合的字串項目
                then    formail -A "Spam: $patten";     \
# 把資訊寫入 mysql 中
                echo "insert into SPAM(MAIL_FROM,RCPT_TO,SUBJ,FILE_NAME,MAIL_TYPE,USERNAME,REASON,PATTEN ) values('$FROM','$TO','$SUBJ','$FILE',1,'$LOGNAME','符合特定字串','$patten')" | $MYSQL;       \
# 把該 PATTEN 計數加一,有可能一封信符合多個 PATTEN, 每個都要加一,所以要用 for loop 處理
                for p in $patten;do        \
                        echo "update SPAM_PATTEN set CNT=CNT+1 where USERNAME='$LOGNAME' and PATTEN='$p'| $MYSQL;        \
                done;        \
        fi );

        :0
        * ^Spam: .*
        /dev/null
}


上述的 # 註解不應該存在那裏,只是為了方便大家看而加,不然程式為出錯

好了,大柢原則就是這樣做而以,你要怎麼 coding 看你的能力而以, 為什麼要 ; \ 懂
shell 的人一定知道,這個過程中,我們將所有資訊都存入 $FILE 及 mysql 中,
再來就只要按時 run 一個 cronjob , 把 summary 送給 user 即可,不是嗎 !?
只是這個 cronjob 送出來的是 html 的信件, user 只要在這個 summary report
上,像你看到的 http://211.72.210.251/spamcop.html 看到的例子上點主旨列
就可以取回信件,就跟網頁的做法是一樣的.

註: 取回的信件不是又進了過濾條件,怎麼取得回來呢 !? 有時間再和大家分曉吧
有興趣的人先去消化一下,沒想到這點的人你就不要關心這個主題了.
《解決方案》

SpamAssassin的中文垃圾郵件過濾規則集

原帖由 "abel" 發表:
......amavisd-new 是好東西,但
是和某些 MTA 搭配時,尤其是 sendmail 會有 "Lost input" 問題,至於 SA
,有人說吃 Resource 很兇...並不是說這些東西好或不好,但站在個人角度
或公司立場,我們是希望自己有一套方法來 anti-spam/anti-virus,而
anti-spam 是 User 自己決定做不做, anti-virus 站在公司角度來說是一定
要執行的,所以切合自己的需要是最重要的. ......


amavisd-new應該有一個sendmail的helper programe的。但我基本不玩sendmail,所以也不好說這個helper是否有用。SA吃資源是挺厲害的,全文過濾+進行n多的過濾規則test,感覺有點恐怖。。

......SA 的作法符合大家的需求,所以很多人都用,但是 SA 並不能
滿足我們,尤其是 Forward 的信件或網頁或 mailing-list 常會誤判,甚至我
們請商業公司給我們適用一些產品,像 eShield 等,結果也是亂七八糟,判對
了就算了,判錯了你還給我加一堆 header 或是改 Subject: SPAM-xxxx, 造
成回信的困擾......

對於forward的信件,這個真的就不好判斷是否垃圾信了,所以還必須有機制使用戶可以將一些被判為spam的信從junk mailbox里取出來放回inbox的。至於說改subject,這個大可以屏蔽掉的。 :em11:  

......anti-spam 最多人用的技術不外乎是 RBL,網路上隨便抄都有各種 MTA 設定的 Sample,不過講實在話,我相信 99.99% 人永遠不知道 Connection 就被 RBL 設定 Reject 的信有多少,到底是真 Spam 還是重要信件你也很難檢驗.個人的態 度則不然,既然我自己要寫符合公司使用的 anti-spam ,我就得做實驗,我用我的 EMAIL account 做了一項測試,每封收進來的信由 procmail 來判讀,並計 數統計,做成像.....當然,不只計數如此而以,你還得看該 RBL 準確度,該 RBL 的運作機制等(例如檢舉/移除/可靠度..),最後找出三個
來使用(使用過多的 RBL 一點意義都沒有),有些 RBL 只是敵視某些國家或 ISP
等,其實這都不值得使用的. ......

RBL是個又讓人愛又讓人恨的東西,可以考慮在SA里加相應規則,如果被某些rbl列進去后,則加相應的分數,如果是百名單里的ip則減掉相應的分數等,而不要簡單的reject,可能會好一些。

至於ip層的檢測,我修改了一下SPF設計了MSBL,可以在一定程度上解決或緩解RBL的問題,配合APS則可以較好的處理spam郵件。。目前的情況是95%或者99%(我自己的mailbox就是99%的垃圾都可以block掉)以上的spam可以blocked掉。關鍵還是綜合多種方法。

關於abel兄提到學procmail的經歷,我深有同感,任何一個工具,即便只是使用,要深刻應用也要大量的精力和試驗。需要的知識更是一點一點積累而非一日之功。至於說cu上關於procmail沒有一篇好文,我覺得也不足為奇,畢竟我們還是很缺乏刻苦鑽研+無私奉賢精神嘛 :em16:


至於說到procmailrc及.porocmail在遇到aliases時的執行次數,我倒不太明白為何procmailrc會被執行100次呢??因為我使用的是maildrop,其不支持aliaes。。請賜教了

......註: 取回的信件不是又進了過濾條件,怎麼取得回來呢 !? 有時間再和大家分曉吧
有興趣的人先去消化一下,沒想到這點的人你就不要關心這個主題了.

我猜大概是在判別信件為spam時已打了一個標記,如果取信時進入過濾條件,一旦發現這個標記,則ignore之。不知道是不是呢?如果是我設計,首先想到的就是這個方法,打標籤的方法。

最後,非常佩服abel兄將procmail用得如此嫻熟,確實讓偶增長見識了:)換成我的話,我大概又得寫點程序來做,而不是利用mda本身的特性完成了。 :em19:
《解決方案》

SpamAssassin的中文垃圾郵件過濾規則集

hzqbbc 兄果然亦是箇中翹楚呀~相信您在這個領域一定也投入很久在研究
其實,做這種工作永遠都吃力不討好,永遠無法充份滿足每個人的需求,而我們
自己內部也討論過,最後用 procmail 這種方式主要還是他的可補救因素,及
可自訂程序的能力,我在用這個東西的時候, amavisd-new/SA/Mail-Scanner
等好像都還沒有問世(不確定,三年前的事了),雖然絕大多數的 procmailrc
的 rule 都可以移到 ruleset 去做,但其可能造成無法補救的誤擋.

至於我個人,做每件東西,我一定會研究清楚他的原理,當然,過程肯定也會跌跌
撞撞,重要的是憑著一種求知的想法去學,而不是以應付工作的想法去學,想到什麼
東西可以加強這個領域的應用都是非常值得再學習的.

至於您提到的幾個看法,我都非常同意,同時也留意新技術的發展及測試,像 SPF
v2 等演變,只是看來看去,以現在的情況來說,Spam 幾乎無解,無非是法律或協定
的翻新,但也接近不可能的狀態

您的許多觀點或看法我可以理解,雖然我用的是 sendmail , 您用的是 postfix,
道理到了一定程度,大概都差不多,只是我做不到 99% 程度,我想這和量及SPAM特
性有關,當然就我們來說,只要有能擋掉 95%左右 SPAM 及 98~99% 的準確率,對我
來說巳經足夠,我們有的主管,一天可以收到一兩千封 SPAM,用了我寫的東西後,
簡值讚不絕口~這個時候,也是個人最有成就的時候,不是求任何錶現,而是你真的
可以為單位提供出一套完整又可靠的做法,用不用隨個人決定,用的人也可以自己選
選擇規則項目及內容. 當然,我前面講得也只有 procmailrc 的片段,這裡面所用到
的一些技術其實都非常簡單,但是一個好的檔信 Solution 不是只有"擋" 這件事,
應該包含了有效率的 cronjob 通知(因為我都存在資料庫中,所以可以知道許多資訊),
也可以產生任何的報表給 User:
http://211.72.210.251/mail/mail-abelyang-day.png
註:我用 rrdtool 做的,但中文化也是自己K了他三天程式寫出來的,我寫出來時,mailscanner-mrtg
也還沒問世...

當然,要滙整全公司或某部間狀況,只要資料庫對 "人"和 "信" 的定義很清楚,都可
以很簡單做出來. 總結即是,你要能做到 Filter 結果存起來另外使用即可,不用每
個巳被判為 Spam/Virus 還寄到 User 信箱.



至於說到procmailrc及.porocmail在遇到aliases時的執行次數,我倒不太明白為何procmailrc會被執行100次呢??因為我使用的是maildrop,其不支持aliaes。。請賜教了


關於這點我相信是 MDA->;LDA 時發生的狀況,其現象我也沒有當我寄信到一個有
/etc/procmailrc 的 sendmail 時,若該信件沒有被存入 user mailbox 條件發
生,就會發生 10^2 次的 procmail filter 行為 (10 為收信人數,若是 20 位收
信人,那就 20^2 次了),為什麼會這樣我也不敢直論我的理解是對的,只是在三
年前的實驗確實會這樣,造成一封信若寄給許多位的 Local User, 那系統 Loading
就會衝很高,會成平方(^2)計算也是從資料庫中統計而以,因為若寄給 5 人,在
資料庫中就會出現25筆等.



我猜大概是在判別信件為spam時已打了一個標記,如果取信時進入過濾條件,一旦發現這個標記,則ignore之。不知道是不是呢?如果是我設計,首先想到的就是這個方法,打標籤的方法。


是的,道理大同小異,但我個人的例子,所有進信都另存新檔(當然也可以存到 db 或那去)
如果信件被判為 SPAM, 則直接都丟棄,因為巳有備份檔,並將必要資訊寫到 db
User 從網頁取回本信時才貼 Re-Sent 標簽.表示是 User 取回來的,從這個動作
你就可以知道自己的東西狀況大概如何,你可以把取回來的部份除了送給 User 外,
也寫到 DB 必要的資訊,如此即可有個判斷,來知道 User 為何取回

取回,也是一門學問,你如何保持原信如平常一般....

mail 指令  ,Ex: cat $FILE | mail -s $SUBJ -t $TO    這肯定行不通
sendmail 指令 ,Ex: cat $FILE | sendmail -oi  這巳算是稍有概念的人
         了,但是如果本信 To/CC 多人,你等於再送一次信給他們,也是沒用
pine/mutt/mpack 指令,轉成附加檔另外送.這算是可接受的方案,唯看你的 user
         是否接受了
直接 cat $FILE 到 User MailBox, 如果你用 Command Line 當然可以,lock 風險
         也不高,但用網頁除非 superl/suphp ...等,能不能 suexec,對多數人
         來說,恐怕也分不清楚,但直接 cat >;>; 一定會存在 Overwrite 分險
URL $FILE download, 這是最笨的方法


其實答案還是在 procmail 裏, procmail 既然為 LDA, 自然有能力寄 Local
User 的信件(不可以寄到非本機),我們可以將檔案開起來,以formail 加入 header,
再丟給 procmail 跑一次即可:

cat $FILE | formail -A "By Pass header" | /usr/bin/procmail","-d",$REMOTE_USER


當然,每件事情的做法都有 N 種,採取那一種完全看公司環境及個人能力.我選擇
幾本上算是最難的一條路之一,但是卻是一條可以學到最多的路,因為得了解 Mail Server
及 Mail 許多特性.而為了將 UI(User Interface) 做好,你可能得投入更多的心血
因為我們要讓 spamcop.net 更拙壯(它各方面機製做得真的很好),所以每個人可以
直接從網頁 submit 他所有的 spam 給該 RBL,漏網之魚,則只要寄到我提供的 antispam
帳號,後面的 spamcop.net 程序一樣會自動跑完,下次再收到的機會就不大了


至於ip層的檢測,我修改了一下SPF設計了MSBL,可以在一定程度上解決或緩解RBL的問題,配合APS則可以較好的處理spam郵件。。目前的情況是95%或者99%(我自己的mailbox就是99%的垃圾都可以block掉)以上的spam可以blocked掉。關鍵還是綜合多種方法。

SPF 還好,但若不能有重大突破,早晚會失敗, Domain Key 多少也存在許多現實問題 ..
MSBL Subject 過濾法,我們即有使用, MATCH 即 Block,是你 User 自己設的哦,所以
     被檔了,自己去 Block List 找回來
APS 就不解,這個東西是 Client 端的嗎 ?


我們家的東西很簡單,最重要的就是 Friendly, User 自己決定用不用,若要
用,你自己決定用什麼(WhiteList,RBL,MSBL...),信被檔了,都是 User 自己設的,
與我這個 System Admin 無關,你覺得不好可以取消,誤檔也替你將取回做的好好的
(有些 anti spam/virus 的取回簡直太費事了),達到了系統管理者無責任之境地,唯
一的責任就是我寫的東西要正常 work 即可,架 Mail Server 容易,維護難呀!

至於教學文檔,其實我在台灣巳寫過很多了,我的做法一點也不複雜,全部都寫在
netman 兄的網站上了,一些較關鍵處的原理都做了交待. 當然,非關鍵處,是本來就應
具備的,像上面的例子中 $LOGNAME 為何 ? 怎麼來的 ? 我認為這種 manpage 裏就要
標準答案的東西,我是不會說明原因的

至於個人學習東西,向來都是只找資料來看,從不發問. 你在論壇問了,有人給了你標準答
案,其實這樣對你而言只是解決眼前問題而以,一點收獲都沒有,你自己找資料的過程中,學到
的才會更多:
Ex: 我初學 VPN 中的 pptp 時, 對於 mschap 何以只能存放明碼感到困擾,後來找了文件看來
及 trace pptpd 中的程式部份,就很了解了(花了近三天,你說值不值得呢?),在 radius 這磈
後來又碰到 pap/chap , 那簡直是得心應手可形容.因為前面的三天,我對這些 protocol 特
性巳經相當了解了.


每件事都自己找資料看,學,練習,不要太隨便發問,若可以大不了連源代碼一起看,如此三個月
保證功力大增呀!
《解決方案》

SpamAssassin的中文垃圾郵件過濾規則集

原帖由 "abel" 發表:

SPF 還好,但若不能有重大突破,早晚會失敗, Domain Key 多少也存在許多現實問題 ..
MSBL Subject 過濾法,我們即有使用, MATCH 即 Block,是你 User 自己設的哦,所以
     被檔了,自己去 Block List 找回來
APS 就?.........

看來abel兄弟在procmail及email等方面,比較早期就開始研究了。procmail以前一直都沒仔細去研究,因為我要實現的東西和您的有點不同,您是面對小型email系統,可以使用unix account,而我要實現的是產品化的東西,主要是以virtual user(用戶信息放在db而不是passwd文件里)為主。

所以走的路線是有點不同,MDA及LDA我使用的是maildrop,主要是我更習慣maildrop的語法,因此做法就有些不同而已。

客觀的說,abel兄設計的整個思路很好,主要是友好的界面及豐富的設定,但對於運營級的email server,我認為機器資源有點吃緊,因為每封信都會和db有關聯操作,而且還會生成spam的流量圖等...

但沒有實際測試過前,這樣決斷還是有點武斷的了。

......註:我用 rrdtool 做的,但中文化也是自己K了他三天程式寫出來的,我寫出來時,mailscanner-mrtg
也還沒問世...

當然,要滙整全公司或某部間狀況,只要資料庫對 "人"和 "信" 的定義很清楚,都可
以很簡單做出來. 總結即是,你要能做到 Filter 結果存起來另外使用即可,不用每
個巳被判為 Spam/Virus 還寄到 User 信箱.


喝彩!我是2年多前才接觸到rrdtool的。只是當時是用mrtg做圖,顯不了中文文字,只是沒有去改代碼解決問題,對比之下在下很慚愧 :em06:

另外,關於spam的處理方法,我使用了和abel兄有點不同的辦法,被判決為spam的郵件放到用戶mailbox的一個特定目錄里,junk mailbox里。這樣就不必花力氣做digest了。用戶瀏覽這個目錄就可以看到哪些信是被誤判的,發現后移動到inbox就可以了。

當然,我這是有點偷懶的做法。做digest感覺更好一些。

關於SPF,我認為只是一種anti-spam的補充,對此褒貶不一,我認為在相當一段時間內還是比較有效的。當然,必須綜合多種判決才比較合理。
《解決方案》

SpamAssassin的中文垃圾郵件過濾規則集

hzqbbc 兄客氣了,
確實,scale 影響整個 Mail 架構及格局,我在做的時候只以公司考量為出發點,但精神應都差不多,
至於 Unix Auth 問題,對於那些知識若只從書本來的人而言,確實在您的考量下不易實現, Sendmail
實現 username@domain 做法可參考 :
http://www.reedmedia.net/software/virtualmail-pop3d/#delivery
至於 Sendmail 帳號認證從 DB 來:
http://bbs.chinaunix.net/forum/viewtopic.php?t=411834&highlight=abel
第一個 link 做法我沒有去試過,但看來沒有什麼困難處,而第二個 link, 我們現在就在用
(當然,他沒有給我加精我覺得很奇怪,我不想加精的東西反而給我加了,我覺得這一篇文章我把許多
CU 人很少碰到的地方講解的很明白了呀,也或許依然還是太深奧了,還是我太膚淺了~)
,其實,像我們這種單位,機器數量(Public Service Host) 遠比員工數量多上許多,且又分散於各
ISP 之 IDC 機房,我們本即會考慮 User DB 化及集中化管理之顧慮,至於 login account 和
email account 的分離,用 PAM 技巧即可做到,不會有什麼困擾處(當然,個人覺得這很簡單,我
相信 hzqbbc 兄必看的懂的,至於其他朋友可能看造化了)


每封信都會和db有關聯操作,而且還會生成spam的流量圖等...

嗯,其實這種只要是 User Customize 空間很大的東西,都會有這個問題,我也可以用檔案實現,但其實狀況
都差不多,除非 User 不可 Customize , 就可以事先 Load 進 Memory 中處理,因為很多東西你得到 LDA
階段才知道這個人現在設了什麼 rule, 你把他先 load 進來巳是沒意義了,我的方法唯一的缺點是用了太多
外部程式或 Shell 技法,這對大量的信件時容易造成 shell fork 太多問題,不過目前來看,三十人單位,日信
件流量約 10000~20000 封,尚無太大影響:
http://211.72.210.251/CU_sample.gif
註1:上面的高峰值是由 imap client 產生,我們給 30G 不 quota 的空間收 mail , 所以有很多人的信都超過 1G
註2: Mail Server 最近換過主機,所以我只畫換過後的資料,主要是原空間不夠及改用 LVM
註3: 這台機器還兼做網管,用 mrtg 的 target 觀念來看,超過500 個項目,只是平常只 Collect/Alert
     但不 graph, Broswer 時才 graph.  

所以 spam 的 report 我們平時是不畫的,所以 Resource 的使用壓力應還好, ,User 選擇要看 Report 時才動
態產生,而產生的語法也不需要 RRD FILE ,因為我把 RRDTOOL 中之 RRDFILE 資料庫化,直接可以從 TABLE 中讀
出數據並畫圖,再透過一些網頁的技巧,也可以做到 User 點圖可以還原成 Block List 表格,因為可以從 X,Y 座
標中反求其時間值及顏色值(rgb).

在 antispam 這個領域,像在台灣,現在用 procmail 巳經不多了,但不論用什麼技術,重要的是能實現自己想要的
功能及掌握度高,才是最重要的.

[火星人 ] SpamAssassin的中文垃圾郵件過濾規則集已經有3023次圍觀

http://coctec.com/docs/service/show-post-29108.html