VortexisTV/HoneyRadar
GitHub: VortexisTV/HoneyRadar
HoneyRadar 是一个实时蜜罐威胁情报可视化地图,将 Cowrie 和 OpenCanary 捕获的攻击事件以 3D 地球仪动态弧线形式展示,并集成 IP 信誉评分与攻击统计分析。
Stars: 0 | Forks: 0
# HoneyRadar
一个实时的蜜罐威胁情报地图,使用 [Cowrie](https://github.com/cowrie/cowrie)、[OpenCanary](https://github.com/thinkst/opencanary)、[Tailscale](https://tailscale.com/) 以及 IP 信誉丰富信息。它将传入的攻击渲染为交互式 3D 地球仪威胁地图上的动态弧线,并配有实时事件订阅和原始 Cowrie 及 OpenCanary 日志行。
https://github.com/user-attachments/assets/8569f12b-d984-4376-8b2c-295423188bb2
## 功能
- **3D 地球仪**和**平面 2D 世界地图**,带有动态攻击弧线、传感器脉冲和冲击波环。点击拖动可旋转,滚动可缩放,此外在 TWEAKS 中还有一个可选的**自动旋转**开关。
- **地图样式:** 地球仪、蓝色弹珠、夜间灯光和平面 2D。
- 整个界面的**深色/浅色主题**。

- **自动发现的蜜罐传感器**,应用蜜罐的 WebSocket URL 后,会自动进行地理定位并放置在地图上显示活动。
- **实时事件订阅**,每个事件包含:时间戳、来源国家 + 城市、国旗、目标传感器、端口、源 IP、事件类型和详细信息。
- **点击任意事件查看完整记录:** 在订阅中选择一行将打开**事件详情**面板,显示该事件的完整 JSON。
- **实时更新的计数器:** 总攻击数、每分钟攻击数、唯一源 IP、在线传感器、登录失败、登录成功、连接尝试、命令。

- **命令浏览器:** 一个**已使用命令**面板,显示总执行次数、唯一命令数以及按频率排名的常用命令。

- **排名:** 最常被针对的端口、最常见的源 IP 地址、最主要的来源国家以及最常尝试的凭据。


- **IP 信誉面板:** 通过服务器端丰富信息(**Spamhaus DROP, AbuseIPDB, VirusTotal**)对主要源 IP 的恶意程度进行评分。

- **原始日志抽屉**流式传输每个事件的 `cowrie.json` 和 `opencanary.log` 行,可以选择暂停、清除、加载新的 `.json` 文件进行重播,**并下载捕获的日志**。
- **嵌入式国旗**(离线安全;无需外部 CDN)。
## 要求
- VPS 服务器或任何目标机器(推荐使用 Ubuntu Server 22.04 或 24.04)
- 主机 和 VPS 服务器上均需安装 Tailscale
## 在目标机器上安装
- Python 3.10+
- Cowrie 和/或 OpenCanary
- 用于服务器上的私有 SSH 连接以及创建 WebSocket URL 的 Tailscale
```
ssh username@TAILSCALE-VPS-IP
```
## 快速开始
1. 下载 `HoneyRadar Attack Map.html`。首次打开 HTML 时,状态显示为 **OFFLINE** 且地图为空。这是正常的。在应用您的蜜罐 WebSocket URL 后,它将切换为 **LIVE** 并可视化真实流量。
2. 在任何现代浏览器(Chrome、Edge、Firefox、Safari)中打开它。
### 在目标机器上设置实时订阅(WebSocket 桥接)
Cowrie 或 OpenCanary 不提供 WebSocket URL。您需要创建一个轻量级桥接,将每个新记录的事件广播到您的地图。通过 Tailscale 保持此订阅私有。**Tailscale Serve** 提供 HTTPS/TLS 并为您代理 WebSocket。
#### 1. 安装 WebSocket 库
以您的管理员 `ubuntu` 用户身份运行:
```
sudo -u cowrie python3 -m venv /home/cowrie/ws-env
sudo -u cowrie /home/cowrie/ws-env/bin/pip install \
"websockets==16.0"
```
#### 2. 创建桥接
```
sudo nano /home/cowrie/websocket.py
```
粘贴 [`websocket.py`](https://raw.githubusercontent.com/VortexisTV/HoneyRadar/refs/heads/main/websocket.py) 中的代码。
更正其所有权:
```
sudo chown cowrie:cowrie /home/cowrie/websocket.py
sudo chmod 750 /home/cowrie/websocket.py
```
#### 3. 创建系统服务
```
sudo nano /etc/systemd/system/honeyradar-websocket.service
```
粘贴本仓库中 [`honeyradar-websocket.service`](https://raw.githubusercontent.com/VortexisTV/HoneyRadar/refs/heads/main/honeyradar-websocket.service) 的代码):
```
[Unit]
Description=Honeypot JSON WebSocket Bridge
After=network-online.target cowrie.service opencanary.service
Wants=network-online.target
[Service]
Type=simple
User=cowrie
Group=cowrie
WorkingDirectory=/home/cowrie/cowrie
Environment=COWRIE_LOG=/home/cowrie/cowrie/var/log/cowrie/cowrie.json
Environment=OPENCANARY_LOGS=/var/tmp/opencanary.log
EnvironmentFile=/etc/honeypot-bridge/reputation.env
ExecStart=/home/cowrie/ws-env/bin/python /home/cowrie/websocket.py
Restart=always
RestartSec=3
NoNewPrivileges=true
PrivateTmp=false
[Install]
WantedBy=multi-user.target
```
#### 4. 为 IP 信誉创建受保护的环境变量文件(可选的丰富信息)
```
sudo mkdir -p /etc/honeypot-bridge
sudo nano /etc/honeypot-bridge/reputation.env
```
将您的 API 密钥放在这里:
```
ENABLE_SPAMHAUS=true
SPAMHAUS_DROP_URL=https://www.spamhaus.org/drop/drop.json
ENABLE_ABUSEIPDB=true
ABUSEIPDB_API_KEY=your_new_abuseipdb_key_here
ENABLE_VIRUSTOTAL=true
VIRUSTOTAL_API_KEY=your_new_virustotal_key_here
REPUTATION_CACHE_TTL_HOURS=24
```
对其进行权限锁定:
```
sudo chown root:root /etc/honeypot-bridge/reputation.env
sudo chmod 600 /etc/honeypot-bridge/reputation.env
```
#### 5. 启动 Websocket 服务
```
sudo systemctl daemon-reload
sudo systemctl enable --now honeyradar-websocket
sudo systemctl status honeyradar-websocket --no-pager
sudo ss -lntp | grep 8765
```
预期结果,它仅在 localhost 上监听:
```
127.0.0.1:8765
```
🚫 **不要在 VPS 防火墙中打开端口 `8765`。** Tailscale 负责处理访问。
#### 6. 通过 Tailscale 私下发布
```
sudo tailscale serve --bg 8765
sudo tailscale serve status
```
它应该会打印类似以下的内容:
```
https://vps-3ab2df8e.YOUR-TAILNET.ts.net
```
您地图的 WebSocket URL 是使用 `wss://` 的相同主机名:
```
wss://vps-3ab2df8e.YOUR-TAILNET.ts.net/
```
打开 **TWEAKS**,将您的蜜罐 WebSocket URL 粘贴到 **LIVE FEED — COWRIE WEBSOCKET URL** 中,然后点击 **APPLY & CONNECT**。查看地图的设备也必须连接到您的 Tailscale 网络。
### 故障排除
*启动 Websocket 服务后没有订阅?* 删除蜜罐日志并重启 Cowrie/OpenCanary。
### 事件格式
每一行都是一个 JSON 对象。地图读取的字段包括:
| 字段 | 用于 |
| --- | --- |
| `eventid` | 事件类型/颜色(`cowrie.login.failed`, `cowrie.login.success`, `cowrie.session.connect`, `cowrie.command.input`) |
| `src_ip` | 源 IP + 唯一 IP 计数 |
| `dst_ip` | **标识/创建蜜罐传感器**(进行地理定位以放置) |
| `dst_port` | 最常被针对的端口 |
| `username`, `password` | 尝试的热门凭据(登录事件) |
| `input` | 命令详情(`cowrie.command.input`) |
| `timestamp` | 事件时间 |
| `geoip.latitude` / `geoip.longitude` *(可选)* | 攻击弧线的来源位置;如果缺失,将自动对 `src_ip` 进行地理定位(也接受 `lat`/`lon`) |
| `geoip.country_name`, `geoip.country_code2`, `geoip.city` *(可选)* | 来源国家标签、国旗和城市;否则从地理定位填充 |
| `dst_geoip` / `geoip_dst` *(可选)* | 蜜罐位置,代替 IP 地理定位使用 |
示例行:
```
{"eventid":"cowrie.login.failed","src_ip":"61.177.7.20","dst_ip":"203.0.113.10","dst_port":22,"username":"root","password":"123456","timestamp":"2026-06-23T10:00:01.000000Z","geoip":{"country_name":"China","country_code2":"CN","city":"Shanghai","latitude":31.0,"longitude":121.0}}
```
## 构建使用
- [three-globe](https://github.com/vasturiano/three-globe) / [three.js](https://threejs.org/) — 3D 地球仪
- [flag-icons](https://github.com/lipis/flag-icons) — 嵌入式国旗
- [Natural Earth](https://www.naturalearthdata.com/) — 国家边界数据
- [ipwho.is](https://ipwho.is) — 源和目标 IP 地理定位
## 许可证
与 Cowrie 或 OpenCanary 项目无关。
标签:后端开发, 威胁情报, 开发者工具, 网络安全, 蜜罐, 证书利用, 逆向工具, 隐私保护