概要 — 何をする画面か
ブロックリスト・評判(/security/blocklist)は、Kitsune ML と Suricata IDS が自動でブロックしてきた脅威レンジの経緯を物語り、運用者が手動でブロック(追加)・解除・再ブロックを行える制御コンソールを提供します。
- ソーステーブルは
legacy_glory接続上のblacklist_info(約 8,000〜9,000 行)です。ブロックの単位は単一 IP ではなく /24 レンジ(c_class、例203.0.113.0/24) です。 - このテーブルには検知コレクター(
kts_tx.js·srct_tx.js)とこの運用者 UI が書き込みます。sync_blackデーモン(sync_black.mjs)がこれを読み取り、各ホスト上で ipset/iptables の DROP ルールとしてブロックを強制します。つまりここでの追加・解除はコントロールプレーンであり、実際のパケット破棄は sync_black が適用します。 reasonフィールドのソースタグ([Kitsune ...]·[Suricata Auto-Block]·[Manual] ...)と根拠となる数値(score · port · ja3 · hits …)は、「なぜ検出されたか」を人が読める形のラベルに解析されます(解析処理はロケール非依存です)。
「ブロック」は常に /24 レンジ全体を対象とします。単一 IP を入力しても先頭 3 オクテットだけが保持され、
x.y.z.0/24に正規化されます。誤検知は ホワイトリスト で免除するものであり、ブロック範囲を狭めることでは免除できません。
利用シーン
- 自動防御が現在何をどれだけブロックしているか(有効件数 · エンジン別の寄与 · 出身国)を一目で把握したいとき。
- 脅威、検知、または IP 調査ポップアップで見つけた悪性 IP を手動でブロックしたいとき(
?add=によるディープリンクで値が事前入力されます)。 - 誤ってブロックしたレンジを解除したいとき、あるいは活動を再開した解除済みレンジを再ブロックしたいとき。
- ブロック済みレンジの代表 IP を AbuseIPDB 評判 と突き合わせたいとき。
画面構成
上部 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)。
フィルター:
- ステータス —
active(既定)·released·all - 要因 —
kitsune·suricata·manual(空 = すべて) - 国 — 完全一致(64 文字以内)
- 検索(q) — CIDR の前方一致のみ(正規表現
^[0-9.]{0,20}$、例211.→c_class LIKE '211.%')
使い方
根拠の読み方
各カードの証跡チップは 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)
手動ブロックの追加
- リストヘッダーの [手動ブロック] で追加モーダルが開きます(脅威 や IP 調査から遷移した場合は、
?add=203.0.113.10により IP が事前入力されます)。 - IP または CIDR を入力します。単一 IP は
/24に拡張されます(203.0.113.10→203.0.113.0/24)。 - 任意で理由(160 文字以内)を入力し、[ブロック] をクリックします。
- サーバー側の挙動:
- 入力は
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 へ同期したときに適用されます。そのバッチが動いていなければ、ファイアウォールではブロックが強制されません。
解除 / 再ブロック
- [解除] は
is_use=0を設定し、sync_black が ipset から削除します(行自体は残ります)。確認ダイアログの後に実行されます。 - [再ブロック] は解除済みレンジを
is_use=1に戻します。 - どちらも対象行が存在しなければ
not_foundを返します。
ポーリング
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') からのみ取得し、ハードコードは一切しません。
アクセス権限
- ページの閲覧 — セキュリティの役割領域に属している必要があります(sitemap の
min_req=2)。運用中のレベル体系では staff(5)と admin(10)がセキュリティ画面を閲覧でき、demo(1)はセキュリティのスコープ外です。 - 書き込み(追加・解除・再ブロック) — サーバーが
infr_user_level >= 2(canWrite)を強制します。これを下回る場合は403 forbiddenを返します。したがって demo(1)は書き込めず、staff と admin は書き込めます。 - すべての書き込みは
InfrAuditLogに記録され、監査ログ から追跡できます(実行者、対象 CIDR、再有効化フラグなどが meta に入ります)。
これらは破壊的なセキュリティ操作であるため、UI は実行前に確認(step-up)ダイアログを表示します。誤って広いレンジをブロックしないよう、CIDR を二重に確認してください。
トラブルシューティングと FAQ
- ブロックしたのに攻撃が続く。 この画面は台帳を更新するだけです。対象ホストで
sync_blackが動作しているか、ipset が実際に更新されたかを確認してください。またブロックは /24 単位なので、別のレンジからの攻撃にはそれぞれ個別のブロックが必要です。 - [手動ブロック] が 403 を返す。 ログインレベルが 2 未満です。staff / admin のアカウントで再試行してください(RBAC レベル を参照)。
- 入力が「有効な IP / CIDR ではない」として拒否される。 受け付けられるのは
a.b.c/a.b.c.d/a.b.c.d/nnのみです。IPv6 とホスト名には対応していません。 - 国が Unknown と表示される。 その IP に対する
ip_info_loopの補完情報がないか、CIDR だけを入力した場合です。完全な IPv4 を追加すると国が埋まることがあります。 - KPI やリストが変わらない。 サマリーは 30 秒キャッシュされます。書き込み直後には破棄されますが、コレクター由来の変化は最大 30 秒遅れることがあります。
- 正常なレンジを誤ってブロックした。 直ちに解除し、再ブロックの誤検知が繰り返される場合は ホワイトリスト に追加して、srct_tx がブロック直前に免除するようにしてください。
関連項目
- 脅威 — 悪性 IP を
?add=でここに引き渡してブロックする - ホワイトリスト — ブロックの免除(誤検知の防止、有効期限つき)
- 検知と JA3 — Kitsune / srct / JA3 検知の仕組み
- 自動ブロック — スケジュール実行される自動ブロックのパイプライン
- IP 評判(AbuseIPDB) — 代表 IP を突き合わせる
- 監査ログ — ブロック / 解除の履歴を追跡する
