Qmail反垃圾邮件技术

发表于:2007-07-02来源:作者:点击数: 标签:
本文主要阐述Qmail邮件系统中如何进行反垃圾邮件配置,它包括两个方面:一个是不发送垃圾邮件;另外一个是不接收垃圾邮件。 一、 确认你的qmail 服务器 不是OPEN-RELAY状态 这一点非常的关键。如果你的qmail服务器现在是OPEN-RELAY状态的话,就是允许所有的人
本文主要阐述Qmail邮件系统中如何进行反垃圾邮件配置,它包括两个方面:一个是不发送垃圾邮件;另外一个是不接收垃圾邮件。

  一、 确认你的qmail服务器不是OPEN-RELAY状态

  这一点非常的关键。如果你的qmail服务器现在是OPEN-RELAY状态的话,就是允许所有的人利用你的邮件服务器对外发送垃圾邮件,这样,你的服务器就成了一个制造垃圾邮件的源头了。∶—(

  如何来解决这个问题?

  通过使用ESMTP协议的SMTP认证功能(SMTP AUTH)来控制发信者,只有通了认证的用户才可以通过服务器发送电子邮件。

  Qmail本身是没有SMTP认证功能的,但是可以使用pacth包对Qmail打补丁增加发信认证功能,重新编译生成qmail-smtpd程序,就有了发信认证的功能了。可以从下载qmail-smtpd的auth补丁包。
  

  安装方法是:

  1. 解开tar.gz的包
    tar zxvf qmail-smtpd-auth-0.31.tar.gz
  2. 进入解开的qmail-smtpd-auth-0.31目录
    cd qmail-smtpd-auth-0.31
  3. 将当前目录下的base64.h和base64.c文件拷贝到qmail的源码目录中
    cp base64.* ../qmail-1.03
  4. 返回上一级目录并应用auth补丁中的path
    cd ..
    patch -d qmail-1.03 < qmail-smtpd-auth-0.31/auth.patch
  5. 重新编译生成qmail-smtpd
    make qmail-smtpd
  6. 将新生成的qmail-smtpd文件拷贝到/var/qmail/bin下,替换掉原有的qmail-smtpd程序,替换之前最好对前的程序做一个备份。
    cp qmail-smtpd /var/qmail/bin

  这样你的qmail就有SMTP发信认证功能了。但是这样是不是就可以算是关闭OPEN-RELAY了?

  不,还是要确认一下,你的/etc/tcp.smtp文件中的内容为

    127.0.0.1:allow,RELAYCLIENT=""

并且成功生成了tcp.smtp.cdb文件,生成方法如下:

    /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp

  同时确认你的服务器启动脚本为

    /usr/local/bin/tcpserver -H -R -l 0 -t 1 -v -p -x \
/home/vpopmail/etc/tcp.smtp.cdb -u qmaild -g nofiles 0 smtp \
/var/qmail/bin/qmail-smtpd hostname /home/vpopmail/bin/vchkpw \
/bin/true 2>&1 | /var/qmail/bin/splogger smtpd 3 &

  这样,你的qmail服务器就完全关闭了OPEN-RELAY。

  二、 拒收垃圾邮件的发件人

  如果邮件系统管理员在对日志进行统计分析,可以发现一些比较集中的收发件人的邮件地址,对于比较集中的发件人,我们可以根据他所发送到的邮件地址来判断,是否是垃圾邮件。如果收件人地址大量是不存在的地址,可以肯定,这是以用户名猜测方式来发送垃圾邮件的手段(这也是比较常见的垃圾邮件发送方式),需要对此发信地址进行拒收。或者是对同一个帐号发送大量的邮件,也需要对此发信地址进行拒收。

  拒收的方法:

  编辑/var/qmail/control/badmailfrom文件(如果没有可以新建一个)将要拒收的邮件地址写入,每条记录为一行如:
    123@123.com
  这样所有FROM来自123@123.com的邮件都会被邮件服务器拒收。

  同样也可以对一个域进行拒收,在badmailfrom文件中加入
    @test.com
  这样所有来自test.com的任何地址的电子邮件都会被服务器拒收。


  三、 拒收垃圾邮件的发送IP

  如果利用一些工具来发送垃圾邮件,可以使发件人的邮件地址变成随机地址,可能发到你的服务器的每一封垃圾邮件的发件人地址都不一样,这样怎么办?拒收发件人的方法,就起不到应有的做用了。

  我们可以通过查看邮件日志和网络的SMTP(25)端口的连接情况,找出发件数目比较高的IP和连接数比较高的IP,用防火墙来对这些IP进行拒收,从网络层就拒收这些垃圾邮件,同时也有相当高的效率。

  如果是Linux系统就可以直接的用ipchains或iptables来拒收。
  ipchains拒收:
    ipchains –A INPUT –p tcp –s 你要拒收的IP –d 你的服务器IP 25 –j DENY
  iptables 拒收
    iptables –A INPUT –p tcp –s 你要拒收的IP –d 你的服务器IP --dport 25 –j \ DROP
  有关Linux防火墙的更多使用参考请访问。

  四、 正确的设置.qmail-default

  .qmail-default文件在/var/qmail/alias目录下,相关的.qmail-文件是为了实现qmail的转发功能的,而.qmail-default是qmail-local进程找不到合适的转发规则时而要匹配的最后一个文件,如果是默认的设置,qmail会认为所有的Mailbox都是合法存在的。可以设置它的内容为

    /home/vpopmail/bin/vdelivermail @#@# bounce-no-mailbox

  这样不存在的邮箱都会bounce掉并且返回no-mailbox信息。

  五、 使用第三方RBL

  RBL(Realtime Blackhole List)是实时黑洞列表,是国际上比较流行的反垃圾邮件技术,可以采用RBL来使邮件服务器拒收在列表中已知的垃圾邮件发送服务器所发送的垃圾邮件。

  你需要下载一下补丁程序来增加这个功能。

  下载地址:

  Qmail的rblsmtpd必须要和ucspi-tcp结合在一起使用。

  rblsmtpd的安装方法很简单。在解开的源码目录中
    make
    make setup check

  注:在新版的ucspi-tcp 0.88里,已经包含了rblsmtpd,直接安装ucspi-tcp 0.88就可以了。

  安装完后修改你的SMTP启动脚本,加上/usr/local/bin/rblsmtpd。

    /usr/local/bin/tcpserver -H -R -l 0 -t 1 -v -p -x \
/home/vpopmail/etc/tcp.smtp.cdb -u qmaild -g nofiles 0 \
smtp /usr/local/bin/rblsmtpd \
/var/qmail/bin/qmail-smtpd hostname \
/home/vpopmail/bin/vchkpw /bin/true 2>&1 | \
/var/qmail/bin/splogger smtpd 3 &

  如果你想使用第三方的RBL列表,只要加上-r选项就可以了,比如:

    -r blackholes.mail-abuse.org

  第三方的RBL服务器请参阅本站的【>>>>】,本站也即将推出自己的黑名单服务器。

  六、 使用Anti-Spam软件

  使用Anti-Spam软件来过滤,现在这项技术被越来越多的人认为是行之有效的。 有很多的Anti-Spam软件,其中一些Anti-Spam是结合来使用的(Procmail是一个非常优秀的MDA软件,使用请参考 http://www.procmail.org)。

  Spamassassin
    
    相当不错的Anti-Spam软件,可以用在多个UNIX平台的MTA上。

  spambouncer
    

  Kaspersky Anti-Spam
    
    可以用在多种邮件MTA上,并且有邮件头的的检查。

  七、 总结

  垃圾邮件肯定是不能够完全制止的,但是我们采取上面的措施,肯定会制止住相当部分的垃圾邮件。这对于我们的邮件服务器的负载降低、带宽占有减少和工作效率提高都是很有意义的。

原文转自:http://www.ltesting.net