杨劭彤 现今,网络上电子邮件广告满天飞。造成这种状况的一个主要原因就是,标准的电子邮件传输协议(SMTP)在传输邮件时,不进行用户身份认证,邮件可以被匿名/冒名发送。 为了解决以上问题,需要修改SMTP服务器,加入SMTP认证,相关内容请参阅文章:《SMTP认证让Spammer走开》。除此以外,还有一种更为灵活的方法来实现——动态转发授权控制(Dynamic Relay Authorization Control),DRAC可以通过动态控制IP来阻止Spammer。本文主要就DRAC进行详细的说明。 DRAC的机理 DRAC(Dynamic Relay Authorization Control——动态转发授权控制)是一个运行在后台的Daemon,它可以动态地更新Sendmail的Relay授权,合法用户通过它可以在任何地方发送电子邮件。而且同时又能阻止非法用户使用SMTP Server发送邮件。一旦合法用户正确地收取了邮件,DRAC就会将合法用户的IP动态加入到SMTP Server的数据库中,允许他通过服务器向外发信。 DRAC 实际上是一个客户/服务系统,客户、服务之间通过使用RPC进行网络通讯。在这个系统中,POP或IMAP server是客户程序, DRAC daemon 是服务程序, 可以同时为网络上的多台邮件服务器提供动态转发的功能。如果你的网络中还有其他的服务器上需要实现动态转发邮件的功能,DRAC daemon 必须与SMTP server(Sendmail)运行在同一台计算机上。所以,实际应用时,Sendmail 和DRAC运行在同一台机器上,而POP或IMAP可以运行在网络中的其他计算机上。 如果你有多个POP/IMAP服务器,它们分别运行在不同的计算机上,那么你可以通过配置文件:/etc/mail/dracd.allow 来使这些机器使用DRAC。Dracd.allow文件中应该包含所有的POP/IMAP server的IP地址。文件格式参见/var/yp/securenets ,文件内容举例如下: 255.255.255.252 130.179.16.0 255.255.255.255 130.179.16.8 255.255.255.255 127.0.0.1 所以,在实际配置时,,POP/IMAP servers 可以运行在网络中的其他计算机上。通过向DRAC发送RPC,动态地将用户的IP添加到数据库中。当然,POP/IMAP server必须配置成能够发送RPC请求到DRAC服务器。有关多台POP/IMAP服务器的情况,有兴趣的读者可以进一步研究。 移动用户邮件的Relay 拨号上网的用户IP是一个不定值。只有把他的IP加入到access.db中,用户才能使用邮件服务器发邮件。如果采用动态控制,在用户收取邮件时,进行身份验证。对于验证通过的用户,后台监控程序会实时地将用户当前的IP记录到数据库中。具体实现过程是:先“收”后“发”, 收件时要经用户身份认证,认证后将用户的IP加入数据库,IP地址在SMTP Server的数据库中保存30分钟。每收取一次邮件,计时重新开始。30分钟内如果用户不使用邮件服务收发,则DRAC将用户的IP从数据库中删除。这种做法保证了拨号用户可以收发自己的邮件。唯一不方便的是:用户第一次发邮件时,需要先收一次邮件。感觉上,这好像很麻烦,不过,如果大家都习惯了先收后发,那么就一点儿也不会有别扭的感觉了。在以下站点可以查到更为详细的资料:。 实际安装 实际安装分三步:安装DRAC、安装POP/IMAP服务器、配置Sendmail服务。 1.安装DRAC 首先下载软件包,下载地址: (19KB)。 编译时需要根据操作系统的种类更改相应的Makefile文件,对于Linux,则更改内容如下: #### Makefile for drac INSTALL = install EBIN = /usr/local/sbin MAN = /usr/local/man/man # OS-Dependant settings DEFS = -DSOCK_RPC -DFCNTL_LOCK -DGETHOST -DDASH_C # Socket RPC # Compiler flags CC = gcc RANLIB = : CFLAGS = $(DEFS) -g LDLIBS = -ldb TSTLIBS = -L. -ldrac -lnsl RPCGENFLAGS = -C -I # Man sections MANLIB = 3 MANADM = 8 接下来,对DRAC进行安装,过程如下: # make; make install (安装) # make install-man (安装man) 启动DRAC,直接运行方式: #/etc/rc.d/init.d/dracd start 这样会启动一个运行在后台的服务进程——dracd,由它来充当服务器,它将POP/IMAP提交的用户IP动态加入到邮件服务器的数据库中。 2.安装Qpopper 原版本的Qpopper是不会自动向DRAC发信息的,所以,要对Qpopper进行一些改写,以便POP Server与DRAC进行通讯,目前有补丁的Qpopper版本有3.02、3.12版。也可以选择使用IMAP server,同样也要对它打补丁。本文中笔者以Qpopper 3.02为例。 $ tar -zxvf qpopper-3.0.2.tar.gz (支持多种POP3及IMAP软件) $ patch -p0 /etc/mail/sendmail.cf 最后,重新启动Sendmail。 测试DRAC 通过网络中的另一台Linux主机远程登录邮件服务器的110端口: [abc@rh62 abc]$ telnet 192.168.1.200 110(笔者在一台IP地址为192.168.1.13的电脑上操作) 系统显示: Trying 192.168.1.200… Connected to ns1.chinatrend.com (192.168.1.200). Escape character is ^]. +OK ready user abc (用户名为abc) +OK Password required for abc. pass abcabc (输入口令为abcabc) +OK abc has 0 visible messages (0 hidden) in 0 octets. (服务器上有0个邮件) quit (退出) +OK Pop server at mail.chinatrend.com signing off. Connection closed by foreign host. 接下来,再试验在IP为192.168.1.111这台计算机上使用Outlook收发一次邮件,然后到邮件服务器上查看动态数据库的内容: [abc@mail mail]$ db_dump -p dracd.db (记录存放在一个dracd.db文件中,显示文件内容) format=print type=btree bt_minkey=2 db_pagesize=512 HEADER=END 192.168.1.111 986957888 192.168.1.13 (登录成功主机的IP) 986957984 从前面的显示可以看到192.168.1.13及192.168.1.111已经加入到动态数据库中了。至此成功安装。 以上是通过自行编译安装DRAC的过程,做起来不太容易,是吗?实际上,你也可以不用自己动手编译,而是采用别人编译好了现成的RPM软件包,直接下载安装就可以。下载地址:ftp.minn.net/user/mmchen。 不过,提醒大家注意:配置sendmai.cf的步骤不能省,方法同上。以上方法在Redhat 6.2环境下通过,针对Redhat 6.2的软件包,可以在:找到编译好的RPM软件包的地址链接。 自己选择的路,跪着也要把它走完。