• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • SMTP安全

    發表于:2007-05-26來源:作者:點擊數: 標簽:
    一、SMTP 協議 原理 SMTP-簡單郵件傳輸 協議 (SimpleMailTransferProtocol),是定義郵件傳輸的 協議 ,它是基于TCP服務的應用層 協議 ,由RFC0821所定義。SMPT 協議 規定的命令是以明文方式進行的。為了說明SMTP的工作原理,我們以向www.linuxaid.com.cn發

    一、SMTP協議原理

    SMTP-簡單郵件傳輸協議(SimpleMailTransferProtocol),是定義郵件傳輸的協議,它是基于TCP服務的應用層協議,由RFC0821所定義。SMPT協議規定的命令是以明文方式進行的。為了說明SMTP的工作原理,我們以向www.linuxaid.com.cn發送郵件為實例進行說明。
    在linux環境下,使用"te.netwww.linuxaid.com.cn25"連接www.linuxaid.com.cn的25號端口(SMTP的標準服務端口);在windows下使用telnet程序,遠程主機指定為www.linuxaid.com.cn,而端口號指定為25,然后連接www.linuxaid.com.cn:交互過程如下:
    [lix@nslix]$telnetwww.linuxaid.com.cn25
    Trying202.99.11.120...
    Connectedtowww.linuxaid.com.cn.
    Escapecharacteris'^]'.
    HELOideal
    220www.linuxaid.com.cnESMTPSendmail8.10.2/8.10.2;Mon,18Sep200013:40:44
    +0800
    250www.linuxaid.com.cnHello[210.12.114.130],pleasedtomeetyou
    MAILFROM:ideal@btamail.net.cn
    2502.1.0IDEAL@btamail.net.cn...Senderok
    RCPTTO:ideal@linuxaid.com.cn
    2502.1.5ideal@linuxaid.com.cn...Recipientok
    DATA
    354Entermail,endwith"."onalinebyitself
    hello,Plstogettomeetu:)goodluck
    .
    2502.0.0e8I5j1M11204Messageaclearcase/" target="_blank" >cceptedfordelivery
    QUIT
    2212.0.0www.linuxaid.com.cnclosingconnection
    Connectionclosedbyforeignhost.
    其中黑體部分是輸入的命令,其他內容是對方郵件服務器輸出的狀態信息。
    這里,HELO是客戶向對方郵件服務器發出的標識自己的身份的命令,這里假設發送者為ideal;MAILFROM命令用來表示發送者的郵件地址;RCPTTO:標識接收者的郵件地址,這里表示希望發送郵件給ideal@linuxaid.com.cn,如果郵件接收者不是本地用戶,例如RCPTTO:ideal@btamail.net.cn,則說明希望對方郵件服務器為自己轉發(Relay)郵件,若該機器允許轉發這樣的郵件,則表示該郵件服務器是OPENRELAY的,否則說明該服務器不允許RELAY;DATA表示下面是郵件的數據部分,輸入完畢以后,以一個"."開始的行作為數據部分的結束標識;QUIT表示退出這次會話,結束郵件發送。
    這就是一個簡單的發送郵件的會話過程,其實當使用outlookexpress等客戶軟件發送時,后臺進行的交互也是這樣的,當然,SMTP協議為了處理復雜的郵件發送情況如附件等等,定義了很多的命令及規定,具體可以通過閱讀RFC821來獲得。
    當你的一個朋友向你發送郵件時,他的郵件服務器和你的郵件服務器通過SMTP協議通信,將郵件傳遞給你郵件地址所指示的郵件服務器上(這里假設你的本地郵件服務器是Linux系統),若你通過telnet協議直接登錄到郵件服務器上,則可以使用mail等客戶軟件直接閱讀郵件,但是若你希望使用本地的MUA(MailUserAgent,如outlookexpress等客戶軟件)來閱讀郵件,則本地客戶端通過POP3或IMAP協議與郵件服務器交互,將郵件信息傳遞到客戶端(如:win98系統)。而如果你向你的朋友回復一封信件時,你所使用的MUA也是通過SMTP協議與郵件服務(一般為發送郵件地址對應的email地址)器通信,指示其希望郵件服務器幫助轉發一封郵件到你朋友的郵件地址指定的郵件服務器中。若本地郵件服務器允許你通過它轉發郵件,則服務器通過SMTP協議發送郵件到對方的郵件服務器。這就是接受和發送郵件的全部過程。

    二、什么是mailRelay

    郵件服務器一般具有一個或若干個域名(這些域名應該出現在某個配置文件內),郵件服務器在運行時將監聽25號端口,等待遠程的發送郵件的請求。網絡上其他的mail服務器或者請求發送郵件的MUA(MailUserAgent,如outlookexpress、foxmail等等)會連接郵件服務器的25號端口,請求發送郵件,SMTP會話過程一般是從遠程標識自己的身份開始,過程如下:
    HELOremote.system.domainname
    250qmailserver.domain
    MAILFROM:user@somewherer.net
    250OK
    RCPTTO:user1@elsewhere.net
    郵件的接收者user1@elsewhere.net中的域名并不一定是郵件接受服務器的所具有的本地域名,也就是說郵件目的可能不是上面協議交互中的接收方,而是郵件發送者希望接收郵件服務器幫助其轉發郵件。這時候本地系統可能有兩種回答,接受它:
    250OK
    或者拒絕接受它:
    553sorry,.thatdomainisnotinmydomainlistofallowedrecphosts
    第一種情況下,本地郵件服務器是允許relay的,它接收并同意傳遞一個目的地址不是本地的郵件;而第二種情況則不接收非本地郵件。
    為什么不能配置郵件服務器為openrelay?
    如果系統管理員將自己的郵件服務器設置為openrelay,將會導致一些垃圾郵件發送者將你的郵件服務器作為轉發自圾郵件的中繼站,這將使垃圾郵件的接收者將矛頭對準你,可能會導致報復性的郵件炸彈;垃圾郵件還能消耗你大量的資源,占用你的帶寬。更為糟糕的事情可能是你的名字可能會上了黑名單,成為其他郵件接收者共同抵制的目標,你的郵件將被這些接收者所拒絕。
    因此,系統管理員應當注意不要使自己的郵件服務器是openrelay的。

    二、Sendmail服務器安全

    sendmail是在Unix環境下使用最廣泛的實現郵件發送/接受的郵件傳輸代理程序。由于Sendmail郵件服務器的特點是功能強大而復雜,因此為保證Sendmail的安全性,需要作以下一些工作。

    1、設置Sendmail使用"smrsh"

    smrsh程序的目的是作為在mailer中為sendmail定義的"/bin/sh"的替代shell。smrsh是一種受限shell工具,它通過"/etc/smrsh"目錄來明確指定可執行文件的列表。簡而言之smrsh限制了攻擊者可以執行的程序集。當它與sendmail程序一起使用的時候,smrsh有效的將sendmail可以執行的程序的范圍限制在smrsh目錄之下。
    第一步:
    決定smrsh可以允許sendmail運行的命令列表。缺省情況下應當包含以下命令,但不局限于這些命令:
    "/bin/mail"(如果在你的系統中安裝了的話)
    "/usr/bin/procmail"(如果在你的系統中安裝了的話)
    注意:不可在命令列表里包括命令解釋程序,例如sh(1),csh(1),perl(1),uudecode(1)及流編輯器sed(1)。
    第二步:
    在"/etc/smrsh"目錄中創建允許sendmail運行的程序的符號連接。
    使用以下命令允許mail程序"/bin/mail"運行:
    [root@deep]#cd/etc/smrsh
    [root@deep]#ln-s/bin/mailmail
    用以下命令允許procmail程序"/usr/bin/procmail"運行:
    [root@deep]#cd/etc/smrsh
    [root@deep]#ln-s/usr/bin/procmailprocmail
    這將允許位于".forward"和"aliases"中的用戶采用"|program"語法來運行mail及procmail程序。
    第三步
    配置sendmail使之使用受限shell。mailer程序在sendmail的配置文件"/etc/sendmail.cf"中僅有一行。必須修改"sendmail.cf"文件中"Mprog"定義的那一行。將"/bin/sh"替換為"/usr/sbin/smrsh"。
    編輯"sendmail.cf"文件(vi/etc/sendmail.cf)并改動下面這一行:
    例如:
    Mprog,P=/bin/sh,F=lsDFMoqeu9,S=10/30,R=20/40,D=$z:/,T=X-Unix,A=sh-c$u
    應該被改為:
    Mprog,P=/usr/sbin/smrsh,F=lsDFMoqeu9,S=10/30,R=20/40,D=$z:/,T=X-Unix,A=sh-c$u
    現在用以下命令手工重起sendmail進程:
    [root@deep]#/etc/rc.d/init.d/sendmailrestart

    2、"/etc/aliases"文件

    如果沒有加以正確和嚴格的管理的話,別名文件被用來獲取特權。例如,很多發行版本在別名文件中帶有"decode"別名?,F在這種情況越來越少了。
    這樣做的目的是為用戶提供一個通過mail傳輸二進制文件的方便的方式。在郵件的發送地,用戶把二進制文件用"uuencode"轉換成ASCII格式,并把結果郵遞給接收地"decode"別名。那個別名通過管道把郵件消息發送到"/usr/bin/uuencode"程序,由這個程序來完成從ASCII轉回到原始的二進制文件的工作。
    刪除"decode"別名。類似的,對于所有用于執行沒有被放在smrsh目錄下的程序的別名,你都要仔細的檢查,可能它們都值得懷疑并應當刪除它們。要想使你的改變生效,需要運行:
    [root@deep]#/usr/bin/newaliases
    編輯別名文件(vi/etc/aliases)并刪除以下各行:
    #Basicsystemaliases--theseMUSTbepresent.
    MAILER-DAEMON:postmaster
    postmaster:root

    #Generalredirectionsforpseudoaccounts.
    bin:root
    daemon:root
    games:root??刪除這一行
    ingres:root??刪除這一行
    nobody:root
    system:root??刪除這一行
    toor:root??刪除這一行
    uucp:root??刪除這一行

    #Well-knownaliases.
    manager:root??刪除這一行
    dumper:root??刪除這一行
    operator:root??刪除這一行

    #trapdecodetocatchsecurityattacks
    decode:root??刪除這一行

    #Personwhoshouldgetroot'smail
    #root:marc
    最后應該運行"/usr/bin/newaliases"程序使改動生效

    3、避免你的Sendmail被未授權的用戶濫用

    最新版本的Sendmail(8.9.3)加入了很強的防止欺騙的特性。它們可以防止你的郵件服務器被未授權的用戶濫用。編輯你的"/etc/sendmail.cf"文件,修改一下這個配置文件,使你的郵件服務器能夠擋住欺騙郵件。
    編輯"sendmail.cf"文件(vi/etc/sendmail.cf)并更改下面一行:
    OPrivacyOptions=authwarnings
    改為:
    OPrivacyOptions=authwarnings,noexpn,novrfy
    設置"noexpn"使sendmail禁止所有SMTP的"EXPN"命令,它也使sendmail拒絕所有SMTP的"VERB"命令。設置"novrfy"使sendmail禁止所有SMTP的"VRFY"命令。這種更改可以防止欺騙者使用"EXPN"和"VRFY"命令,而這些命令恰恰被那些不守規矩的人所濫用。

    4、SMTP的問候信息

    當sendmail接受一個SMTP連接的時候,它會向那臺機器發送一個問候信息,這些信息作為本臺主機的標識,而且它所做的第一件事就是告訴對方它已經準備好了。
    編輯"sendmail.cf"文件(vi/etc/sendmail.cf)并更改下面一行:
    OSmtpGreetingMessage=$jSendmail$v/$Z;$b
    改為:
    OSmtpGreetingMessage=$jSendmail$v/$Z;$bNOUCEC=xxL=xx
    現在手工重起一下sendmail進程,使剛才所做的更改生效:
    [root@deep]#/etc/rc.d/init.d/sendmailrestart
    以上的更改將影響到Sendmail在接收一個連接時所顯示的標志信息。你應該把"`C=xxL=xx"條目中的"xx"換成你所在的國家和地區代碼。后面的更改其實不會影響任何東西。但這是"news.admin.net-abuse.email"新聞組的伙伴們推薦的合法做法。

    5、限制可以審核郵件隊列內容的人員

    通常情況下,任何人都可以使用"mailq"命令來查看郵件隊列的內容。為了限制可以審核郵件隊列內容的人員,只需要在"/etc/sendmail.cf"文件中指定"restrictmailq"選項即可。在這種情況下,sendmail只允許與這個隊列所在目錄的組屬主相同的用戶可以查看它的內容。這將允許權限為0700的郵件隊列目錄被完全保護起來,而我們限定的合法用戶仍然可以看到它的內容。
    編輯"sendmail.cf"文件(vi/etc/sendmail.cf)并更改下面一行:
    OPrivacyOptions=authwarnings,noexpn,novrfy
    改為:
    OPrivacyOptions=authwarnings,noexpn,novrfy,restrictmailq
    現在我們更改郵件隊列目錄的權限使它被完全保護起來:
    [root@deep]#chmod0700/var/spool/mqueue
    注意:我們已經在sendmail.cf中的"PrivacyOptions="行中添加了"noexpn"和"novrfy"選項,現在在這一行中我們接著添加"restrictmailq"選項。
    任何一個沒有特權的用戶如果試圖查看郵件隊列的內容會收到下面的信息:
    [user@deep]$/usr/bin/mailq
    Youarenotpermittedtoseethequeue

    6、限制處理郵件隊列的權限為"root"

    通常,任何人都可以使用"-q"開關來處理郵件隊列,為限制只允許root處理郵件隊列,需要在"/etc/sendmail.cf"文件中指定"restrictqrun"。
    編輯"sendmail.cf"文件(vi/etc/sendmail.cf)并更改下面一行:
    OPrivacyOptions=authwarnings,noexpn,novrfy,restrictmailq
    改為:
    OPrivacyOptions=authwarnings,noexpn,novrfy,restrictmailq,restrictqrun
    任何一個沒有特權的用戶如果試圖處理郵件隊列的內容會收到下面的信息:
    [user@deep]$/usr/sbin/sendmail-q
    Youdonothavepermissiontoprocessthequeue

    7、在重要的sendmail文件上設置不可更改位

    可以通過使用"chattr"命令而使重要的Sendmail文件不會被擅自更改,可以提高系統的安全性。具有"+i"屬性的文件不能被修改:它不能被刪除和改名,不能創建到這個文件的鏈接,不能向這個文件寫入數據。只有超級用戶才能設置和清除這個屬性。
    為"sendmail.cf"文件設置不可更改位:
    [root@deep]#chattr+i/etc/sendmail.cf
    為"sendmail.cw"文件設置不可更改位:
    [root@deep]#chattr+i/etc/sendmail.cw
    為"sendmail.mc"文件設置不可更改位:
    [root@deep]#chattr+i/etc/sendmail.mc
    為"null.mc"文件設置不可更改位:
    [root@deep]#chattr+i/etc/null.mc
    為"aliases"文件設置不可更改位:
    [root@deep]#chattr+i/etc/aliases
    為"access"文件設置不可更改位:
    [root@deep]#chattr+i/etc/mail/access

    8、Sendmail環境下的防止郵件relay

    從8.9版本開始,缺省的是不允許郵件轉發(mailrelay)的。最簡單的允許郵件轉發的方法是在文件/etc/mail/relay-domains中進行設置。該文件中列出的域名內的信件都允許通過本地服務器進行郵件轉發。
    為了更精確的設置,可以在sendmail.mc中添加如下幾個參數允許被用來設置郵件轉發:
    ·FEATURE(relay_hosts_only).通常情況下,在文件/etc/mail/relay-domains中列出的域名的主機都允許通過本地機轉發,而該設置指示指定必須羅列出每個允許通過本機轉發郵件的主機。
    ·FEATURE(relay_entire_domain).該參數指示允許所有本地域通過本機進行郵件轉發。
    ·FEATURE(access_db).該參數指定利用哈希數據庫/etc/mail/access來決定是否允許某個主機通過本地進行郵件轉發。
    ·FEATURE(blacklist_recipients).若該參數被設置,則在決定是否允許某個主機轉發郵件時同時察看郵件發送著地址和郵件接受者地址。
    ·FEATURE(rbl).允許基于maps.vix.com由黑名單(RealtimeBlackholeList)進行郵件拒絕,以防范垃圾郵件。
    ·FEATURE(accept_unqualified_senders).允許接受發送者地址不包括域名的郵件,例如user,而不是user@B.NET。
    ·FEATURE(accept_unresolvable_domains).通常來講,sendmail拒絕接受發送者郵件地址指定的主機通過DNS不能解析的郵件,而該參數允許接收這種郵件。
    ·FEATURE(relay_based_on_MX).該參數允許轉發郵件接受者地址的MX記錄指向本地的的郵件,例如,本地接收到一個發送目的地址為user@b.com的郵件,而b.com域名的MX記錄指向了本地機器,則本地機器就允許轉發該郵件。
    下面幾個特性可能會有安全漏洞,一般當郵件服務器位于防火墻后時才應該使用,因為這些參數可能導致你的系統易于被垃圾郵件發送者利用。
    ·FEATURE(relay_local_from).該參數指定若消息自稱源于本地域,則允許轉發該郵件。
    ·FEATURE(promiscuous_relay).打開對所有的郵件的轉發。
    宏配置文件"sendmail.mc"設置成功以后,可以用下面的命令創建sendmail的配置文件:
    [root@deep]#cd/var/tmp/sendmail-version/cf/cf/
    [root@deep]#m4../m4/cf.m4/etc/sendmail.mc>/etc/sendmail.cf
    注意:這里"../m4/cf.m4"告訴m4程序的缺省配置文件路徑。

    三、qmail安全

    qmail有一個名為rcpthosts(該文件名源于RCPTTO命令)的配置文件,其決定了是否接受一個郵件。只有當一個RCPTTO命令中的接收者地址的域名存在于rcpthosts文件中時,才接受該郵件,否則就拒絕該郵件。若該文件不存在,則所有的郵件將被接受。當一個郵件服務器不管郵件接收者和郵件接收者是誰,而是對所有郵件進行轉發(relay),則該郵件服務器就被稱為開放轉發(openrelay)的。當qmail服務器沒有rcpthosts時,其是開放轉發的。
    設置自己服務器為非openrelay的最簡單的辦法就是將你的郵件服務器的所有域名(若DNS的MX記錄指向該機器,也應該包括該域名。例如你的機器有三個域名mail.linxuaid.com.cn、mail1.linuxaid.com.cn,而且linuxaid.com.cn的MX指向mail.linuxaid.com.cn,則qmail的rcphosts的應該包括mail.linuxaid.com.cn、mail1.linuxaid.com.cn和linuxaid.com.cn)。
    但是這將導致你的本地客戶也被拒絕使用你的服務器轉發郵件,而要支持客戶使用MUA來發送郵件,必須允許客戶使用服務器轉發郵件。qmail-smtpd支持一種有選擇性的忽略rcpthosts文件的方法:若qmail-smtpd的環境變量RELAYCLIENT被設置,則rcpthost文件將被忽略,relay將被允許。但是如何識別一個郵件發送者是否是自己的客戶呢?qmail并沒有采用密碼認證的方法,而是判斷發送郵件者的源IP地址,若該IP地址屬于本地網絡,則認為該發送者為自己的客戶。
    這里就要使用ucspi-tcp軟件包。在這里我們要使用該軟件包的tcpserver程序。該程序的功能類似于inetd-監聽進入的連接請求,為要啟動的服務設置各種環境變量,然后啟動指定的服務。
    tcpserver的配置文件是/etc/tcp.smtp,該文件定義了是否對某個網絡設置RELAYCLIENT環境變量。例如,本地網絡是地址為192.168.10.0/24的C類地址,則tcp.smtp的內容應該設置如下:
    127.0.0.1:allow,RELAYCLIENT=""
    192.168.10.:allow,RELAYCLIENT=""
    :allow
    這幾個規則的含義是指若連接來自127.0.0.1和192.168.10則允許,并且為其設置環境變量RELAYCLIENT,否則允許其他連接,但是不設置RELAYCLIENT環境變量。這樣當從其他地方到本地的25號連接將會被允許,但是由于沒有被設置環境變量,所以其連接將會被qmail-smptd所拒絕。
    但是tcopserver并不直接使用/etc/tcp.smtp文件,而是需要先將該文件轉化為cbd文件:
    [lix@mail/etc]$#tcprulestcp.smtp.cdbtcp.smtp.temp<tcp.smtp
    然后再回頭看在/service/qmail-smtpd目錄下的run文件中有
    /usr/local/bin/tcpserver-v-p-x/etc/tcp.smtp.cdb
    可以看到,tcpserver利用了/etc/smtp.cbd文件。若本地有多個網絡,則需要這些網絡都出現在/etc/tcp.smtp文件中。
    這樣就實現了允許本地客戶relay郵件,而防止relay被濫用。

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>