校园网上大多数邮件服务器都是UNIX系统,包括Solaris, HPUX, AIX, IRIX,Linux等等,其中最通用的配置是运行sendmail和popper服务软件。Sendmail是SMTP服务器,专门负责接收和发送邮件;而popper是通过POP3协议来专门负责用户读取和处理邮件的请求。目前邮件服务器所受的攻击主要有下面两类: ' ~6 X" L4 g9 t% p
' k1 C, U1 r. n$ ]. y0 H
1.中继利用(Relaying)。比如国外的用户通过你的邮件服务器给不属于你本地的用户发邮件,这样, 他的国际流量都记载在你的邮件服务器上。在SendmailV8.8之前的版本都不能防止这一类攻击。 + |' [3 |/ E3 a% F) q) Z
2 l+ o! m N9 I6 y/ Y
2.垃圾邮件(Spamming),也叫邮件炸弹。这种情形是指邮件服务器或某个用户在很短的时间内收到大量无用的邮件,而且通常是从某一虚设的地址发来的。 % i% i+ Z! ^$ F2 d& R( o
9 a$ p% J; Y3 v+ j这两类的攻击都是通过sendmail进行的。那么, 如何来防卫这两类的攻击呢? 最直接的方法就是安装 SendmailV8.8以上版本,因为在V8.8以上版本的Sendmail中已经提供了很好的功能来对付这些邮件攻击,Sendmail V8.8.x之前的版本都没有提供一定的机制来对付这种攻击。。下面我们就说明SendmailV8.9.3中是如何实现这些机制的。
T+ _: l- w6 v$ }
, J6 c8 L8 P5 ~/ Z: r1.Sendmail如何防止邮件攻击
6 ?- J2 `5 X$ }" |% a; H% y$ ?7 i/ t4 ?- q6 g& J
我们知道,sendmail8.9.x的缺省配置是不允许邮件中继的。但通常我们不应屏蔽所有的邮件中继,至少本地子网中的IP地址是许可中继的。Sendmail提供了一些配置文件是我们可以根据自己的需要灵活配置,这些文件主要有: # C/ _# @1 V- _; h8 _! y- ?( p0 a
$ A4 Z Q4 U& K, `
a./etc/mail/relay-domains
3 l/ U/ p" f2 X在该文件中你可以设定那些你许可中继的域,比如 cs.pku.edu.cn来允许所有计算机系有域名的机器可以通过你的服务器发邮件。注意每次修改该文件后必须重新启动sendmail后,新的配置才起作用。 5 v( [1 t6 k3 j) _" r% O! G
) W4 o( |. D% j2 q2 x' R+ G6 {4 L3 k
b./etc/mail/access 2 }3 D# ^ B4 e4 N0 k
在该文件中,你可以根据域名、IP或 发送方的邮件地址(From 域)来允许或屏蔽中继或邮件轰炸。Access是一个正文文件,其中每项由一个地址做关键字,而一个动作做值。地址可以是域名如 host.subdomain.domain.com,subdomain.domain.com 或 domain.com,也可以是网络地址,子网地址,或单个IP地址,如205.199,205.199.2,或205.199.2.200;还可以是邮件地址,如 sam@netscape.com。下面我们看一个Access文件实例: " t3 z6 W+ E- d$ ?1 \ C3 x
cyberpromo.com REJECT i" f3 R9 s5 P* s; L5 @& L. V! b3 [- y
cs.pku.edu.cn RELAY / t/ i1 t' x- X4 f+ O$ u5 @
spam@buyme.com 550 Spammers shan’t see sunlight here 0 R$ Q7 c3 J0 J6 ^9 b
' N/ A O1 [* s8 | P在该配置文件中,拒绝所有从 cyberpromo.com来的邮件,许可从cs.pku.edu.cn来的邮件中继,拒绝从发送方地址为spam@buyme.com来的邮件,并返回给他一个确定信息。Access文件中的动作值有下面几类:
8 ?) ^8 k W) B9 K6 _' ~( U( r! jOK--接收邮件,即使和其他规则不符,如不可查询的域名。
% |# I$ y* Y% T+ e5 n8 yRELAY--允许通过你的SMTP服务器中转邮件。
x# }" [' |2 fREJECT--拒绝从指定地址来的邮件。
8 P8 v& V3 D% F8 vDISCARD--将收到的指定地址的邮件交给 #discard mailer 处理,该功能只作用于发送方地址。 # C- q( n% c8 X( X
### any text --其中 ###是 RFC821 出错码,“any text”是返回该命令的信息。
6 i) `) e0 p/ c$ k7 M7 F# H
$ h; \1 d$ u' B, S5 K由上可知,通过access 文件,可以对邮件中继和邮件轰炸进行有效的防卫。一旦你发现某个地址在进行攻击,就可将其加入到access文件中。要使每一次的修改有效,你都要重新生成 access的数据库文件,通过下面的命令: 1 o; K& n6 V" ]% y+ r# q5 |
makemap hash access.db < access ! O1 |- e7 C: F" u
' [( c3 X% M. \# j3 Z但每次的修改不需要重新启动sendmail进程。 & g% I8 y* T; W
+ g6 `3 E4 X5 w8 V
另外, 我们能对邮件的大小进行限制,在sendmail的配置文件sendmail.cf中有一项可用来设置邮件大小: 1 d5 I7 }+ K' E( `( J- o' o
#maximum message size
4 x. u& b B# w" |( d fO MaxMessageSize = 1000000
8 X# A) ^7 `0 o6 _" b2 S& } S4 W& I4 N' a7 |
这样,sendmail只处理大小为1兆之内的邮件,大于1兆的邮件都拒收。 / r$ `- P/ m! J& q) ]) j+ e
5 c. u9 ]5 _) o0 U- l2 _* E+ g2.还存在的问题
- h1 x! `6 ^5 V% P) Q: U
; U- p# Z1 R2 W6 j1 @通过上面的配置文件基本上可以对邮件攻击进行有效的抵制。唯一存在的问题是我们不能事先知道所有的邮件炸弹从哪儿来,只能等出现后才能禁止。而且目前大多数邮件客户软件都许可用户随便设置发送方地址,这也使得防范邮件攻击更复杂。通常我们设立一个专门用来就接收用户举报的邮件地址,如 abuse@pku.edu.cn, 这样系统管理员可及时得到YO邮件攻击消息,并采取相应的措施。
. d; Q9 e. `7 h% Z: @; ^3 G: T# E/ _( o0 }7 U% B/ L
另外,目前我们还不能根据邮件内容进行过滤,现在很多邮件都是MIME格式的,可能是二进制文件、图形、声音,各种语言的文字或加密文件,所以,对邮件内容进行过滤不是一件简单的关键词匹配的问题。如何解决该问题还有待探讨。
. K# Y, S4 b" U, N
0 k0 q$ o; H* ]. C/ t |