免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: bhuang
打印 上一主题 下一主题

[Mail] SpamAssassin的中文垃圾邮件过滤规则集 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2004-10-08 13:26 |只看该作者

SpamAssassin的中文垃圾邮件过滤规则集

原帖由 "hzqbbc" 发表:


麻哥太抬举了,其实偶等雕虫小技不足挂齿, 压根算不上什么东西,我感觉我们国内的大环境还是很糟糕,不少方面都比不上tw,更别提jp和老外了。

我认为不管是bbs还是lists,都应该营造务实,尊重知识产权..........


赞~强烈同意 !!!

论坛徽章:
0
22 [报告]
发表于 2004-10-09 13:38 |只看该作者

SpamAssassin的中文垃圾邮件过滤规则集

我也是用sendmail+procmail

前几个月遇到中文解码的问题
这回终于有明白人了
各位老大,谢谢

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
23 [报告]
发表于 2004-10-09 18:33 |只看该作者

SpamAssassin的中文垃圾邮件过滤规则集

這一段較少人研究,我給您解釋一下好了:
Mail 的 Subject 或 Body 編碼有三種,
第一種就是原型,什麼都不編碼 "酷!學園"
第二種是 Mime 以 base64 以 6 bit 來編碼,base32 以 5 個 bit ,但Mail 都是用 base64
如: =?big5?B?jjfkdoooo=?= (這一段mime 我是隨意打的)
Ex:

  1. BIG5 code  = Mime Base64
  2. 104速配快遞 =?big5?B?MTA0s3SwdKfWu7w=?=
  3. Re:104速配快遞 =?big5?B?UmU6IDEwNLN0sHSn1ru8?=
  4. 我溜104速配快遞 =?big5?B?p9q3yDEwNLN0sHSn1ru8?=
  5. Re:我溜104速配快遞 =?big5?B?UmU6IKfat8gxMDSzdLB0p9a7vA==?=
  6. Fw:我溜104速配快遞 =?big5?B?Rnc6IKfat8gxMDSzdLB0p9a7vA==?=
复制代码

你會發現這幾個的 mime patten 天差地遠...所以 procmailrc 中的 patten 就不是
* ^Subject: 酷!學園 ---->;有90%以上的機會會錯掉
* ^Subject: =?big5?B?jjfkdoooo=?= --->;有75%的機會會錯掉,不過可以取巧,將四種可能都設上
Mime 的編碼在 8bit email subjext 裏面我覺得大概佔到近八成左右,所以要多再注意
第三種稱為 QP (quote-print) , 直接還原 binary code 你有時會看到 =A3=BB...就是了

# 這是還原 encoding 的一段 perl 程式:

  1. #!/usr/bin/perl
  2.     $sub=$ARGV[0];
  3.     if ($sub=~ /=\?\S+\?\l(\S)\?/) {
  4.       if ($1 =~ /[Qq]/) {
  5.         $sub=decode_qp($sub);
  6.       }
  7.       elsif ($1 =~ /[Bb]/) {
  8.         $sub=decode_base64($sub);
  9.       }
  10.     }
  11.     elsif ($sub=~ /=[a-fA-F0-9][a-fA-F0-9]/) {
  12.       $sub=decode_qp($sub);
  13.     }
  14.     $subject.=$sub;
  15. print $subject;   
  16. sub decode_qp {
  17.         my($string) = @_;
  18.         @buffer=split(/\?/,$string);
  19.         $string = $buffer[3] if ($buffer[3] ne "");
  20.         $string =~ s/=([\da-fA-F]{2})/pack("C", hex($1))/ge;
  21.         $string =~ /\?=(.*)/;
  22.         $string =~ tr/_/ /;
  23.         $buffer[4]=~s/^=//;
  24.         $buffer[0]=~s/=$//;
  25.         $string="$buffer[0]$string$buffer[4]";
  26.         return($string);
  27. }

  28. sub decode_base64 {
  29.         my($string) = @_;
  30.         my($string2);
  31.         @buffer=split(/\?/,$string);
  32.         $string = $buffer[3] if ($buffer[3] ne "");
  33.         $string =~ s/=+$//;
  34.         $string =~ tr|A-Za-z0-9+/| -_|;
  35.         while($string =~ /(.{1,60})/gs) {
  36.                 my($string3) = chr(32+length($1)*3/4);
  37.                 $string2 .= unpack("u",$string3 . $1 );
  38.         }
  39.         $buffer[4]=~s/^=//;
  40.         $buffer[0]=~s/=$//;
  41.         $string2="$buffer[0]$string2$buffer[4]";
  42.         return($string2);
  43. }
复制代码

假設就叫 /etc/parser_subj , 並 chmod 755

/etc/parser_subj $SUBJ 就可以取出原來的中文字了
(巳考慮 8bit/Mime/QP 問題,直接用就可以,但這只 for BIG5, GK2323 上面程式自己改就可以了)
存放 SPAM_PATTEN 的 mysql desc:

  1. +----------+--------------+------+-----+---------+----------------+
  2. | Field    | Type         | Null | Key | Default | Extra          |
  3. +----------+--------------+------+-----+---------+----------------+
  4. | SN       | int(20)      |      | PRI | NULL    | auto_increment |
  5. | USERNAME | varchar(16)  |      | MUL |         |                |
  6. | PATTEN   | varchar(128) |      | MUL |         |                |
  7. | CNT      | int(20)      |      |     | 0       |                |
  8. +----------+--------------+------+-----+---------+----------------+
复制代码



所以,針對中文主旨問題,整個 procmail 方案為:

  1. VERBOSE=on
  2. LOGFILE=$HOME/procmail/procmail.log
  3. PATH=/bin:/usr/bin:/usr/local/bin
  4. LANG=zh_TW.Big5
  5. LC_ALL=zh_TW.Big5
  6. SUBJ=`formail -zxSubject: `
  7. SUBJ=`/etc/parser_subj "${SUBJ}"`

  8. :0 hD
  9. * ! ^From: .*mydomain.net.*
  10. * ! ^Received: .*192\.168\..*
  11. {
  12.         :0 fh
  13.         | ( patten=`echo "select concat(PATTEN,\" \") from SPAM_PATTEN where USERNAME='$LOGNAME' and instr('$SUBJ',PATTEN)"|$MYSQL      | grep -v 'PATTEN'`; \
  14.         if [ ${#patten} -ne 0 ] ; \
  15.                 then    formail -A "Spam: $patten";     \
  16.                 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;       \
  17.         fi;     \
  18.         for p in $patten;do     \
  19.                 echo "update SPAM_PATTEN set CNT=CNT+1 where USERNAME='$LOGNAME' and PATTEN='$p'"|$MYSQL;       \
  20.         done);

  21.         :0
  22.         * ^Spam: .*
  23.         /dev/null
  24. }
复制代码

PS1: 以上皆是 for BIG5 環境來說明


因為我要計數,要存記錄,所以程式為稍長,若只要判斷到就直接導到檔案或 null, 就只要兩行就好了


  1. :0 hD
  2. * ! ^From: .*mydomain.net.*
  3. * ! ^Received: .*192\.168\..*
  4. * $(echo "select concat(PATTEN,\" \") from SPAM_PATTEN where USE
  5. RNAME='$LOGNAME' and instr('$SUBJ',PATTEN)"|$MYSQL      | grep -v 'PATTEN')
  6. /var/spool/mail/spam_patten
复制代码


了解原理(Mail Encoding/Format), 及 procmailrc 功能,要做什麼都很簡單,個人覺得
procmail 妙用很多,可以發揮許多 email to program 的功能

论坛徽章:
0
24 [报告]
发表于 2004-10-13 16:35 |只看该作者

SpamAssassin的中文垃圾邮件过滤规则集

abel,

你做过rrdtool的中文化?我现在急需在rrdtool产生的图形上显示中文,能否指教一下?
谢谢!

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
25 [报告]
发表于 2004-10-13 17:35 |只看该作者

SpamAssassin的中文垃圾邮件过滤规则集

http://phorum.study-area.org/viewtopic.php?t=23822&highlight=
自己去看看囉~
你若懂程式是最好不過,用在那個版本都知道怎麼改
這個 download 版是 1.0.42 的,你可以拿 1.0.42 來 diff
一下,可以直接套用在 1.0.45+ 以上的版本,都是 work 的,
並注意 Makefile 也要跟著改,我不是做慈善事業的,所以沒有
把它寫的盡善盡美 ...

不過話說回來,看來多數人只會予取予求呀~您巳是第N位和我要的人了

论坛徽章:
0
26 [报告]
发表于 2004-10-13 23:15 |只看该作者

SpamAssassin的中文垃圾邮件过滤规则集

本来是谈论spamassassin(简称SA)的贴子,现在全部在讲procmail,我最近刚装了spamassassin的中文规则集,忍不住谈谈自己的感受。spamassassin据我看,很多人仍然没有意识到这是个什么东西,它并不是一个过滤垃圾邮件的软件,准确地说,应该是一个对输入文本根据规则进行分析的软件。形象地说,就好象一个体操比赛,SA就是裁判,给每一个出场的队员根据规则打分,然后将分数转交给组委会。SA根据规则,对输入的文本打出一个分数,至于是不是垃圾邮件,你可以自己指定一个分数线,超过分数的SA给它打上一个标记。SA并不负责前期的邮件解码等工作,也不负责后期对垃圾邮件的处理工作,所以SA的应用范围就不局限于垃圾邮件过滤,还可应用于其它需要文本分析的场合。SA对文本的分析识别有很强的自学能力,也就是能够从分析过的文本当中自动提取新的规则,从而使其分析的准确性越来越高,也许这就是SA为什么会日渐流行的一个原因。
关于SA的自学能力,我只是看来的,还没有切身的体会。我认为SA的前途将会很好,是因为这是一个适合于懒人用的工具。我以前一直想做垃圾邮件的过滤,但一直惧怕自己编写庞大的规则集,可能一次、两次还不怎样,但要自己长时间地不断修正规则集,自问很难做到。让每个用户编写自己的过滤规则,我觉得即使你的邮件系统提供这个功能,也基本上形同虚设。至少在我身边,我还没有见到有人这样做,就说我自己,且不要说procmail的复杂性,就是用outlook设置几个简单的规则来过滤垃圾邮件,也只试了一次就放弃了,还是每天花10分钟时间看一下上百封的垃圾邮件,根据标题判定一下,然后将垃圾邮件删除。
我相信普通用户不应该花时间来设定垃圾邮件的判定规则,即使系统管理员,如果不是专做邮件系统的,也没有必要花很多时间来研究垃圾邮件,自己写规则。我就是这样一个比较懒的系统管理员,幸好有了SA,有了ccert的中文规则集。
现在我用了将近一个星期,每天的垃圾邮件一百封左右,用SA的中文规则集识别后,垃圾邮件能过滤掉80多封,对垃圾邮件的识别率在75%-95%之间,平均85%,我没有设任何自己的规则,只用了ccert的中文规则集。
系统资源的占用情况,也不是很恐怖。举一例,我的服务器是单CPU,普通奔4 2.4G,识别一个18928字节的邮件,用时5.735775秒。SA占用资源的情况,和规则集也有很大关系。以前没有中文规则集,我按英文过滤的方式装了razor和dcc,结果一个邮件半天没反应,分析一个邮件就花了几分钟。
总之,我对SA相当看好,如果有现成的规则集,对付垃圾邮件,你几乎不需要操什么心,现在我的邮件系统,用户只需要设置一下处理垃圾邮件的方式:直接删除,送到垃圾箱,还是不做处理。我觉得这就是用户最想要的,不动脑子,不费劲,就可以基本摆脱垃圾邮件的困扰,而作为管理员,我不必每天去为用户的垃圾邮件浪费我的精力和时间。即使设置自己的规则集,编写起来我觉得比楼上各位说的用procmail容易多多了。
为了证明以上我所说的,大家可以到我的一个邮件服务器上试一下。
服务器地址:mail.0874.cn
用户名:123
密码:123123
最后,衷心感谢SA,感谢ccert,感谢陈光英博士,为我们提供了这么好的东西。

论坛徽章:
0
27 [报告]
发表于 2004-10-14 09:45 |只看该作者

SpamAssassin的中文垃圾邮件过滤规则集

procmail和sa只是解决问题的两种途径
没必要厚此薄彼
看习惯了

--

论坛徽章:
0
28 [报告]
发表于 2004-10-20 13:39 |只看该作者

SpamAssassin的中文垃圾邮件过滤规则集

To Bluelotus:

下面是来自 http://www.ccert.edu.cn/spam/sa/Chinese_rules.htm 的测试数据,测试过程中除了中文规则以外不使用其它任何规则。我觉得你在设置阈值的时候可以参考。

阈值   垃圾邮件查全率(共2330    正常邮件误判率(共96553)
0.5     85.1%                               15.1%
1        76.9%                               6.4%
1.5     71.4%                               4.4%
2        65.1%                               2.4%
2.5     61.7%                               1.7%
3        57.5%                               1.2%
3.5     52.8%                               1%
4        48.4%                               0.8%
4.5     45%                                  0.6%

论坛徽章:
0
29 [报告]
发表于 2004-10-20 20:00 |只看该作者

SpamAssassin的中文垃圾邮件过滤规则集

下面是我用perl语言对邮件解码的代码供大家参考:

use MIME::Base64;
use MIME:uotedPrint;

$msg =~ s/=\?GB2312\?B\?(.*)\?=/decode_base64 ($1)/ieg;
$msg =~ s/=\?GB2312\?Q\?(.*)\?=/decode_qp ($1)/ieg;

论坛徽章:
0
30 [报告]
发表于 2006-10-23 11:26 |只看该作者
我试用了这个规则,结果被商务部骂死。“贵公司”竟然占了2分多!商务部的好多邮件被当作了垃圾邮件了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP