小介绍一下偶的ASG 反垃圾邮件网关
1.基本情况:采用了3层防护体系,效率中等,主要为对spam特别敏感的用户设计(例如偶自己),今天刚刚完成第一层防护的后台服务service,效果挺好的。~~ :P
2.基本原理:
根据SPF(sender policy framework)提出的基本原理,加上一些小技术处理,偶自己就实现了一个简单的ASF网关服务了。
原理可以概括为:拒绝从任何与其声明的Sender 域之mx ip地址不相符的ip地址smtp会话。
由于email各种协议都是20多年前设计的,当初对spam几乎没有考虑过,因此spam横行至今已非常猖獗。即便使用基于bayes的反垃圾邮件软件(SpamAssassin等),对付中文的spam效果也不是特别好,尤其是auto-learn后容易误伤。
* 符合规范,合法的邮件发送过程:
假设用户foo拥有邮件地址foo@bar.com
bar.com的mx是1.2.3.4
foo要发信给jerry@tommy.com
tommy.com的mx是2.0.0.1
C代表Client,S代表Server,则foo发邮件的合法过程是:
foo(拨号)--->连接到mx(1.2.3.4),smtp会话过程:
C>>>ehlo foo.xxx.xxx
S<<<250-mx.foo.com
S<<<250-AUTH LOGIN
S<<<250-8BITMIME
C>>>AUTH LOGIN
S<<<334 VXNlcm5hbWU6
C>>>xxxx
S<<<334 UGFzc3dvcmQ6
C>>>xxx
S<<<254 Authentication successful
C>>>MAIL FROM:<foo@bar.com>
S<<<250 Ok
C>>>RCPT TO:<jerry@tommy.com>
S<<<250 Ok
C>>>data
S<<<354 End data with <CR><LF>.<CR><LF>
C>>>Hi jerry , i'm foo!
C>>>.
S<<<250 Ok: queued as EDA1088002
C>>>quit
S<<<221 Bye
会话完成。这个过程是用户邮件交给其域mx主机处理的过程。
mx.foo.com(1.2.3.4)将接收下来的信relay到mx.tommy.com(2.0.0.1)
其过程如下:(假设C代表Client是mx.foo.com, S代表Server是mx.tommy.com)
C>>>helo foo.xxx.xxx
S<<<250 mx.tommy.com
C>>>MAIL FROM:<foo@bar.com>
S<<<250 Ok
C>>>RCPT TO:<jerry@tommy.com>
S<<<250 Ok
C>>>data
S<<<354 End data with <CR><LF>.<CR><LF>
C>>>Hi jerry , i'm foo!
C>>>.
S<<<250 Ok: queued as EDA1088002
C>>>quit
S<<<221 Bye
会话完成,这个过程成为relay的过程。将信最终送到目的地。
*不法过程!假冒Sender地址发送垃圾邮件。
一般垃圾邮件发送者(Spammer)多数是利用自己拨号的主机,安装了一些垃圾邮件
发送软件,直接将信投递到收信人域名的mx。对于一般的邮件服务器而言,这些信
将照收不误,因为都会符合RFC的相关规定。这里,Spamer跳过了中继(relay)
的服务器,假冒成某些域的用户,给终端用户直接发信,发送垃圾!!
利用这个漏洞形成的原理,我们一样可以反击这样的垃圾邮件!非常简单,如下是
偶的ASF(anti sender forged)服务+postfix的一段smtp会话:
假设C是Client, 为Spamer的ip,S是SMTP服务器, Spamer的ip地址是202.100.100.1
smtp会话如下:
C>>>ehlo spam.xxx.com
S<<<250-smtp.jagmail.cn
S<<<250-PIPELINING
S<<<250-SIZE 10240000
S<<<250-VRFY
S<<<250-ETRN
S<<<250-AUTH PLAIN LOGIN GSSAPI
S<<<250-AUTH=PLAIN LOGIN GSSAPI
S<<<250 8BITMIME
C>>>mail from:<spam@hotmail.com>
S<<<250 Ok
C>>>rcpt to:<bbc@51k.org>
S<<<450 <bbc@51k.org>: Recipient address rejected: Forged sender address!
C>>>quit
S<<<221 Bye
为什么这个smtp会话被拒绝呢?因为连接上来的客户主机地址是202.100.100.1,而
hotmail.com的mx 的ip地址为:
64.4.50.99
65.54.166.99
65.54.190.7
65.54.166.230
65.54.253.99
64.4.50.239
65.54.167.5
65.54.190.230
65.54.253.230
65.54.167.230
与202.100.100.1没有任何一个符合,因此可以断定邮件不是从hotmail.com发出来的
,信件不可信,因此拒收!
这样处理下来,实际可以抵挡大部分的垃圾邮件,有少量垃圾邮件通过合法的mx发出
则交由内容过滤程序(如SpamAssasin)处理。 请问一下班主, 你的spamassassin是怎么做的, 偶在安�bamavisd 时己经是自动安�b了spamassassin了, 但是就是不懂怎样设置这�筛龆�东, 偶共安了cdcc和razor2, 由于不懂设定, 而且在网上找的很多都是用procmail, 不同的组合, 有点不知怎么弄..
现在偶的postfix想在反spam 和防毒是这样的, 用amavisd+spamassassin+cdcc+razor, 之后就是用clamav做防毒..
不知班主有什么文章可供参考..谢谢!! [quote]【[b]在 kinux 发表的大作中提到:[/b]】
:请问一下班主, 你的spamassassin是怎么做的, 偶在安�bamavisd 时己经是自动安�b了spamassassin了, 但是就是不懂怎样设置这�筛龆�东, 偶共安了cdcc和razor2, 由于不懂设定, 而且在网上找的很多都是用procmail, 不同的组合, 有点不知怎么弄..
:
:现在偶的postfix想在反spam 和防毒是这样的, 用amavisd+spamassassin+cdcc+razor, 之后就是用clamav做防毒..
:
[/quote]
google.com应该很多类似的文章哦。我都是按官方的文章设置的。之后就只能靠自己慢慢看对应的manual和手册,以及mailist来琢磨了啊:( 你说的是标准配置啊。不难做才对。 你这样做,岂不是一些通过relay发向你服务器的信件都拒收? [quote]【[b]在 孙轩 发表的大作中提到:[/b]】
:你这样做,岂不是一些通过relay发向你服务器的信件都拒收?
[/quote]
不reject才不对哦。因为relay几乎都是open relay来的。
而合法的relay一般会在mx列表里。根据统计,只有少数几个大的mail
是有超过100个relay的host。因此这个方法可以抵挡很多spam。
效果见另一文
页:
[1]