伯乐共勉

讨论。NET专区
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

实时黑名单技术

Posted on 2007-12-06 11:44  伯乐共勉  阅读(616)  评论(0编辑  收藏  举报

概述

  为了有效地拒绝来自恶意的垃圾邮件来源站点和/或被利用的垃圾邮件来源站点所发来的垃圾邮件,最直接和有效的办法就是拒绝该来源的连接。

  虽然从理论上说,这样也有可能会拒绝掉来自该站点的正常邮件,从而造成邮件不能正常的投递,但是有以下理由支持我们这样做:

  • 接收任何来源的邮件则有可能导致邮箱中充满了垃圾邮件,影响了邮件服务器的性能和容量以及带来高额的带宽费用,而且导致了收取邮件的人浪费了不必要时间处理这些垃圾邮件;
  • 通过程序过滤垃圾邮件不但从技术上不能保证完全可靠,而且会对服务器带来很多负载;
  • 通过人工一一分拣邮件基本上是不可行的,不但从工作量上不可承受,而且有可能会带来隐私问题;
  • 通过拒绝恶意的垃圾邮件站点的连接,可以使垃圾邮件的实际发送量下降,从而缩小了垃圾邮件市场和压制了垃圾邮件的发展;
  • 通过拒绝被利用的垃圾邮件来源站点的连接,可以使该站点的管理员能充分认识到被利用所带来的后果,从而消除被利用的条件。

  综合以上利弊,我们认为,通过将确认后的垃圾邮件来源站点(无论是否是恶意与否)放入一个黑名单(Blackhole List),然后通过发布该名单来保护邮件服务器不受到黑名单中站点的侵扰确实是一个目前对抗日益严重的垃圾邮件的行之有效的方法。

  目前在黑名单技术上最流行的是实时黑名单(Realtime Blackhole List,简称RBL)技术。通常该技术是通过DNS方式(查询和区域传输)实现的。目前国外流行的几个主要的实时黑名单服务器都是通过DNS方式提供 的,如Mail-Abuse的RBL、RBL+等。国内目前只有http://anti-spam.org.cn服务(参见 CBL/CDL/CBL+/CBL-)。

  实时黑名单实际上是一个可供查询的IP地址列表,通过DNS的查询方式来查找一个IP地址的A记录是否存在来判断其是否被列入了该实时黑名单 中。举例来说,比如如果要判断一个地址11.22.33.44是否被列入了黑名单,那么使用黑名单服务的软件会发出一个DNS查询到黑名单服务器(如 cbl.anti-spam.org.cn),该查询是这样的:查找 44.33.22.11.cbl.anti-spam.org.cn 是否存在A记录?如果该地址被列入了黑名单,那么服务器会返回一个有效地址的答案。按照惯例,这个地址是127.0.0.0/8内的地址如 127.0.0.2(之所以使用这个地址是因为127/8这个地址段被保留用于打环测试,除了127.0.0.1用于打环地址,其它的地址都可以被用来做 这个使用,比如有时候还用127.0.0.3等。)。如果没有列入黑名单,那么查询会得到一个否定回答(NXDOMAIN)。

  有时候,由于邮件服务器非常繁忙,而邮件服务器每收到一封信就要做一个查询,虽然单个查询非常快,但是过多的对黑名单服务器的查询会导致查询响 应迟缓。在这种情况下,可以通过使用DNS的区域传输,将黑名单服务器的数据传输到本地的DNS服务器,然后对本地的DNS服务器进行查询即可。区域传输 可以设置为手工更新、定时更新或自动更新等方式,这依赖于你的应用。

  黑名单服务器的DNS查询和区域传输,并不是都可以随意使用的。有些服务器可供任何人查询和区域传输,而有些只对特定的用户开放。通常实时黑名单服务器都是不开放区域传输功能的。中国反垃圾邮件联盟所提供的CBL/CDL/CBL+/CBL-都是免费查询的,不需要申请即可使用;而它们的区域传输通常是不开放的。

  目前大多数的主流邮件服务器都支持实时黑名单服务,如Postfix、Qmail、Sendmail、IMail等等。关于这些服务器如何使用黑名单服务的具体细节请参见本站的其它文章。

  黑名单服务的提供和黑名单的维护由黑名单服务提供者来提供和维护。所以该名单的权威性和可靠性就依赖于该提供者。通常多数的提供者都是比较有国际信誉的组织,所以对于该名单来说还是可以信任的。

  不过由于多数的黑名单服务提供者是国外的组织和公司,所以其提供的黑名单并不能有效地反映出国内的垃圾邮件情况,因此国内使用实时黑名单服务的 邮件商很少,这也是我们之所以要提供自己的实时黑名单服务的原因。我们希望通过提供一个主要针对国内的垃圾邮件状况和动态地址分布的黑名单来为有效地遏制 垃圾邮件做些有益的贡献。

如何架设一个简易的实时黑名单服务器

  在有些情况下,你可能需要架设一个自己的实时黑名单服务器,用来为自己的邮件服务器或自己的用户提供实时黑名单服务。这里我们简单说明一下如何架设一个简易的实时黑名单服务器。

  前面我们提到,实时黑名单服务通常是通过DNS服务来进行的,那么本质上说,实时黑名单服务器就是一个有特定数据的DNS服务器。只是如果作为公开的实时黑名单服务运行,要考虑更多的服务特性罢了。


  1. 首先,你需要安装并运行一个DNS服务器。通常,我们使用BIND来做DNS服务器。当然,你可以使用任何一种DNS服务器来做实时黑名单服务,只是有些服务器并不适合提供大量的实时黑名单查询。
  2. 然后,你需要建立黑名单数据区域。比如,你的黑名单服务叫做myrbl.com,那么你在DNS中建立一个myrbl.com的区域(zone)。你的DNS除了这个区域外,其他的区域也可以存在。
  3. 接着,你需要建立黑名单数据,在区域数据文件中,添加你的黑名单数据。比如,你要将11.22.33.44加入黑名单,那么你的区域数据文件中应该有如下一行:
     44.33.22.11       IN        A           127.0.0.2

    如何建立一个合法的区域数据文件,这里就不再赘述了,请参考各种DNS的配置手册。
  4. 现在,你可以重新启动你的DNS服务器了。重启完成后如果没有报错,测试一下你刚刚加入的黑名单是否可以查询到:
    dig 44.33.22.11.myrbl.com.

    如果查询结果中有你解析的地址:127.0.0.2,那么恭喜你,你的黑名单服务器已经架设成功了。
  5. 最后,设置你的邮件服务器使用你自己的黑名单服务器吧。

  虽然,架设一个黑名单服务器并不是特别困难,但是维护一个黑名单服务器却要花费较大的精力。而且如果黑名单服务器的访问量大的话(黑名单服务器 要比通常的DNS服务器的访问量要大的多,一般提供公开服务的黑名单服务器都是多台并行使用的,如本站就使用了5台黑名单服务器),如何微调DNS的行 为,甚至对DNS服务器软件进行修改就需要一些较多的考虑了。