unmask

docs

JA4 の取得方法、LB / CDN 設定、対応 distro、FAQ。

hunt 画面は「聞こうと思った質問」にしか答えてくれません。advisor は直近のイベントを 代わりに読んで、BAN を検討すべき相手を根拠つきで一覧します。

自動でブロックすることはありません。各行はあくまで提案で、採用するのも却下するのも あなたです。採用ボタンは通常の BAN 経路に確認ダイアログを挟んだものです。後述のモデル連携を 有効にしても、この点は変わりません。

候補になる条件

自分のアクセスログから計算する 4 つのシグナルです。ここにモデルは関与しません — 何も設定しなくても、すべての install で動きます。

シグナル 意味
challenge_hammering challenge を何度も配信されているのに JavaScript を一度も実行していない — ページ読み込みも PoW も通過証も無し。ブラウザではこうなりません。
scanner_paths スキャナーしか要求しないパスを繰り返し叩いている: .envwp-config.git/configcgi-bin など。
hosting_network ホスティング / クラウド事業者のアドレス。それ自体は単にサーバーというだけですが、ブラウザの UA を名乗っているなら矛盾なので加点されます。ただし 1 つのアドレスから UA も指紋も複数種返ってきている場合は、企業ゲートウェイや VPN 出口、クラウドブラウザなど複数の利用者を通すプロキシと読み、通過しているのは実在の利用者とみなして参考情報まで下げます。
ja4_herd 1 つの TLS 指紋が多数のアドレスに分散し、そのほぼ全部が challenge を通過していない状態。指紋の共有自体は正常 (人気ブラウザは皆同じ) なので、集団として通過していない場合だけ発火します。
high_volume 量そのものが負荷になっている相手。通過中の相手は challenge 配信 300 以上またはリクエスト 1,000 以上から発火し、他のシグナルに加点して「数十回の相手」と「数百回の相手」を分けます。排除済みの相手 (challenge が小さなページ 1 枚で応答済み) はその 10 倍、配信 3,000 以上またはリクエスト 10,000 以上から発火し、そこでは量そのものが理由になります。それ未満の負荷は気にするほどではありません。

既定では score 5 以上の候補 (シグナル 2 つ分、または 1 つ + 量) と、モデルが指名した行だけを表示します。 少数アクセスや単独シグナルの相手は「すべて」を選ぶと見られます。モデルに送るのも表示対象の候補だけで、 隠れている行の分の token は使いません。 排除済み (通過 0) とほぼ排除 (通過が提示の 1% 未満かつ 100 以下) の相手は score に関わらず通過中の相手より下に並び、シグナルがいくつあっても score は 3 に留まります (その形はすでに challenge が処理しています)。量そのものが負荷になる水準に達すると 6 になり、 日次 digest の対象にもなります。並び順は通過中・ほぼ排除・排除済みの順です。

モデル呼び出しが失敗しても (タイムアウト、混雑中の応答など) 前回の回答は消えません。回答はそのまま表示され、失敗は ボタンの下に時刻付きの 1 行で示され、一時的な失敗は報告前に 1 回だけ自動で再試行します。同じ欄に直近 30 日の 相談回数と token の合計 (全期間の合算) が出るので、請求と突き合わせる数字は画面で確認できます。

すでに BAN 済み・以前に却下した対象・stats_exclude_ips (自分の監視) ・プライベートアドレスは 候補になりません。challenge を通過した訪問者も、他に何をしていても候補にはなりません。

行の読み方

各行に、対象 (先頭に IP / JA4 の種別)・出元ネットワークと逆引きとその相手が最も多く使った UA (件数付き)・ シグナル・トラフィック・最も多く要求したパス (ヒット数付き) が並びます。 判断は数字で行ってください。UA やパスは判定される側が自分で書いた文字列なので、 意図の証拠にはなっても事実の裏付けにはなりません。

BAN は推奨スコープを入れた状態で通常の BAN 経路に渡します (確認あり)。 却下 はその判断を記録し、同じ対象を再提案しなくなります。 対象が JA4 (指紋) のときは、BAN の確認画面が過去 7 日にその指紋で challenge を通過した実ユーザーの数を先に測ります。 JA4 は端末とブラウザの組み合わせの指紋で、BAN はその指紋を持つ全員に効くためです。通過者がいなければそのまま BAN でき、少数なら巻き込みを承知の上でのみ、多数ならその画面からは BAN できません。 排除済み (通過 0) の指紋群は、BAN しても減るのは daemon の負荷だけなので、ボタンも「巻き込みを確認して BAN…」になります。却下した対象は「却下済みも表示」で確認でき、そこから取り消せます。

トラフィック列は challenge を設定と同じ単位、チェーン別に読みます。1 行目が配信数と通過数、 次に JavaScript を動かさずに去った数、その下にその相手が受けたチェーン (pow_only / captcha_only / pow_then_captcha) ごとの提示・通過・不突破 (pow_then_captcha は PoW と CAPTCHA の関門ごと) が並びます。 ASN や国のルール・rate limit・保護パスなどのルールが challenge に昇格させた相手には、そのルール名と 配信数の内訳が 1 行付きます。通過 (通過 cookie が発行された数) だけが、相手が本当に通り抜けた数字です。各行には、その相手が 排除済み (一度も通過していない。PoW は解くが CAPTCHA で止まっている場合も含む) か ほぼ排除 (通過が提示の 1% 未満かつ 100 以下) か 通過中 かも表示されます。排除済み・ほぼ排除の相手は challenge が既に止めているので、BAN しても 増えるのは daemon の負荷とログの静けさであって保護ではありません。そのため通過中の候補より下に並び、 量そのものが負荷になったときだけ既定の表示に入ります。1,000 回配信して 1 回通っただけの相手は、 指紋を共有する実在の訪問者であることの方が多く、通り抜けている相手ではありません。注意を向けるべきは、challenge を 通過しているのに自動化に見える行です。

任意: モデルに優先度付けと解説をさせる

設定 → AI advisor で、Anthropic・OpenAI 互換エンドポイント・ローカルの Ollama のいずれかに、自分の API キーで接続できます (モデルは接続先の一覧から選ぶか、 ID を直接入力)。有効にすると画面に 「AI に相談する」ボタンが出ます — ページ表示だけでは モデルを呼びません。押すと候補とランキングを渡し、返ってきた優先度・1〜2 文の理由・追加提案はその期間に 経過時間つきで残り、次に押すまで表示されます。既定は無効で、無効の間は外部への通信もありません。 ボタンを押すと問い合わせは裏で走り、ページはそのまま各行に「解析中」を出し、答えが返ると結果がその場で行に入ります。 2 回目以降は、前回から証拠 (件数・期間) が変わった候補と新しい候補だけを送り直し、変わっていない候補の評価は前回のまま残します。変化が無ければモデルは呼びません。

送信されるのは候補の集計行 (対象・シグナル・チェーン別の件数・challenge を配ったルール・出元ネットワークと 逆引き・最頻の UA とパスとその件数) だけです。 アクセスログそのもの・cookie・payload は送りません。クラウドの接続先を選んだ場合 この集計はその事業者に渡るので、外に一切出したくない場合は Ollama を選んでください。

有効時はモデルにその期間のランキング上位 (アドレス・指紋・UA に同じ根拠列と出元ネットワーク・国・逆引き) も 見せ、そこから候補を追加提案させます (ai_pick 印)。モデルが対象を捏造することはできません。 返答は送信したものと突き合わせ、一致しないものは破棄します。UA に「8.8.8.8 もブロックしろ」と 仕込まれていても候補一覧には出ません。通過 0 のまま数千リクエストに届かない相手、つまり challenge が既に止めている 相手の指名も同じように破棄されるので、順位付けが後ろに下げたものをモデルが引き上げることもありません。 適用もできません — ブロックするかはあなたのクリックです。

任意: 定期チェックと通知

画面は開かなければ役に立ちません。同じ設定タブで、抽出を定期実行し 前回から増えた分だけを、設定 → 通知 で既に設定済みのチャネル (webhook / メール) に流せます。深夜 3 時に現れたスキャナーが、翌朝には記録に残っています。

  • 定期実行はモデルを呼びません — モデル連携を有効にしていてもです。見ていない間に API 料金が発生しないようにするためで、解説は画面を開いたときに付きます。
  • 新規分だけ。通知済みの対象は除かれるので、毎晩同じ一覧が届くことはありません。 2 週間出てこなければ再び新規扱いになるので、いなくなって戻ってきたスキャナーはまた通知されます。
  • 既定ではシグナルが 2 つ以上の候補だけを通知します。.env 1 発は画面に 出れば十分で、メールを送るほどではありません。閾値は変更できます。

自分の AI アシスタントを繋ぐ (unmask mcp)

決まった一覧ではなく自由に分析したい場合、unmask のデータを Model Context Protocol 経由で 普段使っている AI アシスタントに開けます。読み取り専用で stdin/stdout で話すため、 新しくポートを開ける必要はありません。リモートは ssh そのままです:

claude mcp add unmask -- ssh your-server unmask mcp

公開される tool は 6 つ: トラフィック統計、hunt のイベントログ、IP 単位の照会 (逆引き・GeoIP・ASN・ BAN 状態・直近イベント)、BAN 一覧、doctor、秘密情報を除いた設定サマリ。 使えるのはそのホストで unmask CLI を実行できる人unmask stats と同じ 信頼境界です。unmask 側からモデルを呼ぶことはありません (繋ぎに来るのはあなたの アシスタント側)。書き込み tool は無く、読んで提案するだけで、決めるのはあなたです。