1. 程式人生 > >postfix郵件伺服器的關鍵安全策略

postfix郵件伺服器的關鍵安全策略

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

                原貼:http://www.pcjx.com/security/anfang/27744.html

郵件系統是Linux網路應用的重要組成,一個完整的郵件系統包括三個部分:底層作業系統(Linux Operation),郵件傳送代理(Mail Transport Agent,MTA),郵件分發代理(Mail Delivery Agent,MDA),郵件使用者代理(Mail User Agent,MUA)。

    Postfix是一個非常優秀的MTA,她素以高效、安全的特點而著稱。Postfix是作者在UNIX上所見過的MTA中在反垃圾郵件(Anti-Spam或Anti-UCE)方面做得最好的一個,甚至有很多公司在Postfix程式碼的基礎上進行二次開發而推出反垃圾郵件閘道器產品。MTA的反垃圾郵件功能,實際上就是在MTA處理過程中對會話進行過濾。這個過濾不但過濾了發往自身的垃圾郵件,而且還防止了自身被惡意利用傳送垃圾郵件。Postfix實現了目前所有主要的MTA過濾技術。postfix是Wietse Venema在IBM的GPL協議之下開發的MTA(郵件傳輸代理)軟體。和Sendmail相比Postfix更快、更容易管理、更靈活、更安全,同時還與sendmail保持足夠的相容性。Sendmail相比Postfix對比見表1.

    表1 Sendmail與Postfix的對比

    MTA 成熟性 安全性 特色 效能 Sendmail相容性 模組化設計Postfix 中 中 中 中 支援 是Sendmail 高 低 中 低  否

    垃圾郵件(SPAM) 也稱作UCE (Unsolicited Commercial Email,未經許可的商業電子郵件) 或UBE (Unsolicited Bulk Email,未經許可的大量電子郵件) .中國網際網路協會對垃圾郵件給出了一個正式的定義,只要是符合下述四條之一的電子郵件都可被稱為垃圾郵件:

    (1)收件人事先沒有提出要求或同意接收的廣告、電子刊物、各種形式的宣傳品等宣傳性的電子郵件。

    (2)收件人無法拒收的電子郵件。

    (3)隱藏發件人身份、地址、標題等資訊的電子郵件;。

    (4)含有虛假的資訊源、發件人、路由等資訊的電子郵件。

    垃圾電子郵件成為了人們最頭疼的問題之一。在Windows作業系統中也許您已經嘗夠了垃圾郵件給您帶來的苦頭,不要以為在Linux作業系統平臺中就能避免垃圾電子郵件給我們帶來的騷擾,反擊和過濾垃圾電子

    郵件是一件很重要的工作。下面是一些在Linux中廣泛使用的防垃圾郵件技術。

    (1)SMTP使用者認證

    目前常見並十分有效的方法是,在郵件傳送代理(Mail Transport Agent,MTA)上對來自本地網路以外的網際網路的發信使用者進行SMTP認證,僅允許通過認證的使用者進行遠端轉發。這樣既能夠有效避免郵件傳送代理伺服器為垃圾郵件傳送者所利用,又為出差在外或在家工作的員工提供了便利。如果不採取SMTP認證,則在不犧牲安全的前提下,設立面向網際網路的Web郵件閘道器也是可行的。此外,如果SMTP服務和POP3服務整合在同一伺服器上,在使用者試圖發信之前對其進行POP3訪問驗證(POP before SMTP)就是一種更加安全的方法,但在應用的時候要考慮到當前支援這種認證方式的郵件客戶端程式還不多。

    (2)逆向名字解析

    無論哪一種認證,其目的都是避免郵件傳送代理伺服器被垃圾郵件傳送者所利用,但對於傳送到本地的垃圾郵件仍然無可奈何。要解決這個問題,最簡單有效的方法是對傳送者的IP地址進行逆向名字解析。通過DNS查詢來判斷髮送者的IP與其聲稱的名字是否一致,例如,其聲稱的名字為mx.hotmail.com,而其連線地址為20.200.200.200,與其DNS記錄不符,則予以拒收。這種方法可以有效過濾掉來自動態IP的垃圾郵件,對於某些使用動態域名的傳送者,也可以根據實際情況進行遮蔽。但是上面這種方法對於藉助Open Relay的垃圾郵件依然無效。對此,更進一步的技術是假設合法的使用者只使用本域具有合法網際網路名稱的郵件傳送代理伺服器傳送電子郵件。例如,若發件人的郵件地址為[email protected],則其使用的郵件傳送代理伺服器的Internet名字應具有yahoo.com 的字尾。這種限制並不符合SMTP協議,但在多數情況下是切實有效的。需要指出的是,逆向名字解析需要進行大量的DNS查詢。

    (3)實時黑名單過濾

    以上介紹的防範措施對使用自身合法域名的垃圾郵件仍然無效。對此比較有效的方法就是使用黑名單服務了。黑名單服務是基於使用者投訴和取樣積累而建立的、由域名或IP組成的資料庫,最著名的是RBL、DCC和Razor等,這些資料庫儲存了頻繁傳送垃圾郵件的主機名字或IP地址,供MTA進行實時查詢以決定是否拒收相應的郵件。但是,目前各種黑名單資料庫難以保證其正確性和及時性。例如,北美的RBL和DCC包含了我國大量的主機名字和IP地址,其中有些是早期的Open Relay造成的,有些則是由於誤報造成的。但這些遲遲得不到糾正,在一定程度上阻礙了我國與北美地區的郵件聯絡,也妨礙了我國的使用者使用這些黑名單服務。其中使用BRL認證過程見圖1.

 

圖1 使用BRL過濾垃圾郵件的過程

     (4)內容過濾

    即使使用了前面諸多環節中的技術,仍然會有相當一部分垃圾郵件漏網。對此情況,目前最有效的方法是基於郵件標題或正文的內容過濾。其中比較簡單的方法是,結合內容掃描引擎,根據垃圾郵件的常用標題語、垃圾郵件受益者的姓名、電話號碼、Web地址等資訊進行過濾。更加複雜但同時更具智慧性的方法是,基於貝葉斯概率理論的統計方法所進行的內容過濾,該演算法最早由Paul Graham提出(http://www.paulgraham.com/spam.html),並使用他自己設計的Arc語言實現。這種方法的理論基礎是通過對大量垃圾郵件中常見關鍵詞進行分析後得出其分佈的統計模型,並由此推算目標郵件是垃圾郵件的可能性。這種方法具有一定的自適應、自學習能力,目前已經得到了廣泛的應用。最有名的垃圾郵件內容過濾是Spamassassin,它使用Perl語言實現,集成了以上兩種過濾方法,可以與當前各種主流的MTA整合使用。內容過濾是以上所有各種方法中耗費計算資源最多的,在郵件流量較大的場合,需要配合高效能伺服器使用。 下面以RHEL 4.0為例,介紹上面幾種技術應對安全隱患。

    安裝postfix

    1、查詢Sendmail是否安裝:

    #rpm -qa |grep sendmail

    2、強行解除安裝Sendmail

    # rpm -e sen

    dmail sendmail-cf sendmail-doc –nodeps

    3、用以下命令殺死執行中的sendmail程序:

    # kill all sendmail

    4、下載安裝Posfix

    #wget ftp://ftp.midvalleyhosting.com/pub/postfix/official/postfix-2.1.4.t ar.gz /tmp

    #tar -vxf postfix-2.1.4.tar.gz

    #cd postfix-2.1.4

    5.編譯原始碼包

    # make

    6.建立一個新使用者“postfix”,該使用者必須具有唯一的使用者ID號和組ID號,同時應該讓該使用者不能登入到系統,也即不為該使用者指定可執行的登入外殼程式和可用的使用者宿主目錄。我們可以先用adduser postfix 新增使用者再編輯/etc/passwd檔案中的相關條目如下所示:

    # useradd postfix

    # postfix:*:12345:12345:postfix:/no/where:/no/shell

    #groupadd postdrop

    7.確定/etc/aliases檔案中包含如下的條目:

    # postfix: root

    8. 以root使用者登入,在/tmp/ postfix目錄下執行命令:

    # ./INSTALL.sh

    9.啟動postfix

    # postfix start

    postfix的配置檔案位於/etc/postfix下,這四個檔案就是postfix最基本的配置檔案,它們的區別在於:mail.cf:是postfix主要的配置檔案。Install.cf:包含安裝過程中安裝程式產生的postfix初始化設定。master.cf:是postfix的master程序的配置檔案,該檔案中的每一行都是用來配置postfix的元件程序的執行方式。postfix-script:包裝了一些postfix命令,以便我們在linux環境中安全地執行這些postfix命令。

 

 

 


    4、命令列下的引數配置:

    1、 1、/etc/postfix/main.cf檔案末尾新增如下內容:

    default_process_limit=200

    imss_timeout=10m

    imss_connect_timeout=1s

    content_filter = imss:localhost:10025

    imss_destination_recipient_limit=200

    imss_destination_concurrency_limit=20

    2、在/etc/postfix/master.cf檔案末尾新增以下內容:

    #IMSS: content filter smtp transport "imss" for IMSS

    imss unix - - n - - smtp

    -o disable_dns_lookups=yes

    -o smtp_connect_timeout=$imss_connect_timeout

    -o smtp_data_done_timeout=$imss_timeout

    #IMSS: content filter loop back smtpd

    localhost:10026 inet n - n - 20 smtpd

    -o content_filter=

    -o smtpd_timeout=$imss_timeout

    -o local_recipient_maps=

    -o myhostname=localhost.$mydomain

    3. Relay 控制

    a. 允許Relay的Domain設定:

    編輯/etc/postfix/main.cf檔案,在如下位置新增允許的任意Relay的Domain,如:

    relay_domains = 263.net

    b. 允許接受的Domain設定:

    編輯/etc/postfix/main.cf檔案,在如下位置新增允許接受的Domain

    mydestination = trendmicro.com.cn

    c. 不受Relay限制的地址設定

    編輯/etc/postfix/main.cf檔案,在如下位置新增允許接受的Domain

    mynetworks = 10.11.240.0/24, 127.0.0.1

    說明:所謂Relay就是指別人能用這臺SMTP郵件伺服器,給任何人發信,這樣別有用心的垃圾傳送者可以使用筆者單位的這臺郵件伺服器大量傳送垃圾郵件,而最後別人投訴的不是垃圾傳送者,而是單位的伺服器。

    引數relay_domains & mydestination的主要區別在於:

    Postfix會轉發目的地符合 $relay_domains及其子域的郵件;

    Postfix會接受目的地符合 $mydestination的郵件,並且在沒有smart host的情況下嘗試對這些域進行本地落地處理,因而,為了能正常的接受這些郵件,一定要對齊設定smart host;IMSS UNIX的Relay 控制介面設定中的域,即是$mydestination引數值,因而,一定要在IMSS的Domain-Based Delivery中做相應Deliver設定。

    5、重新啟動Postfix伺服器:

    #postfix start

    重新讓postfix讀取更改後的配置只需執行“postfix reload”即可。

    開啟服務

    器的8081埠:

    # iptables -A FORWARD -i eth0 -p tcp ——dport 8081 -j ACCEPT

    iptables -A FORWARD -i eth0 -p udp ——dport 8081 -j ACCEPT

    6、啟用Web方式管理:

    伺服器從新啟動完畢,可以進行Web方式管理,開Web瀏覽器中輸入:http://yourip:8081/IMSS.html或者http://yourhost:8445/IMSS.html 即可。第一次進入Web介面時系統提示輸入密碼,此時密碼是空的,可以直接用滑鼠點選“Enter”鍵進入Web管理介面後,馬上設定管理員密碼。見圖3.

 

圖-3 首次登陸介面

點選“Policy Manager”選項,下面就可以制定自己的郵件伺服器郵件管理策略,見圖4。

圖-4 基於Web方式的IMSS 5.5的郵件管理策略介面

 

 

 

 


    5 、軟體升級

    可以採取兩種方法Web方式和命令列,這裡筆者喜歡在命令列下操作:

    下載升級布丁,連結:http://www.trendmicro.com/ftp/products/

    patches/isem522-imss55-linux-patch1.tar.gz

    #mv isem522-imss55-linux-patch1.tar.gz /tmp

    #cd /tmp

    #gunzip isem522-imss55-linux-patch1.tar.gz

    #./patchinstall install

    軟體升級過程中IMSS5.5服務將暫時中止,升級後系統會自動啟動IMSS 5.5服務。見圖-5.

 

圖5 升級IMSS資料庫

    三、使用專用工具防止垃圾郵件

    還可以利用其他的專用工具來防止垃圾郵件,比較著名的有由Matt Sergeant、Craig Hughes和Justin Mason於釋出的SpamAssassin(SA)。目前最新版本是3.0.2,它是較為流行的反垃圾郵件軟體,據SpamAssassin供應商 Deersoft的統計,目前大約有3萬臺Unix伺服器上使用了SpamAssassin.SpamAssassin利用Perl語言來對郵件內容進行規則匹配,從而達到判斷過濾垃圾郵件的目的。它的判斷方式是基於評分的方式,也就是說如果這封郵件符合某條規則,則給與一定分值;當累計的分值超過了一定限度時,則判定該郵件為垃圾郵件。對Sendmail、Qmail、Postfix和Exim等各種郵件平臺都適用。當它被終端使用者或系統管理員呼叫時,它可以方便地與大多數流行的郵件處理系統進行介面互連。SpamAssassin在對一封信件應用了各項規則之後,生成一個分值來表示其為垃圾郵件的可能性。它可以設定上百條規則,包括對郵件頭的處理、對郵件內容的處理及對郵件結構的處理等。每條規則都對應一個分值(可正、可負),每封信件的分值就是所匹配規則的分值之和。如果分值為負,表示這封信件是正常的;相反,如果分值為正,則表示信件有問題。如果超過了某個預設的分值,過濾器就會標識其可能為垃圾郵件,然後交由使用者做出最終抉擇。SpamAssassin的安裝過程比較簡單。啟動SpamAssassin伺服器:

    # service spamassassin start (啟動SpamAssassin伺服器)

    Starting spamd: [ 確定 ]

    配置過程:

    SpamAssassin預設了許多預設規則,可以在/usr/share/spamassassin下找到,使用者想新增自己的規則,可以配置通過/etc/mail/spamassassin/local.cf檔案實現。要在其中新增白名單(即可以確信不會發送垃圾郵件的發件人列表)。設定程式碼如下:

    whitelist_from_rcvd [email protected]

    whitelist_from_rcvd @ people.com

    以上兩條規則將[email protected] 郵箱和@ people.com 整個域加入了白名單。下面還要把SpamAssassin與Sendmail(此處以Postfix為例、Qmail略有不同)整合在一起。最簡單的方法是使用procmail來呼叫SpamAssassin過濾器。procmail來呼叫SpamAssassin的過程見圖6.

 

 

圖6 procmail來呼叫SpamAssassin的過程

    新增以下內容到/etc/procmailrc檔案:

    :0fw

    | /usr/bin/spamassassin

    :0

    * X-Spam-Status: Yes

    spam

    如果希望SpamAssassin不檢查大郵件,可以對其做出限制,新增一行:

    :0fw * < 1000000 | /usr/bin/spamassassin

    這段程式碼表示把郵件檢查的大小限制在1000K位元組以內。SpamAssassin還提供了一個專門的spamd後臺守護程式,可以設定為系統啟動時自動啟動它。在Mail-SpamAssassin-3.-0.2/spamd/下有一個redhat-rc-script.sh指令碼,將此指令碼放入Red Hat的啟動目錄/etc/rc.d/init.d/下即可。同時,還需要對/etc/procmailrc檔案做如下修改:

    :0fw

    | /usr/bin/spamc -s 100000

    這樣就可以通過控制spamd程序來調整過濾器的執行狀態。配置完成後,可以發郵件進行測試。如果看到在郵件頭出現與spam檢查相關的幾項內容,表示SpamAssassin已經開始發揮作用。

    除了設定內部的規則之外,SpamAssassin也可以訪問其它外部的垃圾郵件過濾規則集,這樣可以進一步增強其適用性。Chinese_rules.cf是用於垃圾郵件過濾系統SpamAssassin的中文垃圾郵件過濾規則集。由於以前沒有中文的過濾規則集,SpamAssassin對中文郵件過濾的準確性不高。CCERT反垃圾郵件研究小組推出了第一個基於SpamAssassin的中文垃圾郵件過濾規則集Chinese_rules.cf.該規則集每週更新一次。把Chinese_rules.cf複製到/usr/share/spamassassin配置文件中的命令:

    # wget -N -P /usr/share/spamassassin www.ccert.edu.cn/spam/sa/Chinese_rules.cf

    自動更新:

    CCERT每週更新一次規則集,更新使用CCERT反垃圾郵件服務在6個月內處理過的垃圾郵件為樣本。經常更新Chinese_rules.cf會使過濾效果更好。

    Linux有一個稱為crond的守護程式,主要功能是週期性地檢查 /var/spool/cron目錄下的一組命令檔案的內容,並在設定的時間執行這些檔案中的命令。使用者可以通過crontab 命令來建立、修改、刪除這些命令檔案。例如用 crontab命令實現每週一08:35自動更新:

    首先建立一個檔案,檔名稱myproject(名稱自己設定):

    #crontab -e

 

 

 

 

    檔案內容:

    35 08 * * 1 wget -N -P /usr/share/spamassassin www.ccert.edu.cn/spam/sa/Chinese_rules.cf; /etc/init.d/init-script restart

    用vi編輯後存檔退出。

    (3)使用 crontab命令新增到任務列表中:

    #crontab myproject

    這樣Linux伺服器會在每星期一的8點35分會自動下載Chinese_rules.cf更新規則。

    SpamAssassin使用基於規則的垃圾郵件過濾技術,比分散式黑名單執行得更快,因為分散式黑名單需要查詢網路伺服器。對大多數使用者而言,它能捕捉幾乎所有的垃圾郵件,而不需要隔離合法郵件。實際上它還提供了無限的調整和定製選項。

    四、其他措施

    1.隱藏郵件伺服器IP地址

    如果網路中有專門傳送郵件的中央郵件伺服器,為許多主機提供訪問,那麼必須隱藏郵件地址的主機名部分,(以postfix郵件伺服器為例)例如一條名為:pc-jok.cao.com的主機上有一個jok使用者那麼它的郵件名稱是:[email protected] main.cf加入兩行:

    masquerade_domain=$mydomian

    masquerade_exceptions=root

    第一行通知postfix郵件伺服器對所在德 域允許地址化裝,通過$mydomian變數完成,這樣[email protected]變為[email protected],第二行將root使用者排除,即不對root使用者偽裝。

    2.防範DOS攻擊:

    DOS(拒絕服務攻擊)一段時間以來成為許多單位郵件伺服器的最大殺手。對於郵件伺服器的拒絕服務攻擊原理很簡單,就是不斷地向郵件伺服器傳送大量的郵件,直到超過最大容量而崩潰為止。拒絕服務攻擊有時並非有針對性的黑客行為,現在的病毒常常會利用自身的SMTP引擎,向感染電腦裡的存在的地址狂發大量郵件。如果中小企業認為自己的公司小,不會成為攻擊目標,這種想法已經不現實了。對於中小企業來說,要預防DOS攻擊比大型企業要容易,因為小型企業往往不會有太多的郵件來往,我們可以根據業務量的大小,限制每個連線的郵件數,以及每封郵件的收件人數。這樣,使用者對於DOS攻擊就可以做到儘早地發現並採取措施,而不會等到伺服器崩潰的時候才發現被人實施了DOS攻擊。步驟如下:

    2. 限制伺服器使用的程序數目

    可以通過指定/etc/postfix/main.cf檔案的下列引數來控制使用的併發程序總量:

    default_process_limit = 50

    這樣伺服器被允許同時允許60個併發程序(例如smtp客戶端、smtp伺服器端和本地分發)。如果希望增加同時接受1000條資訊,可以修改 /etc/postfix/ master.cf檔案,使smtp服務的最大程序達到1000,如下所示:

    #=============================================================

    # service type private unpriv chroot wakeup maxproc command + args

    # (yes) (yes) (yes) (never) (60)

    # ===========================================

    smtp inet n - n - 1000 smtpd

    3.控制最大郵件尺寸

    可以修改/etc/postfix/main.cf如下引數控制郵件尺寸

    message_size_limit = 1073741824

    這樣伺服器可以處理最大郵件尺寸是1073741824位元組 (10兆)。

    4. 控制同時傳送一個遠端伺服器的郵件數量

    同時向遠端伺服器傳送太多SMTP連線是不合理的,也是危險的(可能會被認為是傳送垃圾郵件)。一些大的ISP站點(AOL、 Yahoo!、 Hotmail)通常要求優化等到許可才能使用傳送併發連線。Postfix 也能通過下面引數設定一個站點的最大併發連線數量:

    default_destination_concurrency_limit = 20

    這樣使到達單一站點的併發連線數量不能超過20個。

    5.安裝防病毒軟體:

    F-Prot Antivirus軟體包安裝和配置過程:軟體包格式: fp-linux-ws.rpm

    軟體包的大小(KB):3970KB,下載地址:http://files.f-prot.com/files/linux-x86/fp-linux-ws.rpm

    安裝F-Prot Antivirus軟體包前,請先啟動SpamAssassin伺服器:

    Wget http://files.f-prot.com/files/linux-x86/fp-linux-ws.rpm

    Wget -ivh fp-linux-ws.rpm

    升級的F-Prot Antivirus病毒庫的操作:

    # cd /usr/local/f-prot/tools/

    # ./check-updates.pl (升級命令)

    ***************************************

    * F-Prot Antivirus Updater *

    ***************************************

    Nothing to be done……

    總結:Postfix是目前比較流行的,擁有相當好的安全性和高效率的郵件系統。

    Postfix自身帶了很多反垃圾郵件的功能可以阻止一部分垃圾郵件,但是面對日益痴狂的垃圾郵件還是需要一些專業軟體的支援。

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述