• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

Sendmail反垃圾邮件技术

发布: 2007-7-02 21:50 | 作者: admin | 来源: | 查看: 28次 | 进入软件测试论坛讨论

领测软件测试网 Sendmail曾经是互联网上最灵活,应用最广泛的MTA,几乎在每一种主要类型的UNIX系统中都可以安装配置相应版本的Sendmail。但是由于Sendmail在安全上存在着种种的先天不足(如:必须运行在超级用户权限下、缺乏足够的安全机制、代码漏洞较多及在反垃圾邮件性能上的不足),近两年,Sendmail逐渐被Postfix或Qmail等MTA所取代。不过做为曾经最流行的MTA软件,Sendmail的影响还是不小的,有必要将其反垃圾邮件技术陈述出来,以供大家参考。

  注意:如果你因为某些原因还在使用8.8.x版本,我们强烈建议你升级到8.9.3和8.10以上(目前最新版本已经是8.12.9)。

  Sendmail反垃圾邮件配置可以从以下几方面进行配置:

    1. 配置RELAY_*特性
    2. 配置Access_db特性
    3. 配置sendmail的SMTP发信认证功能
    4. 使用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
在这个文件中一共可以有如下7个选项:
ok
relay
reject
discard
skip
###anytext
error:###any text
error D.S.N:### anytext
下面对前4项常用选项作一个简单说明。
(1) ok意味着这个地址或地址区域内的用户邮件将会被这个邮件服务器接收,但不一定会有权转发,即使在这个邮件服务器配置文件中的其他规则不允许发送或接收这些用户的信件。
(2) relay意味着接收发往指定区域或从指定区域过来的邮件,并且允许它从这个SMTP服务器转发。
(3) reject意味着拒绝某一个发送者或区域。
(4) discard意味着直接丢弃这个邮件信息

三.配置sendmail的SMTP认证功能
传统的邮件传送协定 (SMTP)不具备对使用者身份进行认证的功能。要解决这个问题,可配置搭配 cyrus sasl身分认证程序库(SENDMAIL也需要8.10以上的版本),具体实现方法如下:
一、 下载并安装cyrus sasl身分认证程序库;下载地址是
(ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/
.回到工作目录,展开并进入cyrus-sasl-1.5.24.tar.gz目录:
  #tar zxvf cyrus-sasl-1.5.24.tar.gz
#cd cyrus-sasl-1.5.24
# ./configure -prefix=/usr --enable-login --with-pwcheck --with-digest
# make
# make install安装完成后,建立一个/var/pwcheck目录,pwcheck程序要用此目录。 接下来必须设置 sendmail 的使用者身分查验方式,这里使用系统帐号与密来进行验证:
# cd /usr/lib/sasl/
# cat > Sendmail.conf
pwcheck_method: shadow
关于 Cyrus SASL 认证程序库更详细的说明,请参阅 Cyrus SASL for System Administrators。 <http://www.sendmail.org/%7Eca/email/cyrus/sysadmin.html>

二、编译和配置sendmail

1.解压sendmail软件到你希望的目录,进入sendmail目录。
在devtools/Site/目录下创建config.site.m4文件,加入如下两行文字,把SMTP认证
功能编译到sendmail中。
APPENDDEF(`confENVDEF@#, `-DSASL@#)
APPENDDEF(`conf_sendmail_LIBS@#, `-lsasl@#)
2.回到sendmail目录,再进入sendmail目录,开始编译sendmail。
./Build -c(如果不是第一次编译,需要加入-c选项,清除以前的配置)
编译成功后,运行./Build install安装软件。
3.下一步需要改写Sendmail的配置文件。回到上一级目录,再进入cf/cf目录,找到合适
的.mc文件。按照你的要求适当修改,加入如下几行:

TRUST_AUTH_MECH(`LOGIN PLAIN DIGEST-MD5@#)
define(`confAUTH_MECHANISMS@#, `LOGIN PLAIN DIGEST-MD5@#)
FEATURE(`no_default_msa@#)
DAEMON_OPTIONS(`Port=25, Name=MSA, M=Ea@#)
说明:"TRUST_AUTH_MECH"的作用是使sendmail不管access文件中如何设置,都能
relay那些通过LOGIN,PLAIN或DIGEST-MD5方式验证的邮件。
"confAUTH_MECHANISMS"的作用是确定系统的认证方式。

4.编译生成/etc/mail/sendmail.cf文件
m4 xxxx.mc >/etc/mail/sendmail.cf,不过记住一定要备份旧的sendmail.cf文件,
否则就可能麻烦了。
5.现在基本上可以了,启动sendmail
sendmail -bd -q20m

在结束服务器端的配置之前,我们还要做一件事,运行pwcheck这个daemon程序,这样才
能完成用户认证功能。
pwcheck &

四 blacklist_recipients特性
若使用blacklist_recipients特性,则意味着有一些服务器上的用户已经不适合再接收邮件,这个选项将全面封锁指定用户或用户群。这个选项还可以对被病毒感染的用户进行有效的隔离。例如:
badlocaluser@ ERROR:550 - Mailbox disabled for this username 错误的用户名
host.mydomain.com ERROR:550 -
That host does not accept mail 此主机不接受邮件
ERROR:550 Mailbox disabled for – 信箱不可用
使用(`dnsbl@#)特性,我们可以在启动SENDMAIL时将RBL装载进去。一般,SENDMAIL默认为blackholes.mail-abuse.org.提供的列表为其第一黑名单。然,你也可以选择其他的黑名单列表,详情请看http://mail-abuse.org/)
拒绝信息如下:
Rejected: IP-ADDRESS listed at SERVER
where IP-ADDRESS and SERVER are replaced


做为邮件系统管理员,在没有反垃圾邮件网关硬件配置况下,合理的置好MTA,是每个管理员必须做到的事情,除此之外,还应经常对系统资源及系统日志进行检查,发现损耗大量系统资源的发信情况或经常大量发送邮件的用户后应进行特别检查,一经确认,采取应急措施保证服务器运行正常。总之,反垃圾邮件是一项非常艰巨的任务,我们希望整个互联网络联合起来,禁屏蔽垃圾邮件,争取将垃圾圾邮件带给用户的困扰做到最小。

Sendmail使用基础:
Sendmail 是一种通用的 MTA,一直是在UNIX系统中作为缺省的邮件服务器来安装的。实际上,Sendmail也同UNIX其他邮件系统一样,应用程序及配置文件是分开放置的。应用程序则放置在/usr/sbin目录下(可能会随着不同的UNIX版本而略有变化)。Send mail的配置文件叫做Sendmail.cf,通常放置在/etc/mail或/etc/目录下,而且Sendmail.cf已经不象最早的版本需要手工修改生成,完全可以借助引入特性(FEATURE)机制来自动生成我们所需功能的Sendmai.cf。而不必须关心其具体内容。为此我们需要使用匹配系统的Sendmail.mc来产生sendmail.cf文件。
具体用法为如下
进入相应的cf子目录后:
#cp cf/***.mc sendmail.mc
#vi sendmailmc
divert(-1)
# 这里有大量的注释信息,在此省略
divert(0)dnl
VERSIONID(`@(#)subsidiary-v7sun.mc
FEATURE(`remote_mode@#)dnl
define(`SMART_HOST@#, `mailhost.$m@#)
FEATURE(`blacklist_recipients@#)dnl
DOMAIN(solaris-generic)dnl
MAILER(local)dnl
MAILER(smtp)dnl
用M4宏编辑器生成Sendmail.cf文件,并将此文件放置系统所需目录(/etc/mail/)
# m4 m4/cf.m4 sendmail.mc > /etc/mail/sendmail.cf

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网