返回列表 回复 发帖
只有邮件标题和附件没有内容的邮件如何防范?Dspam对这类邮件好像没有什么办法啊。

天哪 天下那有这样的怪事啊

我用你们提供的 学习样本训练完后  为什么用SPAM——2里面的邮件内容发 还是正常邮件呢?而不是垃圾邮件呢?
原帖由 liushaobo 于 2009-4-20 23:51 发表
Dspam-amavisd-SpamAssassin-clamav for EMOS
版权声明:
本文版权归作者所有,如其他个人、第三方网站或媒体报刊等需转载全文或节选,为支持我们的工作,请务必注明如下信息:

文档所有者:Extmail Dev Team;
文章原始出处:ht ...
看了一下,里面涉及到10024、10025、10028几个端口不知道分别是怎样理解的?还请指教

dspam.conf

DeliveryHost        127.0.0.1
DeliveryPort        10024
DeliveryIdent       localhost
DeliveryProto       SMTP

ServerPort              10028
ServerQueueSize 32
ServerPID               /var/spool/dspam/dspamd.pid
ServerMode              auto
ServerPass.Relay1       "secret"
ServerParameters        "--user extmail --deliver=innocent,spam"
ServerIdent             "localhost.localdomain"
ClientHost      127.0.0.1
ClientPort      10028
ClientIdent     "secret@Relay1"

======================
dspam_filter_access

/./     FILTER lmtp:[127.0.0.1]:10028



=======================
master.cf

127.0.0.1:10025 inet    n       -       n       -       -     smtpd
        -o content_filter=
        -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
        -o local_recipient_maps=
        -o relay_recipient_maps=
        -o smtpd_restriction_classes=
        -o smtpd_client_restrictions=
        -o smtpd_helo_restrictions=
        -o smtpd_sender_restrictions=
        -o smtpd_recipient_restrictions=permit_mynetworks,reject
        -o mynetworks=127.0.0.0/8
        -o strict_rfc821_envelopes=yes
        -o smtpd_error_sleep_time=0
        -o smtpd_soft_error_limit=1001
        -o smtpd_hard_error_limit=1000
10025 是reinject的smtp 服务端口
10024 是amavisd-new的服务端口
10028是dspam服务的端口

调度方法:

inject => smtpd(25) => dspam(10028) => amavisd(10024) => smtpd(10025) => 投递
请引用或摘抄本站文章信息的朋友,保留本站链接及作者信息,保护版权,谢谢。

构建高性能大容量开源邮件系统- ExtMail

Postfix在中国官方网站
如何导出我用dspam训练好的数据库?

SA的错误

spamassassin --lint -D

[30904] dbg: generic: dspam is on, so time to run
[30904] dbg: generic: dspam Result:
[30904] dbg: dspam: $dspam{"SA-Score"}: DSPAM_ERROR    《--------- 错误我看了DSPAM。PM 代码里面的东西
[30904] dbg: dspam: Add the header for posterity
[30904] dbg: dspam: Add to the metadata for use
[30904] dbg: rules: local tests only, ignoring RBL eval
[30904] dbg: check: running tests for priority: 0
[30904] dbg: rules: running header regexp tests; score so far=0
[30904] dbg: rules: ran header rule __HAS_MSGID ======> got hit: "<"
[30904] dbg: rules: ran header rule __SANE_MSGID ======> got hit: "<1242624837@lint_rules>
[30904] dbg: rules: "
[30904] dbg: rules: ran header rule DSPAM_ERROR ======> got hit: "DSPAM_ERROR"
[30904] dbg: rules: ran header rule __MSGID_OK_HOST ======> got hit: "@lint_rules>"
[30904] dbg: rules: ran header rule __MSGID_OK_DIGITS ======> got hit: "1242624837"
[30904] dbg: eval: all '*From' addrs: ignore@compiling.spamassassin.taint.org
[30904] dbg: eval: all '*To' addrs:
[30904] dbg: rules: ran eval rule NO_RELAYS ======> got hit
[30904] dbg: rules: ran eval rule __UNUSABLE_MSGID ======> got hit
[30904] dbg: rules: running body-text per-line regexp tests; score so far=0.099
[30904] dbg: rules: ran body rule __NONEMPTY_BODY ======> got hit: "I"
[30904] dbg: uri: running uri tests; score so far=0.099
[30904] dbg: bayes: DB journal sync: last sync: 0
[30904] dbg: bayes: corpus size: nspam = 200, nham = 200
[30904] dbg: bayes: score = 0.732130354471957
[30904] dbg: bayes: DB expiry: tokens in DB: 34580, Expiry max size: 150000, Oldest atime: 1021132311, Newest atime: 1029752279, Last expire: 0, Current time: 1242624838
[30904] dbg: bayes: DB journal sync: last sync: 0
[30904] dbg: bayes: untie-ing
[30904] dbg: bayes: untie-ing db_toks
[30904] dbg: bayes: untie-ing db_seen
[30904] dbg: rules: ran eval rule BAYES_60 ======> got hit
[30904] dbg: rules: running raw-body-text per-line regexp tests; score so far=0.599
[30904] dbg: rules: running full-text regexp tests; score so far=0.599
[30904] dbg: plugin: Mail::SpamAssassin:lugin::URIDNSBL=HASH(0x975e31c) implements 'check_tick'
[30904] dbg: check: running tests for priority: 500
[30904] dbg: plugin: Mail::SpamAssassin:lugin::URIDNSBL=HASH(0x975e31c) implements 'check_post_dnsbl'
[30904] dbg: rules: running meta tests; score so far=0.599
[30904] dbg: rules: running header regexp tests; score so far=2.756
[30904] dbg: rules: running body-text per-line regexp tests; score so far=2.756
[30904] dbg: uri: running uri tests; score so far=2.756
[30904] dbg: rules: running raw-body-text per-line regexp tests; score so far=2.756
[30904] dbg: rules: running full-text regexp tests; score so far=2.756
[30904] dbg: check: running tests for priority: 1000
[30904] dbg: rules: running meta tests; score so far=2.756
[30904] dbg: rules: running header regexp tests; score so far=2.756
[30904] dbg: rules: running body-text per-line regexp tests; score so far=2.756
[30904] dbg: uri: running uri tests; score so far=2.756
[30904] dbg: rules: running raw-body-text per-line regexp tests; score so far=2.756
[30904] dbg: rules: running full-text regexp tests; score so far=2.756
[30904] dbg: check: is spam? score=2.756 required=5
[30904] dbg: check: tests=BAYES_60,DSPAM_ERROR,MISSING_SUBJECT,NO_RECEIVED,NO_RELAYS,TO_CC_NONE
[30904] dbg: check: subtests=__HAS_MSGID,__MSGID_OK_DIGITS,__MSGID_OK_HOST,__NONEMPTY_BODY,__SANE_MSGID,__UNUSABLE_MSGID
这个是不是代表正常啊  还是不正常啊?
原帖由 hzqbbc 于 2009-5-18 11:27 发表
10025 是reinject的smtp 服务端口
10024 是amavisd-new的服务端口
10028是dspam服务的端口

调度方法:

inject => smtpd(25) => dspam(10028) => amavisd(10024) => smtpd(10025) => 投递 ...
原来没有看到的端口都在rpm包里隐藏,谢谢,刚好现在有时间继续研究,有点门了
原帖由 gcp1126 于 2009-5-16 21:57 发表
只有邮件标题和附件没有内容的邮件如何防范?Dspam对这类邮件好像没有什么办法啊。
这种类型垃圾邮件确实不易察觉,你可以看看下面内容:

贝叶斯公式

Thomas Bayes(1702-1763), 托马斯·贝叶斯是一位英国牧师数学家,1742年成为英国皇家学会会员1763年4月7日逝世,1763年,他发表了贝叶斯统计理论,即根据已经发生的事件来预测事件发生的可能性,贝叶斯理论假设:如果事件的结果不确定,那么量化它的唯一方法就是事件的发生概率。如果过去试验中事件的出现率已知,那么根据数学方法可以计算出未来试验中事件出现的概率。贝叶斯定理可以用一个数学公式表达。即贝叶斯公式。

    反垃圾邮件是具有相当难度的事情,垃圾邮件每天都在增加和变化。据Radicati估计2007年,垃圾邮件的比例将达到70%。现在的垃圾邮件发送者变得更加狡猾,采用静态反垃圾邮件技术很难防范。垃圾邮件发送者只要简单的研究一下现在采用了哪些静态反垃圾邮件,然后相应的改变一下邮件的内容或发送方式,就可以逃避检查了。

因此,必须采用一种新的技术来克服静态反垃圾邮件的弱点,这种技术应该对垃圾邮件发送者的各种伎俩了如指掌,还要能适应不同用户对于反垃圾邮件的个性化需求。这种技术就是贝叶斯过滤技术。

三 贝叶斯过滤技术的工作原理

根据贝叶斯理论,根据已经发生的时间可以预测未来事件发生的可能性。将该理论运用到反垃圾邮件上:若已知某些字词经常出现在垃圾邮件中,却很少出现在合法邮件中,当一封邮件含有这些字词时,那么他是垃圾邮件的可能性就很大。

1创建基于字词符号的贝叶斯数据库

用户首先需要对贝叶斯进行培训,即将邮件分类为垃圾邮件(用户不想要的)和正常邮件(用户想要的),贝叶斯将提取这些邮件样本中主题和信体中的独立字串,包括字词(word)和符号(token)(如$,IP地址,域名等),并建立相应的数据库。

2创建贝叶斯概率库

统计出每个字串在垃圾邮件中出现的概率以及在正常邮件中出现的概率,然后根据公式计算出邮件中含某字串则为垃圾邮件的概率。例如:在3000封垃圾邮件样本中"mortgage"(抵押)出现了400次,而在300封正常邮件中这个词出现了5次,那么其对应的垃圾概率为0.8889([400/3000]/[5/300+400/3000])。

3创建个性化的贝叶斯库(最符合您公司需求的贝叶斯库)

由于每个公司对所收到的邮件偏好是不同的,例如,某个金融类公司在正常邮件中可能经常用到"mortgage"这个词,如果使用静态的关键词过滤,就可能产生很多误判。如果采用贝叶斯过滤,在对贝叶斯进行培训的时候,将该公司的合法邮件(自然,很多都包含了"mortgage"这个词)分类为正常邮件。这样,垃圾邮件的识别率将更高,同时也使得误判率变得很低。

有些反垃圾邮件软件使用了比较初级的贝叶斯过滤机制,如outlook,foxmail等。他们采用的是通用化的贝叶斯数据库。这种贝叶斯不需要进行培训,但有两个明显的弱点:

one: 如果采用通用化的贝叶斯过滤则很容易被专业的垃圾邮件发送者攻破从而绕过检查,但是如果采用个性化的贝叶斯,则他们很难攻破。

two: 通用化的贝叶斯与您公司的邮件过滤要求不符,因此过滤效果通常不明显,并且可能产生较高的误判。

除了学习好的邮件之外,贝叶斯还应学习垃圾邮件,这些垃圾邮件样本应该包括了大量的已知垃圾邮件样本以及最新的变化了的垃圾邮件样本。这样才能达到最好的过滤效果,对最新的垃圾邮件样本的学习通常需要两周左右的时间。

4贝叶斯过滤器的处理过程。

贝叶斯过滤器学习了垃圾邮件样本及正常邮件样本后,每个字串代表的垃圾概率就被计算出了。

一封新的邮件到达时,这封邮件的内容将被分成字串(词或符号)。依据数据库中这些字词的概率通过公式进行计算,贝叶斯将推算出这封邮件是垃圾邮件还是正常邮件。通常当贝叶斯计算出的垃圾邮件可能性高于某个数值(阈值)时,比如0.9,就判定这封邮件是垃圾邮件。


四 贝叶斯过滤的优点

――2003年5月BBC专题报道称,贝叶斯可以达到99.7%的垃圾邮件识别率,同时误判率极低。是目前最有效的反垃圾邮件技术。

1 贝叶斯过滤技术对邮件的所有内容进行分析,不仅仅是其中的某个关键词,而且他能判别邮件是垃圾邮件还是正常邮件。例如:包含“free”“cash”“发票”字样的邮件不一定是垃圾邮件,如果采用关键字过滤技术,显然难以达到理想的效果。而贝叶斯呢,即考虑了这些词在垃圾邮件中出现的概率又考虑了它在正常邮件中的概率,综合考虑这些因素才做出判断。可以说,贝叶斯具有一定的智能,它对邮件中的关键词汇能综合的进行评判,可以把握“好”与“坏”之间的平衡。显然,这种技术远远高于非1即0的静态过滤技术。

2 贝叶斯过滤技术具备自适应功能――通过学习新的垃圾邮件及正常邮件样本,贝叶斯将能对抗最新的垃圾邮件。并且对变体字有奇效。比如,垃圾邮件发送者开始使用"f-r-e-e"来代替“free”这样能够绕过关键字检查,除非"f-r-e-e"被加到新的关键字中。对贝叶斯而言,当它发现邮件中含有"f-r-e-e"时,由于正常邮件中从来没有发现这个词,因此他是垃圾邮件的可能性将急剧增加,"f-r-e-e"这个新词无疑成了垃圾邮件的指示器。在比如,垃圾邮件中用5ex代替sex,贝叶斯也推算出他是垃圾邮件的可能性也急剧增加。

3 贝叶斯过滤技术更加个性化。他能学习并理解用户对邮件的偏好。如前所述,‘mortgage’抵押一词对软件公司而言意味者垃圾,但对金融类公司则意味着好邮件。贝叶斯能根据用户的这种偏好进行处理。

4 贝叶斯过滤技术支持多语种或者说与编码无关。对于贝叶斯而言,他分析的是字串,无论他是字、词、符号、还是别的什么,当然更与语言无关。

5 贝叶斯过滤器很难被欺骗。垃圾邮件发送高手通常通过减少垃圾词汇(如free、viagra、发票)或者在信中多掺一些好的词汇(如合同、文件)来绕过检查一般的邮件内容检查,但由于贝叶斯具有的个性化色彩,要想成功的绕过贝叶斯的检查,他就不得不对每个收件人的偏好进行研究,这简直是“不可能完成的任务”。垃圾邮件发送者无法容忍的。若采用变化字,则如前所述贝叶斯判断其为垃圾邮件的可能性反而增加。

五 如何才能培训出好的贝叶斯过滤器

贝叶斯的样本数并不是越多越好,但一般需要超过一定的数量才能工作。要培训出比较好的贝叶斯,有如下建议:

1 不要过多的重复分类某一封或某一类邮件,以免概率失真(失衡),要分批分时间多次进行,这样样本分布广泛。

2 对要分类的邮件应认真看完,不要瞟一眼就分类。

3 如果邮件是垃圾邮件,但是和您公司的邮件或者和正常的邮件很接近,最好不要分类这种邮件。

4 如果这封邮件不是垃圾邮件,是那种在网络上订阅的邮件,如淘宝、当当等,最好把发件人加入白名单,而不要分类到贝叶斯中。

5 避免将哪些含有随机字词(贝叶斯中毒策略)的邮件进行分类。虽然新的贝叶斯系统提供了相应的保护机制。

6 样本的文字篇幅极大,请避免。(样本提供的数据将过于复杂);样本的文字篇幅极少,或者只有图,请避免。(贝叶斯针对的是字词概率)

好的贝叶斯通常需要两周左右的培训时间,虽然需要花些时间和精力,但是机遇总是惠顾勤奋的人,这些努力都是值得的。

[1] 贝叶斯公式:

假定B1,B2,……是某个过程的若干可能的前提,则P(Bi)是人们事先对各前提条件出现可能性大小的估计,称之为验前概率.如果这个过程得到了一个结果A,那么贝叶斯公式提供了我们根据A的出现而对前提条件做出新评价的方法.P(Bi∣A)既是对前提Bi的出现概率的重新认识,称 P(Bi∣A)为验后概率.经过多年的发展与完善,贝叶斯公式以及由此发展起来的一整套理论与方法,已经成为概率统计中的一个冠以“贝叶斯”名字的学派,在自然科学及国民经济的许多领域中有着广泛应用

http://www.yntvu.edu.cn/teacher_ ... matician/bayes.html



[2] 贝叶斯概率库创建的详细过程:

a提取字串(字、词或符号),形成两个字串集,即垃圾邮件字串集和非垃圾邮件字串集。统计字串出现的频率,即字频。并生成两个哈希表hashtable_good,hashtable_bad。表中包括字串及与之对应的字频。

b 计算每个字串出现的概率P=(字串的字频)/(对应哈希表的长度),即垃圾邮件或正常邮件中某个词出现的概率。
c 计算出邮件中出现某些字串时,是垃圾邮件的概率,并建立新的哈希表。数学表达式为:
A事件----邮件为垃圾邮件;
t1,t2 …….tn代表字串
P(A|ti)表示在邮件中出现字串ti时,该邮件为垃圾邮件的概率。

P1(ti)=(ti在hashtable_good中的值)
P2(ti)=(ti在hashtable_ bad中的值)
则 P(A|ti)= P1(ti)/[(P1(ti)+ P2(ti)];
新的哈希表 hashtable_probability存储字串ti到P(A|ti)的映射
d 至此,垃圾邮件集和非垃圾邮件集的学习过程结束。根据建立的哈希表 hashtable_probability可以估计一封新到的邮件为垃圾邮件的可能性。



[3] 当新到一封邮件时,按照步骤a生成字串。查询hashtable_probability得到该TOKEN 串的键值。
假设由该邮件共得到N个字串,t1,t2…….tn, hashtable_probability中对应的值为P1,P2,。。。。。。PN,
P(A|t1 ,t2, t3……tn)表示在邮件中同时出现多个字串t1,t2…….tn时,该邮件为垃圾邮件的概率。
由复合概率公式可得
P(A|t1 ,t2, t3……tn)=(P1*P2*。。。。PN)/[P1*P2*。。。。。PN+(1-P1)*(1-P2)*。。。(1-PN)]
当P(A|t1 ,t2, t3……tn)超过预定阈值时,就可以判断邮件为垃圾邮件。



[4] 贝叶斯过滤算法举例

例如:一封含有“法轮功”字样的垃圾邮件 A
和 一封含有“法律”字样的非垃圾邮件B
根据邮件A生成hashtable_ bad,该哈希表中的记录为
法:1次
轮:1次
功:1次
计算得在本表中:
法出现的概率为0。3
轮出现的概率为0。3
功出现的概率为0。3
根据邮件B生成hashtable_good,该哈希表中的记录为:
法:1
律:1
计算得在本表中:
法出现的概率为0。5
律出现的概率为0。5
综合考虑两个哈希表,共有四个字串: 法 轮 功 律
当邮件中出现“法”时,该邮件为垃圾邮件的概率为:
P=0。3/(0。3+0。5)=0。375
出现“轮”时:
P=0。3/(0。3+0)=1
出现“功“时:
P=0。3/(0。3+0)=1
出现“律”时
P=0/(0+0。5)=0;
由此可得第三个哈希表:hashtable_probability 其数据为:
法:0。375
轮:1
功:1
律:0

当新到一封含有“功律”的邮件时,我们可得到两个TOKEN串,功 律
查询哈希表hashtable_probability可得
P(垃圾邮件| 功)=1
P (垃圾邮件|律)=0
此时该邮件为垃圾邮件的可能性为:
P=(0*1)/[0*1+(1-0)*(1-1)]=0
由此可推出该邮件为非垃圾邮件

回复 204# fzhyextmail 的帖子

谢谢!我现在训练了比较久的时间了,是否需要停止自动训练?
训练的数据库如何导出呢?
希望老大能给个提示,能否导出我训练好的数据库?

回复 206# gcp1126 的帖子

导出dspam的mysql库就可以了呀,你还要history的话,把 dspam  的data目录也备份
ExtMail邮件开发网
liushaobo@extmail.org
探索高性能的Anti-Spam组合
原帖由 gcp1126 于 2009-5-18 22:22 发表
谢谢!我现在训练了比较久的时间了,是否需要停止自动训练?
训练的数据库如何导出呢?
有新垃圾邮件直接训练就可以了,不明白你的停止自动训练含义.

回复 207# liushaobo 的帖子

谢谢,OK!
为什么DSPAM凌晨12点到凌晨4点的HISTORY记录看不到呢?
在24 Hour Activity 的图表中也没有
返回列表