Sun Java System Messaging Server 6.3 管理指南

19.4 使用 Metermaid 限制過多的 IP 位址連線 — 範例

此範例會使用 MeterMaid 將 IP 位址節流在每分鐘 10 個連線。如需參照,對映檔案中等效的 conn_throttle.so 設定如下所示:


PORT_ACCESS
   *|*|*|*|*  $C$|INTERNAL_IP;$3|$Y$E
   *|*|*|*|*  $C$[/opt/SUNWmsgsr/lib/conn_throttle.so,throttle,$3,10]\
$N421$ Connection$ declined$ at$ this$ time$E
   *          $YEXTERNAL

PORT_ACCESS 對映表會實作 conn_throttle.so,以便針對非內部連線將連線限制在不超過每分鐘 10 個連線。

兩種技術之間基本的差異在於 MeterMaid 不是在對映表中直接配置速率限制進行節流的詳細資訊,而是針對這些設定使用 configutil 參數。下面對此範例進行說明。

  1. 定義其中一個系統成為 MeterMaid 伺服器主機。

    在此系統上,設定下列 configutil 參數:


    local.metermaid.enable -v TRUE 

    設定認證密碼,用來驗證用戶端和 MeterMaid 伺服器之間的通訊:


    configutil -o metermaid.config.secret -v password
    
  2. 定義節流表。

    MeterMaid 的節流運作方式是由定義操作特性的已命名節流表使用方式所決定。若要定義節流速率為每分鐘 10 個連線的節流表,請設定下列參數:


    configutil -o metermaid.table.ext_throttle.data_type -v ipv4
    configutil -o metermaid.table.ext_throttle.quota -v 10

    ext_throttle 是節流表的名稱。ipv4 表示資料類型「網際網路協定第 4 版」位址。10 為配額 (連線限制)。

  3. 在 MeterMaid 系統上,啟動 MeterMaid。


    # start-msg metermaid
  4. 在 MTA 將使用 MeterMaid 進行節流的系統上,指定 MeterMaid 主機和密碼

    以下為必要項目:


    configutil -o metermaid.config.secret -v MeterMaid_Password
    configutil -o metermaid.config.serverhost -v name_or_ipaddress_of_MetermaidHost
    
  5. 設定 MeterMaid PORT_ACCESS 表。

    此表類似於等效的 conn_throttle.so 設定:


    PORT_ACCESS
    
       *|*|*|*|*  $C$|INTERNAL_IP;$3|$Y$E
       *|*|*|*|*  $C$:A$[/opt/SUNWmsgsr/lib/check_metermaid.so,throttle,\
    ext_throttle,$3] $N421$ Connection$ declined$ at$ this$ time$E
       *          $YEXTERNAL

    第一行會檢查嘗試進行連線的 IP 位址是否為內部連線。如果是,則允許連線。第二行會透過 MeterMaid 執行 IP 位址,如果連線過於頻繁,則會拒絕連線。第三行會允許其他任何連線通過,但是會標記為 EXTERNAL

    請注意,這個對於 check_metermaid.so 的呼叫相當類似於對於 conn_throttle.so 的呼叫。check_metermaid.so 的功能相同。throttle 及其引數指示表格名稱,是使用 metermaid.table.tablename 和所需檢查的 IP 位址 ($3) 所配置。和 conn_throttle.so 一樣,此功能會在到達限制 (如 metermaid.table.ext_throttle.quota 中所指定) 時傳回 success。這可允許處理剩餘的對映項目行,如此會傳送訊息 (421 SMTP 代碼 (暫時性的訊息處理錯誤) 和此次連線未被接受訊息) 至遠端 SMTP 用戶端,並通知派送程序關閉連線。

    另請注意 $:A 會確保只有在從派送程序呼叫時才處理這一行。如果沒有這一項,對於 check_metermaid.so 的呼叫也會發生在探測 PORT_ACCESS 對映表的 tcp_smtp_server 程序環境中。這會造成 MeterMaid 計算兩次各個內送連線。

這是設定 MeterMaid 成為 conn_throttle.so 替代的基本配置。如需這些主題的資訊,請參閱10.3.2 對映作業18.3.4 PORT_ACCESS 對映表

19.4.1 其他有用的 MeterMaid 選項

另外有兩個配置選項在某些狀況下相當有用。conn_throttle.so 共用程式庫也具有 throttle_p 功能,在連線超過連續 60 秒的一段長時間時,連線會受到限制。MeterMaid 也提供這個相同的運作方式,方法是在 MeterMaid 伺服器系統上配置下列選項:


configutil -o metermaid.table.ext_throttle.options -v penalize

這會變更 ext_throttle 表的運作方式,因此,在連線嘗試超過針對 metermaid.table.ext_throttle.quota 所設定的值時,連線會受到限制。

另一個選項與接收大量連線的系統相關聯。由於 MeterMaid 能夠追蹤整個分散式 MTA 環境的連線,因此,對於整個 MTA 環境的流量而言,MeterMaid 內部記憶體資料庫中保留的連線數量限制可能不足。預設值是每個表格 1000 個項目,但是,如果您預期整個 MTA 環境每分鐘會超過 1000 個連線,則您可以透過配置選項增加這個數目:


configutil -o metermaid.table.ext_throttle.max_entries -v max_entries

請注意,如果在 60 秒內達到 max_entries,MeterMaid 也會自動捨棄最舊且最不常使用的項目。因此,最常連線的系統會保留在 MeterMaid 的表格中進行計數,以保持足夠的資訊可提供有效率的節流。