Sendmail作为免费的邮件服务器软件,已被广泛应用于Internet各种操作系统的服务器中。如:Solaris,HPUX,AIX, IRIX,Linux等等。随着互连网的普及,邮件服务器受攻击的机会也大大增加。目前互连网上的邮件服务器所受攻击有两类:一类就是中继利用 (Relay),即远程机器通过你的服务器来发信,这样任何人都可以利用你的服务器向任何地址发邮件,久而久之,你的机器不仅成为发送垃圾邮件的帮凶,也 会使你的网络国际流量激增,同时将可能被网上的很多邮件服务器所拒绝。另一类攻击称为垃圾邮件(Spam),即人们常说的邮件炸弹,是指在很短时间内服务 器可能接收大量无用的邮件,从而使邮件服务器不堪负载而出现瘫痪。这两种攻击都可能使邮件服务器无法正常工作。因此作为一个校园网邮件服务器防止邮件攻击 将不可缺少。
目前对于sendmail邮件服务器,阻止邮件攻击的方法有两种。一种是升级高版本的服务器软件,利用软件自身的安全功能。第二种就是采用第三方软件利用其诸如动态中继验证控制功能来实现。下面就以sendmail V8.9.3为例,介绍这些方法。
1.服务器自身安全功能
(1)编译sendmail时的安全考虑
要利用sendmail 8.9.3的阻止邮件攻击功能,就必须在系统编译时对相关参数进行设置,并借助相关的软件包。目前主要就是利用Berkeley DB数据库的功能,Berkeley DB包可以从相关站点上下载,并需要预先编译好。然后将Berkeley DB的相关参数写进sendmail的有关文件中。
a.修改site.config.m4文件
将编译好的Berkeley DB有关库文件路径加入到site.config.m4文件中,使sendmail编译后能够使用Berkeley DB数据库。例如:
#cd $/sendmail-8.9.3/BuidTools/Site
修改site.config.m4文件
define (confINCDIRS, -I/usr/local/BerkeleyDB/include)
define (confLIBDIRS, L/usr/local/BerkeleyDB/lib)
b.修改sendmail.mc文件
sendmail.mc是生成sendmail.cf的模板文件之一,
要使sendmail具有抗邮件攻击功能还需在该文件中进行相关定义。主要包括以下几项:
......
FEATURE(relay_entire_domain)
FEATURE(ACCESS_DB)dn1
FEATURE(blacklist_recipients)
......
(2)相关文件的配置
正确编译好sendmail是邮件服务器安全控制的基础,而真正的安全设置主要还是利用相关文件进行的。这种包含控制语句的文件主要是access和relay-domains。
access是邮件安全控制的主要数据库文件,在该文件中可以按照特定的格式将需控制的域名、IP地址或目标邮件地址,以及相应的动作值写入,然后 使用makmap命令生成access.db文件(#makemap hash access.db < access),从而使服务器允许或屏蔽邮件中继和邮件轰炸。access的格式如下:
spam.com REJECT
edu.cn OK
hotmail.com DISCARD
其中reject动作是拒绝接受从指定地址发来的邮件;ok是允许特定地址用户任意访问;relay允许通过本邮件服务器进行中转邮件; discard是将收到的邮件交给特定命令进行处理,例如:可以设定将收到的邮件丢弃,或者设定收到邮件后返回给使用者一条出错信息等等。
Relay-domains文件是设定哪些域是该服务器可以中继的域,其格式为每个域占一行。如:
......
CN
EDU
JP
......
在服务器开始使用时建议将所有顶级域名加入其中,以后再根据安全需要对其进行修改,否则将会使pop3用户发送邮件时出现relay reject错误,而无法向没有加入的域名目标邮件地址发送邮件。
3)版本号的修改
对于一台邮件服务器,可以通过远程的25端口telnet命令来获取服务器的版本信息。如:“telnet sendmail服务器主机25”就可以查看sendmail的当前版本。为了防止一些恶意的查看版本信息操作,sendmail提供了可以对显示的版本 进行修改的操作。
在sendmail.cf文件中有一句“SmtpGreetingMessage=$j sendmail $V/$Z; $b”的语句,其中$V/$Z就是版本信息,正常情况下由该参数显示的版本信息为sendmail本身的版本。如果要设定成管理员给定的版本信息,只需将 该参数改掉,然后加入你所希望的信息即可。例如:当把这句改成“SmtpGreeting Message=$j sendmail 0.0/0.0; $b”,重启sendmail服务,则sendmail的版本就会变成“sendmail 0.0”。从而达到隐蔽版本信息的目的。
以上是sendmail 8.9.3本身带有的安全功能设置,通过这些安全设置可以大大加强服务器安全性能。但是在防止邮件中继和邮件炸弹的设置时,如何确定哪些目标地址是需阻止 中继的,哪些又是允许中转的,似乎只能通过管理员对日志文件的分析和观测,或者待发现了安全问题后才能确定。因此这种安全控制还仅是事后控制,并且对相关 文件修改后还必须重新启动服务器。如要实现事先动态安全控制还需要采用其他方法。
2.动态中继验证控制
DRAC(Dynamic Relay Authorization Control)动态中继验证控制是专门为邮件服务器设计的一个服务器端软件(http://mail.cc.umanitoba.ca/drac/index.html), 它可以安装在一台SMTP服务器上,并同时为多个邮件服务器提供动态中继验证服务。DRAC主要通过自动获取和动态更新中继验证数据库中的信息来允许合法 pop3或IMAP用户使用邮件服务器,从而有效地控制邮件炸弹和非法的邮件中继。DRAC的原理就是利用pop3或imap服务器固有的功能来获取用户 名、密码和客户机IP地址等信息,并将这些信息及时映象到验证数据库中,供smtp服务器调用,同时在经过一段时间以后(缺省为30分种),其验证信息将 自动失效,需要用户重新输入验证信息。这样不仅可以保证合法的pop3或imap用户能够正常使用邮件服务器,也可以阻止任何非注册用户(包括本地)利用 邮件服务器来发送邮件。这种邮件安全控制常常被称为:“邮件服务之前的pop验证”(POP-before-SMTP)。
(1)DRAC的编译
在编译DRAC之前,系统的sendmail服务器应该已经正确编译安装了。首先在DRAC源程序目录中编辑Makefile文件,在Solaris 2.x操作系统中其Makefile改成:
INSTALL=/usr/ucb/install
EBIN=/usr/local/sbin
MAN=/usr/local/man/man
DEFS=-DTI_RPC -DFCNTL_LOCK -DSYSINFO
CC= (编译器)
RANLIB= :
CFLAGS=$(DFES) -g -I/path/to/db/include
LDLIBS=-L/path/to/db/library -lns1 -1db
TSTLIBS=-L. -ldrac -lns1
MANLIB=3
MANADM=1m
然后编译并安装即可。
如果存在多个pop/IMAP服务器,则还需要将这些服务器的IP地址加到文件/etc/mail/dracd.allow中,其文件书写格式与/var/yp/securenets文件格式一样。如:
255.255.255.255 202.139.244.23
255.255.255.255 127.0.0.1
(2)修改sendmail.mc文件重新生成sendmail.cf
在使用DRAC验证功能之前,还需要将DRAC的验证信息加到sendmail.cf文件中。首先要修改sendmail.mc文件,然后重新生成sendmail.cf。sendmail.mc文件中相关语句修改如下:
在LOCAL_CONFIG行下增加
kdrac btree /etc/mail/dracd
在LOCAL_RULESETS下增加
Slocal_check_rcpt
R$* $: $&{client_addr}
R$+ $: $(drac $1 $: ? $)
R? $@ ?
R$+ $@ $#OK
重新生成sendmail.cf文件后,再重启sendmail进程。