ROAMSWITCH SENSOR ・ 最終更新: 2026-09-21

RoamSwitch Sensor 運用マニュアル

LAN に設置するだけで、同一セグメント上の新規機器出現・なりすましを検知し、RoamSwitch 導入済み端末(Mac / Linux Client / Server Edition)に対しては能動的な脆弱性監査を行うネットワークセンサーの導入・運用ガイドです。apt / dnf パッケージで配布中です。

1. 概要 & 位置づけ

RoamSwitch(Mac / Linux Client / Server Edition)は、いずれもホストに常駐するエージェントという形態です。これには構造的な穴が 2 つあります。

RoamSwitch Sensor は、LAN に設置する専用ノードとして、この 2 つの穴を埋めることを目指す製品です。実装・動作確認できているのは、同一 LAN 上の RoamSwitch 導入済み端末に対する能動的な脆弱性監査、ARP スイープと ARP テーブルの監視による LAN 上の機器の台帳化と、新規機器の出現・なりすましの検知、そしてオプトインの受動キャプチャによる不審な挙動(悪性 IP への接続・ボットネット化・DNS トンネリングの兆候など)の参考情報の提示です(§6 参照)。Sensor は検知と報告のみを行い、通信の遮断はしません。EDR ではなく、軽量な NDR(Network Detection & Response)と内製の実証型脆弱性スキャナを組み合わせた製品として設計しています。

外部送信の方針(既定では機器情報・監査結果を送信しない)
RoamSwitch Sensor は「Zero Telemetry」ではありません。他の機器を観測して報告することが目的の製品であり、次の通信を行います。(1) 検知用データの取得: CVE マップと nmap NSE データベースを更新サービスから毎日取得します(updates.fetch_cve_map、既定 true。false にすると完全オフライン運用になり、同梱データのみを使います)。この通信に機器・監査データは含まれません。(2) 運用者が設定した宛先への通知・集約: Webhook・syslog・中央コレクターへは、運用者が設定した場合にだけ、自組織の宛先へ送ります(既定では何も送りません)。ペアリングはローカルで完結し、クラウド登録やアカウント作成は不要です。

自己防衛は実装しません(意図的な設計判断)。Sensor 自体への攻撃対策が必要な場合は、同一マシンに RoamSwitch for Linux の Server Edition を別途インストールすることを推奨します。両者は完全に独立したプロセスとして共存できます。

2. システム要件

3. インストール & 起動

公式の署名付きパッケージリポジトリから roamswitch-sensor パッケージをインストールします。インストール後、roamswitch-sensor.service(systemd)が自動的に有効化・起動されます。

3.1 APT(Ubuntu / Debian)

# 1. リポジトリ署名鍵の登録
curl -fsSL https://lafine.net/apt/roamswitch-archive-keyring.asc \
  | sudo gpg --dearmor -o /usr/share/keyrings/roamswitch-archive-keyring.gpg

# 2. リポジトリの追加
echo "deb [signed-by=/usr/share/keyrings/roamswitch-archive-keyring.gpg] https://lafine.net/apt stable main" \
  | sudo tee /etc/apt/sources.list.d/roamswitch.list

# 3. インストール
sudo apt update && sudo apt install roamswitch-sensor

3.2 DNF / RPM(Fedora / RHEL)

# 1. GPG 鍵のインポート
sudo rpm --import https://lafine.net/rpm/RPM-GPG-KEY-roamswitch

# 2. リポジトリ設定ファイルの追加
sudo curl -fsSL -o /etc/yum.repos.d/roamswitch.repo https://lafine.net/rpm/fedora/roamswitch.repo

# 3. インストール
sudo dnf install roamswitch-sensor

3.3 起動確認

systemctl status roamswitch-sensor.service
sudo roamswitch-sensor status

3.4 CLI / TUI の実行

CLI(roamswitch-sensor)と対話型TUI(roamswitch-sensor-tui)はインストール後、そのまま実行できます。

sudo roamswitch-sensor status
sudo roamswitch-sensor-tui
オプトイン: 受動的LAN可視化の拡張
スイッチのミラーポート(SPAN)受信やインライン透過ブリッジ環境で使う場合、ROAMSWITCH_SENSOR_PASSIVE_CAPTURE_IFACE 環境変数(systemctl edit roamswitch-sensor.service で設定)に対象インターフェース名を指定すると、そのインターフェース上のEthernet/IPv4ヘッダーを観測し、新規機器の出現や既知の悪性IPとの通信を検知します(§6.1参照)。既定では無効です。

4. ペアリング(ペアリングコード方式)

Sensor は初期状態では何も信頼していません。ペアリングは、Sensorオペレーターが発行する使い捨てのペアリングコードを使って行います。「Sensorが能動的な脆弱性監査を実行してよい相手」という信頼関係は、1回のペアリング操作で双方向に同時に成立します(片方向だけの信頼という状態はありません)。

前提条件: Sensorは固定IPアドレス(静的割り当て、またはDHCPサーバー側でのアドレス予約)で運用してください。端末はペアリング時に確認したSensorのIPアドレスへ以後も直接接続するため(mDNS等による自動探索は行いません)、Sensor側のIPが変わると再ペアリングが必要になります。エンドポイント側は動的IPのままで構いません。

4.1 ペアリングコードの発行(Sensor側)

# Sensor側で実行(TUIでは c キー)
sudo roamswitch-sensor issue-code

8文字(大文字英数字。判読を誤りやすい 0/O/1/I/L は除外)の使い捨てコードが発行されます。発行から10分で失効する1回限りのコードなので、口頭・チャットなど任意のアウトオブバンドな手段で、端末側の操作者へ速やかに伝えてください。あわせて、この Sensor の TLS 証明書フィンガープリント(SHA-256)も表示されます。端末側でピン留めする値なので、コードと一緒に伝えてください(roamswitch-sensor pairing show や TUI の T 画面でもいつでも確認できます)。

4.2 コードを使ったペアリング(エンドポイント側)

# エンドポイント側 (roamswitch-linux)
sudo roamswitch sensor pair --addr <SENSOR_IP> --code <CODE> --fingerprint <SHA256_FINGERPRINT>

Mac版では、メニューバーの「🔍 RoamSwitch Sensor ペアリング…」から、SensorのIPアドレス・ペアリングコード・証明書フィンガープリントを入力してGUIで同様の操作ができます。

ペアリングが成立すると、以後の能動的脆弱性監査・監査結果の取得はすべてEd25519署名で認証されます。Linux版の端末は、入力したフィンガープリントと一致する証明書を持つSensorとだけTLS 1.3で通信し、平文へは自動でフォールバックしません(§4.4)。Sensorが発行したコードを知っている端末側と、そのコードを受け取ったSensor側の双方が、この時点で互いを信頼済みとして扱います。

ペアリングコードが失効した場合
ペアリングコードは発行から10分で自動的に失効し、再利用もできない1回限りのコードです。失効後にペアリングを試みると拒否されます。この場合はSensor側オペレーターにissue-codeで新しいコードを発行してもらってください。

4.3 手動ペアリング(公開鍵を直接把握している場合)

Sensorオペレーターが端末の公開鍵とアドレスを既に把握している場合は、ペアリングコードの受け渡しを介さず、Sensor側から直接登録することもできます(通常は4.2のコード方式を使い、端末側からペアリングさせる方が簡便です)。自分自身の公開鍵とアドレスは、次のコマンドで確認できます。

# エンドポイント側で自身の公開鍵/アドレスを確認
sudo roamswitch sensor key

# Sensor側で自身の公開鍵/アドレス/MACアドレスを確認
sudo roamswitch-sensor status
# Sensor側
sudo roamswitch-sensor pair <完全な公開鍵> --addr <IPアドレス> --confirm

4.4 制御API(TCP 50543)のセキュリティ: TLS・フィンガープリント・ロックアウト

ペアリング・監査リクエスト・結果取得は、Sensor の制御 API(TCP 50543)で行われます。次の防御が組み込まれています。

sudo roamswitch-sensor pairing show                       # mode, fingerprint, warnings
sudo roamswitch-sensor tls rotate                         # regenerate the certificate
sudo roamswitch sensor repin <PUBLIC_KEY> --fingerprint <NEW_FINGERPRINT>   # on each endpoint
control.tls を required にする手順
(1) すべての端末を TLS 対応版へ更新し、各端末で TLS ペアリング(または再ピン)を済ませる → (2) roamswitch-sensor status に平文接続の警告が出なくなったことを確認 → (3) sudo roamswitch-sensor config set control.tls required → デーモンを再起動。off は、TLS 必須の Linux 版端末が接続できなくなるため通常は使いません。

5. 能動的脆弱性監査

ペアリング済みのエンドポイントに対し、Sensor から非破壊的な実証型脆弱性診断を実行します。破壊的操作(データの書き込み・削除、サービス停止)は一切行いません。

sudo roamswitch-sensor scan <公開鍵またはその先頭>

監査は4段階のフェーズで構成されています。

  1. 全ポート走査: 対象ホストの開いているTCPポートを網羅的に検出します。
  2. 既知シグネチャ診断: Redis / dockerd / Memcached / MongoDB / Elasticsearch / CouchDB / Jenkins / VNC の認証なし露出確認、SMTPオープンリレー診断(MAIL FROM/RCPT TOのみ送信、DATAは送信しない安全な手法)、開発サーバーのCORS誤設定・パストラバーサル・オープンリダイレクト診断など、既知の脆弱性パターンに対する非破壊的な実証確認を行います。
  3. 汎用バナー取得: 上記シグネチャでカバーされていない開放ポートについて、接続のみでバナー文字列を取得します(データの送信は行いません)。
  4. nmap NSE補完診断: nmap --script safeによる幅広いプロトコル対応の補完診断です。ホストにnmapがインストールされている場合に自動的に実行されます(未インストール時は何もしません)。

監査結果は毎回 /var/lib/roamswitch-sensor/scan_history.json に記録され(検出の有無を問わず、その時点でクリーンだったことも記録の価値があるため)、CLIまたはTUIから閲覧できます。

roamswitch-sensor history
sudo roamswitch-sensor report <公開鍵またはその先頭> --out /tmp/report.md

5.1 クライアント側からの監査リクエスト(pull方式)

ペアリング済みの端末側から、Sensorへ能動的脆弱性監査を能動的にリクエストすることもできます。Mac版はメニューバーの「Sensorへ監査をリクエスト」、Linux版は次のコマンドです。

sudo roamswitch sensor request-audit

Sensorが監査を実行した後、端末側はリクエストの5分後から5分おきに最大5回、結果を取得しにいきます(最終確認は最大25分後)。取得できた結果は端末側にもローカル保存されます。

roamswitch sensor results

Mac版では設定画面の「監査結果」一覧、またはMCPツール get_sensor_audit_results 経由でAIエージェントが対応計画を立てる際の入力としても利用できます。ペアリングがSensor側で解除されているなど、結果の提供が明示的に拒否されるケースもあります(§10 Q6参照)。

6. 受動的ARP監視 & LAN可視化

Sensor は 2 つの方法で LAN 上の機器を把握します。(1) ARP テーブルの監視: Sensor 自身の ARP テーブル(/proc/net/arp)を約 10 秒ごとに読み、「これまで見たことのない新規 IP/MAC の出現」と「既知 IP に対する MAC アドレスの変化(ゲートウェイなりすまし等の兆候)」を検知します。(2) 能動 ARP スイープ: nmap -sn -PR で直結サブネット(最大 /22)を洗い出し、IP・MAC・ホスト名・ベンダー・オンライン状態・初回/最終検出・IP 履歴を機器台帳に保存します。スイープは 1 時間ごと・手動(refresh / TUI の r)・TUI 起動時に実行され、nmap が未導入の場合は (1) のみの受動動作に戻ります。MAC の OUI からベンダーと機器分類(IoT 機器か否か等)も推定します。

roamswitch-sensor arp-events

検知したイベントは roamswitch-sensor arp-events や TUI の「ARPイベント」タブ(Enter で詳細)で確認できます。各イベントには、発生時刻・重大度(致命的〜情報。ゲートウェイ IP の MAC 変化は「致命的」)・判断の根拠・関係する機器の素性・具体的な次の手順が付きます。

6.1 受動的LAN可視化の拡張(オプトイン)

上記のARP監視は「Sensor自身が過去に通信した機器」のみが対象ですが、ROAMSWITCH_SENSOR_PASSIVE_CAPTURE_IFACE 環境変数で対象インターフェースを指定すると、そのインターフェース上のEthernet/IPv4ヘッダーを観測(ペイロードは見ません)し、以下を検知します。

sudo systemctl edit roamswitch-sensor.service
# [Service]
# Environment=ROAMSWITCH_SENSOR_PASSIVE_CAPTURE_IFACE=eth0

sudo systemctl restart roamswitch-sensor.service
roamswitch-sensor passive-events
通常のNICとミラーポートの違い
通常の1本のNICでも、ARP・ブロードキャスト・マルチキャストの範囲であれば新規機器の検知は機能します(実機LAN検証済み)。ただし、LAN上の他2台間の一般的なユニキャスト通信まで観測するには、スイッチのミラーポート(SPAN)受信、またはSensorをインライン透過ブリッジとして設置する構成が必要です。

6.2 機器台帳と機器メモ

台帳は roamswitch-sensor device-inventory(TUI の「ネットワーク構成」タブ)で確認できます。device-note(TUI では n)で名前・用途・場所などのメモを登録するとその機器は「把握済み」になり、メモ未登録の機器は「要確認」と表示されます(機器台帳との突き合わせ用)。

sudo roamswitch-sensor refresh
roamswitch-sensor device-inventory
sudo roamswitch-sensor device-note aa:bb:cc:dd:ee:ff "3F copier"

6.3 不審な挙動の参考情報(すべて検知のみ)

受動キャプチャ(§6.1、オプトイン)を有効にすると、次の参考情報を提示します。いずれも検知と表示のみで、Sensor が通信を遮断することはありません。

7. CLI コマンド早見表

コマンド 機能概要
roamswitch-sensor status Sensor自身の公開鍵・IPアドレス・MACアドレス、ペアリング数・ARPイベント数・保留中の監査リクエスト数、制御APIのTLS状態を表示
roamswitch-sensor issue-code 使い捨てのペアリングコードを発行(10分間有効)。Sensorの証明書フィンガープリントも表示
roamswitch-sensor list ペアリング済み端末の一覧を表示
roamswitch-sensor pair <公開鍵> [--addr <IP>] [--name <名前>] --confirm 端末を手動ペアリング(公開鍵とアドレスを直接指定。通常は issue-code を使い、端末側から自動でペアリングさせる方が簡便)
roamswitch-sensor unpair <公開鍵> ペアリングを解除
roamswitch-sensor scan <公開鍵> ペアリング済み端末へ能動的脆弱性監査を実行
roamswitch-sensor history [公開鍵] 監査履歴を表示(公開鍵省略で全端末分)
roamswitch-sensor report <公開鍵> [--out <ファイル>] 直近の監査結果をMarkdownレポートとして出力
roamswitch-sensor arp-events 検知したARPイベント(新規機器・なりすまし疑い)を表示
roamswitch-sensor pairing show / tls show 制御APIのTLS状態(モード・フィンガープリント・平文接続の警告・待ち受けIP・旧v1署名の可否)を表示(pairing show と tls show は同じ内容)
roamswitch-sensor tls rotate TLS証明書を再生成(旧フィンガープリントのピンはすべて無効になり、端末側で再ピンが必要)
roamswitch-sensor refresh LAN上の機器を今すぐ再スキャン(ARPスイープ)して機器台帳を更新
roamswitch-sensor device-inventory 機器台帳(LAN上で観測した全機器・オンライン状態・メモ)を表示
roamswitch-sensor device-note <MAC> [note] 機器にメモを登録(メモを省略すると削除)
roamswitch-sensor passive-events / iot-events / network-threats / iot-advisories 受動キャプチャ由来の各イベント(新規機器・悪性IPへの接続 / IoT機器の挙動 / 不審な通信 / IoT脆弱性情報)を表示
roamswitch-sensor config [show | set <キー> <値>] 設定の表示・変更(定期監査・通知・保持期間・コレクター・制御API・検知データ取得・言語)。control.bind_addr と control.tls はデーモンの再起動で反映され、それ以外は再起動不要(§11.8)
roamswitch-sensor diff [公開鍵] 前回の監査との差分を表示(新規検出・解消・新たに開いたポート・到達不能の疑い)
roamswitch-sensor export <scans|inventory|audit-log|unmanaged|all> … 監査証跡をCSV / JSON / 印刷用HTMLで書き出し
roamswitch-sensor audit-log [verify] 操作・承認ログの表示。verify でハッシュ連鎖の改ざんを検知
roamswitch-sensor notify-test 設定した通知先(Webhook / syslog)へテスト通知を送り、疎通を確認
roamswitch-sensor audit-unmanaged <IP|MAC> --confirm
roamswitch-sensor unmanaged-audits
RoamSwitch未導入機器の軽量監査(接続確認のみ)。audit-unmanaged <IPまたはMAC> --confirm で手動実行、unmanaged-audits [--detail] で結果一覧(§13)
roamswitch-sensor lockdown [status | on | off] 停止状態の表示(status)、停止(on --reason 理由)、解除(off)。ペアリング・監査・送信・通知をすべて止めます(§14)
roamswitch-sensor decommission --confirm このSensorの鍵と保存データを消去して停止(元に戻せません)。監査ログだけは残し、ペアリングしていた端末の一覧と解除手順を表示します(§14)

CLIは日本語 / 英語のみに対応しています(LANG環境変数に従います)。

8. TUI 操作ガイド

対話型TUI(roamswitch-sensor-tui)は10言語に対応し、CLI のすべてのサブコマンド・デーモンのIPC・すべての設定キー・コレクター運用を操作できます(m で機能一覧)。主要な6つのタブを Tab キー(逆順は Shift+Tab)で切り替えます: ペアリング済み(各端末の最新の監査状態)/ネットワーク構成(LAN上の全機器とメモ登録)/ARPイベント/監査履歴/差分(前回の監査からの変化。新規検出は赤、解消は緑、到達不能の疑いは黄)/操作ログ(誰がいつ何を承認・実行したか。上部にハッシュ連鎖の検証結果を表示)。80桁に収まらない画面(受動監視・IoT挙動・不審な通信・IoT脆弱性情報)は m のメニューから開きます。

キー 動作
Tabタブを切り替え
↑↓ / j k項目を選択
cペアリングコードを発行(10分間有効)。画面には、端末側で実行するコマンド sudo roamswitch sensor pair --addr <このSensorのIP> --code <コード> --fingerprint <フィンガープリント> が、実際の値を入れた状態で表示されます
uペアリングを解除
s選択中の端末へ能動的脆弱性監査を実行
a(ネットワーク構成タブ)選択中の機器を軽量監査(確認画面あり。§13)。結果はメニューの「未導入機器の監査」タブ
KこのSensorの停止/解除(確認画面あり。停止中は画面下部に赤い表示)。廃棄はメニューから(§14)
n(ネットワーク構成タブ)選択中の機器に名前・用途・場所などのメモを登録(メモのある機器は「把握済み」扱い)
rLAN上の機器を今すぐ再スキャン(ARPスイープ。既定では1時間ごとに自動実行)
e監査証跡を書き出し(監査結果・機器台帳・操作ログのCSV、HTMLレポート、JSON)。フォームで内容・形式・端末・開始日・保存先を指定でき、表示言語(10言語)で作成されます。既定の保存先は ~/.local/state/roamswitch-sensor/ で、所有者のみ読める新規ファイル(既存ファイルは上書きしません)として作られ、書き出したこと自体も操作ログに記録されます
p手動ペアリング(公開鍵とアドレスを入力 → 確認画面 → 実行)。フォームに、端末側でピン留めする Sensor の TLS フィンガープリントが表示されます
TTLS・ペアリング状態(モード・フィンガープリント・平文接続の警告・待ち受けIP・旧v1署名の可否)。R で証明書を再生成(影響を説明する確認画面つき)
C設定エディタ(すべての設定キーを表示・変更。Webhook URL は常に伏せ字。再起動が必要なキーは明示)
N通知テスト(送信先ごとの成否を表示。URL は伏せ字)
m機能一覧メニュー(受動監視・IoT挙動・不審な通信・IoT脆弱性情報・状態 i・コレクター管理など)
Oコレクター管理(コレクターのデータディレクトリがあるホストのみ)。Sensor の登録・失効・一覧・読み取りトークン・監査ログ異常の解除
f / l / v(監査履歴タブ)端末ごとの絞り込み。(操作ログタブ)l で表示件数を変更、v でハッシュ連鎖を再検証
Enter選択中の行の詳細を表示(監査履歴・差分・ARPイベント・機器・操作ログ)
w(詳細表示中)レポートを保存先を指定してファイルへ書き出し(表示言語で作成)
L表示言語を選択(language 設定に保存され、デーモンが出す通知・ログの言語にも反映されます)
q終了

9. 信頼モデル & セキュリティ設計

10. トラブルシューティング & FAQ

Q1. ペアリングコードを入力しても拒否されます。

考えられる原因は次の4つです: (1) コード発行から10分が経過して失効した(Sensor側オペレーターにissue-codeでの再発行を依頼してください)、(2) コードの入力ミス(判読しづらい 0/O/1/I/L は発行時点で除外されているため、コードにこれらの文字が含まれることはありません)、(3) --addr に指定したIPアドレスが、Sensorの現在の固定IPアドレスと一致していない、(4) --fingerprint がSensorの証明書と一致していない(pin_mismatch / fingerprint_mismatch。roamswitch-sensor pairing show の値を確認してください。誤りが続くとロックアウトされ rate_limited が返ります)。

Q2. NSE補完診断の結果が空です。

次の2つのいずれかが原因です: (1) コンテナにnmapがインストールされていない、(2) 実行はされたが対象ポートに該当する安全なスクリプトの出力が実際になかった。nmap NSE補完診断は、ホストにnmapがインストールされている場合に自動的に実行されます。

Q3. 監査が完了するまでどのくらい時間がかかりますか?

全ポート走査だけであれば数十秒程度ですが、ホストにnmapがインストールされている場合はNSE補完診断が自動的に加わるため、対象の開放ポート数に応じて最大2分程度かかる場合があります。TUIでは実行中の経過秒数が表示され続けるため、進行状況を確認しながらお待ちいただけます。

Q4. ペアリングしたはずなのに監査ができません。

考えられる原因は次のとおりです: (1) エンドポイント側でsensor_pairing_enabled: trueが設定されていない(既定OFF)、(2) ペアリング後にSensorの固定IPアドレスが変わり、端末側が保持している古いアドレスへ接続できなくなっている(再ペアリングが必要です)、(3) Sensor側でunpairによりペアリングが解除されている、(4) Sensorが証明書を再生成(tls rotate)したため、端末側のピンが古い(roamswitch sensor repinで新しいフィンガープリントを入力)。roamswitch sensor list(端末側)とroamswitch-sensor list(Sensor側)の両方で、相手が登録されていることを確認してください。

Q5. Sensor自体はRoamSwitch本体(Client/Server Edition)と併用できますか?

はい。Sensorは自己防衛機能を持たない設計のため、同一マシンにRoamSwitch for Linux Server Editionを併設することを推奨しています。両者は完全に独立したプロセス・データストアで動作し、競合しません。

Q6. roamswitch sensor results が「ペアリングが解除されています」と表示します。

Sensor側で、この端末のペアリングがunpairにより解除されています。Sensorオペレーターに新しいペアリングコードを発行してもらい、roamswitch sensor pair --addr <IP> --code <コード> --fingerprint <SHA-256>で再度ペアリングしてください。

11. 組織向けの監査運用機能(オプトイン)

大規模な組織のセキュリティ担当者が、監査の証跡と変化の把握のために使う機能群です。どれも初期状態では無効で、Lafineや第三者へは何も送信されません。通知先・集約先はすべて運用者が設定した自組織のものです。設定は sudo roamswitch-sensor config set <キー> <値>(デーモンの再起動不要。変更は操作ログに記録されます)で行い、config show で現在値を確認できます。

11.1 定期監査と前回との差分

schedule.enabled を true にすると、ペアリング済みの全端末を自動で定期監査します(既定24時間ごと: schedule.interval_hours。実行してよい時間帯: schedule.window_start_hour / window_end_hour、ローカル時刻で日跨ぎ可。同時実行数: schedule.max_parallel)。監査のたびに前回と比較し、新規検出(リグレッション)・解消・新たに開いたポートを roamswitch-sensor diff で確認できます。以前開いていたポートが全て見えなくなった場合は「解消」ではなく到達不能の疑いとして扱います(停止中の機器と、全ポートを閉じた機器は外から区別できないためです)。

無人の監査でも「合意した端末だけを監査する」保証は崩しません。端末のIPはDHCPで別の機器に割り当てられ得るため、端末が最後に認証(ペアリング、または署名付き監査リクエスト)した時点のMACアドレスを保存し、定期監査の前後で同じMACがそのIPで応答することを、nmapの実際のARP要求で確認します。一致しなければ監査せず(または結果を破棄し)、通知します。手動の scan も、別の機器に渡ったという証拠がある場合は拒否します。この確認にはnmapが必要です。また、この機能の導入前にペアリングした端末は、再ペアリングするか署名付き監査リクエストを送るまで定期監査の対象になりません。対象は同一L2セグメント上の端末です。

11.2 通知(Webhook・syslog)

notify.webhook_urls(Slack・Discord・TeamsなどのIncoming Webhook、または汎用のJSON受信口)と notify.syslog.host / port / protocol(RFC 5424、UDPまたはTCP)に、リグレッション・新規機器・ARPなりすまし・不審な通信などを送ります。notify.min_severity(info / medium / high / critical)と notify.cooldown_minutes(同じイベントの再送間隔)で絞れます。roamswitch-sensor notify-test で送信先ごとの疎通を確認できます。

11.3 監査証跡のエクスポート

roamswitch-sensor export <scans|inventory|audit-log|all> --format csv|json|html [--out ファイル] [--endpoint 公開鍵の先頭] [--since 日付]。html は単体のファイルで、ブラウザで開いて「PDFとして保存」すれば提出用のPDFにできます。CSVは表計算ソフトの数式注入への対策済みです。機器台帳(inventory)には各機器がRoamSwitch管理下(ペアリング済み)かどうかの列が付きます。出力ファイルは所有者のみ読み取り可(0600)で、エクスポートしたこと自体も操作ログに記録されます。TUI の e キーでは同じ指定をフォームで行え、レポート・エクスポートは表示言語(10言語)で作成されます(CLI は日本語・英語)。

11.4 操作・承認ログ(改ざん検知付き)

ペアリング・解除・監査の開始と完了・設定変更・拒否されたアクセスを、実行者(UID/端末の公開鍵/接続元IP)付きで記録します。各行が直前の行のSHA-256を含むハッシュ連鎖のため、編集や削除は roamswitch-sensor audit-log verify で検知できます(異常があれば終了コード2)。一覧は roamswitch-sensor audit-log [--limit N]。Webhook URLはトークンを含みがちなため、設定変更ログには値を残しません。連鎖だけでは末尾の削除を検知できないので、コレクター(§11.6)には先頭(連番とハッシュ)も送られます。

11.5 保持期間

retention.scan_history_days・retention.audit_log_days・retention.inventory_stale_days に日数を設定すると、古い監査履歴・操作ログ・長期間見えない機器を自動で削除します(0 = 期間では削除しない。既定)。メモを登録した機器は台帳から削除されません。

11.6 複数Sensorの集約(中央コレクター、任意)

複数拠点で複数のSensorを動かす場合、別のホストで roamswitch-sensor-collector(パッケージに同梱、既定では無効)を動かし、各Sensorから署名付きの要約を集めます。

# On the collector host (a separate host from the Sensor is recommended)
sudo systemctl enable --now roamswitch-sensor-collector   # listens on 127.0.0.1:8443 by default
sudo roamswitch-sensor-collector token                     # read token for the dashboard
sudo roamswitch-sensor-collector enroll <Sensor public key> --name Tokyo --site Tokyo

# On each Sensor
sudo roamswitch-sensor config set collector.url https://collector.example.org:8443
sudo roamswitch-sensor config set collector.enabled true

11.7 検知データの取得(updates.fetch_cve_map)

Sensor は、署名付きの CVE マップ(能動診断で使う既知脆弱性のデータ)と nmap NSE データベースを、更新サービスから毎日取得します。この通信に機器・監査データは含まれません。完全オフラインで運用する場合は sudo roamswitch-sensor config set updates.fetch_cve_map false を実行してください(変更は再起動なしで次の周期から反映され、以後は同梱データだけを使います)。

11.8 設定キー一覧

roamswitch-sensor config show で現在値を確認し、config set <キー> <値> [<キー> <値> …] で変更します(複数キーは原子的に保存され、TUI では C の設定エディタでも変更できます)。「再起動」列が「要」のキーだけ、デーモンの再起動(sudo systemctl restart roamswitch-sensor)で反映されます。

キー 型 / 取り得る値 既定 再起動
sitestring(empty)不要
languageja | en | ko | zh-Hans | zh-Hant | de | fr | es | it | pt-PT(empty = system locale)不要
schedule.enabledboolfalse不要
schedule.interval_hoursint24不要
schedule.window_start_hourint 0–23(unset = always)不要
schedule.window_end_hourint 0–23(unset = always)不要
schedule.max_parallelint 1–81不要
notify.webhook_urlsURL list(empty)不要
notify.min_severityinfo | medium | high | criticalmedium不要
notify.cooldown_minutesint30不要
notify.syslog.hoststring(empty = off)不要
notify.syslog.portint514不要
notify.syslog.protocoludp | tcpudp不要
retention.scan_history_daysint (0 = never prune)0不要
retention.audit_log_daysint (0 = never prune)0不要
retention.inventory_stale_daysint (0 = never prune)0不要
collector.enabledboolfalse不要
collector.urlURL(empty)不要
collector.push_interval_minutesint15不要
collector.send_unmanaged_devicesbooltrue不要
collector.probe_control_portboolfalse不要
control.bind_addrIP address0.0.0.0要
control.tlsoff | optional | requiredoptional要
control.allow_legacy_signaturesbooltrue不要
updates.fetch_cve_mapbooltrue不要
control.listen_ipv6boolfalse要
dhcp.active_probebooltrue不要
dhcp.allowed_serversMAC / IP list(empty = learn the first)不要
ipv6.enabledbooltrue不要
ipv6.active_probebooltrue不要
ipv6.allowed_routersMAC / IP list(empty = trust the IPv4 gateway)不要
unmanaged_audit.enabledbool (needs authorization + allowed_cidrs first)false不要
unmanaged_audit.authorizationstring(empty)不要
unmanaged_audit.allowed_cidrsCIDR list (IPv4 ≤ /16 and IPv6 ≤ /48 refused)(empty)不要
unmanaged_audit.excludeIP / CIDR / MAC list(empty)不要
unmanaged_audit.interval_hoursint168不要
unmanaged_audit.max_parallelint 1–42不要
unmanaged_audit.product_checkbool (needs unmanaged_audit.enabled)false不要
security.on_revokedlockdown | wipe | nonelockdown不要
security.lockdown_after_offline_daysint (0 = off)0不要

12. 不正DHCPサーバー・IPv6の検知

ネットワークに持ち込まれた別のルーターや攻撃者の機器が、正規のふりをして端末の通信経路を乗っ取る攻撃を見つけます。検知と通知だけで、Sensorが通信を遮断することはありません。既定で有効で、受動キャプチャの設定は要りません。結果は roamswitch-sensor network-threats、TUIの「不審な通信」タブ(m から)、通知(dhcp_rogue_server ipv6_rogue_router ndp_spoof ipv6_unknown_device)、操作・承認ログ、エクスポートに出ます。

12.1 不正なDHCPサーバー(IPv4・DHCPv6)

1時間ごと(と roamswitch-sensor refresh のたび)に、ランダムなMACアドレスから DHCP の探索パケット(DHCPv6 は SOLICIT)を1つだけ送り、応答したすべてのサーバーを数えます。要求(REQUEST)は送らないので、IPアドレスの貸出しは受けません。受動キャプチャが見た DHCP 応答も同じ判定にかけます。最初に見つけたサーバーを正規として学習し、後から現れた別のサーバーを知らせます。正規のサーバーと違うゲートウェイや DNS を配るサーバーは、それを受け取った端末の通信の経由先を乗っ取るため、最も重い critical です。最初の探索で複数のサーバーが同時に応答した場合は、どれが正規か判断できないので、どれも学習せず全部を報告します。

12.2 IPv6(不正なルーター広告・NDPなりすまし・IPv6でしか見えない機器)

不正なルーター広告: IPv6 のルーターは、LAN の誰でも名乗れます。カーネルの近隣テーブル・デフォルト経路・受動キャプチャが見たルーター広告・ルーター要請への応答を突き合わせ、IPv4 のデフォルトゲートウェイと別の機器がルーターとして振る舞っていれば通知します(ipv6.allowed_routers に登録すると正規として扱います。IPv6 のルーターと IPv4 のゲートウェイが別の機器という構成は正常な場合があるため、その場合は登録してください)。ホップリミットが 255 でない広告は、ルーターを越えて来た偽造なので無視します。NDPなりすまし: ある IPv6 アドレスの持ち主の MAC が別の MAC に入れ替わると知らせます(ルーターのアドレスなら high)。IPv6でしか見えない機器: ARP では見えず、近隣テーブルにだけ現れた機器を、ARP 掃引を1回またいでから報告します。機器台帳(CSVの ipv6 列、JSONの ipv6_addrs)にも IPv6 アドレスが載ります。

12.3 誰を正規とみなすか・設定

dhcp.allowed_servers と ipv6.allowed_routers(MAC または IP)を設定すると、それ以外の応答をすべて報告します。空のままなら、最初に見つけたものを学習します。dhcp.active_probe と ipv6.active_probe(既定 true)で能動検査を、ipv6.enabled で IPv6 の監視全体を止められます。制御API(50543)の IPv6 待ち受けは control.listen_ipv6(既定 false、再起動で反映)で追加します。グローバル IPv6 アドレスは、ルーターに IPv6 のファイアウォールが無いとインターネットから届き得るため、既定では有効にしていません。接続数とロックアウトは、IPv6 を /64 単位で数えます。リンクローカルアドレスの端末は、スコープ ID なしでは接続し直せないため、監査先として記憶しません。

13. RoamSwitch未導入機器の軽量監査(オプトイン)

§5 の能動的脆弱性監査は、ペアリングして合意した端末だけが対象です。ペアリングしていないプリンター・カメラ・NAS などについても「何が外に開いているか」を確認したい場合のために、はるかに限定された別の検査があります。OpenVAS のような深い診断、ログインの試行、脆弱性の悪用、nmap NSE、全ポートの走査は、合意した端末にしか行いません。

13.1 行うこと

決まった54ポート(Telnet・FTP・RDP・VNC・SMB・Redis・MongoDB・Docker API・MQTT・RTSP など)への TCP 接続確認、開いていたポートがサービスから自分から送る表示(バナー)の読み取り(Web 用ポートには HEAD / を1回)、ベンダーに公開済みの脆弱性(IoT 脆弱性情報の表)の注記だけです。結果は「このサービスに LAN から届く」であり、「脆弱だ」とは言いません(認証が有効かどうかは調べていない、と各検出に明記されます)。

13.2 有効にする

unmanaged_audit.enabled を有効にするには、先に unmanaged_audit.authorization(誰が承認したか。氏名・チケット番号・規程名など)と unmanaged_audit.allowed_cidrs(監査してよい範囲。IPv4 は /16、IPv6 は /48 より広い範囲は拒否)を設定します。定期実行は interval_hours(既定168時間)ごとで、schedule の時間帯に従います。手動では、二段階目の同意として --confirm が必要です。

sudo roamswitch-sensor config set unmanaged_audit.authorization "IT policy 2026-07, approved by A. Suzuki"
sudo roamswitch-sensor config set unmanaged_audit.allowed_cidrs 192.168.10.0/24
sudo roamswitch-sensor config set unmanaged_audit.exclude 192.168.10.1
sudo roamswitch-sensor config set unmanaged_audit.enabled true
sudo roamswitch-sensor audit-unmanaged 192.168.10.40 --confirm
roamswitch-sensor unmanaged-audits --detail

13.3 守られていること

allowed_cidrs の外、unmanaged_audit.exclude(IP・範囲・MAC)の機器、ペアリング済みの端末、Sensor 自身は、何があっても調べません。実行の前後に、そのアドレスにいる機器の MAC を生の問い合わせ(IPv4 は ARP=nmap が必要、IPv6 は近隣要請)で確認し、別の機器に変わっていたら中止、または結果を破棄して通知します。authorization の文面は、実行のたびに操作・承認ログへ記録され、エクスポート(export unmanaged、JSON、HTML レポート)にも載るので、「誰が許可して調べたか」を示せます。

13.4 製品の確認(KEV 掲載製品かどうか。オプトイン)

unmanaged_audit.product_check(既定はオフ)を有効にすると、軽量監査の中で、機器が普通に返す Web 画面から製品名を読み取り、その製品に CISA の KEV に載った脆弱性があるかを知らせます。送るのは、接続できた Web 用ポート(80・8080・8181・443・8443・10443)への GET / と、機器自身が示す同じアドレスへのリダイレクト(最大2回)、HTTPS の証明書の発行者・主体の名前の読み取りだけです。ログイン、パスワードの試行、推測したパス、脆弱性を突く入力は送りません。1台あたり最大12要求、150ミリ秒間隔です。同意の条件(enabled・authorization・allowed_cidrs・exclude・ペアリング済み機器の除外・MAC の再確認)は §13.2〜13.3 のままで、軽量監査が止まっていれば product_check が有効でも何も送りません。

製品の名指しは、その製品の画面の目印が同じ応答で揃ったときだけです。機器が自分で表示した版を読めて、NVD の影響範囲に入る CVE があるときだけ「該当」(high)とします。版が読めないときは「この製品には KEV 掲載の脆弱性がある。版は読めなかったので、該当するかは未確認」という注意(medium)にとどめ、脆弱だとは言いません。版を画面に出す製品は現在 MikroTik RouterOS だけなので、ほかの製品は通常「未確認」の注意になります。対応は Fortinet FortiGate、Ivanti Connect Secure、Citrix NetScaler、Cisco(ASA の SSL VPN と IOS XE の Web UI)、UniFi OS、GeoVision、TerraMaster、Check Point の Security Gateway、MikroTik RouterOS です(Aruba の機器は KEV に項目が無く対象外)。製品の目印は公開の検出シグネチャに基づくもので、実機での確認は済んでいません。合わない目印は、検出しない側に倒れます。KEV の写しは製品に同梱され、product_check と updates.fetch_cve_map がどちらも有効なときだけ、24時間ごとに CISA の公開フィード1ファイルを取得して更新します(LAN の情報は一切送りません)。

14. 紛失・盗難・廃棄したとき

Sensor には、端末ごとの脆弱性の一覧、ペアリング済み端末のアドレス、署名鍵が入っています。また、ペアリングした端末は、この Sensor を「ポートスキャンを許可した相手」として扱うため、盗まれた Sensor が同じ LAN につながると、その相手として振る舞えてしまいます。次の仕組みで止めます。

14.1 コレクターでの失効とロックダウン

roamswitch-sensor-collector revoke <公開鍵> --reason 理由 を実行すると、以後その Sensor の送信は 403 sensor_revoked で拒否されます(署名が正しい要求にだけ返すので、鍵を持つ本人だけが知ります)。失効した Sensor は、次の送信でそのことを知り、自分で停止(ロックダウン)します。停止中は、制御APIは sensor_locked_down としか答えず、ペアリング・監査(定期・手動)・コレクターへの送信・通知・ネットワークへの探査をすべて止めます。停止はファイルに残るので再起動後も続き、状態ファイルが読めない場合も停止側に倒れます。データは残るので、持ち主の手元にあると確実な場合だけ roamswitch-sensor lockdown off で解除できます(TUI は K)。コレクターで失効されたままだと、次の送信で再び停止します。revoke は、その Sensor とペアリングしていた端末の一覧と、各端末での解除手順も表示します。

14.2 消去・廃棄・オフライン検知

security.on_revoked を wipe にすると、失効時に鍵・TLS 鍵・設定(Webhook URL を含む)・ペアリング済み端末の一覧・監査結果・機器台帳を 0 で上書きして削除します。操作・承認ログだけは証跡として残します。lockdown(既定)は停止してデータを残し、none は通知だけです。手元の Sensor を手動で廃棄するには roamswitch-sensor decommission --confirm(停止と消去。元に戻せません)を使います。security.lockdown_after_offline_days に日数を入れると、コレクターに長期間送信できなかった Sensor が自分で停止します(盗まれて別のネットワークで使われる場合の備え。コレクター送信が有効で、過去に一度は成功している場合だけ働き、既定は 0=無効)。

14.3 この仕組みでできないこと

ペアリングしていた端末は、各自がペアリングを解除するまで、この Sensor を信頼したままです。Sensor から端末へ通知する経路は無いため、revoke と decommission が表示する一覧の各端末で、Linux は roamswitch sensor unpair <この Sensor の公開鍵>、Mac は 設定 > Sensor > ペアリング解除 を実施してください。電源が切られたまま、またはネットワークに出ないまま持ち去られた Sensor には、停止の指示が届きません。ディスクの暗号化(LUKS など)が実際の防御です。上書き消去は、フラッシュ記憶装置や CoW ファイルシステムでは完全な消去を保証しません。

← Server Edition 運用マニュアル Linux版導入ページへ →