发新话题
打印

[原创] 我在反垃圾的路上狂奔

我在反垃圾的路上狂奔

两周前, 受命为公司部署反垃圾邮件系统. 那天我的噩梦开始了.

对邮件服务器的了解不多,只是很久以前学习TCP/IP的时候看过MAIL工作的一些原理, 现在也差不多忘干净了.  还好有个地方叫互连网, 我可以从那里得到想要的一切.

查过资料才知道,反垃圾邮件系统从功能上分为两类。

1. 基于内容 以SpamAssasin为代表。
2. 基于行为 以Spam Locker为代表。

SpamAssasin 被认为是最好的反垃圾软件,SpamAssasin将其逻辑封装在一个设计精良的、抽象化的API中,因此它可被集成到电子邮件数据流中的任何地方。它号称9x%的识别率。高识别率的代价是以牺牲性能换来的,每一封邮件都要使用大量规则去对比,系统开销可想而知。如果运行在千万级用户的系统上.......难以想象

而Spam Locker是基于行为的反垃圾,在SENDER与MAIL SERVER进行命令交换时就可以识别垃圾邮件,从而断开TCP连接,极大的节省了系统资源和带宽。而APF的机制更可以将反垃圾系统和邮件系统分别置于不同的服务器上,进一步提高了系统的稳定性,降低了资源成本。
这两种系统由于机制不同,所以没有可比性,但我更倾基于行为的反垃圾邮件系统。

两周前下载并安装了ExtMail发布的Spam Locker(以下简称SL)开源反垃圾邮件程序。SL采用PERL语言开发,通过补丁形式支持QMAIL。在MAIL SERVER接收到RCPT TO后调用APF插件,向指定IP发送如下数据:

request=smtpd_access_policy
protocol_state=RCPT
protocol_name=SMTP
client_address=82.135.209.55
client_name=unknow
helo_name=82-135-209-55.ip.zebra.lt
sender=pulp@dcba.com
recipient=liming@abcd.com
queue_id=

SL收到数据后调用各种模块对数据进行分析,最后返回OK/DUNNO/REJECT三种状态。但是到最后我也没弄清楚模块之间的优先级到底是怎样,导致正常邮件不断的被退回。

悲剧开始了。

总公司的邮件设置很奇怪,发信使用了第三方服务,造成MX记录不匹配。有些SMTP SERVER的IP还被RBL列入黑名单。这些自然都被SL挡了回去,设置白名单也无济于事。

总公司的人急了。

南京公司内部有3台SMTP,用户没有进行统一的设置,而另外2台也没有SMTP认证,导致发信者的域名与发信IP不符,结果就被当做垃圾。在本地DNS增加了MX记录记录也不行。SL的日志中明明读取了本地DNS的信息,也返回了我设置的记录,依旧把正常邮件当垃圾。鉴于此情况我发信给公司全体人员,要求修改SMTP服务器,怕有些人不懂如何设置,我制作了3个版本的邮件客户端图文并貌的说明文件,但修改者寥寥,而我每天奔波在那些不仔细阅读说明的人中,筋疲力尽。要命的是总经理的不断问我,质问邮件为什么总发不出去,还收不到???

我哭了。

综合以上情况,最后不得不关闭了SL。

PS:在使用SL过程中还发现了诡异的幽灵记录

10-24 12:42:00 [27921]: [450 rejected, see http://bl.extmail.org/cgi/freq? ,from=<> to=<> helo=<> client=<>]
10-24 13:05:24 [3926]: [450 rejected, see http://bl.extmail.org/cgi/freq? ,from=<> to=<> helo=<> client=<>]
10-24 13:05:51 [3927]: [450 rejected, see http://bl.extmail.org/cgi/freq? ,from=<> to=<> helo=<> client=<>]
10-24 13:05:57 [4006]: [450 rejected, see http://bl.extmail.org/cgi/freq? ,from=<> to=<> helo=<> client=<>]
10-24 13:11:54 [6492]: [450 rejected, see http://bl.extmail.org/cgi/freq? ,from=<> to=<> helo=<> client=<>]
10-24 13:12:13 [6499]: [450 rejected, see http://bl.extmail.org/cgi/freq? ,from=<> to=<> helo=<> client=<>]
10-24 13:12:19 [6523]: [450 rejected, see http://bl.extmail.org/cgi/freq? ,from=<> to=<> helo=<> client=<>]

在SL版问过也没人解答, 觉得这是SL的BUG. 因为在APF的日志中没有提交空信息的记录。

如果要在公司现有环境中部署反垃圾邮件,且不需要用户更改设置,就必须建立一套自己的反垃圾规则。经过两周的测试,总结了一些经验,也搜集到足够的资料。下一步打算开发一套自己的反垃圾系统。这样可以不再受第三方规则的困扰,将邮件控制权把握在自己手中(并不是说SL不好,也许是自己太笨,没弄明白)。

这个系统的雏形已经实现(VB6下的多线程模式),和SL的工作原理一样,可以说是WINDOWS下的Spam Locker。只是判断规则按照内部需要自己完善。我的PERL很弱,否则就可以在SL的基础上修改一下。经过4天的测试,运行十分稳定,识别效率和效果也非常好。吸取前次部署SL的经验,这次打算测试一个模块,上线一个模块,发现问题马上调整。

反垃圾邮件的是痛苦的,不可能一步到位,最痛苦的是要面对用户的指责,质疑。也许我功力不够,也许是降大任前的苦其心志。我依旧奔在反垃圾的路上。

如果能够顺利到达终点,我会把相关资料整理成详细文挡,希望后来的兄弟不要象我般如此痛苦。

TOP

嘿嘿 支持你
no pain  no gain

TOP

这是被slockd的频率控制给限制了,你应该对自己的服务器设置个白名单,就跳过了这个限制了。
http://extmail.org
http://postfix.org.cn
-------- chifeng

TOP

对了,楼主写的不错,支持一把。。。。嘿嘿。。。。反垃圾是痛苦的,发垃圾也是痛苦的。大家何必呢。。。。
http://extmail.org
http://postfix.org.cn
-------- chifeng

TOP

控制发送频率的anvil插件已经关掉了.还是不可以

TOP

控制发送频率的anvil插件已经关掉了.还是不可以

TOP

发的是为了利益..反的也是.所以不会停止...
我才开始..

TOP

支持楼主,反垃圾就得用自己能控制的规则,才能灵活应付spammer。
期待你整理的资料。。。。。

TOP

楼主,我觉得你的想法上有点偏,基于你说了半天,你应该是在策略上优先接收然后进行分析,如果用行为识别,很容易就丢信。。基于内容过滤的最大好处就是邮件已经收下来了,大不了你从垃圾箱里面翻出来再重新给用户,虽然麻烦,总比用户收不到要强。

SA虽然占资源,但是这个是可以优化的,可以把过滤和MTA分开,用单独的机器进行处理,如果还是不能满足要求,可以做架构上的扩展。比如有多个MTA和多个过滤的机器

对于大型邮件运营商来说,就是这样工作的。

TOP

反垃圾工程,需要进一步完善,时间太匆忙会出差。

TOP

引用:
原帖由 coolerfeng 于 2008-9-14 23:55 发表
楼主,我觉得你的想法上有点偏,基于你说了半天,你应该是在策略上优先接收然后进行分析,如果用行为识别,很容易就丢信。。基于内容过滤的最大好处就是邮件已经收下来了,大不了你从垃圾箱里面翻出来再重新给用户,虽然麻烦,总比用 ...
.我以前的是按内容过滤的,邮件可以在WEBMAIL里找到的.照你这样说的情况,Spam Locker认为是垃圾邮件就直接不接收是吗?会退信给对方吗?还是返回一个4XX  5XX的错误给对方的邮件服务器呢?,我想了解的清楚点

TOP

这个东西一个人搞。。。???最好配点人手。哈哈

TOP

发新话题