Sun Java System Messaging Server 6 2005Q4 管理指南

存取控制對映表旗標

表 17–2 顯示與 SEND_ACCESSORIG_SEND_ACCESSMAIL_ACCESSORIG_MAIL_ACCESSFROM_ACCESS 對映表相關的存取對映旗標。請注意,PORT_ACCESS 對映表支援一組略有不同的旗標 (請參閱表 17–3)。

帶有引數的旗標必須將其引數排序成讀取順序如下表所示。例如:

ORIG_SEND_ACCESS

  tcp_local|*|tcp_local|*     $N$D30|Relaying$ not$ allowed

在此情況下,正確的順序為延遲時間後接拒絕字串。請注意,旗標本身可以是任何順序。因此,以下項目具有完全相同的結果:


30|Relaying$ not$ allowed$D$N
$N30|Relaying$ not$ allowed$D
30|$N$DRelaying$ not$ allowed
表 17–2 存取對映旗標

旗標 

說明 

$A

如果已使用 SASL,則設定此旗標。請參閱檢查特殊旗標

$B

將郵件重新導向至 bitbucket。 

$D

如果請求延遲遞送收據,則設定此旗標 (在 FROM_ACCESS 中不可用)。請參閱檢查特殊旗標

$F

如果請求失敗遞送收據,則設定此旗標 (在 FROM_ACCESS 中不可用)。請參閱檢查特殊旗標

$H

將郵件保存為 .HELD 檔案。

$S

如果請求成功遞送收據,則設定此旗標 (在 FROM_ACCESS 中不可用)。請參閱檢查特殊旗標

$T

如果已使用 TLS,則設定此旗標。請參閱檢查特殊旗標

$U 

如果用於 ORIG_SEND_ACCESSSEND_ACCESSORIG_MAIL_ACCESSMAIL_ACCESS,請從對映的開頭獲得單個整數引數,並設定相應的 MM_DEBUG 值。另外,還可啟用通道層級的除錯 (如果可能)。結果是,您可根據項目例如來源位址、原始位址和收件者位址等啟用除錯。

$Y

允許存取。 

$V

對所有收件者執行強制捨棄。 

$Z

對所有收件者執行強制投棄。 

以引數讀取順序排序的帶有引數的旗標 + (請勿以字母順序排序此清單!)

$Uinteger

從對映的開頭取得單個整數引數,並設定相應的 MM_DEBUG。另外,還可啟用通道層級的除錯 (如果可能)。結果是,您現在可根據諸如來源位址、原始位址和收件者位址等項目啟用除錯。 

$Jaddress

* 以指定的 address 來替代原始訊息封 From: 位址。

$Kaddress

* ++ 以指定address 替代原始 Sender: 具有指定 address 的位址。

$Iuser|identifier

檢查特定使用者的群組 ID。 

$<string

+++ 如果探測符合,則將 string 傳送至系統記錄 (UNIX,user.notice 工具和嚴重性) 或事件記錄 (NT)。

$>string

+++ 如果存取遭到拒絕,則將 string 傳送至系統記錄 (UNIX,user.notice 工具和嚴重性) 或事件記錄 (NT)。

$Ddelay

延遲回應的 delay 間隔為百分之一秒;正值會導致將延遲強加到作業事件中的每個指令上;負值會導致將延遲僅強加到位址移交(FROM_ACCESS 表格的指令 SMTP MAIL FROM:;其他表格的 SMTP RCPT TO: 指令) 上。 

$Ttag

tag 為前綴。

$Aheader

將標頭行 header 增加至郵件。

$Gconversion_tag

如果用於 ORIG_SEND_ACCESSSEND_ACCESSORIG_MAIL_ACCESSMAIL_ACCESS,則其會從對映結果中讀取一個值,並將該值視為一組適用於目前收件者的轉換標記。如果與 FROM_ACCESS 配合使用,則轉換標記適用於所有收件者。在從對映讀取的引數序列中,$G 位於 $A (標頭位址) 之後。請參閱郵件轉換標記

$Sx,y,z

* 可以從對映結果中讀取附加的 | 分隔引數。此引數由一到三個整數值組成,這些整數值用逗號分隔。第一個值為作業事件建立新的 blocklimit 最小值,第二個值建立新的 recipientlimit 最小值,而第三個值建立新的 recipientcutoff 最小值。在已讀取所有擷取引數後,從對映結果中讀取該引數。請參閱指定絕對郵件大小限制

$Xerror-code

如果拒絕郵件,則發出指定的 error-code 延伸 SMTP 錯誤代碼。

$,spamadjust_arg

可讓您執行存取對映表中的 spamadjust 篩選作業。該引數的形式與引數的形式相同。另請注意,其中有些對映會針對每位收件者進行套用。任何已完成的 spamadjust 作業都會套用至所有的收件者。

$Nstring

使用選擇性的錯誤文字 string 拒絕存取。

$Fstring

$N string 的同義詞;即,使用選擇性的錯誤文字 string 拒絕存取。

* 僅適用於 FROM_ACCESS 表格。

+ 若要使用多個帶有引數的旗標,請使用垂直分隔線字元 | 分隔引數,並按照此表格中列出的次序放置引數。

++ 為使 $K 旗標在 FROM_ACCESS 對映表中生效,來源通道中必須包含 authrewrite 關鍵字。

+++ 處理問題寄件者時,使用 $D 旗標防止拒絕服務攻擊是一個好方法。特別是,在任何拒絕存取的 $> 項目或 $< 項目中使用 $D 也是不錯的方法。

SEND_ACCESS 和 ORIG_SEND_ACCESS 表格

可以使用 SEND_ACCESSORIG_SEND_ACCESS 對映表來控制傳送和/或接收郵件的人員。存取檢查可使用郵件的訊息封 From: 位址和訊息封 To: 位址,並且可瞭解郵件已進入哪個通道以及將嘗試從哪個通道發出。

如果存在 SEND_ACCESSORIG_SEND_ACCESS 對映表,則對於經由 MTA 傳送的每封郵件的每個收件者來說,MTA 將使用以下形式 (請注意垂直分隔線字元 | 的用法) 的字串掃描該表格:

src-channel|from-address|dst-channel|to-address

其中,src-channel 是郵件在其中形成佇列的通道;from-address 是郵件創建者的位址;dst-channel 是郵件將要被佇列至的通道; to-address 是郵件將要傳送到的位址。在這四個欄位的任何一個欄位中使用星號將使該欄位符合適合的任一通道或位址。

此處位址為訊息封位址;即,訊息封 From: 位址和訊息封 To: 位址。如果是 SEND_ACCESS,系統將在執行重寫、別名擴充等作業後檢查訊息封 To: 位址;如果是 ORIG_SEND_ACCESS,系統將在執行重寫之後、別名擴充之前檢查最初指定的訊息封 To: 位址。

如果搜尋字串符合式樣 (即表格中項目的左側),則系統將檢查對映的結果輸出。如果輸出包含旗標 $Y 或 $y,則允許該特殊 To: 位址形成佇列。如果輸出包含旗標 $N、$n、$F 或 $f 中的任何一個,則系統將拒絕對該特定位址形成佇列。在拒絕的情況下,對映輸出中會提供選擇性的拒絕文字。該字串將包含在 MTA 發出的拒絕錯誤中。如果未輸出任何字串 (除 $N、$n、$F 或 $f 旗標之外),則將使用預設拒絕文字。如需有關附加旗標的說明,請參閱存取控制對映表旗標

將 MTA 選項 ACCESS_ORCPT 設定為 1 可將由垂直分隔線分隔的附加欄位增加至傳送至 SEND_ACCESSORIG_SEND_ACCESSMAIL_ACCESSORIG_MAIL_ACCESS 對映表的探測值 (包含原始收件者 ORCPT 位址)。如果郵件沒有 ORCPT 位址,則使用原始的未修改 RCPT TO: 位址來替代。預設為 0,探測值在結尾處:

src-channel|from-address|dst-channel|to-address|ORCPT_address

在以下範例中,UNIX 使用者代理程式 (如 mail、Pine 等) 傳送的郵件來自本機 (l) 通道,傳送至網際網路的郵件通過某種類型的 TCP/IP 通道發出。假設系統不允許本機使用者 (postmaster 除外) 向網際網路傳送郵件,但是允許接收來自網際網路的郵件。則以下範例中所示的 SEND_ACCESS 對映表是強制執行此限制的一種可能方法。在此對映表中,假設本地主機名稱為 sesta.com。在通道名稱「tcp_*」中,使用萬用字元以便匹配任何可能的 TCP/IP 通道名稱 (例如 tcp_local)。


範例 17–1 SEND_ACCESS 對映表


SEND_ACCESS

   *|postmaster@sesta.com|*|*    $Y
   *|*|*|postmaster@sesta.com    $Y
   l|*@sesta.com|tcp_*|*         $NInternet$ postings$ are$ not$ permitted

            

在拒絕訊息中使用美元符號來引用訊息中的空格。如果沒有這些美元符號,拒絕將提前結束並且螢幕上將僅顯示「網際網路」而不是「不允許進行網際網路發佈」。請注意,此範例忽略了其他可能的「本機」發佈來源,例如從基於 PC 的郵件系統或從 POP 或 IMAP 用戶端發佈。


備註 –

嘗試傳送郵件的用戶端決定是否確實要對嘗試傳送郵件的使用者顯示 MTA 拒絕錯誤文字。如果使用 SEND_ACCESS 拒絕內送 SMTP 郵件,則 MTA 僅發出包含選擇性拒絕文字的 SMTP 拒絕代碼;SMTP 傳送用戶端負責使用該資訊建構要傳回給原始寄件者的退回郵件。


MAIL_ACCESS 和 ORIG_MAIL_ACCESS 對映表

MAIL_ACCESS 對映表是 SEND_ACCESSPORT_ACCESS 對映表的超集合。它將 SEND_ACCESS 的通道和位址資訊與 PORT_ACCESS 的 IP 位址和連接埠號碼資訊結合在一起。同樣地,ORIG_MAIL_ACCESS 對映表是 ORIG_SEND_ACCESSPORT_ACCESS 對映表的超集合。MAIL_ACCESS 探測字串的格式為:

port-access-probe-info|app-info|submit-type|send_access-probe-info

同樣地,ORIG_MAIL_ACCESS 的探測字串格式為:

port-access-probe-info|app-info|submit-type|orig_send_access-probe-info

如果是內送 SMTP 郵件,則此處的 port-access-probe-infoPORT_ACCESS 對映表探測中通常包含的所有資訊組成,否則為空。app-info 包含 HELO/EHLO SMTP 指令中聲明的系統名稱。此名稱顯示在字串末尾,並以斜線與字串的其餘部分 (通常為「SMTP」) 分隔。聲明的系統名稱在封鎖某些蠕蟲和病毒方面非常有用。submit-type 可以是 MAIL、SEND、SAML 或 SOML 之一,具體取決於郵件提交至 Messaging Server 的方式。 通常,此值為 MAIL,意味著作為郵件提交;在向 SMTP 伺服器提交廣播請求 (或組合的廣播郵件請求) 的情況下可能會出現 SEND、SAML 或 SOML。而對於 MAIL_ACCESS 對映,send-access-probe-infoSEND_ACCESS 對映表探測中通常包含的所有資訊組成。同樣對於 ORIG_MAIL_ACCESS 對映,orig-send-access-probe-infoORIG_SEND_ACCESS 對映表探測中通常包含的所有資訊組成。

將 MTA 選項 ACCESS_ORCPT 設定為 1 可將由垂直分隔線分隔的附加欄位會增加至傳送至 SEND_ACCESSORIG_SEND_ACCESSMAIL_ACCESSORIG_MAIL_ACCESS 對映表的探測值 (包含原始收件者 [ORCPT] 位址)。如果郵件沒有 ORCPT 位址,則使用原始的未修改的 RCPT TO: 位址來替代。預設為 0,探測值在結尾處。範例:


port-access-probe-info|app-info|submit-type|send_access-probe-info|ORCPT_address

將內送的TCP/IP 連線資訊包含在通道和位址資訊所在的同一對映表中,可讓您更 方便地實作某些類型的控制,如強制允許哪些訊息封 From: 位址出現在來自特定 IP 位址的郵件中。這適用於限制偽造電子郵件,或鼓勵使用者正確配置其 POP 和 IMAP 用戶端的 From: 位址。例如,如果某站點要允許 From: 位址 vip@siroe.com 僅顯示在來自 IP 位址 1.2.3.1 和 1.2.3.2 的郵件中,且確保來自子網路 1.2.0.0 任何系統中的郵件訊息封 From: 位址均來自 siroe.com,則可以使用如下範例中所示的 MAIL_ACCESS 對映表。


範例 17–2 MAIL_ACCESS 對映表


MAIL_ACCESS
 
! Entries for vip's two systems
!
  TCP|*|25|1.2.3.1|*|SMTP|MAIL|tcp_*|vip@siroe.com|*|*  $Y
  TCP|*|25|1.2.3.2|*|SMTP|MAIL|tcp_*|vip@siroe.com|*|*  $Y
!
! Disallow attempts to use vip's From: address from other
! systems
!
  TCP|*|25|*|*|SMTP|MAIL|tcp_*|vip@siroe.com|*|*  \
      $N500$ Not$ authorized$ to$ use$ this$ From:$ address
!
! Allow sending from within our subnet with siroe.com From:
! addresses
!
  TCP|*|25|1.2.*.*|*|SMTP|MAIL|tcp_*|*@siroe.com|*|*  $Y
!
! Allow notifications through
!
  TCP|*|25|1.2.*.*|*|SMTP|MAIL|tcp_*||*|*  $Y
!
! Block sending from within our subnet with non-siroe.com
! addresses
!
  TCP|*|25|1.2.*.*|*|SMTP|MAIL|tcp_*|*|*|*  \
     $NOnly$ siroe.com$ From:$ addresses$ authorized

FROM_ACCESS 對映表

FROM_ACCESS 對映表可用於控制發送郵件的人員,和/或使用經過認證的位址置換不確定的 From: 位址。

FROM_ACCESS 對映表的輸入探測字串類似於 MAIL_ACCESS 對映表的輸入探測字串,前者去掉了目標通道和位址,增加了經認證的寄件者資訊 (如果有)。因此,如果存在 FROM_ACCESS 對映表,則對每一次嘗試進行的郵件提交來說,Messaging Server 將使用以下形式 (請注意垂直分隔線字元 | 的用法) 的字串搜尋該表格:


port-access-probe-info|app-info|submit-type|src-channel|from-address|auth-from

如果是內送 SMTP 郵件,則此處的 port-access-probe-infoPORT_ACCESS 對映表探測中通常包含的所有資訊組成,否則為空。app-info 包含 HELO/EHLO SMTP 指令中聲明的系統名稱。此名稱顯示在字串末尾,並以斜線與字串的其餘部分 (通常為「SMTP」) 分隔。聲明的系統名稱在封鎖某些蠕蟲和病毒方面非常有用。submit-type 可以是 MAIL、SEND、SAML 或 SOML 之一,具體取決於郵件提交至 MTA 的方式。 通常,此值為 MAIL,意味著作為郵件提交;在向 SMTP 伺服器提交廣播請求 (或組合的廣播郵件請求) 的情況下可能會出現 SEND、SAML 或 SOML。src-channel 是創建郵件 (即郵件在其中形成佇列) 的通道;from-address 是不確定的郵件創建者位址;auth-from 是經認證的郵件創件者位址 (如果有此資訊),如果無認證過的資訊,則此項為空。

如果探測字串符合式樣 (即表格中項目的左側),則系統將檢查對映的結果輸出。如果輸出包含旗標 $Y 或 $y,則允許該特殊 To: 位址形成佇列。如果輸出包含旗標 $N、$n、$F 或 $f 中的任何一個,則系統將拒絕對該特定位址形成佇列。在拒絕的情況下,對映輸出中會提供選擇性的拒絕文字。該字串將包含在 Messaging Server 發出的拒絕錯誤中。如果未輸出任何字串 (除 $N、$n、$F 或 $f 旗標之外),則將使用預設拒絕文字。如需有關附加旗標的說明,請參閱存取控制對映表旗標

除了決定是否允許根據創建者提交郵件外,FROM_ACCESS 還可用於透過 $J 旗標變更訊息封 From: 位址,或者透過 $K 旗標修改 authrewrite 通道關鍵字的效果 (在接受的郵件上增加 Sender: 標頭位址)。例如,此對映表可用於使原始訊息封 From: 位址僅被經認證的位址替代。


範例 17–3 FROM_ACCESS 對映表


FROM_ACCESS

  *|SMTP|*|tcp_auth|*|       $Y
  *|SMTP|*|tcp_auth|*|*      $Y$J$3
            

在將 authrewrite 設定為非零值的某些來源通道上使用 FROM_ACCESS 對映表修改效果時,如果要原樣使用經認證的位址,則無需使用 FROM_ACCESS

例如,如果在 tcp_local 通道上設定了 authrewrite 2,則無需使用以下 FROM_ACCESS 對映表,因為僅使用 authrewrite 足以取得此效果 (按原樣增加經認證的位址):


FROM_ACCESS

   *|SMTP|*|tcp_auth|*|     $Y
   *|SMTP|*|tcp_auth|*|*    $Y$K$3
         

但是,使用 FROM_ACCESS 的真正目的在於允許進行更加複雜和細微的改變,如以下範例中所示。如果要將 Sender: 標頭行 (顯示經 SMTP AUTH 認證的提交者位址) 增加至內送郵件,則可以僅使用 authrewrite 關鍵字。但是,假設僅當經 SMTP AUTH 認證的提交者位址與訊息封 From: 位址不同時,才將此 Sender: 標頭行增加至內送郵件 (即,如果位址相符,則無需增加 Sender: 標頭行),並進一步假設您希望 SMTP AUTH 和訊息封 From: 位址將不會僅僅因為訊息封 From: 位址包含選擇性子位址資訊而被視為不同。


FROM_ACCESS
 
! If no authenticated address is available, do nothing
  *|SMTP|*|tcp_auth|*|              $Y
! If authenticated address matches envelope From:, do nothing
  *|SMTP|*|tcp_auth|*|$2*           $Y
! If authenticated address matches envelope From: sans
! subaddress, do nothing
   *|SMTP|*|tcp_auth|*+*@*|$2*@$4*    $Y
! Fall though to...
! ...authenticated address present, but didn't match, so force
! Sender: header
  *|SMTP|*|tcp_auth|*|*              $Y$K$3
         

PORT_ACCESS 對映表

派送程式可以根據位址和連接埠號碼有選擇地接受或拒絕送進的連線。派送程式啟動時將查詢名為 PORT_ACCESS 的對映表。如果存在,派送程式將以下面的格式格式化連線資訊:

TCP|server-address|server-port|client-address|client-port

派送程式將嘗試符合所有的 PORT_ACCESS 對映項目。如果對映結果包含 $N 或 $F,則連線將被立即關閉。任何其他對映結果均表示連線將被接受。$N 或 $F 的後面可能會帶有拒絕訊息。如果帶有拒絕訊息,系統將在關閉連線之前將訊息沿連線傳送回去。請注意,在將字串沿連線傳送回去之前,系統會為其附加 CRLF 終止符號。


備註 –

MMP 不使用 PORT_ACCESS 對映表。如果您要拒絕來自某些 IP 位址的 SMTP 連線,並且您使用的是 MMP,則必須使用 TCPAccess 選項。請參閱使用對映表之使用 MMP 配置郵件存取控制 SMTP 連線,使用 INTERNAL_IP 對映表 (請參閱允許向外部站點進行 SMTP 轉送)。


如果對映探測符合,則後跟選擇性字串的旗標 $< 會使 Messaging Server 將字串傳送至系統記錄 (UNIX) 或事件記錄 (NT)。如果存取被拒絕,則後跟選擇性字串的旗標 $> 會使 Messaging Server 將字串傳送至系統記錄 (UNIX) 或事件記錄 (NT)。如果設定 LOG_CONNECTION MTA 選項的第 1 位並設定 $N 旗標以拒絕連線,則再指定 $T 旗標將導致「T」項目被寫入連線記錄。如果設定 LOG_CONNECTION MTA 選項的第 4 位,則網站提供的文字可能會包含在 LOG_CONNECTION 項目中,以便包含在「C」連線記錄項目中。若要指定此類文字,請在項目的右邊加入兩個垂直分隔線字元,後面隨附所需的文字。表 17–3 列出了可用的旗標。

表 17–3 PORT_ACCESS 對映旗標

旗標 

說明 

$Y 

允許存取。 

帶有引數的旗標,按照引數的讀取次序排序+ 

$< string 

如果探測符合,則將字串傳送至系統記錄 (UNIX) 或事件記錄 (NT)。 

$> string 

如果存取被拒絕,則將字串傳送至系統記錄 (UNIX) 或事件記錄 (NT)。 

$N 字串 

使用選擇性的錯誤文字字串拒絕存取 

$F 字串 

$N 字串的同義詞,即使用選擇性的錯誤文字字串拒絕存取 

$T 文字 

如果設定 LOG_CONNECTION MTA 選項的第 1 位元 (值 2),並設定 $N 旗標以拒絕連線,則 $T 將導致「T」項目寫入至連線記錄。T 記錄項目將包含整個對映結果字串 ($N 及其字串)。

+若要使用帶有引數的多個旗標,請使用垂直分隔線字元 | 分隔引數,並按照此表格中列出的次序放置引數。 

例如,除單獨拒絕的不帶說明文字的特定主機之外,以下對映將僅接受來自單一網路的 SMTP 連線 (連接埠 25,即一般 SMTP 連接埠):


PORT_ACCESS

  TCP|*|25|192.123.10.70|*  $N500
  TCP|*|25|192.123.10.*|*   $Y
  TCP|*|25|*|*              $N500$ Bzzzt$ thank$ you$ for$ playing.

         

請注意,在變更 PORT_ACCESS 對映表之後,需要重新啟動派送程式,以便派送程式能偵測到這些變更。(如果您要使用已編譯的 MTA 配置,則將首先需要重新編譯您的配置,以將變更併入已編譯的配置中。)

PORT_ACCESS 對映表專用於執行基於 IP 的拒絕。若要在電子郵件位址層級執行更通用的控制,使用 SEND_ACCESSMAIL_ACCESS 對映表可能更適合。

限制指定 IP 位址至 MTA 的連線

透過使用 Port Access 控制表中的共用程式庫 conn_throttle.so,可限制特定 IP 位址連線 MTA 的頻率。根據特定 IP 位址限制連線對於防止拒絕服務攻擊中使用的過度連線非常有用。

conn_throttle.soPORT_ACCESS 對映表中使用的共用程式庫,可限制特定 IP 位址過於頻繁連線 MTA。所有配置選項均被指定為連線 throttle 共用程式庫的參數,如下所示:

$[msg_svr_base/lib/conn_throttle.so, throttle,IP-address ,max-rate]

IP-address 是遠端系統的小數點十進制位址。max-rate 是為此 IP 位址強制實作的每分鐘連線的最大頻率。

常式名稱 throttle_p 可能會取代 throttle,用於判定常式的版本。如果進行過多次數的連線,則 throttle_p 將拒絕連線。如果最大頻率是 100,並且在上一分鐘內已有 250 次連線嘗試,則系統不但會在該分鐘內的前 100 次連線後封鎖遠端站點,而且還會在下一分鐘內繼續封鎖這些站點。換言之,每分鐘過後,系統將從嘗試連線的總數中減去最大頻率數,之後只要連線總數大於最大頻率,便會再次封鎖遠端系統。

如果指定的 IP 位址未超出每分鐘的最大連線頻率,則共用程式庫呼叫將失敗。

如果超出頻率,則呼叫將成功,但不會傳回任何內容。這可以通過 $C/$E 組合完成,如以下範例所示:

PORT_ACCESS 
  TCP|*|25|*|* \
$C$[msg_svr_base/lib/conn_throttle.so,throttle,$1,10] \
$N421$ Connection$ not$ accepted$ at$ this$ time$E

其中

$C 將使對映程序繼續啟動下一個表格項目;將此項目的輸出字串用做對映程序的新輸入字串。

$[msg_svr_base/lib/conn_throttle.so,throttle,$1,10] 是程式庫呼叫,其中,throttle 是程式庫常式,$1 是伺服器 IP 位址,10 是每分鐘連線的臨界值。

$N421$ Connection$ not$ accepted$ at$ this$ time 將拒絕存取並傳回 421 SMTP 代碼 (完成瞬間拒絕) 和訊息「此次連線未被接受」。

$E 立即結束對映程序。它將使用此項目的輸出字串作為對映程序的最終結果。