サービス検出と一括登録
サービスを検出 は、fn-knock から到達可能なローカル IPv4 ネットワーク内で HTTP サービスを探し、検出結果を確認待ちのサブドメインマッピングまたはパスマッピングへ変換する機能です。インターネットをスキャンすることはなく、開いているポートを検出してもサービスを自動公開しません。
入口と前提条件
サービス検出は独立したメニューではなく、次の場所から利用します。
サブドメインマッピング → サービスを検出:先にルートドメインを保存します。スキャン結果からサービス用 Host が作成されます。パスマッピング → サービスを検出:トンネル → パスモードの場合にのみ表示されます。スキャン結果からパスルールが作成されます。
サブドメインマッピングでは、ルートドメインが未保存の場合や、ページに未保存の変更がある場合は検出を開始できません。スキャンで確認するのは、fn-knock の実行環境から対象へ接続できるかどうかだけです。Docker のネットワークから見える範囲はホストと異なるため、ホスト上のサービスにはコンテナネットワークから到達できる必要があります。
スキャン対象
サービス検出を開くと、スキャン対象の設定を展開できます。デフォルトの対象は現在の実行環境から取得されます。
| ソース | 説明 |
|---|---|
| ローカルホスト | Docker 以外のデプロイでは 127.0.0.1/32 を使用 |
| Docker ホスト | Docker デプロイでは、管理用エントリーポイントから到達可能なホストのネットワークを検出 |
| ネットワークインターフェース | 現在の環境でスキャン可能なローカル IPv4 インターフェースのネットワーク |
| 既存のマッピング | 既存のサブドメインまたはパスマッピングの Target から推定 |
| カスタム | 管理者が手動で追加して保存した CIDR |
| 保存済み | 以前に保存され、現在もスキャン範囲として使用されている CIDR |
次の範囲に完全に含まれる IPv4 CIDR のみ指定できます。
- ループバック
127.0.0.0/8 - RFC 1918 プライベートネットワーク
10.0.0.0/8、172.16.0.0/12、192.168.0.0/16 - CGNAT
100.64.0.0/10 - リンクローカル
169.254.0.0/16
1 回につき最大 16 個の CIDR を選択でき、重複を除いたホスト数は合計 1024 台までです。大きなネットワークを入力する場合は、システムによるスキャン結果の切り詰めに頼らず、より狭い CIDR に分割してください。
自動選択に戻す を実行すると、現在の自動対象に再び追従します。CIDR を手動で選択、選択解除、または追加した場合は保存が必要です。そのままスキャンを開始した場合も、ページは先に現在の範囲を保存しようとします。対象は 1 つ以上残してください。
スキャン範囲と強度
対象ホストごとにポート 80–60000 を調べますが、fn-knock 自身と既知の内部サービスポートは除外されます。ローカルホストのスキャン時には、自己検出につながりやすいポートも追加で除外されます。開いている TCP ポートを検出した後、システムが HTTP リクエストを送り、サービスを識別します。HTTP 以外のポートは、開いていてもマッピング候補になりません。
スキャン強度はデバイスの推奨値に従うか、手動で選択できます。
| レベル | 目標同時実行数 |
|---|---|
| 低 | 32 |
| 中 | 115 |
| 高 | 256 |
| 最大 | 512 |
実際の同時実行数が必ず表の値に達するわけではありません。CPU コア数、使用可能なメモリ、ファイル記述子の上限、コンテナのリソース制限からも安全な上限を算出し、いずれか小さい方が使用されます。自動モードはデフォルトで有効で、デバイスの性能が変わるとレベルを再度推奨します。
レベルが影響するのは所要時間とデバイス負荷だけで、CIDR、ポート範囲、識別ルールは変わりません。NAS、ルーター、低メモリのデバイスでは、自動または低強度を優先してください。同時実行数を上げても遅い場合は、レベルが機能していないのではなく、スキャン範囲が広すぎることが一般的です。
検出結果
スキャンウィンドウには、ホスト、ポート、進捗、検出済みサービスが継続して表示されます。システムは HTTP ステータス、レスポンスヘッダー、ページの特徴から一般的なアプリケーションを識別します。正確に識別できない場合は、ページタイトルまたは HTTP + ポート を使って汎用候補を作成します。
候補値はあくまで推奨値です。
- サブドメインモードではサブドメイン名が提案され、デフォルトでログイン必須、WAF 有効、アップストリームの Host を維持するマッピングが作成されます。
- パスモードでは、パス、HTML を書き換えるか、ルートディレクトリモードを使用するか、デフォルトルートにするかが提案されます。
- アップストリームで Basic 認証を検出した場合はリスクだけを表示し、ユーザー名とパスワードは自動保存しません。
- 同じ Target、Host、パス、または重複した候補がすでに存在する場合、ページで除外されるか、一括保存が拒否されます。
保存前に、候補名と Target を 1 件ずつ確認してください。汎用検出では、アプリケーションの実際のベースパス、コールバック URL、WebSocket、Cookie、信頼済みプロキシの要件までは判別できません。一括追加に成功しても、インターネットからアクセスできるとは限りません。
スキャンを停止するかウィンドウを閉じると、現在のタスクはキャンセルされます。表示済みの候補は、一括保存をクリックした場合にのみ設定へ追加されます。
推奨手順
- まず、fn-knock の実行環境から対象の IP とポートに到達できることを確認します。
- ルートドメインを保存するか、正しいパスモードへ切り替えます。
- サービス検出を開いて設定を展開し、CIDR を実際のデバイスネットワークまで絞り込みます。
- リソースが限られている場合は自動または低強度のまま、スキャンを開始します。
- 公開不要な候補を選択解除し、競合している、または意味が不明確なサブドメイン名やパスを変更します。
- 一括保存後、認証、WAF、Target、ルーティングオプションを 1 件ずつ確認します。
- 先に LAN からアップストリームを検証し、その後モバイルネットワークから公開 DNS、トンネル、証明書、ログインを検証します。
- リクエストログで Host、送信元 IP、ルート、アップストリームの状態を確認します。
よくある質問
ホスト上のサービスをスキャンできない
Docker 内の 127.0.0.1 はコンテナ自身を指します。サービスがホストのループバックアドレスだけをリッスンしていないことを確認し、コンテナから到達可能なホストのアドレスを使用してください。あわせて Docker ネットワーク、ファイアウォール、サービスのリッスン範囲も確認します。
Docker 以外のデプロイでは、対象が許可されたローカル IPv4 範囲に含まれていることも確認してください。IPv6、ドメイン名、グローバルアドレスは検出用 CIDR に指定できませんが、検出完了後に有効な Target を手動で作成することはできます。
ポートは見つかるが候補がない
サービス検出が候補を生成するのは、HTTP で解析できるサービスだけです。TCP、UDP、TLS 専用、または特殊なハンドシェイクが必要なサービスは、ポートが開いていても結果が表示されない場合があります。HTTP サービスが平文リクエストを HTTPS 専用ポートへ強制転送する場合も無視されることがあります。この場合はマッピングを手動で追加し、プロトコルを検証してください。
スキャンに時間がかかる、またはデバイス負荷が高い
先に CIDR とホスト数を減らし、その後に強度を下げます。スキャン対象は最大で 1024 × 59921 回のポート調査に達するため、同時実行レベルより対象範囲の方が総作業量に大きく影響します。ウィンドウを閉じるとタスクをキャンセルできますが、すでに送信された少数のネットワーク調査はタイムアウトまで待つ場合があります。
候補サービスが重複する、またはポートが想定と異なる
同じアプリケーションが複数のポートで似たページを返す場合があります。システムは識別キーに基づいて一部の結果を統合しますが、実際のエントリーポイントを管理者に代わって判断することはできません。アップストリームが正式にリッスンしているポートを残し、ヘルスチェック用、リダイレクト用、または別のマッピングがすでに処理している候補は削除してください。
