Sendmail作為免費的郵件服務器軟件,已被廣泛應用于Internet各種操作系統的服務器中。如:Solaris,HPUX,AIX,IRIX,Linux等等。隨著互連網的普及,郵件服務器受攻擊的機會也大大增加。目前互連網上的郵件服務器所受攻擊有兩類:一類就是中繼利用(Relay),即遠程機器通過你的服務器來發信,這樣任何人都可以利用你的服務器向任何地址發郵件,久而久之,你的機器不僅成為發送垃圾郵件的幫兇,也會使你的網絡國際流量激增,同時將可能被網上的很多郵件服務器所拒絕。另一類攻擊稱為垃圾郵件(Spam),即人們常說的郵件炸彈,是指在很短時間內服務器可能接收大量無用的郵件,從而使郵件服務器不堪負載而出現癱瘓。這兩種攻擊都可能使郵件服務器無法正常工作。因此作為一個校園網郵件服務器防止郵件攻擊將不可缺少。
目前對于sendmail郵件服務器,阻止郵件攻擊的方法有兩種。一種是升級高版本的服務器軟件,利用軟件自身的安全功能。第二種就是采用第三方軟件利用其諸如動態中繼驗證控制功能來實現。下面就以sendmail V8.9.3為例,介紹這些方法。
1.服務器自身安全功能
(1)編譯sendmail時的安全考慮
要利用sendmail 8.9.3的阻止郵件攻擊功能,就必須在系統編譯時對相關參數進行設置,并借助相關的軟件包。目前主要就是利用Berkeley DB數據庫的功能,Berkeley DB包可以從相關站點上下載,并需要預先編譯好。然后將Berkeley DB的相關參數寫進sendmail的有關文件中。
a.修改site.config.m4文件
將編譯好的Berkeley DB有關庫文件路徑加入到site.config.m4文件中,使sendmail編譯后能夠使用Berkeley DB數據庫。例如:
|
(2)相關文件的配置
正確編譯好sendmail是郵件服務器安全控制的基礎,而真正的安全設置主要還是利用相關文件進行的。這種包含控制語句的文件主要是access和relay-domains。
access是郵件安全控制的主要數據庫文件,在該文件中可以按照特定的格式將需控制的域名、IP地址或目標郵件地址,以及相應的動作值寫入,然后使用makmap命令生成access.db文件(#makemap hash access.db < access),從而使服務器允許或屏蔽郵件中繼和郵件轟炸。access的格式如下:
|
其中reject動作是拒絕接受從指定地址發來的郵件;ok是允許特定地址用戶任意訪問;relay允許通過本郵件服務器進行中轉郵件;discard是將收到的郵件交給特定命令進行處理,例如:可以設定將收到的郵件丟棄,或者設定收到郵件后返回給使用者一條出錯信息等等。
Relay-domains文件是設定哪些域是該服務器可以中繼的域,其格式為每個域占一行。如:
|
在服務器開始使用時建議將所有頂級域名加入其中,以后再根據安全需要對其進行修改,否則將會使pop3用戶發送郵件時出現relay reject錯誤,而無法向沒有加入的域名目標郵件地址發送郵件。
3)版本號的修改
對于一臺郵件服務器,可以通過遠程的25端口telnet命令來獲取服務器的版本信息。如:“telnet sendmail服務器主機25”就可以查看sendmail的當前版本。為了防止一些惡意的查看版本信息操作,sendmail提供了可以對顯示的版本進行修改的操作。
在sendmail.cf文件中有一句“SmtpGreetingMessage=$j sendmail $V/$Z; $b”的語句,其中$V/$Z就是版本信息,正常情況下由該參數顯示的版本信息為sendmail本身的版本。如果要設定成管理員給定的版本信息,只需將該參數改掉,然后加入你所希望的信息即可。例如:當把這句改成“SmtpGreeting Message=$j sendmail 0.0/0.0; $b”,重啟sendmail服務,則sendmail的版本就會變成“sendmail 0.0”。從而達到隱蔽版本信息的目的。
以上是sendmail 8.9.3本身帶有的安全功能設置,通過這些安全設置可以大大加強服務器安全性能。但是在防止郵件中繼和郵件炸彈的設置時,如何確定哪些目標地址是需阻止中繼的,哪些又是允許中轉的,似乎只能通過管理員對日志文件的分析和觀測,或者待發現了安全問題后才能確定。因此這種安全控制還僅是事后控制,并且對相關文件修改后還必須重新啟動服務器。如要實現事先動態安全控制還需要采用其他方法。
2.動態中繼驗證控制
DRAC(Dynamic Relay Authorization Control)動態中繼驗證控制是專門為郵件服務器設計的一個服務器端軟件(),它可以安裝在一臺SMTP服務器上,并同時為多個郵件服務器提供動態中繼驗證服務。DRAC主要通過自動獲取和動態更新中繼驗證數據庫中的信息來允許合法pop3或IMAP用戶使用郵件服務器,從而有效地控制郵件炸彈和非法的郵件中繼。DRAC的原理就是利用pop3或imap服務器固有的功能來獲取用戶名、密碼和客戶機IP地址等信息,并將這些信息及時映象到驗證數據庫中,供smtp服務器調用,同時在經過一段時間以后(缺省為30分種),其驗證信息將自動失效,需要用戶重新輸入驗證信息。這樣不僅可以保證合法的pop3或imap用戶能夠正常使用郵件服務器,也可以阻止任何非注冊用戶(包括本地)利用郵件服務器來發送郵件。這種郵件安全控制常常被稱為:“郵件服務之前的pop驗證”(POP-before-SMTP)。
(1)DRAC的編譯
在編譯DRAC之前,系統的sendmail服務器應該已經正確編譯安裝了。首先在DRAC源程序目錄中編輯Makefile文件,在Solaris 2.x操作系統中其Makefile改成:
|
然后編譯并安裝即可。
如果存在多個pop/IMAP服務器,則還需要將這些服務器的IP地址加到文件/etc/mail/dracd.allow中,其文件書寫格式與/var/yp/securenets文件格式一樣。如:
255.255.255.255 202.139.244.23
255.255.255.255 127.0.0.1
(2)修改sendmail.mc文件重新生成sendmail.cf
在使用DRAC驗證功能之前,還需要將DRAC的驗證信息加到sendmail.cf文件中。首先要修改sendmail.mc文件,然后重新生成sendmail.cf。sendmail.mc文件中相關語句修改如下:
|
重新生成sendmail.cf文件后,再重啟sendmail進程。