当前位置:Linux教程 - Linux - 利用DRAC杜绝邮件Spammer

利用DRAC杜绝邮件Spammer

杨劭彤

  现今,网络上电子邮件广告满天飞。造成这种状况的一个主要原因就是,标准的电子邮件传输协议(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从数据库中删除。这种做法保证了拨号用户可以收发自己的邮件。唯一不方便的是:用户第一次发邮件时,需要先收一次邮件。感觉上,这好像很麻烦,不过,如果大家都习惯了先收后发,那么就一点儿也不会有别扭的感觉了。在以下站点可以查到更为详细的资料:http://mail.cc.umanitoba.ca/drac。


  实际安装


  实际安装分三步:安装DRAC、安装POP/IMAP服务器、配置Sendmail服务。

  1.安装DRAC

  首先下载软件包,下载地址:http://mail.cc.umanitoba.ca/drac/drac.tar.z (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 < patch-qpopper-3.0.2-drac-no-configure

  $ cd qpopper-3.0.2

  $ ./configure -- --enable-specialauth (如果采用了shadow,则加这个参数)

  $ make

  在/etc/inetd.conf中加入:

  pop3 stream tcp nowait root /usr/local/lib/popper qpopper -s

  并将原来含POP3的一行屏蔽掉。重启inet。

  这样,改写过的POP server也生效了。

  3.配置Sendmail.cf

  Sendmail(SMTP server)配置文件也应该进行相应的更改,需要在sendmail.mc中加入:

  LOCAL_CONFIG

  # dynamic Relay authorization control map

  Kdrac btree -o /etc/mail/dracd

  LOCAL_RULESETS

  SLocal_check_rcpt

  # allow recent POP/IMAP mail clients to Relay

  R$* $: $&&{client_addr}

  R$+ $: $(drac $1 $: ? $)

  R? $@ ?

  R$+ $@ $#OK

  然后,使用m4编译sendmail.mc:

  #m4 sendmail.mc > /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的软件包,可以在:http://mail.cc.umanitoba.ca/drac找到编译好的RPM软件包的地址链接。