Flapping Detect
Flapping検出は、設定された時間ウィンドウ内で繰り返されるCONNECTパケットを識別します。EMQXを過剰な接続試行から保護するために、設定された閾値に達したクライアントID、ユーザー名、または送信元IPアドレスを一時的に禁止します。
EMQX 6.3.0以降では、Flapping検出は以下の任意の組み合わせの次元を独立して評価できます。
- クライアントID:同一クライアントIDからの接続試行をカウントします。
- ユーザー名:同一ユーザー名を共有するクライアントからの接続試行をカウントします。ユーザー名がない接続はこの次元ではカウントされません。
- 送信元IPアドレス:同一送信元IPアドレスからの接続試行をカウントします。
有効にした各次元は、それぞれ独自の検出時間ウィンドウ、接続試行数の閾値、および禁止期間を持ちます。クライアントID、ユーザー名、または送信元IPアドレスが閾値に達すると、EMQXは認証前に該当する識別子またはアドレスに一致する新しい接続試行を拒否します。既存の接続は切断されません。
Flapping検出はデフォルトで無効です。EMQXダッシュボードまたは設定ファイルで設定できます。
ダッシュボードでのFlapping Detect設定
- ダッシュボードで、アクセス制御 -> Flapping Detect をクリックします。
- 1つ以上の検出次元を有効にします:
- クライアントIDによる検出
- ユーザー名による検出
- 送信元IPアドレスによる検出
- 有効にした各次元について以下の設定を行います:
- 検出時間ウィンドウ:EMQXが接続試行をカウントする時間ウィンドウ。デフォルトは
1分です。 - 最大接続試行数:検出時間ウィンドウ内で禁止をトリガーする接続試行数。デフォルトは
15です。 - 禁止期間:クライアントID、ユーザー名、または送信元IPアドレスを禁止する期間。デフォルトは
5分です。
- 検出時間ウィンドウ:EMQXが接続試行をカウントする時間ウィンドウ。デフォルトは
- 変更を保存をクリックします。

Flapping検出によって作成された禁止エントリは自動的に期限切れになります。これらはBanned Clientsページや/banned REST APIで確認または削除できます。
設定ファイルでのFlapping Detect設定
以下のHOCON例は、クライアントIDとユーザー名による検出を有効にし、送信元IPアドレスによる検出を無効にしています。
flapping_detect {
by_clientid {
window_time = 1m
max_count = 15
ban_time = 5m
}
by_username {
window_time = 1m
max_count = 15
ban_time = 5m
}
by_peerhost = none
}検出設定が構成されている次元は有効になります。無効にする場合は、その次元をnoneに設定してください。これらの設定は個別のゾーンにも適用可能です。
EMQX 6.3.0以降、フラットなflapping_detect.enable、flapping_detect.window_time、flapping_detect.max_count、flapping_detect.ban_timeフィールドは非推奨となりました。EMQXは引き続きこれらのフラットフィールドを受け入れ、flapping_detect.by_clientidにマッピングするため、6.3.0以前に作成された設定との互換性は維持されます。非推奨フィールドはクライアントID検出にのみ影響し、by_usernameおよびby_peerhostは明示的に設定しない限りnoneのままです。完全な設定構造と優先順位のルールについては、Flapping Detect Configurationを参照してください。