JackForest84/netwatch
GitHub: JackForest84/netwatch
NetWatch是一个被动式家庭网络安全仪表板,用于监控和评估网络安全。
Stars: 0 | Forks: 0
# NetWatch 🛡️
**一个自托管的、被动式家庭网络安全仪表板。** 它将WAN流量镜像到入侵检测系统(IDS),将每个检测到的攻击者与防火墙的判断结果关联起来,用威胁情报丰富它们,并实时显示所有信息——**而不坐在数据路径中**。

## 为什么
互联网上的每个公共IP地址都全天候被扫描。我想**看到**我自己的线路上的这种背景辐射,**证明**外围防御是有效的,并了解整个堆栈的端到端。NetWatch每块面板都回答一个诚实的问题——并且拒绝显示它实际上无法测量的数字。
## 它的功能
- **被动IDS** — MikroTik通过TZSP镜像WAN端口 → 重放到虚拟接口 → **Suricata** (~50k ET规则)。零内联风险。
- **结果关联** — 每个IDS检测到的攻击者IP地址都与防火墙的丢弃日志(通过**远程syslog**无损传输)进行匹配:
*检测到 → 确认丢弃 → 达到服务(0)*。
- **威胁情报** — 攻击者IP地址通过**VirusTotal + AbuseIPDB**丰富,使用**MaxMind**进行地理定位,在3D D3攻击球上绘制。
- **真实设备级互联网** — MikroTik **流量流(NetFlow v9)** → 一个自定义收集器,将上下行分配到每个设备 *跨NAT*(postNAT字段226)。
- **DNS** — **AdGuard Home** 统计数据,带有自采样每小时历史记录,因此任何时间窗口都可以进行协调(不仅仅是AdGuard的固定时间窗口)。
- **实时网络图** — 精选拓扑(D3)+ 设备清单合并自MikroTik DHCP/ARP和UniFi。
- **诚实原则** — 如果一个指标无法有信心地进行测量,则不显示(参见ADR 0003)。
## 截图
**安全** — 检测 → 防火墙结果,意图/严重程度分解,威胁情报羞耻墙:

**服务** — 组件健康 & 快速链接:

## 架构
```
Internet ─▶ MikroTik (WAN) ──TZSP mirror──▶ dummy0 ──▶ Suricata ──▶ eve.json ─▶ EveBox
│ └─▶ NetWatch (SQLite)
├─ REST ─┐
UniFi · AdGuard · ntopng ─┼──▶ FastAPI backend ──▶ Jinja2 + vanilla JS + D3 + Chart.js
VirusTotal · AbuseIPDB ───┘ │
MikroTik Traffic-Flow (NetFlow) ─▶ collector ─┘
MikroTik firewall log ─▶ remote syslog ─▶ collector
```
**堆栈:** Python · FastAPI · SQLite (WAL) · D3 · Chart.js · Tailwind (编译)。
后台线程处理轮询、丰富、NetFlow和syslog摄取。
## 有趣的部分——工程决策(ADRs)
*为什么* 以ADRs的形式存在于[`docs/decisions/`](docs/decisions/):
| ADR | 决策 |
|-----|----------|
| 0001 | 通过TZSP WAN镜像进行被动IDS(观察,不内联) |
| 0003 | 流量指标**诚实** — 不显示无法测量的数字 |
| 0004 | 警报**意图**分类(真实信号与阻止列表辐射) |
| 0005 | IDS ↔ 防火墙**结果**关联(以及为什么不是Wazuh) |
| 0006 | 精选拓扑层次结构 |
| 0007 | 通过NetFlow进行设备级互联网(跨NAT的归属技巧) |
| 0008 | 通过采样AdGuard的数组进行DNS每小时历史记录 |
| 0009 | 通过远程syslog进行无损防火墙丢弃捕获 |
## 它故意不做什么
- 它是**被动的**——它观察;MikroTik防火墙执行阻止。
- 它只看到**WAN镜像**——不是隧道(Cloudflare / Tailscale)或纯内部LAN流量。
- 它是一个实验室工具:表单登录 + systemd加固,但**将其放在VPN或反向代理后面**——不要暴露其原始状态。
## 运行它
```
cp .env.example .env # set your endpoints
pip install -r requirements.txt
# 将凭证放入 $NETWATCH_CONFIG_DIR(或 NETWATCH_* 环境变量)
uvicorn app:app --host 0.0.0.0 --port 8889
```
在网络方面,您需要一个MikroTik TZSP WAN镜像 + Suricata,以及可选的流量流(按设备)和远程syslog(防火墙丢弃)。请参阅
[`docs/runbooks/`](docs/runbooks/) 和 [`docs/services/`](docs/services/).
## 注意
来自我的实验室的参考实现——IP地址、主机名、凭据和设备目录已被**清理**。根据您的网络进行修改。不提供任何保证。
**许可证:** MIT.
标签:AdGuard, AV绕过, DEF CON 演示, DNS枚举, DNS过滤, DNS通配符暴力破解, FastAPI, IP地址监控, MikroTik, ntopng, PFX证书, Suricata, TCP/IP协议栈, VivaGraphJS, 地理定位, 威胁情报, 实时数据, 家庭网络, 开发者工具, 攻击检测, 数据可视化工具, 数据展示, 流量捕获, 深度包检测, 现代安全运营, 红队, 网络威胁情报, 网络安全, 网络安全分析, 网络安全工具, 网络安全平台, 网络安全监控, 网络安全策略, 网络安全解决方案, 网络安全评估, 网络安全防护, 网络安全防护工具, 网络安全防护平台, 网络安全防护解决方案, 网络性能监控, 网络拓扑, 网络流量, 网络设备管理, 被动式安全, 远程日志, 逆向工具, 防火墙, 隐私保护, 驱动开发