Sendmail曾经是互联网上最灵活,应用最广泛的MTA,几乎在每一种主要类型的UNIX系统中都可以安装配置相应版本的Sendmail。但是由于Sendmail在安全上存在着种种的先天不足(如:必须运行在超级用户权限下、缺乏足够的安全机制、代码漏洞较多及在反垃圾邮件性能上的不足),近两年,Sendmail逐渐被Postfix或Qmail等MTA所取代。不过做为曾经最流行的MTA软件,Sendmail的影响还是不小的,有必要将其反垃圾邮件技术陈述出来,以供大家参考。
注意:如果你因为某些原因还在使用8.8.x版本,我们强烈建议你升级到8.9.3和8.10以上(目前最新版本已经是8.12.9)。
Sendmail反垃圾邮件配置可以从以下几方面进行配置:
- 配置RELAY_*特性
- 配置Access_db特性
- 配置sendmail的SMTP发信认证功能
- 使用RBL特性
1、配置RELAY_*特性
RELAY_*特性是SENDMAIL反垃圾邮件最基本的配置之一。RELAY在8.9后面的版本包括(8.9)均是默认关闭的,在8.9之前的版本Open-Relay是默认开放的,若你坚持要使用之前老版本,你需要使用SENDMAIL(`promiscuous_relay')特性,才能避免垃圾邮件的困扰。
最常用的方法是通过使用一个文件名为relay-domains(通常在/etc/mail下)的文件来同意某一个特定的域或IP地址通过此台服务器来转发邮件信息。
举例说,/etc/mail/relay-domains内容如下:
128.32
host.mydomain.com
[UNIX:localhost]
在上例中,只有IP地址为128.32.x.x、主机名为host.mydomain.com的主机和主机自己才可以通过这台邮件服务器发送邮件。如果有许多网段需要使用此服务器,只需加在里面就可以了。如果不需要对IP地址进行限制,就不必在Relay-domains文件中放置IP地址,并且在Sendmail.mc宏定义文件中加上(‘promiscuous relay’)特性,就可以不用配置relay-domains文件了。
(`accept_unresolvable_domains')特性:如果在Sendmail.mc中加入下面一行: Feature ('accept_unresolvable_domains') 就可以传递那些域名不能从你的邮件服务器所在主机解析的邮件。当邮件服务器处于防火墙里面时会发生这种情况,所以当邮件服务器处于这种情况时必须使用这个特性,否则有些电子邮件不能送达。使用这个特性后,Sendmail就不会直接去试图解析那些邮件地址,而是把邮件转发到上一级邮件服务器,让其去转发,这样就可以绕过防火墙的屏蔽。
ccept_unqualified_senders特性 :如果在Sendmail.mc中加入Feature(‘accept_unqualified_senders’)特性,就可以使那些没有正确填写发送者地址的邮件发送者,比如在用户邮件地址中填入'aaa'之类地址的用户也能发送邮件。一般来说,这个特性是不开放的。
二Access_db特性
在采取上述措施后如果仍然有邮件垃圾,例如,具有系统合法用户的账号,可直接用此帐号发信,那么就要使用access_db选项来进行控制,可以使用Feature(‘access_db',‘hash /etc/mailaccess')或Feature(‘access_db',‘dbm /etc/mailaccess')特性。两者之间只在访问的数据库类型上有所不同,前一种是哈希表,后一种是传统的数据库类型,选用哪一种都不重要,关键是看系统上安装了哪一种数据库。这样当Sendmail启动后就会去读取名为/etc/mail/access的数据库,这个数据库中存放着邮件接收、发送、转发、拒绝和忽略等信息。一般来说,在使用之前需要手工来生成这个数据库如下:
# makemap hash(dbm) /etc/mail/access
Makemap这个应用程序在Sendmail发布包中是有的。 如果执行成功就会生成一个名为access的数据库。在access文本文件中,数据的输入格式如下:
spammer@aol.com REJECT
cyberspammer.com REJECT
TLD REJECT
192.168.212 REJECT
IPv6:2002:c0a8:02c7 RELAY
IPv6:2002:c0a8:51d2::23f4 REJECT