作者:Mike Zhang
作者Blog原文连接:http://logmike.com/?p=27
经过一年左右的测试与应用,基本上清楚了这一功能的好处可以用来最有效率地来拒收相当多的一部分垃圾邮件,并且几乎不会占用多少系统资源,今天有必要总结一下分享给需要的朋友。
Tcpwarpper的原理与概念我想不用多谈了,只要google里一查,有很多基础知识可以查到。目前大部分的Linux/FreeBSD版本的默认安装都会已经把Tcpwarpper编译到系统里,无论是2.4或2.6的kernel里,所以基本上不用担心安装步骤。而Sendmail通常本身已经编译到系统里,系统对其有很好的支持。正因为系统kernel同时支持了Sendmail的用和Tcpwarpper的控制,才使得本文的应用得以实现。不过遗憾的是其它主流的一些邮件软件象postfix、qmail、exim等等都由于自身的daemon并不与系统的kernel结合,所以无法利用tcpwarpper的功能对tcp连接进行控制。
明白后,其它也可以说这个功能非常简单,主要用到的文件如下:
| /etc/resolve.conf /etc/hosts /etc/hosts.allow /etc/hosts.deny |
其中/etc/resolve.conf用于设置localhost的上级DNS解晰服务器IP,可以设置多行不限制,为了让MTA最快最有效地获得IP反向解晰记录,应该尽可能多设置几个,Demo格式为每行:
| namerserver 127.0.0.1 namerserver 127.0.0.2 |
其中/etc/hosts用于手工设置无法正常获得反向解晰的IP设置,或者是没有反向解晰的IP手工设置hostname。比如有些国外IP连接在系统检查反向解晰时由于网络过慢而time out,如果设置了拒收无反向解晰的SMTP连接的话,可能会造成误拒收。又比如有些IP需要向本机MTA发信,但由于电信或网通的刁难而无法做成反向解晰,如果在这个文件里设置了对应的主机名,系统就会优先认为此IP是有主机名的,而不会因为设置了拒收无反向解晰的SMTP连接而拒收此IP。Demo格式为每行:
| 127.0.0.1 localhost 127.0.0.2 mail.yourname.com |
其中/etc/hosts.allow用于设置allow或deny指定IP或域的SMTP来源。在这个设置文件里,除非指定deny为拒收,否则默认为allow允许的。Demo格式为每行:
| #允许指定IP来源的SMTP发信连接 sendmail:1.1.1.1:allow #拒收指定IP来源的SMTP发信连接 sendmail:2.2.2.2:deny #允许某段IP来源的SMTP发信连接,此为Yahoo的一个IP段 sendmail:206.190.38.:allow #允许某个IP反向解晰后缀域的发信连接,只要IP的反向解晰记录后缀为以下后缀的都将被允许 sendmail: .google.com sendmail: .bay0.hotmail.com sendmail: .yahoo.com sendmail: .paypal.com #此项也是最主要的,设置此项后,用于拒收所有无反向解晰的IP发信来源,通常是动态IP或非正规的邮件服务器发垃圾邮件或MX-deliver垃圾邮件送到本机上,就会被直接拒收。由于和其它firewall类的设置类似,此项设置建议放在此文件规则中的最后一项。 sendmail:UNKNOWN:deny |
其中/etc/hosts.deny可用于设置拒收IP反向解晰为指定域的来源,特别用于多数有反向解晰的动态IP地址段,这些来源的垃圾邮件可以很容易在这项规则中被拒收。Demo为每行:
| sendmail: .dynamic.163data.com.cn sendmail: .cn.cndata.com sendmail: .163data.com.cn sendmail: .dynamic.cndata.com sendmail: .tiscali.nl sendmail: .dsl.krasnet.ru sendmail: .dsl.onthenet.net sendmail: .dsl.scrtc.com sendmail: .dsl.siol.net sendmail: .dsl.speedlinq.nl sendmail: .dsl.telepac.pt sendmail: .dsl.udm.net sendmail: .dsl.westcall.net sendmail: .dsl-dynamic.vsi.ru |
等等,这些反向解晰的动态IP段的后缀需要不断收集增加,目前我收了一千多个动态域的段,可供大家参考。下载:这是我目前包含一千多动态IP段的hosts.deny文件
以上是配置文件的格式与内容,通常被这种方式拒收后,垃圾邮件的发件方或退信里会显示的原因为550 access deny。
/var/log/maillog里会显示以上设置的效果。比如:
hosts.allow文件里拒收无反向解晰IP的垃圾邮件来源在maillog里会记录显示为:
| Dec 26 16:23:58 sendmail[9380]: lBQ8Nwjv009380: tcpwrappers (unknown, 221.0.141.244) rejection Dec 26 16:23:59 sendmail[9371]: lBQ8Nxjv009371: tcpwrappers (unknown, 200.50.30.151) rejection Dec 26 16:24:00 sendmail[9388]: lBQ8O0jv009388: tcpwrappers (unknown, 121.8.49.178) rejection Dec 26 16:24:01 sendmail[9390]: lBQ8O1jv009390: tcpwrappers (unknown, 221.127.88.110) rejection |
hosts.deny文件里拒收有反向解晰的动态IP域会在maillog里记录并显示为:
| Dec 26 16:26:29 sendmail[10050]: lBQ8QTjv010050: tcpwrappers (58.69.0.66.pldt.net, 58.69.0.66) rejection Dec 26 16:26:29 sendmail[10039]: lBQ8QTjv010039: tcpwrappers (58.69.0.66.pldt.net, 58.69.0.66) rejection Dec 26 16:26:33 sendmail[10030]: lBQ8QXjv010030: tcpwrappers (51.160.60.58.broad.sz.gd.dynamic.163data.com.cn, 58.60.160.51) rejection Dec 26 16:26:34 sendmail[10061]: lBQ8QYjv010061: tcpwrappers (dsl88-229-61278.ttnet.net.tr, 88.229.239.94) rejection Dec 26 16:26:35 sendmail[10064]: lBQ8QZjv010064: tcpwrappers (dsl85-104-28393.ttnet.net.tr, 85.104.110.233) rejection Dec 26 16:26:36 sendmail[10029]: lBQ8Qajv010029: tcpwrappers (195.52.134.219.broad.sz.gd.dynamic.163data.com.cn, 219.134.52.195) rejection Dec 26 16:26:38 sendmail[10093]: lBQ8Qcjv010093: tcpwrappers (mx-ll-58.147.78-2.tttmaxnet.com, 58.147.78.2) rejection Dec 26 16:26:39 sendmail[10062]: lBQ8Qdjv010062: tcpwrappers (dsl85-102-21131.ttnet.net.tr, 85.102.82.139) rejection Dec 26 16:26:39 sendmail[10071]: lBQ8Qdjv010071: tcpwrappers (host80-161-dynamic.17-87-r.retail.telecomitalia.it, 87.17.161.80) rejection Dec 26 16:26:40 sendmail[10111]: lBQ8Qejv010111: tcpwrappers (pptp77-79-155-229.ufanet.ru, 77.79.155.229) rejection Dec 26 16:26:40 sendmail[10116]: lBQ8Qejv010116: tcpwrappers (89-138-80-33.bb.netvision.net.il, 89.138.80.33) rejection Dec 26 16:26:40 sendmail[10114]: lBQ8Qejv010114: tcpwrappers (tx-76-1-73-3.dhcp.embarqhsd.net, 76.1.73.3) rejection Dec 26 16:26:42 sendmail[10112]: lBQ8Qgjv010112: tcpwrappers (pptp77-79-155-229.ufanet.ru, 77.79.155.229) rejection |
以上方式在MTA方式运行的sendmail服务器非常适用,实际运行下来可拒收80%以上的垃圾邮件,主要是动态IP来源的垃圾邮件。