Skip to content

Flapping Detect 設定 ​

Flapping検出は、EMQXへの過剰な接続試行を識別します。EMQX 6.3.0以降では、クライアントID、ユーザー名、および送信元IPアドレスごとに独立したポリシーを設定できます。

検出の次元 ​

flapping_detect 設定には以下の次元があります。各次元はデフォルトで無効になっています。

設定項目検出キー動作内容
by_clientidクライアントID同じクライアントIDからの接続試行をカウントします。
by_usernameユーザー名同じユーザー名を共有するクライアントからの接続試行をカウントします。ユーザー名なしの接続はカウントされません。
by_peerhost送信元IPアドレス同じ送信元IPアドレスからの接続試行をカウントします。

次元は検出設定が構成されると有効になります。無効にするには該当次元を none に設定してください。3つの次元は任意の組み合わせで有効化でき、有効な各次元は独立してカウントされます。

各次元で設定可能な検出パラメータは以下の通りです。

フィールド説明デフォルト
window_timeEMQXが接続試行をカウントする時間ウィンドウ1m
max_countwindow_time内での接続試行回数の閾値。超えるとBANが発動されます。15
ban_time対象のクライアントID、ユーザー名、または送信元IPアドレスをBANする期間5m

クライアントID、ユーザー名、または送信元IPアドレスが閾値に達すると、EMQXは該当識別子またはアドレスに対して一時的なBANエントリを作成します。新たな該当接続試行は認証前に拒否され、既存の接続は維持されます。BANエントリは自動的に期限切れとなり、/banned REST APIから確認や削除が可能です。

検出カウンターは各ノードで個別に管理されます。EMQXは異なるノードで処理された接続試行を統合しません。ノードがflappingを検出すると、そのBANエントリはクラスター全体にレプリケートされます。

設定例 ​

以下のHOCON例では、クライアントIDと送信元IPアドレスに異なるポリシーを設定し、ユーザー名による検出は無効化しています。

hocon
flapping_detect {
  by_clientid {
    window_time = 1m
    max_count = 15
    ban_time = 5m
  }

  by_username = none

  by_peerhost {
    window_time = 30s
    max_count = 100
    ban_time = 10m
  }
}

これらの設定は個別のゾーンにも適用可能です。ゾーン内の部分的な次元ポリシーは、未指定のフィールドを対応するグローバル次元ポリシーから継承します。

EMQX 6.3.0以前に作成された設定との互換性 ​

EMQX 6.3.0以降、以下のフラットフィールドは非推奨となりました。

  • flapping_detect.enable
  • flapping_detect.window_time
  • flapping_detect.max_count
  • flapping_detect.ban_time

これらのフィールドは後方互換のため引き続き受け付けます。enable = true の場合、EMQXはフラットポリシーフィールドを by_clientid にマッピングします。enable = false または明示的な enable = true がない場合は、by_clientid を none に設定します。

非推奨フィールドはクライアントID検出のみに影響し、by_username と by_peerhost は明示的に設定しない限り none のままです。

設定に by_clientid と非推奨のフラットフィールドが両方含まれる場合は、by_clientid の設定が優先されます。by_clientid が none の場合も同様です。

EMQXは高度なカスタマイズのための追加設定オプションを提供しています。詳細はEMQX Enterprise 設定マニュアルをご参照ください。

また、EMQXダッシュボードの アクセス制御 -> Flapping Detect からもflapping検出を設定可能です。ダッシュボードでの手順はFlapping Detectをご覧ください。