搞定Sendmail郵件權限控制
2024-07-21 02:35:53
供稿:網友
在當今網絡的應用中,安全是越來越顯出它的重要性了。而E-mail服務是網絡世界的一項十分有價值的應用,同樣它受到的安全上的威脅也越來越大。從郵件中,黑客們可以采取各種各樣的方式來尋找你網絡系統上的安全漏洞并實施攻擊。 比如說,通過在短時間內連續發送大量的垃圾郵件,可以導致你的郵件服務器系統崩潰;另外有些郵件發送者可以利用你的郵件服務器作他們的代理轉發系統,這也可能讓你系統“蒙受不白之冤”。還有一種情況是,有些站點發來的郵件是不可靠或者非法的,這也需要得到有效的控制。那么怎樣能夠實現這些對郵件的控制呢?
一、Sendmail出場
這里我們就來探討怎樣在linux平臺上用Sendmail郵件程序來完成這項功能。由于篇幅所限,現在我們只可能就其很小的一部分功能作一些簡要介紹。
我們假定你有一臺服務器,并且已經安裝好了Sendmail軟件(推薦為8.9.x以上的版本),可以實現收發郵件的功能。子網內部機器都可以通過而且必須通過該服務器的郵件代理來發送和接收Internet上的郵件。我們以Sendmail的標準配置為參照,看看如何實現對SMTP郵件的中繼轉發控制。在安裝完Sendmail后,我們在/etc/mail(這是默認目錄)下,可以找到幾個用來控制的數據庫及其編輯文件,包括mailer、deny、access等。其中access庫即是我們本文討論的重點。當我們用vi access查看該文件時,可以看到如下一些默認行(注:這里示例的sendmail版本是8.9.3):
localhost.localdomain RELAY
localhost RELAY
這些默認行說明對你的本域內機器可以實現轉發,我們下面的工作就是要對該文件進行加工編輯,以實現對郵件傳輸的權限控制,從而保證一定的系統安全性。
二、走進郵件數據庫
我們仍然以vi access命令來實施對文件的編輯。首先簡單說明一下access數據庫的作用及基本形式。access庫答應系統治理者按照自己的策略決定是否答應其它域的郵件服務器或郵件地址訪問。這個數據庫中的每條記錄包括一個域名(或者網絡名、子網名以及直接的郵箱地址等)作為要害字,以及一項針對該要害字的行動值(即對要害字表示的地址采取什么樣的控制方法),它們以TAB鍵分隔。在默認行中,我們看到的localhost localdomain、localhost都是要害字,而relay則是相應的行動值。
要害字可為多種形式,如完全或部分域名、直接的郵箱地址、ip地址等,例如:
host.subdomain.domain.com,subdomain.domain.com或domain.com都是符合要求的要害字,同樣,user@host.domain,@host.domain,205.199.2.250,205.199.2,205.199也都是合法的要害字。
由此可見,要害字的匹配項很多,這就大大提高了程序對郵件的控制功能。范圍或大或小,都可以由我們靈活控制,確實不錯!以下我們便可根據自己系統的需要分別對這些要害字作權限控制,具體來說,行動值有四類:其中的relay,我們已經在文件的默認值中見過了,它表示答應通過你的郵件服務器對郵件作中繼轉發。其它的三類分別為ok、reject和discard。別小看就這么幾項,但實現的功能可不小哦。ok是用來答應用戶的任意訪問,它會覆蓋任何其它已建立的檢查(實際設置中,最好別設這項,除非你對該用戶是絕對信任的);reject可以實現對來訪地址的拒絕,它根本就不容許該地址與你的郵件服務器進行連接通信;假如你想對來訪地址耍一個小花招,那么選擇discard就再合適不過了,它的作用是在接收到傳輸的郵件消息后,偷偷地把它丟棄掉(在發送者看來,他的郵件的確是接收了,但他并不知道,發送的目的地址根本不可能接收到他的郵件,服務器巧妙地欺騙了他,這就叫以其人之道還治其人之身?。3艘陨辖榻B的這四類以外,還可以通過傳遞出錯端口標志和出錯信息來拒絕接收郵件。
三、動手做實例
我們下面就來看一看幾個例子:
cyber.com reject
sendmail.org relay
my@sendmail.org ok
spam@buyme.com discard
202.103.109.35 reject
202.103 relay
@buyme.com 550 You don't see the whole world!
(注:四個行動值不區分大小寫。
)
你可以根據你的需要加入合適項以實現郵件權限的設置。為了給大家一個整體的概念,讓我們再看一個完整的access文件(已經作了各種限制的):
?。?Check the /usr/doc/sendmail-8.9.3/README.cf file for a description
?。?of the format of this file. (search for access_db in that file)
?。?The /usr/doc/sendmail-8.9.3/README.cf is part of the sendmail-doc
# package.
?。?
# by default we allow relaying from localhost...
localhost.localdomain RELAY
localhost RELAY
#
#other control measures to your email system
spamer@playboy.com reject
webmaster@sendmail.org ok
202.103.109.8 relay
@bad.com 550 You are a bad user!
Dis.xq.com discard
完成了對access文件的編輯之后,可千萬不要以為就萬事大吉了。還有一個非常重要的步驟,那就是把修改的內容寫到access數據庫中去以使之生效。具體的實現方法是:在命令符下,輸入makemap -v hash /etc/mail/access〈 /etc/mail/access,然后系統會給出相應的響應信息,假如結果類似以下這個樣子:
key=′localhost.localdomain′, val=′RELAY′
key=′localhost′, val=′RELAY′
key=′spamer@playboy.com′, val=′reject′
key=′webmaster@sendmail.org′, val=′ok′
key=′202.103.109.8′, val=′relay′
key=′@bad.com′, val=′550 You are a bad user!′
key=′dis.xq.com′, val=′discard′
那就表示一切正常!最后請重新啟動Sendmail服務,剩下你要做的就是好好享受一下你的工作成果了!
附記:本篇文章完成之際,正值Sendmail 8.10.0全新推出,該版本據說功能較以前有大幅提升。對于本文所涉及的access控制,新的Sendmail版本已經可以實現對郵件收取和發送分別作不同的控制,如下:
To:file.example.net RELAY
From:file.example.net RELAY
第一條記錄答應對去向file.example.net域的郵件作轉發,但不答應對來自此域的郵件作轉發;而第二條記錄則正好相反。