第一部分 mail relay
規則詳解
一. 軟件環境:Sendmail 8.9.3
二. 默認情況下的relay規則
在默認情況下,也就是安裝完系統(Sendmail服務器)不做任何設置的情況下,則只能在本機上收發郵件, 網絡上(局域網或Inte.net)的任何其它主機不能向該SMTP服務器發送郵件,若希望能實現發送,則需滿足下 面的任何一個條件即可(不需要同時滿足):
1. 發送者身份屬于“本地或者被允許的發送者”。
2. 接收者身份屬于“本地或者被允許的接收者”。
也就是說,不管是郵件的發送者還是郵件接收對象只要其中之一屬于本地或被允許的時候,Sendmail郵件服務器才允許relay你的郵件。那么什么是“本地/被允許的發送者”呢? 實際上只有一種,就是列在文件/etc/mail/relay-domains(默認安裝后無此文件,你可以創建它)或者 /etc/mail/access中的域名或者IP地址行,如:
abc.com (/etc/mail/relay-domains)
abc.com relay (/etc/mail/access)
注:
a.我們假定某公司域名為abc.com
b.上面的兩行含義相同,只是在不同的文件中所要求的語法不同而已,在/etc/mail/access文件中需要加上 relay.
===先討論域名的情況:
回到前面所說的何謂“本地/被允許的發送者”,如果在relay-domains/access文件中列出的是域名, 則對發送者的IP地址先查找/etc/hosts文件(一般是如此,因為默認情況下對Linux服務器來說,查找DNS是 先查找/etc/hosts文件看是否有此IP地址對應的主機域名,如無再做反向DNS查找,如果能夠反向查找出來, 且查找出來的主機的域部分屬于上面兩個文件中列出的域名,再對該主機名做正向DNS查找出的IP地址 (主機的A記錄)與發送者IP地址相同,則允許relay郵件,這表明發送者屬于被允許的發送者。
也就是說,先看/etc/host.conf文件中的定義,一般是這樣: order hosts,bind multi on 其中的order行指明先查/etc/hosts,再找DNS數據庫。
現在舉個例子: 如下圖:
在內部LAN上有一臺windows PC,簡稱機器A,主機名為jephe.abc.com向一臺連接內部LAN和Internet的 一臺Sendmail SMTP服務器,簡稱機器B發送郵件,地址分別為192.168.11.12 和 192.168.11.5 , SMTP服務器外部地址為1.2.3.4 專線連接Internet.假定該公司域名為abc.com,機器B既是SMTP服務器也是DNS服務器,在此我們不考慮 防火墻的設置,即在內部LAN方向上所有的機器對于192.168.11.5內部網卡接口可以自由進入(允許所有 的通過192.168.11.5來自/去往192.168.11.0/24網段的TCP/IP包)。
如果在機器B的/etc/mail/relay-domains或者/etc/mail/access文件中有一行
abc.com 或者
abc.com relay
當A向B發送郵件時,若B能在它的/etc/hosts中找到一行如
192.168.11.12 jephe.abc.com
則允許A向B發送郵件,也就是接收從A發來的所有郵件,不管是去向哪里,因為這種情況符合第一種relay 規則,即發送者是被允許的發送者。此時不需要再查找DNS了,到此為止。郵件已經被接收。 如果在/etc/hosts中找不到與192.168.11.12(發送者IP地址)對應的行,則再查找DNS,對192.168.11.12做反向解析,如果能在反向DNS數據庫中找到對應192.168.11.12的主機記錄,且找出來的主機名再從DNS中正向查找若兩者一致,則允許relay,跟上面的情況一樣,屬于第一種被允許的relay規則。
如: 在DNS數據庫中找到192.168.11.12對應的DNS主機名為jephe.abc.com. 且又在@abc.com域的DNS中查找到對應于主機jephe的A類記錄地址為192.168.11.12,則滿足條件。 發送者屬于本地域,即被允許的發送者。
需要注意的是,必須正反向解析都需要能解析且一致才行,否則不允許relay,且會在/var/log/maillog中 記錄一行警告信息說"may be forged"(可能被偽造的)
但也并非所有記錄"may be forged"信息到/var/log/maillog文件中的情況都不允許relay,也有的情況下 雖然記錄了一條警告消息說"may be forged",但郵件仍然被接收了,是在下面的情況下:
例如:
在B機上/etc/mail/relay-domains中有下面兩行
abc.com
yahoo.com
[注:在此不再累述關于/etc/mail/access,因為前面已經說了在/etc/mail/relay-domains 中的一行如
abc.com
相當于/etc/mail/access中一行
abc.com relay
故在下文中不再累述,只提/etc/mail/relay-domains或者/etc/mail/access.]
若A向B發送郵件到 . 在B機的/etc/hosts中沒有相應的對應于192.168.11.12的記錄行。 且在B機(DNS服務器)上不能對IP地址192.168.11.12做反向查找,或者能做反向查找如查找出來為 jephe.abc.com但在正向查找(對abc.com域的主DNS數據庫中查找對應于主機jephe的A記錄)中沒有對應于 主機jephe的A記錄,或者有但找出來的IP地址不是192.168.11.12的話。 但是。接收者是,域yahoo.com在/etc/mail/relay-domains中。則還是允許relay。 但就會記錄警告消息may be forged到/var/log/maillog文件中,這種允許屬于第二種mail relay規則: 接收者是被允許的接收者。因此,只要是正反向DNS不一致總會記錄該警告消息到maillog中。 Sendmail不是單純地查看反向DNS解析,而后正反都要匹配,否則不relay,為什么如此?在后面我們會舉例說明。
由此我們引出
===什么是“本地的或者被允許的接收者”?
這個比較簡單,也就是接收者的email地址的域部分被列在/etc/mail/relay-domains或者/etc/mail/access 文件中,如上面的情況,發到@yahoo.com域的任何接收者都被允許接收。 注意一個范圍問題,如果發送者的域名(根據前面說的/etc/hosts或者正反向DNS一致的解析)被列在這兩個 文件中,則該發送者可以發送給任何人的郵件,都能被接收,但若不是這種情況,則只能發送到接收者的 email地址的域名在這兩個文件中的那些接收者。后者的情況接收對象的范圍要比前者小。
再引出另一個值得注意的問題,就是在文件relay-domains或者access中列出的域名既是針對發送者來說的,也是針對接收者而言的。對于發送者來說,檢查/etc/hosts,和正反向DNS,對于接收者而言,僅檢查接收者郵件地址的域部分。
還有,對于第二種mail relay規則,還多一種情況,即:
若接收者的域名部分被列在/etc/sendmail.cw中,則該接收者也屬于本地接收者。 (默認情況下,sendmail.cw是在/etc下,當然你也可以直接更改/etc/sendmail.cf中的sendmail.cw路徑) 然后檢查別名文件aliases (具體路徑靠你的定義)去擴展別名。
舉個例子:
假若公司abc.com在北京,上海和深圳有分公司,總部在北京,放一臺mail 服務器 在北京電信局,且其它各分公司,上海,北京,深圳都各自用專線連到當地的ISP。 所有外部進入發到的郵件都首先經過存放在北京電信局的mail.abc.com 郵件主機,在該郵件服務器上的/etc/sendmail.cw中有一行abc.com,則發到@abc.com的郵件 經過mail.abc.com時檢查別名文件aliases.
若有三行如下:
shuser:shuser@sh.abc.com
bjuser:bjuser@bj.abc.com
szuser:szuser@sz.abc.com
則發到和的郵件分別被別名為 和,然后分發到各分公司的Sendmail SMTP 郵件服務器。
注意:Sendmail檢查別名文件是不停地做檢查直到不能再做為止。具體是這樣的,象上面的文件中的 的三行,如果mail.abc.com收到一封信是,發現abc.com在sendmail.cw中,則接收該郵件 (為什么?因為接收者的email地址的域部分在sendmail.cw文件中則是本地接收者,relay規則第二點) 本地接收者則檢查別名文件,別名到,然后再把別名出來的email地名域部分,現在是 sh.abc.com,與sendmail.cw中的列出的域比較,若仍符合則繼續別名下去直到不能符合條件為止。
現在引出一個問題就是注意不要使得別名檢查循環下去,象上面的情況下,若加sh.abc.com到sendmail.cw中則出現別名檢查循環而出錯。 現在,經過別名之后如何再發送郵件呢?一般的發送郵件過程是這樣的:
若上面的服務器mail.abc.com收到一封發到的信,則先經過別名為后
1. Sendmail請求DNS給出主機sh.abc.com的CNAME記錄,如有,假若CNAME到shmail.abc.com,則再次請求 DNS查找看是否有shmail的CNAME記錄,直到沒有為止
2. 現在我們假定沒有任何CNAME記錄存在,仍然是.則Sendmail請求DNS給出sh.abc.com的 MX記錄,并得到一個這樣的記錄: sh MX sh.abc.com
3. Sendmail請求DNS給出sh.abc.com的A記錄(IP地址),返回值為1.2.3.4
4. 與1.2.3.4建立SMTP連接,然后發送郵件.。
前面說明了在/etc/mail/relay-domains或者/etc/mail/access中有域名的情況,若只有IP地址呢? 若
192.168.11.12 或者
192.168.11.12 relay
則直接就是單純地指發送者機器的IP地址. 可以是內部網段的保留地址
A類: 10.0.0.0--10.255.255.255 (10.0.0.0/8)
B類: 172.16.0.0-172.31.255.255 (172.16.0.0/12)
C類: 192.168.0.0--192.168.255.255 (192.168.0.0/16)
也可以是外別真實IP地址,如果如此,由直接允許一個撥號上來的真實IP地址relay郵件。
注意下面的兩個問題:
問題1: 公司對移動用戶的考慮.
在上面的圖二中的左邊部分實際就是圖一.以圖一為例.假若上海公司某員工不在公司里時,用筆記本撥 上海電信163上網,該員工不能簡單地設置發送郵件服務器為sh.abc.com(1.2.3.4).既使你的Outlook Express中設置的郵件地址為 .為什么?
因為Sendmail根本不檢查你的發送者郵件地址,而是你撥號上來的IP地址,但是你撥號上來的IP地址是動態 隨機分配的,而且由該IP地址反向解析出來的域名是ISP的域名,不是@abc.com ,實際上,在你撥號上來得到 一個IP地址后向sh.abc.com發送郵件時,建立到1.2.3.4的25端口的TCP連接時,Sendmail只知道你的IP地址, 然后在應用層收到數據后反向檢查DNS查找該IP地址對應的域名,但是它是ISP的域名.與你的組織毫無關系. 而且大多數ISP沒有為撥號IP地址段設置反向DNS查找記錄.
故對那些撥到ISP的公司員工,需要用公司的服務器作為發送郵件服務器的話,公司的郵件服務器沒法配置 使得僅僅允許公司的員工做它做為發送郵件服務器,沒法僅僅relay公司的在外的需撥到ISP的員工的信. 當前的解決辦法:
a. 公司設置自己的撥入服務器,僅僅公司員工可以用自己的用戶名和密碼撥入后發送郵件.
b. SMTP-After-POP3方法, 修改POP3程序,撥到ISP后先收一次自己的信,POP3檢測到收信者IP地址后 再動態地加這個IP地址到relay-domains或者access文件中,允許relay默認半個小時.
c. sendmail 8.10加入了SMTP用戶認證功能,發送郵件時提示輸入用戶名和密碼后允許relay.
問題2: 為什么必須正反向解析一致,為什么may be forged?
假若一黑客組織操縱了一個ISP機構,如果你的Sendmail僅僅檢查反向DNS解析出來的域名,如是你的公司域名 則允許relay mail的話,則被黑客集團操縱的ISP機構可以把其所擁有的IP地址段在自己的反向DNS數據庫中 設置反向解析出來的域為你的公司域名,然后你的sendmail不加區別地relay它.認為該ISP的用戶為自己的 本地/被允許的發送者,則后果可想而知.
上面介紹了Sendmail控制mail relay的幾個文件:
sendmail.cw
access
relay-domains
aliases
總結一下:
<< Sendmail 怎樣才會 relay your mail? >>
條件一: 發送者是被允許的發送者:
這要看文件/etc/mail/relay-domains或者/etc/mail/access兩文件中列出的域名和IP地址行, 對IP地址,就檢查發送者的IP地址是否允許,若不符合,且有域名在里面,則檢查/etc/hosts和正反向DNS 解析看是否有對應記錄,看反向解析出來的域名是否符合條件.
條件二: 本地/被允許的接收者. 同樣地是要看/etc/mail/relay-domains或者/etc/mail/access文件,看接收者郵件地址的域部分是否列在上述兩文件中,另外還多一項檢查文件就是sendmail.cw,列在該文件中的域名被認為是本地接收者. 檢查別名文件進行擴展.
其它情況都拒絕relay.
第二部分 sendmail 配置文件
為了解釋所有的配置文件,下面列出的M4源文件enable了所有的本書提到的配置文件如下:
=====================================
include(`../m4/cf.m4@#)
define(`confDEF_USER_ID@#,``8:12@#@#)
OSTYPE(`linux@#)
undefine(`UUCP_RELAY@#)
undefine(`BITNET_RELAY@#)
define(`confAUTO_REBUILD@#)
define(`confTO_CONNECT@#, `1m@#)
define(`confTRY_NULL_MX_LIST@#,true)
define(`confDONT_PROBE_INTERFACES@#,true)
define(`PROCMAIL_MAILER_PATH@#,`/usr/bin/procmail@#)
define(`ALIAS_FILE@#,`/etc/mail/aliases@#) define(`confPRIVACY_FLAGS@#,`authwarnings,needmailhelo,noexpn,novrfy@#)
FEATURE(`smrsh@#,`/usr/sbin/smrsh@#)
FEATURE(`mailertable@#,`hash -o /etc/mail/mailertable@#)
FEATURE(`virtusertable@#,`hash -o /etc/mail/virtusertable@#)
FEATURE(`domaintable@#,`hash -o /etc/mail/domaintable@#)
FEATURE(`genericstable@#,`hash -o /etc/mail/genericstable@#) GENERICS_DOMAIN_FILE(`/etc/mail/genericsdomain@#)
FEATURE(allmasquerade)
FEATURE(masquerade_envelope)
MASQUERADE_AS(mydomain.com)
FEATURE(redirect)
FEATURE(always_add_domain)
FEATURE(use_cw_file)
FEATURE(local_procmail)
MAILER(procmail)
MAILER(smtp)
FEATURE(access_db)
FEATURE(`blacklist_recipients@#)
========================================
所有的配置文件如下:
/etc/mail/mailertable
/etc/mail/domaintable
/etc/mail/genericstable
/etc/mail/genericsdomain
/etc/mail/virtusertable
我們以上面圖二中的最左邊的上海部分的網絡結構為例子來說明上面五個配置文件的適用規則和用法. 你不用在意我舉的例子中的網絡環境,不管舉什么例子,你只要搞懂了各個文件的在什么情況下適用就行. 重新畫圖如下:
/etc/mail/virtusertable用法
1.假如在sh.abc.com上/etc/sendmail.cw中有下面兩行:
public.sta.net.cn
sh.abc.com
且 /etc/mail/aliases中有下面兩行(假定/etc/sendmail.cf中路徑為/etc/mail/aliases)
admin:jwu@sh.abc.com
jwu:jwu@yahoo.com
則當從[myPC]發送郵件到 (outgoing server:sh.abc.com)時. 這封信最終被發往哪里去了?
===>答: 一般情況下,最終應被發送到信箱中.為什么?
因為經過了兩次別名檢查.最后yahoo.com不在/etc/sendmail.cw文件中,故不再檢查別名.直接發送到.
2.但不完全如此,在下面的情況下有例外(并非一定要做別名檢查到底的).
若在/etc/mail/virtusertable中有下面的行
@sh.abc.com ]
且 /etc/sendmail.cw 中有
sh.abc.com
且/etc/mail/aliases中有一行
jwu:
則發到的信是解析到還是]呢?
====>答: 解析到]
再來看個例子:
3.若還是上面的圖三, /etc/mail/virtusertable 中有
@sh.abc.com ]
/etc/sendmail.cw中有
sh.abc.com public.sta.net.cn
/etc/mail/aliases中有:
admin:jwu@sh.abc.com
jwu:wat@yahoo.com
則發到的信最終被交到哪里還是]?
===>答: ]
結論:
a.當接收者郵件地址的域部分在/etc/sendmail.cw中又在/etc/mail/virtusertable中時, 優先檢查virtusertable文件,應用該文件中的定義規則.(例子2)
b.要應用virtusertable規則,則接收者郵件地址的域部分必須在/etc/sendmail.cw文件中存在(例子2和3)
c.若接收者郵件地址的域部分在/etc/sendmail.cw文件中但不在virtusertable文件中有相應的定義則先只應用sendmail.cw中的定義去擴展別名,一旦擴展出的別名接收者郵件的域部分在virtusertable 中有定義行時則決不再別名下去,馬上運行virtusertable中的定義規則(例子3)
/etc/mail/mailertable用法
跨越DNS的MX的記錄,優先于MX記錄,可以與MX記錄指定的主機設定不同.
4.如果 /etc/mail/mailertable有
sh.abc.com relay:[192.168.11.1]
且 /etc/sendmail.cw中有
sh.abc.com
且/etc/mail/virtusertable中有
@sh.abc.com ]
則發到的信去向是哪里?
===>答: 運用virtusertable規則,轉變為.]后再發送到內部主機shmail
但a.如果沒有/etc/mail/virtusertable則查找本地別名文件
b.如果/etc/sendmail.cw也沒有或為空,則檢查/etc/mail/mailertable發送到
的信到內部主機shmail(192.168.11.1)
注:轉變為]再發送和把發往的信發到192.168.11.1主機是不一樣的 概念. 如果從郵件頭信息來看,則前者是received by shmail[192.168.11.1] for ] ;而后者是 received by shmail[192.168.11.] for
結論:
a. 優先級順序是virtusertable>sendmail.cw>mailertable>DNS MX記錄
b. mailertable的運用不需要接收者郵件地址的域部分在sendmail.cw中存在.
c. mailertable用來跨越DNS,優先于DNS的MX記錄.
/etc/mail/domaintable 用法
在任何情況下,domaintable都是最優先檢查的,作用有二:一主要是防止對自己公司的域名的誤打, 二是對自己公司新舊域名的替換。例子5如下:
5. 若/etc/mail/domaintable中有yahoo.com sh.abc.com
且/etc/sendmail.cw中有sh.abc.com
且/etc/mail/virtusertable中有@sh.abc.com ]
且/etc/mail/mailertable中有 sh.abc.com relay:[192.168.11.1]
則發到的信最后發到哪里去了。
===> 轉變為].
因為首先檢查domaintable文件,被進行域替換為.然后發現 sh.abc.com在/etc/sendmail.cw中且在virtusertable中,則優先檢查virtusertable中的規則轉變 郵件地址為]
假如上面的情況下,/etc/sendmail.cw中沒有sh.abc.com行,則被域替換后則去檢查mailertable中的規則 ,然后發送郵件地址到192.168.11.1服務器。
無論在哪里情況下(指mailertable還是virtusertable),最后收件人收到信后檢查郵件頭信息時,在 message header中的to:行都是. 你在message header中找不到任何的信息, 但在message envelope中的第一個received行中有的記錄。
結論:
1.無論什么時候,domaintable都是優先檢查,且沒有任何附加條件,無條件檢查,與sendmail.cw中是否有某 域名無關。
2.一般地用來做域名更換,假如你的公司@abc.com可能被員工誤打為abd.com,則放入下面的行到
/etc/mail/domaintable
abd.com abc.com
/etc/mail/genericstable and /etc/mail/genericsdomain 的用法
作用: 重寫發送者郵件地址,考慮下面的圖四:
考慮上面的情況,在公司LAN上有兩臺PC,A 和 B.在內部的郵件服務器C上的帳號分別為 和 ,通過PPP方式連入ISP,且兩個人在ISP 上各自有自己的郵件地址和.現在需要做到: 如果jwu要發送一個封件給tom,則希望被服務器C收到并直接在本地交付給B,且發送者 郵件地址為,但若jwu要發送一個信給外部互聯網上某用戶,則希望被對方 收到后的發送者郵件地址為,即在ISP上的郵件帳號。
====》則需要服務器C上的Sendmail能做到這一點。
這就要用到genericstable 和 genericsdomain.在下面的條件同時滿足時才能做到。 先考慮不管是發送給tom還是互聯網上某用戶都更改為的情況:
1. jwu在自己的PC A機上的Outlook Express中設置客戶端郵件地址為
2. 服務器C在/etc/mail/genericstable中設置下面的行
jwu
3. 服務器C在/etc/mail/genericsdomain中有下面的行
domain.com
上述三個條件同時滿足時,則jwu向C發信給任何人時,發送者郵件地址都重寫為
,同樣的情況應用于tom.
假如要求發送給本地用戶如tom時發送者郵件地址為 ,則沒有基于M4的解決方案,你需要找到/etc/sendmail.cf中的下面行刪除兩行。
再舉個例子,考慮下面的圖五
_______________[SMTP Server]_______DDN_Link_____Internet
(圖五)
在SMTP服務器上設置下面的:
/etc/mail/genericstable
jwu
/etc/mail/genericsdomain
test.com
如果該SMTP服務器從互聯網上收到一封發送者郵件地址為的信 ,則發送者郵件地址被重寫為,且message envelope中的return address也是
結論:
a.當發送者郵件地址的用戶部分和域部分被分別列在/etc/mail/genericstable和/etc/mail/ genericsdomain兩個文件中時,發送者郵件地址被重寫為/etc/mail/genericstable中被定義的郵件地址.
b.不管是從局域網發進來的還是從互聯網上進來的,只要是經過Sendmail服務器處理時就檢查規則
第三部分 Sendmail Masquerading
常用的幾個偽裝規則:
1.MASQUERADE_AS(yourdomain.com)
2.FEATURE(allmasquerade)
3.FEATURE(masquerade_envelope)
4.MASQUERADE_DOMAIN(mydomain.com)
5.FEATURE(masquerade_entire_domain)
MASQUERADE_AS(yourdomain.com) 指出其它所有的偽裝規則起作用后偽裝成哪個域名。 默認情況下僅偽裝from:行和reply to:行的郵件地址.
FEATURE(allmasquerade) 偽裝message header中的to:地址 FEATURE(masquerade_envelope) 偽裝message envelope部分的return address,當不能交付郵件并退回給發送者時會用到該地址.
問題一:偽裝在什么情況下發生?
當下列條件同時滿足時實現偽裝:
a. 客戶端Outlook Express中的地址的域部分在/etc/sendmail.cw文件中,即為本地域.
b. 客戶端直接發送郵件到sendmail服務器或者是sendmail服務器收到某個從互聯網進來的郵件 ,但from行指出的發送者郵件地址的域部分在/etc/sendmail.cw中,也就是只要經過了這臺Sendmail郵件服務器的話,
=====>然后偽裝發送者郵件地址的域部分為 MASQUERADE_AS(yourdomain.com) 中指定的域 yourdomain.com
舉個例子: 如果/etc/sendmail.cw中有一行
yahoo.com
且設置了MASQUERADE_AS(domain.com)
且發送者客戶端設置了郵件地址為 .則
經過了這臺裝有Sendmail的SMTP服務器時,發送者郵件地址被重寫成
如果接收者是,
且設置了FEATURE(allmasquerade),則
也重寫接收者地址為
再舉個例子: 如果MASQUERADE_AS(domain.com)被設置了,且設置了MASQUERADE_DOMAIN部分,則偽裝整個域中的所有主機。
例如設置了如下:
MASQUERADE_AS(masq.com)
MASQUERADE_DOMAIN(foo.org)
MASQUERADE_DOMAIN(bar.com)
FEATURE(masquerade_entire_domain)
則*foo.org和*bar.com都被轉化為masq.com,否則只有foo.org和bar.com被轉化為masq.com.
第四部分 常見問題處理方法
1. 我有一個用戶離開了公司,但仍然收到許多關于他/她的郵件,我怎么讓別人知道此人已經使用新的郵件地址.
===>加下面的行到M4宏配置文件中
" FEATURE(`redirect@#)dnl "
然后加下面的行到aliases文件中
olduser:
所有發到舊的郵件地址的人將收到一個新郵件地址的通知消息.
2.為什么我更改了上面各種配置文件后仍然不起作用?
在任意配置文件更改后都要運行makemap,例如:
#makemap hash mailertable < mailertable
但是對于sendmail.cw和relay-domains文件的更改要用下面的命令重啟Sendmail #killall -HUP sendmail 對aliases文件的更改要運行 #newaliases
3. 我按要求配置了所有的文件,發現我仍然不能發送郵件.為什么?
首先保證你的Sendmail后臺正在運行.用#ps -aux | grep sendmail檢查 若在運行,再檢查看你能否#telnet mailserver 25.若仍不能看能否#ping mailserver
注意:sendmail連接在TCP的端口25上進行,且TCP連接是雙向的,你要檢查路由表, 看能否對進來的一個TCP連接產生的回復包能正確地沿相反方向回復給發送者.
4.我怎么檢查一封郵件的發封過程?
在Sendmail郵件服務器上執行下面的命令.
# echo testing | /usr/sbin/sendmail -v