InfraGuard

ブロックリスト・評判

AI / IDS の自動防御が積み上げる blacklist_info(/24 レンジ単位のブロック)を物語り、運用者がレンジのブロック・解除・再ブロックを直接行えるようにします。

概要 — 何をする画面か

ブロックリスト・評判(/security/blocklist)は、Kitsune ML と Suricata IDS が自動でブロックしてきた脅威レンジの経緯を物語り、運用者が手動でブロック(追加)・解除・再ブロックを行える制御コンソールを提供します。

「ブロック」は常に /24 レンジ全体を対象とします。単一 IP を入力しても先頭 3 オクテットだけが保持され、x.y.z.0/24 に正規化されます。誤検知は ホワイトリスト で免除するものであり、ブロック範囲を狭めることでは免除できません。

利用シーン

画面構成

上部 KPI

summary() が 30 秒キャッシュ(infr:sec:blocklist:summary)付きで算出します。

KPI 意味 算出方法
有効なブロック 現在強制中の /24 レンジ COUNT(*) WHERE is_use=1
保護対象アドレス数(サブタイトル) 有効なブロックが覆うアドレス数 active × 256(/24 ≈ 256)
本日のブロック 直近 24 時間の新規ブロック is_use=1 AND created_at >= today 00:00
自動防御率 AI/IDS が自動で処理した割合 (kitsune + suricata) / active × 100
監視中の国 有効レンジに含まれる国の異なり数 COUNT(DISTINCT country) WHERE is_use=1
解除済み 現在解除中(再ブロック待ち) COUNT(*) WHERE is_use=0

自動防御エンジンの寄与

有効なブロックをソースタグ別に分解し、シェアバーとタイルで表示します。分類は reason の LIKE マッチによります。

エンジン マッチ規則 意味
Kitsune ML reason LIKE '%Kitsune%' アンサンブルオートエンコーダによる異常検知
Suricata IDS reason LIKE '%Suricata%' スキャン / プロトコル違反による自動ブロック
手動 reason LIKE '%Manual%' または %수동% 運用者が指定したブロック
その他 上記のいずれにも一致しないもの active − (kitsune+suricata+manual)、下限は 0

脅威の出身地

blockByCountry(12) が有効レンジを集計して上位 12 か国(GROUP BY country ORDER BY COUNT DESC)を求め、国旗の絵文字とランクバーで表示します。バーをクリックすると、リストがその国で絞り込まれます。

最近の防御活動フィード

blockFeed(16) はステータスを問わず最新 16 行(ORDER BY created_at DESC, id DESC)を 4×4 のグリッドで表示します。いま何が捕まったのかをライブに感じ取るためのものです。

絞り込み可能なブロックリスト

1 ページあたり 40 カード(PER_PAGE=40、ORDER BY created_at DESC, id DESC)。各カードにはレンジ · 国 · ソースバッジ · 証跡チップ(挙動 + 代表値)· ブロック日時 · ステータスが表示され、行アクションとして [評判] · [詳細] · [解除]/[再ブロック] が並びます。レンジが登録済みの内部ネットワークであれば Internal バッジが付き、評判ボタンは非表示になります(internal_scope.js)。

フィルター:

使い方

根拠の読み方

各カードの証跡チップは reason 文字列から最も重みの大きいルールセットを 1 つだけ選び、ラベルと代表値として表示します。srct のヒューリスティック分類のうち、次の重み順で最上位のものが選ばれます。

分類マーカー 重み behavior キー ラベル 代表値(詳細)
[A2:...] 6 brute 管理画面への総当たり hits=N → N hits
[A:...] 5 scanner 脆弱パスのスキャン hits=N → N hits
[D:...] 4 ja3 JA3 ボットネットの指紋 ja3=N → ja3×N
[B:...] 3 bot_ua 悪質なボットのアクセス hits=N → N hits
[C:...] 2 err_flood 4xx エラーの多発 err_rate=NN%
[E:...] 1 short_scan TCP ポートスキャン port=N または N scan

ソースが Kitsune の場合、または reason に score= が含まれる場合は、どの分類よりも優先して ml_anomaly(機械学習による異常) に分類され、top=(誤差が最大の成分)と score が表示されます。手動・その他は manual / auto にフォールバックします。

reason から追加で抽出される事実: score=、top=、port=、short_scan_sessions=、bytes=。reason の例:

[Kitsune v2.2] anomaly top=TLS score=0.83
[Suricata Auto-Block] [A:URL] hits=42 port=443
[Manual] repeated login abuse (uid=5)

手動ブロックの追加

  1. リストヘッダーの [手動ブロック] で追加モーダルが開きます(脅威 や IP 調査から遷移した場合は、?add=203.0.113.10 により IP が事前入力されます)。
  2. IP または CIDR を入力します。単一 IP は /24 に拡張されます(203.0.113.10 → 203.0.113.0/24)。
  3. 任意で理由(160 文字以内)を入力し、[ブロック] をクリックします。
  4. サーバー側の挙動:
    • 入力は cclassCidr() により x.y.z.0/24 に正規化されます(IPv4 以外は invalid_cidr として拒否)。
    • 完全な IPv4 であれば、国は ip_info_loop から補完されます(なければ既存値 / Unknown)。
    • (server_index=0, c_class) が既に存在する場合は is_use=1 に更新されます(再有効化)。存在しない場合は新しい行が挿入されます。理由は "[Manual] <note> (uid=N)" となります。
    • サマリーキャッシュが破棄され、更新後のリストとサマリーが返されます。

ブロックは直ちに blacklist_info に反映されますが、実際のファイアウォールでの DROP は、各ホストの sync_black デーモンが次に ipset/iptables へ同期したときに適用されます。そのバッチが動いていなければ、ファイアウォールではブロックが強制されません。

解除 / 再ブロック

ポーリング

security-blocklist.js は 30 秒ごとに /security/blocklist/live を呼び出し、サマリーと現在のページを更新します。

データソース

項目 ソース 備考
ブロック台帳 blacklist_info(legacy_glory) id, server_index, c_class, country, reason, is_use, created_at, updated_at · UNIQUE(server_index, c_class)
国の補完 ip_info_loop(legacy_glory) 追加時、完全な IPv4 に対する国の参照
内部ネットワーク判定 SecurityScope::internalMatchers() 登録済みインスタンスの IP + 運用ポリシーのホワイトリスト → Internal バッジ
ファイアウォールでの強制 sync_black デーモン blacklist_info → ipset/iptables の DROP
自動ブロックの供給元 kts_tx.js · srct_tx.js reason のソースタグと証跡文字列を書き込む
監査ログ infr_audit_log sec.block_add · sec.block_release · sec.block_readd

読み取りのバックボーンは App\Repositories\SecurityRepository で、語り口の組み立てと書き込みは App\Services\Security\BlocklistService が統括します。認証情報は config('database.connections.legacy_glory') からのみ取得し、ハードコードは一切しません。

アクセス権限

これらは破壊的なセキュリティ操作であるため、UI は実行前に確認(step-up)ダイアログを表示します。誤って広いレンジをブロックしないよう、CIDR を二重に確認してください。

トラブルシューティングと FAQ

関連項目

차단 목록 · 평판
차단 목록 · 평판