邮件系统的安全服务保障
对于那些暴露在互联网上的邮件服务器来说,受到外界黑客的探查和攻击是常有的事情。因此,需要通过必要的手段加强邮件环境。
1.禁用SMTP协议中的VRFY和EXPN命令
VRFY命令(verify)用来向远程邮件服务器查询邮件地址。如果邮件服务器配置为响应VRFY命令,它将根据查询地址的状况返回一个SMTP代码。常用的VRFY返回码为:
250 表示地址存在,服务器将接收发给它的邮件;
252 表示地址可能存在,服务器将接收发给它的邮件,并试图将其发送到目的地;
550 表示地址不存在,服务器拒收任何发给它的邮件。
通过发送大量查询邮件地址的VRFY命令,一个远程的攻击者可以根据邮件服务器返回的SMTP返回码猜测系统中的邮件账号,这是一个有潜在危险的举动。
EXPN命令(expend)允许远程主机请求别名列表和邮件列表地址。有了该列表地址,远程邮件服务器可以向别名或邮件列表发送邮件来确定真实的邮件地址。垃圾邮件发送者和黑客也可以利用这条命令来探查邮件服务器。
大多数的MTA软件都禁用VRFY和EXPN命令。事实上,这两个命令在MTA软件缺省安装时都是被禁用的。缺省安装的Qmail不管真实的地址状态如何,对所有收到的VRFY查询都返回252号SMTP返回码;EXPN命令返回502返回码,表明该命令在服务器禁用。这两条命令状态在Qmail服务器中是不能修改的。
2.在SMTP中使用SASL认证机制
最常用的网络连接认证方法是简单认证和安全层(Simple Authentication and Security Layer,SASL)协议。该协议定义了一套任何网络应用程序都可以用来对远程用户进行认证的机制。
每个认证会话都必须使用一种确定的认证机制。认证机制是用来向服务器发送认证凭证时使用的协议。SASL框架中可以使用多种不同的机制来认证用户。RFC2222定义了下面几种确定的机制:
1)KERBEROS_V4机制
主机发送随机生成的32字节数字作为应答,客户端使用Kerberos标签和用户名的标志进行响应。
(2)GSSAPI机制
客户端发送使用通用安全服务应用接口(Generic Security Service Application Interface,GSSAPI)加密的用户名和口令。
(3)SKEY机制
客户端发送基于64位密钥加密的用户名和一次性口令。
(4)CRAM-MD5和DIGEST-MD5机制
使用呼叫/应答模式的加密方法。
(5)PLAIN机制
允许客户机向服务器发送ASCⅡ码文本形式的用户ID和口令。
(6)LOGIN机制
它是最常用的机制,使用基于64位的密钥加密用户ID和口令。微软的Outlook和网景公司的Netscape邮件客户端使用的就是基于LOGIN的认证机制。
Qmail版本(qmail-1.03)尚不支持SASL。为了使Qmail支持SASL,需要给Qmail程序打上补丁qmail-smtpd-auth来实现。
使用带有验证的SMTP,该进程要调用密码验证程序,可以使用cmd5checkpw命令来帮助进行密码验证。首先下载安装cmd5checkpw软件包,然后修改SMTP服务的启动脚本(注意加粗部分):
#!/bin/sh
# -c 100指同时并行连接数为100
QMAILDUID=Qmaild
NOFILESGID=nofiles
SERVER=`hostname`
/usr/local/bin/tcpserver -H -R -c 100 -l 0 -t 1 -v -p -x /home/vpopmail/etc/tcp.smtp.cdb \
-u $QMAILDUID -g $NOFILESGID 0 smtp /var/qmail/bin/qmail-smtpd $SERVER \
/home/vpopmail/bin/vchkpw /bin/true /bin/cmd5checkpw /bin/true 2>&1 \
/var/qmail/bin/splogger smtpd 3 & |