ExtMail服务器社区's Archiver

hzqbbc 发表于 2004-3-23 22:14

本站推出反垃圾邮件利器(acl/policy)服务~请大家试用:)

2004/3/23本站正式推出反垃圾邮件利器, 访问控制/策略服务 for postfix,可大幅度降低垃圾
邮件侵扰.......

Postfix的snapshot提供了一个smtp会话期间的策略服务,我设计了一个支持多种
策略的服务(acl/policy service)来防垃圾邮件。

[b]主要捆绑了如下功能模块:[/b]
1.系统级白名单(此功能postfix的access等也可实现)
2.防止伪造sender(anti forged sender) 及一系列针对大型isp的策略
包括:hotmail.com, yahoo.com, usa.net等,尽量防止误判
3.整合的基于dns的blacklist( rbl/rbl+/rshbl/proxies etc...)
4.连接数/发信数统计,可自动封缩某个在单位时间内发送过量信件的ip,并在一定
时间后自动解封。
5.防止不合法的helo命令,类似sina的做法,解析helo所对应ip及客户端ip是否匹配等。
6.greylist (可选):这个和postfix policy howto里带的grelist实现效果一样。

[b]实际效果:[/b]
经过半个月的运营,实际效果如下:
Thanks for using! version 0.05 by He zhiqiang <hzqbbc@jagmail.cn>
[root@ns root]# time perl statics.pl -l /var/log/policy.log*
===================================================================
Test_name                counts     percentage
===================================================================
Scanned email              43773      100%
Forged sender              27740      63.3%
Blocked by rbl/rshbl          12709      29%
Invalid hostname            662       1.5%
Greylist attemt             550       1.2%
OK/Dunno                2104      4.8%
===================================================================
Thanks for using! version 0.05 by He zhiqiang <hzqbbc@jagmail.cn>
(2004.3.23 14:03)

最开始由于策略太简单,很多国内poorly configure 的mail server发来的信都被拒收了,后来从新设计后得到大幅度改善。从上面统计结果可以看见,实际有用的信件,可能只有5%-7%左右。而伪造sender占了大多数。因此防止垃圾邮件主要可以以防止伪造sender开始。

[b]优势[/b]
垃圾邮件的比例大幅度降低,SpamAssassin每天只需要处理很少量的信即可(因为大部分垃圾信都在他们进入队列前给reject了 ),因此机器的负载比平时低很多(平时杀毒软件忙着杀n多病毒。。)。感觉是很爽。。

[b]不足[/b]
误判还是会出现,不过概率很低了。偶然1,2封信。例如有一些helo的名称是一些非fqdn的名字,当然要被杀掉,尽管看log发现这些信件其实都是从合法的邮件服务器发来的,但是这些服务器配置却是不正确的,有理由相信:杀掉这些信也未尝不可,没理由要求我们兼容任何配置垃圾但内容不是垃圾的信的:)...

另外,还没有一个很好的方法由用户来设置到底是不是要使用这个服务,一旦sysadmin设置使用这个服务,那么就是全局的。用户级的设置还没实现(waiting TO DO)

最后,这个acl/policy还是很不成熟的,使用它的朋友您可以尽管骂它做垃圾吧:)

[b]使用方法[/b]
暂时只支持postfix,但其他mta经过适当改造也照样可以使用类似方法。例如sendmail用户在milter里设计一个acl_policy_filter,查询这个服务的返回结果,做判断后送回sendmail处理。

[b]Postfix 配置:[/b]
1. 使用postfix snapshot版本,在我的配置里,使用的是最新的snapshot 2.0.18 2004209
2. 编辑 main.cf,修改smtpd_recipient_restrictions,我配置如下,黑体字为关键,仅供参考:
smtpd_recipient_restrictions = reject_non_fqdn_sender,
permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination,
check_policy_service inet:127.0.0.1:10030
reject_unknown_recipient_domain

注意: 大家如果要使用这个服务,将127.0.0.1换成51k.org即可。

[b]限制:[/b] 没有任何限制。任何人都可以使用。不需要申请。随便用。只是希望不要将smtp并发数开得太大(否则我服务器挂了就找你算帐 )。

声明:这个只是一个测试的服务,因此如果您因此而丢失了重要的信件,不要找我(正如使用CBL/RBL/SBL等等丢了信件也不能怪服务提供者一样)。。西西~~

[b]反馈:[/b]可以跟此帖,也可以给我发mail:
hzqbbc (at) hzqbbc (dot) com 我非常希望您将有问题的某次拦截告诉我,有利于设计更优良的策略。每当某一个策略成熟后,我就release这个策略的算法实现出来,另外,我并不是高手,所以只懂得在很普通的层面反击垃圾邮件, 大家可以大力批评偶:)如果大家有更好的idea希望能够告诉我,我非常感谢!!

3q3q ....... 正在改造ing。。争取加入cache功能,将查询速度大幅度提高

hzqbbc 发表于 2004-3-23 22:35

[quote]【[b]在 hzqbbc 发表的大作中提到:[/b]】
:2004/3/23本站正式推出反垃圾邮件利器, 访问控制/策略服务 for postfix,可大幅度降低垃圾
:邮件侵扰.......

:Postfix的snapshot提供了一个smtp会话期间的策略服务,我设计了一个支持多种
[/quote]

希望用postfix的朋友试验一下,我这里提供一个我自己用的最新postfix rpm包,
这样下载回去升级老的postfix, 改一下main.cf即可使用acl/policy了。

[url]http://51k.org/dist/postfix-2.0.18.2004020...9-2.as3.src.rpm[/url]

这个是src.rpm包,支持mysql/ldap/dbm 足够用了。

以下是关于policy的详细内容:
http://51k.org/postfix/SMTPD_POLICY_README.txt

包括协议都在里面描述得很清楚了。

另外,我自己的email server也是production的:) 测试了半个多月,基本没什么大问题了才发帖子出来,并提供给了2个公司/生产单位使用,反应良好。

至于说策略,上面已经叙述了,无非是将一些rfc-ignore的信件reject,并根据dns/email的相关协议不足做的防护措施罢了。

为了方便大家使用,我写了一个测试程序,可以方便的知道到底会有什么反应:)不必惊慌。呵呵~~ 以下是测试的过程:

[root@ns pfpolicy]# ./policy_test.pl -h 51k.org -p 10030 -s 1
host = 51k.org port = 10030 sleep = 1
processing stage0 ..........
########################################################
# Test purpose: show you the correct email information #
########################################################
action=DUNNO

processing stage1 ..........
########################################################
# Test purpose: show you the invalid helo_name warning #
########################################################
action=504 <>: Helo command rejected: need fully-qualified hostname

processing stage2 ..........
########################################################
# Test purpose: show you the illegal helo_name warning #
########################################################
action=501 <ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.test.hzqbbc.com>: Helo command rejected: Invalid name

processing stage3 ..........
########################################################
# Test purpose: domain has not mx record but we pass it#
########################################################
action=DUNNO

processing stage4 ..........
########################################################
# Test purpose: show you forged sender address reject. #
########################################################
action=554 Forged sender address! reason: sender mx does not match your ip address

processing stage5 ..........
########################################################
# Test purpose: show you the forged helo name warning #
#       (sina.com does this check and sucks! #
########################################################
action=501 <www.163.com>: Helo command rejected: helo name does not match your ip address

processing stage6 ..........
########################################################
# Test purpose: show you rejecting client listed in RBL#
########################################################
action=554 blocked using rbl.51k.org, reason: see http://rbl.51k.org/cgi-bin/lookup?ip=218.10.87.19

processing stage7 ..........
########################################################
# Test purpose: mail send to abuse/postmaster always OK#
#       This is useful when your MTA is strict #
########################################################
action=OK

processing stage8 ..........
########################################################
# Test purpose: show you the invalid helo host name  #
########################################################
action=501 <$?.89.!@#$%^&*()_.hzqbbc.com>: Helo command rejected: Invalid name

孙轩 发表于 2004-4-12 17:56

5.防止不合法的helo命令,类似sina的做法,解析helo所对应ip及客户端ip是否匹配等

对于这条我认为是不合适的,根据现在网络的实际情况很多mail服务器的对外发信是由另一台机器实现的,故这台机器不一定有域名,又如发信服务器通过nat与外部网联接等等情况,于是他的ip和他的hello不一定是对应的.sina 好像也关掉了这项限制了,因为这样会导致很多正常的信收不到。我觉得最多做到分析helo的域名是否可解析是比较合适的.
但如果能在国际中形成一个标准即发邮件的服务器必须有域名或必须在域名的mx记录中那垃圾信就无所遁形了.

页: [1]

Powered by Discuz! Archiver 7.0.0  © 2001-2009 Comsenz Inc.