Chinaunix首页 | 论坛 | 博客
  • 博客访问: 524018
  • 博文数量: 53
  • 博客积分: 2265
  • 博客等级: 大尉
  • 技术积分: 574
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-15 16:50
文章分类

全部博文(53)

文章存档

2019年(1)

2018年(2)

2016年(2)

2015年(1)

2014年(6)

2013年(5)

2012年(7)

2011年(16)

2010年(13)

分类: BSD

2014-08-29 16:09:05

 
#转载此文,请注明作者和来源fish.blog.chinaunix.net,谢谢

越来越觉得exim灵活性的强大,可以自定制很多东西, 近来垃圾邮件很多,如若没借助其他防垃圾软件时,只能调整exim本身功能来达到垃圾,也能达到不少效果。

  exim本身会verify sender功能,就是坚持发送者是否合法, 它会对发送者做一个模拟的反发送,比如发送者为 A@iamspam.com, 那么exim就会尝试能否发送邮件到A@iamspam.com,检查发送者域名的MX是否存在,如果不存在,那么它就不拒绝这个发送者。

但是,exim检查完MX后,再来检查这个域名是否有A记录,如果有,那么就认为这发送者合法。这做法给垃圾邮件了空间。

以下是在FreeBSD下测试的。

现在要做的就是检查发送者的域名是否有MX,如没有,则立刻拒绝。以下是debug测试发现的,如垃圾邮件发送者iamspam.com (以这域名为例子)发来一垃圾邮件。如何debug呢,exim提供了非常友好的命令和参数,用exim的命令和telnet就可以debug, 如

exim -bd -d -oX 2225 -C /usr/local/etc/exim/configure.test 
(如需把输出写入文件里则可以:
exim -bd -d -oX 2225 -C /usr/local/etc/exim/configure.test > & testlog.txt)
以上命令的意思是,
/usr/local/etc/exim/configure.test  是exim的测试配置文件
2225 是测试的端口, 25端口正在使用呢。

然后再另外一台电脑上telnet就可以: telnet mydomain.com 2225

#转载此文,请注明作者和来源fish.blog.chinaunix.net,谢谢

99835 --------> dnslookup router <--------
99835 local_part=vza domain=iamspam.com
99835 checking domains
99835 iamspam.com in "@"? no (end of list)
99835 iamspam.com in "! +local_domains"? yes (end of list)
99835 calling dnslookup router
99835 dnslookup router called for vza@iamspam.com
99835   domain = iamspam.com
99835 DNS lookup of iamspam.com (MX) gave NO_DATA
99835 returning DNS_NODATA
99835 DNS lookup of iamspam.com (A) succeeded
99835 69.172.201.208 in "0.0.0.0 : 127.0.0.0/8"? no (end of list)
99835 fully qualified name = iamspam.com
99835 iamspam.com 69.172.201.x mx=-1 sort=-348
99835 set transport remote_smtp
99835 queued for remote_smtp transport: local_part = vza
99835 domain = iamspam.com
99835   errors_to=NULL
99835   domain_data=NULL localpart_data=NULL
99835 routed by dnslookup router
99835   envelope to: vza@iamspam.com
99835   transport: remote_smtp
99835   host iamspam.com [69.172.201.x]

以上是测试要准备的东西, 现在只需要把这条ACL写到ACL位置就可
1. 拒绝没有MX记录的发送者

deny    log_message = go away,no mx guy
        !sender_domains = : mydomain.com : mydomain.cn
        set acl_m8=${lookup dnsdb{mx=$sender_address_domain}{$value}fail}
        condition = ${if !match {$acl_m8}{\N.*[A-Za-z0-9].*\..*[A-Za-z0-9].*\N}{yes}{no}}

condition在这里的测试是, 如果检查到发送者的域名为空 ( 正常的MX记录,如 有主机名,IP )。

2. Exim强大的dnsbl功能,拒绝发送者来源于dns blacklist.

    deny
         log_message = $sender_host_address is blacklisted
         hosts = !192.168.0.0/16
         senders = !mystaff@mydomain.com
         #dnslists = zen.spamhaus.org:dnsbl.sorbs.net
         dnslists = zen.spamhaus.org=127.0.0.11,127.0.0.10,127.0.0.4,127.0.0.3,127.0.0.2

正常下可以直接用
dnslists = zen.spamhaus.org

为啥zen.spamhaus.org=127.0.0.11,127.0.0.10, 这句意思是,在dnsbl服务器上查询返回的结果是127.0.0.1等时,才拒绝发送者, 如果查询不到或者没有这些记录(要知道dns查询很经常会失常的),那么这条规则就直接转到下一条。

如果没有 =后面的东西, 如dns查询失败, 那么发送者就会直接拒绝。

以上防垃圾方法不是最佳的,其效率没有独立的防垃圾软件强大和高效, 且会耗费资源。但结合exim本身的

#转载此文,请注明作者和来源fish.blog.chinaunix.net,谢谢


参考部分文档:

更多的设置方法,请参考



http://www.tty1.net/blog/2007/fighting-spam-with-exim4_en.html






阅读(3412) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~