校園網上大多數郵件服務器都是UNIX系統,包括Solaris, HPUX, AIX, IRIX,Linux等等,其中最通用的配置是運行sendmail和popper服務軟件。Sendmail是SMTP服務器,專門負責接收和發送郵件;而popper是通過POP3協議來專門負責用戶讀取和處理郵件的請求。目前郵件服務器所受的攻擊主要有下面兩類: 1 H- l7 k: J9 @7 A9 |
" {( Q$ u$ U) J( U1.中繼利用(Relaying)。比如國外的用戶通過你的郵件服務器給不屬于你本地的用戶發郵件,這樣, 他的國際流量都記載在你的郵件服務器上。在SendmailV8.8之前的版本都不能防止這一類攻擊。 # P6 o, Q9 Q+ a ]9 x( Y
( L4 w9 w3 Z/ F4 {7 ~. s
2.垃圾郵件(Spamming),也叫郵件炸彈。這種情形是指郵件服務器或某個用戶在很短的時間內收到大量無用的郵件,而且通常是從某一虛設的地址發來的。 2 i1 y8 X- i. E1 D u; }* \4 @
0 b+ @3 L, J0 h* _, T
這兩類的攻擊都是通過sendmail進行的。那么, 如何來防衛這兩類的攻擊呢? 最直接的方法就是安裝 SendmailV8.8以上版本,因為在V8.8以上版本的Sendmail中已經提供了很好的功能來對付這些郵件攻擊,Sendmail V8.8.x之前的版本都沒有提供一定的機制來對付這種攻擊。。下面我們就說明SendmailV8.9.3中是如何實現這些機制的。 9 ^7 \0 D* j! j2 w( V) C( q/ S
3 {+ Y# b! Y7 \0 [6 o+ i/ o
1.Sendmail如何防止郵件攻擊
' r! z9 L# K7 r( `! u; l; ] c. h+ Q4 p( _" r' [
我們知道,sendmail8.9.x的缺省配置是不允許郵件中繼的。但通常我們不應屏蔽所有的郵件中繼,至少本地子網中的IP地址是許可中繼的。Sendmail提供了一些配置文件是我們可以根據自己的需要靈活配置,這些文件主要有: / u& ], g: D& R) o5 g! o
: u9 h( O1 b. N- A
a./etc/mail/relay-domains ; m9 V. h& V. B" p. G0 D" s
在該文件中你可以設定那些你許可中繼的域,比如 cs.pku.edu.cn來允許所有計算機系有域名的機器可以通過你的服務器發郵件。注意每次修改該文件后必須重新啟動sendmail后,新的配置才起作用。
( K8 ~) f' d9 b. x& Q
3 S+ d' F+ S9 D# t! Y' Ob./etc/mail/access
9 x- v' _* n/ [% ]' K3 t% i在該文件中,你可以根據域名、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文件實例: . p$ W0 Y( w0 E
cyberpromo.com REJECT 4 X* ]7 ~* i& ]& {7 L% ]
cs.pku.edu.cn RELAY ! W7 M& T/ \0 m+ m
spam@buyme.com 550 Spammers shan’t see sunlight here . N" b, ?8 b) `! V
R8 M% W# b1 w% t3 |( {在該配置文件中,拒絕所有從 cyberpromo.com來的郵件,許可從cs.pku.edu.cn來的郵件中繼,拒絕從發送方地址為spam@buyme.com來的郵件,并返回給他一個確定信息。Access文件中的動作值有下面幾類:
1 c1 R$ g8 I. Z& KOK--接收郵件,即使和其他規則不符,如不可查詢的域名。
0 J7 u' Y) ^) Z& GRELAY--允許通過你的SMTP服務器中轉郵件。
1 K/ Z) N0 Y% ~$ f+ hREJECT--拒絕從指定地址來的郵件。
3 ~$ |/ P8 I& h8 s$ IDISCARD--將收到的指定地址的郵件交給 #discard mailer 處理,該功能只作用于發送方地址。
3 q% T$ r j: n6 H### any text --其中 ###是 RFC821 出錯碼,“any text”是返回該命令的信息。 4 c1 F6 k7 M! K2 [5 m
9 l! `$ h/ W: y. T" w由上可知,通過access 文件,可以對郵件中繼和郵件轟炸進行有效的防衛。一旦你發現某個地址在進行攻擊,就可將其加入到access文件中。要使每一次的修改有效,你都要重新生成 access的數據庫文件,通過下面的命令: . |4 _- w3 u" w/ t
makemap hash access.db < access
: y# k4 [1 K1 P V3 A! L' ?0 c3 m5 W* u0 U
但每次的修改不需要重新啟動sendmail進程。
4 `8 w4 A( D7 G' v5 y4 @1 v
2 [" C* F; Y/ H& h另外, 我們能對郵件的大小進行限制,在sendmail的配置文件sendmail.cf中有一項可用來設置郵件大?。?2 @7 U0 D$ \8 y$ U3 Y& t
#maximum message size $ q; ?: L: ~, Z9 F
O MaxMessageSize = 1000000
( w. z& g- S! F. C4 k | o) T+ s( S7 k# t. _$ |7 n/ Y
這樣,sendmail只處理大小為1兆之內的郵件,大于1兆的郵件都拒收。
3 W' p- J, v2 ^: L. c8 w
8 [( z: ?6 D" S2.還存在的問題 3 Q+ ~3 o4 K% h$ a
- W+ i4 i( m- g# V% B1 A! h$ [通過上面的配置文件基本上可以對郵件攻擊進行有效的抵制。唯一存在的問題是我們不能事先知道所有的郵件炸彈從哪兒來,只能等出現后才能禁止。而且目前大多數郵件客戶軟件都許可用戶隨便設置發送方地址,這也使得防范郵件攻擊更復雜。通常我們設立一個專門用來就接收用戶舉報的郵件地址,如 abuse@pku.edu.cn, 這樣系統管理員可及時得到YO郵件攻擊消息,并采取相應的措施。 3 G- | {6 ?$ g
, W& u7 L3 }4 \
另外,目前我們還不能根據郵件內容進行過濾,現在很多郵件都是MIME格式的,可能是二進制文件、圖形、聲音,各種語言的文字或加密文件,所以,對郵件內容進行過濾不是一件簡單的關鍵詞匹配的問題。如何解決該問題還有待探討。
, e Q" z3 f- [8 f) N$ A6 W6 z/ c
- k9 {7 s% V( K6 k. ~ |