本節包含以下小節:
Messaging Server 支援逐個服務地針對其 IMAP、POP 和 HTTP 服務進行複雜存取控制,使您可以對哪些用戶端可以存取您的伺服器進行廣泛且精細的控制。
如果您要為大型企業或網際網路服務供應者管理郵件傳送服務,這些功能可協助您將垃圾電子郵件發送者和 DNS 仿冒者排除在系統之外,從而提高網路的一般安全性。如需有關具體控制垃圾郵件的資訊,請參閱第 17 章, 郵件篩選和存取控制
如果透過 IP 位址控制存取對您的企業而言並不重要,則無需建立本節所述的任何篩選器。如果您需要的只是最小的存取控制,請參閱允許大多數,以取得有關設定說明。
Messaging Server 存取控制工具是一個程式,它偵聽時所在的連接埠與其所服務的 TCP 常駐程式的連接埠相同;它使用存取篩選器來驗證用戶端身份,並在用戶端通過篩選程序的情況下授予用戶端對該常駐程式的存取權。
作為其處理過程的組成部分,Messaging Server TCP 用戶端存取控制系統執行 (必要時) 以下通訊端端點位址分析:
兩個端點的反向 DNS 查詢 (以執行基於名稱的存取控制)
兩個端點的正向 DNS 查詢 (以偵測 DNS 仿冒情況)
Identd 回呼 (以檢查用戶端主機是否知曉該用戶端上的使用者)
系統會將此資訊與稱為篩選器的存取控制敘述進行比較,以決定是授予存取還是拒絕存取。對於每項服務,都各有一組允許篩選器和拒絕篩選器來控制存取。允許篩選器明確授予存取權;拒絕篩選器明確禁止存取。
當用戶端請求存取某服務時,存取控制系統會將該用戶端的位址或名稱資訊與該服務的每個篩選器依次比較,其會使用以下準則︰
在第一次符合時停止搜尋。由於允許篩選器在拒絕篩選器之前處理,因此允許篩選器優先。
如果用戶端資訊符合該服務的允許篩選器,則授予存取權。
如果用戶端資訊符合該服務的拒絕篩選器,則拒絕存取。
如果不符合任何允許或拒絕篩選器,則授予存取,但有允許篩選器而沒有拒絕篩選器的情況除外,在這種情況下,沒有相符項目意味著存取會被拒絕。
此處描述的篩選器語法非常靈活,足以讓您以簡單易懂的方式實作許多不同類型的存取控制策略。雖然幾乎單獨使用允許篩選器或拒絕篩選器就能實作大多數策略,但您可以使用允許篩選器和拒絕篩選器的任意組合。
以下幾節對篩選器語法進行了詳細描述並提供了使用範例。為服務建立存取篩選器小節提供建立存取篩選器的程序。
篩選器敘述包含服務資訊和用戶端資訊。服務資訊可包括服務名稱、主機名稱和主機位址。用戶端資訊可包括主機名稱、主機位址和使用者名稱。伺服器和用戶端資訊均可包括萬用字元名稱或式樣。
最簡單的篩選器形式為:
service: hostSpec
其中,service 是服務的名稱 (例如 smtp、pop、imap 或 http),而 hostSpec 是主機名稱、IP 位址或萬用字元名稱或表示用戶端請求存取的式樣。處理篩選器時,如果搜尋存取的用戶端符合 client,則允許或拒絕 (取決於此篩選器的類型) 存取 service 指定的服務。以下是一些範例:
imap: roberts.newyork.siroe.com pop: ALL http: ALL
如果這些是允許篩選器,則第一個篩選器將授予主機 roberts.newyork.siroe.com 對 IMAP 服務的存取,第二個篩選器和第三個篩選器將分別授予所有用戶端對 POP 和 HTTP 服務的存取。如果它們是拒絕篩選器,則將拒絕那些用戶端存取這些服務。(如需有關如 ALL 之類萬用字元名稱的說明,請參閱萬用字元名稱。)
篩選器中的伺服器或用戶端資訊可能比這裡要複雜一些,在那種情況下較一般的篩選器形式為:
serviceSpec: clientSpec
其中,serviceSpec 可以是 service 或 service@hostSpec,而 clientSpec 可以是 hostSpec 或 user@hostSpec。user 是與搜尋存取的用戶端主機關聯的使用者名稱 (或萬用字元名稱)。以下是兩個範例:
pop@mailServer1.siroe.com: ALL imap: srashad@xyz.europe.siroe.com
如果這些是拒絕篩選器,則第一個篩選器將拒絕所有用戶端存取主機 mailServer1.siroe.com 上的 SMTP 服務。第二個篩選器將拒絕主機 xyz.europe.siroe.com 上的使用者 srashad 存取 IMAP 服務。(如需有關何時使用這些延伸的伺服器和用戶端規格的更多資訊,請參閱伺服器主機規格和用戶端使用者名稱規格)
最後,最一般的篩選器形式如下:
serviceList: clientList
其中,serviceList 由一個或多個 serviceSpec 項目組成,而 clientList 由一個或多個 clientSpec 項目組成。serviceList 和 clientList 中的單個項目由空格和/或逗號分隔。
在這種情況下,處理篩選器時,如果搜尋存取的用戶端符合 clientList 中任一 clientSpec 項目,則允許或拒絕 (取決於此篩選器的類型) 存取 serviceList 中指定的所有服務。以下是一個範例:
pop, imap, http: .europe.siroe.com .newyork.siroe.com
如果這是允許篩選器,它將授予網域 europe.siroe.com 和 newyork.siroe.com 中的所有用戶端對 POP、IMAP 和 HTTP 服務的存取。如需有關使用前導小數點號或其他式樣指定網域或子網路的資訊,請參閱萬用字元式樣。
您還可以使用以下語法:
「+」或「-」serviceList: *$next_rule
+ (允許篩選器) 表示要將常駐程式清單服務授予用戶端清單。
- (拒絕篩選器) 表示要拒絕用戶端清單存取這些服務。
* (萬用字元篩選器) 允許所有用戶端使用這些服務。
$ 分隔這些規則。
以下範例可在所有用戶端上啟用多種服務。
+imap,pop,http:*
以下範例顯示多個規則,但每個規則被簡化為只具有一個服務名稱並且用戶端清單使用萬用字元。(這是在 LDIF 檔案中指定存取控制時最常用的方法。)
+imap:ALL$+pop:ALL$+http:ALL
如何對某使用者禁止所有服務的範例如下:
-imap:*$-pop:*$-http:*
您可以使用以下萬用字元名稱來表示服務名稱、主機名稱或位址或使用者名稱:
表 19–3 服務篩選器的萬用字元名稱
萬用字元名稱 |
詳細說明 |
---|---|
ALL、* |
通用萬用字元。符合所有名稱。 |
LOCAL |
符合任何本地主機 (名稱中不包含點字元的主機)。但是,如果您的安裝僅使用標準名稱,則即使本地主機名稱中也會包含點,因此不符合此萬用字元。 |
UNKNOWN |
符合名稱未知的所有使用者,或是名稱或位址未知的所有主機。 請謹慎使用此萬用字元名稱: 主機名稱可能會由於暫時的 DNS 伺服器問題而不可用,在這種情況下,使用 UNKNOWN 的所有篩選器會比對所有用戶端主機。 當軟體無法識別與其通訊的網路類型時,網路位址不可用,在這種情況下,使用 UNKNOWN 的所有篩選器會比對該網路上的所有用戶端主機。 |
KNOWN |
比對名稱已知的所有使用者,或是名稱和位址已知的所有主機。 請謹慎使用此萬用字元名稱: 主機名稱可能會由於暫時的 DNS 伺服器問題而不可用,在這種情況下,使用 KNOWN 的所有篩選器與所有用戶端主機均不相符。 當軟體無法識別與其通訊的網路類型時,網路位址不可用,在這種情況下,使用 KNOWN 的所有篩選器與該網路上的所有用戶端主機均不相符。 |
DNSSPOOFER |
符合 DNS 名稱與 IP 位址不相符的所有主機。 |
您可以在服務或用戶端位址中使用以下式樣:
以小數點號字元 (.) 開頭的字串。如果主機名稱中最後一部分符合指定式樣,則該主機名稱符合。例如,萬用字元式樣 .siroe.com 比對網域 siroe.com 中的所有主機。
以小數點號字元 (.) 結束的字串。如果主機位址中第一個數字欄位符合指定式樣,則該主機位址符合。例如,萬用字元式樣 123.45. 符合子網路 123.45.0.0 中的所有主機的位址。
形式為 n.n.n.n/m.m.m.m 的字串。此萬用字元式樣會被解譯為 net/mask 對。如果 net 等於位址和 mask 的位元 AND,則比對主機位址。例如,式樣 123.45.67.0/255.255.255.128 比對從 123.45.67.0 到 123.45.67.127 範圍內的所有位址。
存取控制系統支援單一運算子。當 serviceList 或 clientList 中具有多個項目時,您可以使用 EXCEPT 運算子建立比對名稱或式樣的異常。例如,表示式:
list1 EXCEPT list2
表示比對與 list1 相符的所有項目,除非它還與 list2 相符。
以下是一個範例:
ALL: ALL EXCEPT isserver.siroe.com
如果這是拒絕篩選器,它會拒絕所有主機電腦上的所有用戶端存取所有服務,但主機電腦 isserver.siroe.com 上的用戶端除外。
EXCEPT 陳述式可以嵌套。表示式:
list1 EXCEPT list2 EXCEPT list3
相當於:
list1 EXCEPT (list2 EXCEPT list3)
您可以透過在 serviceSpec 項目中包含伺服器主機名稱或位址資訊,來進一步識別篩選器中被請求的特定服務。在這種情況下,項目形式為:
service@hostSpec
當您的 Messaging Server 主機機器針對多個網際網路位址以不同的網際網路主機名稱進行設定時,您可能要使用此功能。如果您是服務供應者,則可使用此功能在單一伺服器實例上以不同的存取控制規則託管多個網域。
對於支援 RFC 1413 中所述之 identd 服務的用戶端主機電腦而言,您可以透過在篩選器的 clientSpec 項目中包含用戶端的使用者名稱來進一步識別請求服務的特定用戶端。在這種情況下,項目形式為:
user@hostSpec
其中,user 是由用戶端的 identd 服務 (或萬用字元名稱) 傳回的使用者名稱。
在篩選器中指定用戶端使用者名稱非常有用,但請記住以下警告:
identd 服務並非認證服務;如果用戶端系統已受到危害,則不能信任該服務傳回的用戶端使用者名稱。一般來說,請勿使用特定的使用者名稱;應僅使用萬用字元名稱 ALL、KNOWN 或 UNKNOWN。
大多數現代用戶端機器都不支援 identd,因此其在現代部署中沒有多少附加值。我們正考量從未來版本中移除 identd 支援,因此,如果此功能對於您的站點有價值,請通知 Sun Java System。
使用者名稱查詢需要時間;針對所有使用者執行查詢可能會使不支援 identd 的用戶端存取變慢。有選擇性的使用者名稱查詢可緩解這一問題。例如,如下規則:
serviceList: @xyzcorp.com ALL@ALL
比對網域 xyzcorp.com 中的使用者,而無需執行使用者名稱查詢,但會對所有其他系統執行使用者名稱查詢。
使用者名稱查詢功能在某些情況下可協助您防範來自用戶端主機上未經授權的使用者的侵入。例如,在某些 TCP/IP 實作中,侵入者可能會使用 rsh (遠端 shell 服務) 冒充信任的用戶端主機。如果用戶端主機支援 ident 服務,您可以使用使用者名稱查詢來偵測此類侵入。
本節中的範例顯示控制存取的多種方法。在研究這些範例時,請記住允許篩選器在拒絕篩選器之前處理,找到符合項目時搜尋終止,如果根本找不到符合項目則授予存取權。
此處列出的範例使用主機和網域名稱,而不是 IP 位址。請記住,您可以在篩選器中納入位址和網路遮罩資訊,這可以在名稱服務失敗的情況下提高可靠性。
在這種情況下,依預設拒絕存取。只有明確授權的主機才被允許存取。
預設策略 (無存取權) 透過單一、普通的拒絕檔案實作:
ALL: ALL
此篩選器拒絕所有未被允許篩選器明確授予存取權的用戶端存取所有服務。而允許篩選器可能類似於:
ALL: LOCAL @netgroup1 ALL: .siroe.com EXCEPT externalserver.siroe.com
第一個規則允許本機網域中的所有主機 (即,主機名稱中不帶小數點號的所有主機) 和群組 netgroup1 的成員進行存取。第二個規則使用前導小數點號萬用字元式樣來允許 siroe.com 網域中的所有主機進行存取,但主機 externalserver.siroe.com 除外。
在這種情況下,依預設授予存取權。只有明確指定的主機才被拒絕存取。
在此預設策略 (授予存取權) 中,不需要使用允許篩選器。不想要的用戶端在拒絕篩選器中明確列出,如下所示:
ALL: externalserver.siroe1.com, .siroe.asia.com ALL EXCEPT pop: contractor.siroe1.com, .siroe.com
第一個篩選器拒絕特定主機和特定網域存取所有服務。第二個篩選器僅允許特定主機和特定網域存取 POP。
您可以在篩選器中使用 DNSSPOOFER 萬用字元名稱來偵測主機名稱仿冒。當您指定 DNSSPOOFER 時,存取控制系統會執行正向或反向 DNS 查詢,以驗證該用戶端提供的主機名稱是否符合其實際 IP 位址。以下是拒絕篩選器的一個範例:
ALL: DNSSPOOFER
此篩選器拒絕所有 IP 位址與 DNS 主機名稱不相符的遠端主機存取所有服務。
如果您的郵件傳送安裝使用虛擬網域,其中單一伺服器實例與多個 IP 位址和網域名稱相關聯,您可以透過允許篩選器和拒絕篩選器的組合來控制存取每個虛擬網域。例如,您可以使用如下所示的允許篩選器:
ALL@msgServer.siroe1.com: @.siroe1.com ALL@msgServer.siroe2.com: @.siroe2.com ...
與如下所示的拒絕篩選器進行組合:
ALL: ALL
每個允許篩選器僅允許 domain N 中的主機連線至 IP 位址回應 msgServer.siroeN.com 的服務。所有其他連線均被拒絕。
您可以為 IMAP、POP 或 HTTP 服務建立允許篩選器和拒絕篩選器。還可以為 SMTP 服務建立這些篩選器,但是由於它們僅適用於經認證的 SMTP 階段作業,因此價值不大。請參閱第 17 章, 郵件篩選和存取控制
在主控台中開啟您要建立存取篩選器的 Messaging Server。
按一下 [配置] 標籤。
在左側窗格中開啟 [服務] 資料夾,然後選取 [服務] 資料夾下的 [IMAP]、[POP] 或 [HTTP]。
在右側窗格中按一下 [存取] 標籤。
此標籤中的允許和拒絕欄位會顯示該服務的現有允許篩選器和拒絕篩選器。欄位中的每一行表示一個篩選器。您可以對任一欄位指定以下動作:
按一下 [新增] 以建立新篩選器。[「允許」篩選] 視窗或 [「拒絕」篩選] 視窗開啟;在視窗中輸入新篩選器的文字,然後按一下 [確定]。
選取篩選器,然後按一下 [編輯] 以修改該篩選器。[「允許」篩選] 視窗或 [「拒絕」篩選] 視窗開啟;在視窗中編輯顯示的篩選器之文字,然後按一下 [確定]。
選取某個篩選器,然後按一下 [刪除] 以移除該篩選器。
請注意,如果需要重新排列允許篩選器或拒絕篩選器的次序,可以透過執行一系列 [刪除] 或 [新增] 動作達到目的。
如需篩選器語法規格和各種範例,請參閱篩選器語法和篩選器範例。
指令行
您也可以在指令行中指定存取篩選器和拒絕篩選器,如下所示:
為服務建立或編輯存取篩選器:
configutil -o service.service.domainallowed -v filter |
其中,service 為 pop、imap 或 http,而 filter 遵循篩選器語法中說明的語法規則。
為服務建立或編輯拒絕篩選器:
configutil -o service.service.domainnotallowed -v filter |
其中,service 為 pop、imap 或 http,而 filter 遵循篩選器語法中說明的語法規則。
任何儲存管理員均可向任何服務進行代理認證。(如需有關儲存管理員的更多資訊,請參閱指定管理員使用儲存的權限。) 如果用戶端主機經由代理伺服器認證存取篩選器授予存取權限,則認證至服務。
代理認證允許入口網站之類的其他服務認證使用者,並將認證憑證傳送至 HTTP 登入服務。例如,假定入口網站提供數種服務,其中一種是 Messenger Express 基於 Web 的電子郵件。透過 HTTP 代理認證功能,一般使用者僅需要向入口網站服務認證一次,無需再次認證即可存取他們的電子郵件。入口網站必須配置登入伺服器,以作為用戶端和服務之間的介面。為協助配置 Messenger Express 認證的登入伺服器,Sun Java System 為 Messenger Express 提供了認證 SDK。
本節描述如何建立允許篩選器以允許根據 IP 位址進行 HTTP 代理認證。本節不描述如何設定登入伺服器或如何使用 Messenger Express 認證 SDK。如需有關為 Messenger Express 設定登入伺服器以及使用認證 SDK 的更多資訊,請與您的 Sun Java System 代表連絡。
在主控台中開啟您要建立存取篩選器的 Messaging Server。
按一下 [配置] 標籤。
在左側窗格中開啟 [服務] 資料夾,然後選取 [服務] 資料夾下的 [HTTP]。
在右側窗格中按一下 [代理程式] 標籤。
此標籤中的 [允許] 欄位會顯示代理認證的現有允許篩選器。
若要建立新篩選器,請按一下 [新增]。
[「允許」篩選] 視窗開啟。在視窗中輸入新篩選器的文字,然後按一下 [確定]。
若要編輯現有篩選器,請選取該篩選器,然後按一下 [編輯]。
[「允許」篩選] 視窗開啟。在視窗中編輯顯示的篩選器之文字,然後按一下 [確定]。
若要刪除某個現有篩選器,請從 [允許] 欄位中選取該篩選器,然後按一下 [刪除]。
完成對代理程式標籤的變更後,請按一下 [儲存]。
如需有關允許篩選器語法的更多資訊,請參閱篩選器語法。
指令行
您也可以在指令行中為 HTTP 服務代理認證指定存取篩選器,如下所示:
configutil -o service.service.proxydomainallowed -v filter |
其中,filter 遵循篩選器語法中說明的語法規則。