🔒 家庭・SOHOのセキュリティ対策として
現代の家庭・SOHOネットワークには、スマートTV・IPカメラ・NAS・Wi-Fiスピーカー・IoT機器など20〜40台以上が接続されています。これらの多くはファームウェア更新が不定期で、どこに通信しているか把握されていません。一度侵害されると、C2サーバーへのデータ流出やボットネット加担が静かに進みます。
パッシブ・ゼロインパクト
ルーターのNATセッションテーブルをSSHで読み取るだけ。通信の中継・傍受なし、スループット低下なし、レイテンシ追加なし。
デバイス単位の可視性
どのIoT機器・PCがどこに通信しているかを把握。OUI・mDNS・SSDP・NetBIOS・Appleモデル辞書でデバイスを自動識別。
自動脅威検出
Feodo Tracker・ThreatFox・URLhaus・Spamhaus DROPとリアルタイムに全接続を照合。C2サーバー・ボットネット・マルウェア配布元を検出。
即時アラート
LAN内の任意のデバイスが既知の脅威に接続した瞬間にSlack DM通知。宛先ごとのクールダウン設定で通知スパムを防止。
ハードウェア変更不要
既存のYamaha RTXルーターと共存。Mac・PC・Raspberry Piにインストールするだけ。通信経路の変更なし。
完全ローカル・プライバシー重視
全処理はローカルで完結。通信データをクラウドに送信しません。エンリッチメント(GeoIP・RDAP・逆引DNS)は接続先IPのみ使用。
✦ 機能
リアルタイム世界地図
全ての外向き接続をインタラクティブな地図上にプロット。設置場所から接続先へのアニメーションアーク表示。
Yamaha RTX 連携
Yamaha RTXルーターにSSH接続し、NATセッションテーブルを60秒ごとに取得。[INSPECT] syslog で短命 TCP セッションを補完。RTX1200〜RTX1300、RTX810/830対応。
ASUS WiFi AP 対応
L2クライアント情報を取得 — WiFi帯域、信号強度、トラフィック量、AiMeshトポロジー。
スマートデバイス識別
OUI、mDNS/Bonjour、SSDP、NetBIOS、Appleモデル辞書(200機種以上、「iPhone 15 Pro」レベルまで特定)。
📡 DNS ベース宛先名解決
ローカルの dnsmasq クエリログを監視し、デバイスごとの DNS 解決結果(例: data.meethue.com)を宛先名に反映。PTR 逆引きより優先して表示。
IPエンリッチメント
全接続先に対して逆引きDNS、RDAP組織名検索、GeoIP(都市レベルの緯度経度)を自動付与。
接続履歴保存(SQLite)
接続履歴をSQLite(WALモード、クラッシュセーフ)で永続保存。保持期間は最大2年まで設定可能。時系列チャート・接続先別統計で分析。
🛡️ 脅威検出
Feodo Tracker、ThreatFox、URLhaus、Spamhaus DROP と全接続を自動突合。3段階の信頼度で推奨アクションを表示。
🔔 Slack通知
脅威検出時に Slack DM で即時通知。宛先ごとのクールダウン設定でスパムを防止。UI言語に連動して日本語/英語で送信。
📋 通信ログ
ソート・検索可能な全セッション一覧。カラム別フィルター(テキスト、正規表現、日付範囲)。脅威行クリックで詳細ポップアップ。
▶ デモ
UI言語: 英語 / 日本語 切り替え可能
収集したNATセッション情報をもとに、ネットワークグラフ・世界地図上の通信アーク・時系列トレンドチャートをリアルタイムに表示します。
右側のサイドバーにはLAN内の全デバイスが一覧表示され、IPアドレスやMACアドレスに加えてホスト名・ベンダー名・機種名などを自動収集して表示します。デバイスを選択すると、そのデバイスの通信先だけにフィルタされ、地図やグラフに反映されます。
◈ スクリーンショット
⬡ アーキテクチャ
┌─────────────────┐ SSH(NAT) ┌──────────────────────┐
│ Yamaha RTX │◄───────────►│ │
│ [INSPECT] log │ syslog/UDP │ Widemap Server │ WebSocket
│ [DHCPD] log │────────────►│ (Node.js) │◄──────────► ブラウザ
└─────────────────┘ │ │
┌─────────────────┐ HTTP │ ポーラー: │
│ ASUS WiFi AP │◄───────────►│ • yamaha (SSH) │
│ (クライアント) │ │ • asus (HTTP) │
└─────────────────┘ │ • inspect-syslog │
┌─────────────────┐ tail -F │ • dhcpd-syslog │
│ dnsmasq │────────────►│ • dnsmasq-log │
│ クエリログ │ └──────────┬───────────┘
└─────────────────┘ │
┌───────────────────┼───────────────┐
│ │ │
┌─────┴──────┐ ┌─────────┴───┐ ┌───────┴───┐
│エンリッチ │ │ 脅威インテル │ │ SQLite │
│ • dnsmasq │ │ • Feodo │ │ 履歴 │
│ • 逆引DNS │ │ • ThreatFox │ │ (WAL) │
│ • RDAP │ │ • URLhaus │ └───────────┘
│ • GeoIP │ │ • DROP │
│ • OUI │ └─────────────┘
│ • mDNS │
└────────────┘
▶ クイックスタート
Step 1 — 事前準備
| ✅ | Mac / PC / Raspberry Pi に Node.js 18以上をインストール | nodejs.org → |
| ✅ | Yamaha RTX ルーターの SSH を有効化 | 設定ガイド → |
| ☐ | (任意)ASUS WiFi AP の Web 管理画面を有効化 | 設定ガイド → |
Step 2 — インストールと起動
git clone https://github.com/yo1t/widemap.git
cd widemap
npm install
npm start
Step 3 — ブラウザを開いて管理トークンを入力
初回起動時にコンソールにトークンが表示されます:
══════════════════════════════════════
Widemap admin token (initial):
a1b2c3d4e5f6...
→ ブラウザ初回アクセス時に入力
══════════════════════════════════════
http://localhost:3000 を開いてトークンを入力してください。
Step 4 — 設定パネル(⚙)でルーター情報を入力
| Yamaha RTX の IP | ルーターの LAN 側 IP(例: 192.168.1.1) |
| SSH ユーザー名 / パスワード | Yamaha 設定ガイドで設定したもの |
| NAT ディスクリプタ番号 | ルーターで show nat descriptor を実行 — 通常は 100 |
| ASUS AP の IP / パスワード | AP の LAN 側 IP と管理者パスワード(ASUS 設定ガイド) |
数秒後にデバイスと接続先が地図に表示されはじめます。
◎ 対応ハードウェア
Yamaha RTX(L3/L4)
RTX1200, RTX1210, RTX1220, RTX1300, RTX810, RTX830, NVR500, NVR510, NVR700W — SSH+NATディスクリプタ対応の全モデル。
ASUS WiFi AP(L2)
RT-AXシリーズ、RT-ACシリーズ、ZenWiFi(AiMesh) — 標準Web管理画面を持つ全モデル(APモード/AiMesh使用)。
◎ Issues & フィードバック
バグ報告や機能リクエストはGitHubのIssueからお願いします。
⬡ リンク
GitHub リポジトリ
ソースコード、Issue、Pull Request、コントリビューションガイドライン。
README(日本語)
完全なドキュメント:セットアップ、設定、機能、セキュリティ。
README (English)
Full documentation: setup, configuration, features, and security.
Yamaha RTX 設定ガイド
Yamaha RTX ルーターの SSH を有効化するステップバイステップ手順。
ASUS AP 設定ガイド
ASUS アクセスポイントを Widemap 用に設定する手順。
ライセンス (AGPL-3.0)
自由に使用・改変可能。ネットワークサービスとして提供する場合は変更の公開が必要。