[ 永遠的UNIX::UNIX技術資料的寶庫 ]   GB | BIG5

首頁 > 應用技術 > Sendmail > 正文
搞定Sendmail郵件權限控制
本文出自:LINUX伊甸園 作者: (2001-07-24 10:00:01)
  在當今網絡的應用中,安全是越來越顯出它的重要性了。而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就再合適不過了,它的作用是在接收到傳輸的郵件消息,偷偷地把它丟棄掉(在發送者看來,他的郵件的確是接收了,但他並不知道,發送的目的地址根本不可能接收到他的郵件,服務器巧妙地欺騙了他,這就叫以其人之道還治其人之身!)。除了以上介紹的這四類以外,還可以通過傳遞出錯端口標志和出錯信息來拒絕接收郵件。

  三、動手做實例

  我們下面就來看一看幾個例子:

  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域的郵件作轉發,但不允許對來自此域的郵件作轉發;而第二條記錄則正好相反。
(http://www.fanqiang.com)
    進入【UNIX論壇

相關文章
 

★  樊強制作 歡迎分享  ★