聊聊DNSBL

达芬奇密码2018-08-02 11:53
>> 啥是DNSBL?
从事Email相关行业的IT人多多少少都听过 RBLDNSBLDNSWLURIBL之类的的名词,它们都是一些用于打击垃圾邮件的黑名单/白名单,都可以统称为DNSBL。说白了,就是 一份记录着全球IP、Domain或URI等对象的信誉度的列表,这份列表的查询方式是通过 DNS

对于黑名单性质的DNSBL列表,里面的IP、domain或uri通常是啥来源呢?
  • 垃圾邮件源头
  • 钓鱼邮件源头
  • 开放中继(Open Relay)或开放代理(Open Proxy)主机
  • 僵尸网络控制者、肉鸡
  • 恶意网站
  • 恶意DNS服务器
  • 病毒、蠕虫、木马等恶意软件集散地
  • DDos网络攻击等黑客行为集散地
  • 钓鱼链接的主机或url跳转机
  • 等等

依靠DNSBL,使用者可以方便快速地定位到一个ip或uri的信誉值,帮助各种反垃圾系统。 渐渐地,大家看到了DNSBL在拦截垃圾邮件方面的积极作用,便陆续推广到其他应用场景:
  • 邮件服务商的系统网关
  • 邮件客户端软件
  • 网络聊天工具Internet Relay Chat(IRC)
  • 论坛、微博的反垃圾系统
  • IP自治域检查
  • ……

>> 关于命名
这类列表越来越流行,也催生了 SpamHausURIBL等众多列表服务厂商。但大家对这类列表却一直没有一个统一的叫法,终于IRTF看不过去,在2010年和2012年分别发布了 RFC 5782RFC 6471,试图规范起这块领域。

稍微整理了一下,沿用至今的命名/产品至少有:
  • RBL :Real-time Black List或Real-time Block List,即实时黑名单。
  • DNSBL :DNS Black List或DNS Block List,即DNS黑名单。
  • DNSWL :DNS White List,即DNS白名单。
  • DNSxL :DNSBL和DNSWL的合称。
  • RHSBL :Right Hand Side Black List或Block List,即域名黑名单。RHS表示“右手侧”,即一个email地址@符号的右侧部分(一个域名部分),或DNS PTR地址(IP反解地址)的最右侧部分(也是一个域名)。
  • ……

现在,RFC6471提出,对于这一类 基于DNS的列表查询服务都命名为 DNSBL,For  DNS-Based List,而不是表示DNS- Block List或DNS- Black List。
“B”表示Based而不仅仅是Black/Block,即涵括了Black黑名单列表、White白名单列表和其他性质的所有基于DNS的列表,更加全面。我也倾向于这个叫法。

>> 列表服务商们
最早的开放式DNSBL服务诞生于 1997年,由当时两位有名的互联网软件工程师Dave Rand和Paul Vixie创立。当时,他们提供的RBL查询服务是通过BGP的查询方式,但那个时候BGP并不常用,于是两人改为DNS的方式,他们的RBL服务才开始流行起来。
1997的这份RBL的严格叫法应该是Mail Abuse Prevention System (MAPS) RBL。在美国, MAPS RBL还是一个被Trend Micro公司注册了的服务品牌呢。。。

时至今日,全球DNSBL服务商已有超过 700家,种类繁多,但鱼龙混杂,良莠不齐。
其中有 知名的vs不知名的、国内的vs国外的、开放的vs私有的、免费的vs收费的、白名单式vs黑名单式、免费申诉vs收费申诉、活跃vs已作古的,结果可信vs值得商榷的,服务稳定vs喜欢宕机的,等等等等。
比较知名的典型的DNSBL列表有:
  1. SBL 地址:sbl.spamhaus.org,来自Spamhaus,为IP黑名单列表,记录垃圾全球邮件发送者的IP地址
  2. XBL 地址:xbl.spamhaus.org,来自Spamhaus,为IP黑名单列表,实时记录全球被木马/蠕虫/病毒所劫持的PC肉鸡的IP地址。
  3. PBL 地址:pbl.spamhaus.org,来自Spamhaus,为IP列表,记录终端用户的IP地址,通常是一些ADSL动态IP。该列表本身不带黑白性质,有自己特殊的用法。
  4. DBL 地址:dbl.spamhaus.org,来自Spamhaus,为Domain黑名单列表,记录在垃圾邮件中发现的域名地址,通常是一些垃圾网站的域名。
  5. ZEN 地址:zen.spamhaus.org,来自Spamhaus,为IP列表,本质是Spamhaus旗下所有IP列表的整合,即SBL+XBL+PBL+...。
  6. CBL 地址:cbl.abuseat.org,来自Spamhaus的一个子部门,为IP黑名单,记录着全球的开放式代理、僵尸网络、病毒木马肉鸡等IP地址。
  7. SCBL 地址:bl.spamcop.net,来自SpamCop,为IP黑名单。
  8. BRBL 地址:b.barracudacentral.org,来自著名的梭子鱼Barracuda,为IP黑名单。
  9. UCEPROTECT-Level1 地址:dnsbl-1.uceprotect.net,来自UCEPROTECT,为IP黑名单。Level1的对象为单IP,Level2为IP段,Level3为IP自治域。这家服务商的申诉移除服务是收费的。
  10. CML 地址:cml.anti-spam.org.cn,来自中国反垃圾邮件联盟,为IP白名单。
  11. URIBL 地址:multi.uribl.com,来自URIBL,为URI黑名单。基于IP的DNSBL列表非常多,但基于URI的很少见,难得。
  12. MAPS RBL+ 地址:付费厂商来的,抱歉拿不到地址,来自Trend Micro,为IP黑名单。提供商业DNSBL服务,客户很多。
  13. ……

更多DNSBL厂商,可参见 整理1 整理2

如此之多的厂商,看花眼了没?哪个/些才是适合我的列表呢?这里讲究 宁缺毋滥,不看广告看疗效。如果选择了一家憋足厂商所提供的错漏百出的列表,后果可想而知。 RFC 6471第1.2节提供了一些有助挑选列表的建议。


>> 收录标准vs申诉标准
优秀的列表服务商除了提供高质量的列表服务,还会/敢在官网上公布旗下列表的行为标准,包括 收录标准移除标准过期标准等,提供 申诉渠道,保留好收录原因等关键数据以便后期审查追踪,并且系统本身和管理人员都能严格遵循这些规范行事。
关于这一点 Spamhaus是个好榜样,他们旗下运维着 SBLXBLPBLDBL等多份开放式列表,每一份都有详尽的功能及标准介绍,赞一个
游戏规则写明白了,各方玩家才有得长久地玩。哪怕像 UCEPROTECT 那样,明码标价告诉你移除一个黑名单IP需要缴纳多少多少美刀,也是一件大好事!

从另一个角度说,我们不能去评判各家厂商的收录标准和移除标准是对是错,各家厂商都有足够的权利和自由去创立自己的标准,建立和维护自己的数据库。同样地,作为列表使用者的一方也有权利和自由去选择用不用这家厂商的列表服务。

>> 技术细节

从技术上说,一套DNSBL服务可以分为三大块:
  1. 生产者:列表服务商如何收集ip/domain?收集之后怎么存放?见Q1、Q2
  2. 消费者:列表使用者如何查询列表?见Q3
  3. 维护者:通过什么方式可以进行申诉?见Q4

Q1. 厂商的列表是通常啥途径收集到的?
厂商收集数据的方式多种多样,主流的做法是以自动化脚本为主,人工参与为辅。
常见的途径如下:
  1. 蜜罐账号。厂商在互联网上秘密地隐藏了很多蜜罐账号(探针),一旦spammer的爬虫收集到这些蜜罐账号后售卖出去,这些蜜罐账号的邮箱就会不断收到不请自来的邮件。这时,厂商就能获取到邮件发送者的IP、Domain、邮件样本等数据了。
  2. 主动监测。客户(通常是一些邮件服务商或企业邮箱用户)使用了某些厂商的反垃圾系统服务,依照协议客户邮件服务器的日志和数据会上传给厂商,厂商使用一定算法可以从中提取出信誉度差的IP和域名,进而收录。
  3. 数据共享。厂商之间,厂商与邮件服务商之间通常都有数据共享的机制。
  4. 人为举报。某些厂商的官网上带有举报功能,当用户收到垃圾邮件后可以上传给他们。

Q2. 服务商收集到的记录是怎么存放的?
排除BGP方式,所有的列表的底层都是存放在 DNS zone里。服务器软件可以是标准的DNS服务如bind,也可以是一些专用的服务如rbldns、rbldnsd等。

也就是说,列表中的每一条List就是一条能作DNS解析的DNS entry地址(由 反转IP 和厂商地址拼接组成),其DNS查询结果至少有A类型记录(通常一个IPv4地址127.0.0.2。也可能为其他IP地址,但国际通用作法是在127.0.0.0/8区间内,即127.0.0.0-127.255.255.255 ),有些也会附带TXT类型记录(用于描述被收录到该列表的原因)。
例如,有一家厂商叫 bad.example.com,有一个IP地址是 192.0.2.99,反转之后是 99.2.0.192。那么,这条List的DNS entry地址就是 99.2.0.192.bad.example.com。首先,这个地址必须有A记录。其次,它可以有TXT记录。

如果是一个IPv6地址,DNSBL服务商是怎么存放在DNS里呢?大同小异,也是先将 IPv6地址反转,再与厂商地址拼接组成一个DNS entry地址。例如,要表示 2001:db8:1:2:3:4:567:89abugly.example.com收录,DNS entry地址为 b.a.9.8.7.6.5.0.4.0.0.0.3.0.0.0.2.0.0.0.1.0.0.0.8.b.d.0.1.0.0.2. ugly.example.com。这个地址也必须有A记录,可以有TXT记录。

除了收录IP地址,会收录Domain吗? 会,这就是所谓的RHSBL。较IP地址而言,基于domain的列表少很多。 相同之处是都 存放在DNS zone,不同之处在于domain不需要反转。例如,要表示invalid.edudoms.example.net收录,DNS entry地址是 invalid.edu.doms.example.net

上面介绍了基于IPv4、IPv6和domain这三种情况的列表,对于一家服务商,他们都会维护一个通用的“ 测试地址”,也就是一个仅用于测试的DNS entry。对于IPv4,这个测试地址为 127.0.0.2(必须)或其他127.0.0.0/8地址(但不允许是127.0.0.1!!);对于IPv6,这个测试地址为 ::FFFF:7F00:2(::FFFF: 127.0.0.2); 对于domain,这个测试地址为“test”。 例如, 2.0.0.127.bad.example.com test.bad.example.com就是一些“测试地址”;

Q3. 网络管理员通常是如何查询列表呢?
查询方法可分为两大类:
  1. 实时查询:DNS
  2. 非实时查询:rsync、ftp等
第一类,实时查询的主流做法都是走DNS,通常先查询本地DNS服务器来加速查询,而非直接查列表服务商的DNS服务器。有时会做本地DNS缓存,但必须遵守TTL及时去刷新缓存。
这里要当心 DNS劫持问题 !国际上某些地区有令人无语的网络管制,我大天朝也不例外,在这些地区用DNS实时去查某条本不存在的DNS记录,有可能被当地的电信网络运营商给DNS劫持,导致这条DNS查询本该返回空,却返回了一个网络运营商的IP地址,幸好都是一些公网IP地址,而非127.0.0.0/8地址

第二类,非实时查询的做法是先将服务商的列表包下载到本地,通常是走rsync或ftp。这种方法的优点是查询速度快,明显的缺点就是更新频率低,有可能某个IP已经被厂商解禁了,但在本地的列表包里还存在着。。

Q4. 如果我想申请或申诉,有哪些途径?
  1. 官网申诉。按国际惯例,一家列表厂商的列表地址都会有A记录或AAAA记录,指向其官网地址,可以直接浏览。正规厂商官网上都可以找到申诉页面(常为Appeal Request或Removal Request),填写表单并提交即可。
  2. 邮件申诉。如果你能取得列表厂商的管理员联系方式,也可以先发个邮件,哈。
  3. 邮件列表申诉。偏大型的列表会附带一个邮件列表,感兴趣或有投诉的都可以加进去。

>> DNS查询示例
下面用几个实例直观演示一下。

$ dig +nocmd  1.0.0.127.sbl.spamhaus.org +noall +answer   <-- 保留地址127.0.0.1必须不存在!
$

$ dig +nocmd  2.0.0.127.sbl.spamhaus.org +noall +answer   <-- 测试地址127.0.0.2必须存在!
2.0.0.127.sbl.spamhaus.org. 292 IN      A        127.0.0.2
$

$ dig +nocmd  test.dbl.spamhaus.org +noall +answer   <-- 对domain类的列表,测试地址test通常都存在
test.dbl.spamhaus.org.  472     IN      A        127.0.1.2
$

$ dig  txt +nocmd  2.0.0.127.sbl.spamhaus.org +noall +answer   <-- 这时,通常还带有一个TXT记录
2.0.0.127.sbl.spamhaus.org. 300 IN       TXT     "http://www.spamhaus.org/sbl/query/SBL233"
$

$ dig txt +nocmd  2.0.0.127.dnsbl-1.uceprotect.net +noall +answer   <-- UCEPROTECT的TXT描述更直观
2.0.0.127.dnsbl-1.uceprotect.net. 2100 IN TXT    "Test Record. UCEPROTECT.NET LEVEL 1 List is active."
$
>> 使用方法
无论基于ip、domain或uri的列表,一旦查询后发现对象已被收录,我该怎么使用呢?常见有下面几种:

  1. 非黑即白。一旦发现发信者的IP被加黑,立即拒绝接收这封邮件或扔到垃圾箱;发现IP被加在某个白名单中,便不管邮件内容是什么一概收下。这是最简单粗暴的用法!开销最小,但可想而知其误判率会有多高。
  2. 累计评分。这是比较“智能、健壮”的用法,常用在评分机制的反垃圾系统中。当一个IP被加黑,则加上一定得分。流行的开源反垃圾系统SpamAssassin的URIDNSBL插件就是一个典型应用。
  3. 决策参考。一个IP是否被加黑,不直接作为是否拒收的依据,而仅仅作为这封邮件的一个新属性,用于其它判断流程。譬如当发信IP被罗列在SpamHaus的PBL列表中,表示该IP是一个动态IP地址或ADSL拨号IP地址,这时肯定不能直接拒收邮件!PBL只是告诉了你这个IP的类别,怎么使用就是你的业务逻辑问题了。

上面这3种是在Email领域的常见用法。当扩展到IM、IRC、微博、IP地理定位等其他领域时,DNSBL的 用法更是多种多样,数不胜数。
但不管是哪一种用法,DNSBL都只是一个协助做判断的工具,让它为你服务,而不是你盲目跟随它走。

>> 优缺点
从DNSBL的流行程度,不难看出其明显的优点:
  • 查询方法简单、快速
  • 使用方法简单、有效
  • 厂商众多
  • 对象类型丰富,适用于多种业务场景
  • ……

同时,DNSBL的缺点也有不少:
  • 非黑即白,简单粗暴,误杀率偏高。
  • 查询结果不一定可信。有些粗心大意的厂商,当监控到某个IP段里有一定数量的“关键”IP被加入黑名单,便会将整个/24段或/16段的所有IP地址都加黑!
  • 未来IPv6和IDN的影响。IPv6将提供无穷多的IP地址,IDN(国际化域名)将提供无穷多的domain,这将极可能撑爆任何一份黑名单列表,spammer也能轻易切换ip,届时ip黑名单还有意义吗?不好说。
  • 厂商良莠不齐,初次选择有难度。
  • 申诉困难或响应久
  • ……

>> 小结
上面林林总总介绍了不少关于DNSBL的东西,得说明一点:这些都是开放式DNSBL的特点。对于一些私有性质的DNSBL,原谅我心有余力不足,大多无从考究。

DNSBL在当下仍然很流行,实际应用场景也很多。但是, 在越来越追求低误判率个性化反垃圾的今天,人们会越来越觉得这种单纯基于ip/domain信誉值的反垃圾手段的缺点太大,优点也已不再明显。因此,在一些高度智能化的反垃圾系统中,DNSBL的权重越来越低。

窃以为,DNSBL的真正价值不在于其列表里的数据,而在于它的思想: 通过一个全球通用的沟通方式(DNS),分享一些有价值的信息(黑名单列表、白名单列表)
它就像一把宝刀。刀是死的,人是活的。如果非黑即白的思路太过于简单粗暴,那可以试试多家厂商的信誉值进行加权算分嘛。如果对加权算分的信心不足(譬如担心自己的阈值设置不当等),那还可以试试算分结果不直接用于判断,而仅仅视作一项判断参考依据。

总之,活学活用,即便垃圾也只是放错地方的宝。喏,星爷电影也是这么教导我们的,不是吗。
  • 凌凌漆:咁多年啦,我以为国家已经将我忘记左。 
  • 邪恶的司令:点会呢,就算系一条底裤一张厕纸都有佢既作用。 
  • 凌凌漆:呢个比喻真系一流。


 欢迎转载!请在转载时加上本博文的原始地址: http://blog.163.com/pandalove@126/blog/static/98003245201391015840424/

网易云新用户大礼包:https://www.163yun.com/gift

本文来自网易实践者社区,经作者陈俊平授权发布。