robulanetteam/rdp-honeypot-central
GitHub: robulanetteam/rdp-honeypot-central
一个用于集中管理分布式RDP蜜罐节点的服务器系统,实现威胁数据收集和自动化拦截列表部署。
Stars: 0 | Forks: 0
# 蜜罐中心
集中化管理分布式 RDP 蜜罐节点。
每个节点运行一个轻量级代理,定期向中央服务器发送 `blocklist.txt` 和分析数据。在 Web 界面中,您可以检查传入数据,批准或拒绝它们,然后一键将合并后的 blocklist 部署到您的镜像。
```
Нода 1 ──┐
Нода 2 ──┼──► Центральный сервер (HTTPS, веб-интерфейс) ──► blocklist.txt (зеркало)
Нода N ──┘
```
## 快速入门
### 1. 中央服务器 (5 分钟)
```
git clone https://github.com/robulanetteam/rdp-honeypot-central
cd rdp-honeypot-central/central
# 创建 .env 文件并设置管理员令牌
cp .env.example .env
echo "ADMIN_TOKEN=$(openssl rand -hex 32)" >> .env
# 启动容器
IMAGE=ghcr.io/robulanetteam/honeypot-central:latest docker compose up -d
```
打开 `https://your-server:8100` → 输入 `.env` 中的令牌 → 您已进入界面。
浏览器将显示自签名证书的警告 — 点击“继续”。
### 2. 注册节点
在 Web 界面中:**Settings → Register New Node** → 输入 ID(例如 `rdp-home`)和标签 → 复制令牌。
### 3. 将节点连接到中央服务器
代理已内置于蜜罐容器中 — 无需在主机上安装任何东西。
在节点的 `.env` 文件中添加变量并重启容器:
```
CENTRAL_URL=https://your-server:8100
CENTRAL_NODE_ID=rdp-home
CENTRAL_TOKEN=<токен из UI>
CENTRAL_INSECURE=1 # для self-signed сертификата
```
```
docker compose restart
```
### 4. 工作流程
1. 代理每15分钟发送数据 → **Submissions** 标签页显示 *待处理* 状态
2. 打开提交项:查看分析数据、与已部署 IP 的交集,必要时编辑 blocklist
3. 点击 **Approve** → **Deploy**
4. 完成 — 合并后的 blocklist 可通过 `https://your-server:8100/pub/` 访问
| URL | 格式 |
|-----|------|
| `/pub/blocklist.txt` | 每行一个 IP |
| `/pub/blocklist_pfblocker.txt` | pfBlockerNG 格式 |
| `/pub/blocklist_mikrotik.rsc` | MikroTik RouterOS 格式 |
## 功能
- **开箱即用的 HTTPS** — 容器启动时自动生成有效期10年的自签名证书;可选通过 certbot 获取 Let's Encrypt 证书
- **节点注册表** — 注册节点,发放唯一令牌;节点卡片显示外部 IP、在线/离线状态、最后错误
- **节点 Ping** — UI 中的按钮向节点发送 ICMP ping 并显示延迟
- **事件日志** — **Logs** 标签页,支持按节点和级别(INFO/WARN/ERROR)过滤
- **数据验证** — 传入数据进入 *待处理* 状态;部署前可编辑 blocklist、查看分析数据并检查与已部署 IP 的交集
- **白名单** — 白名单中的 IP 会自动从所有导出中排除
- **合并部署** — IP 去重,与之前的部署合并,并写入三种格式:纯文本、pfBlockerNG、MikroTik RouterOS
- **速率限制** — 5分钟内不允许超过5次登录失败尝试;锁定后需等待
- **状态栏** — UI 顶栏显示客户端 IP、最后登录时间及失败尝试警告
- **Docker 镜像** — 发布在 `ghcr.io/robulanetteam/honeypot-central`(多架构:amd64 + arm64)
## 快速入门 — 中央服务器
```
git clone https://github.com/robulanetteam/rdp-honeypot-central
cd rdp-honeypot-central/central
cp .env.example .env
nano .env # установите ADMIN_TOKEN
# 拉取现成镜像并运行
IMAGE=ghcr.io/robulanetteam/honeypot-central:latest docker compose up -d
```
Web 界面可通过 `https://your-server:8100` 访问
### 环境变量 (`central/.env`)
| 变量 | 必需 | 默认值 | 描述 |
|------|------|--------|------|
| `ADMIN_TOKEN` | ✓ | — | 登录 Web 界面的密钥 |
| `ONLINE_SECS` | | `900` | 节点转为离线状态所需的秒数 |
| `MIKROTIK_LIST_NAME` | | `honeypot-block` | MikroTik RouterOS 中的地址列表名称 |
| `SSL_CN` | | `honeypot-central` | 自签名证书中的 CN |
| `CERTBOT_DOMAIN` | | — | 获取 Let's Encrypt 证书的域名 |
| `CERTBOT_EMAIL` | | — | Let's Encrypt 注册邮箱 |
| `CERTBOT_STAGING` | | `0` | `1` — LE 测试模式(无限制) |
| `CERTBOT_HTTP_PORT` | | `80` | HTTP-01 验证端口 |
### Let's Encrypt(公网域名)
在 `.env` 中添加:
```
CERTBOT_DOMAIN=central.example.com
CERTBOT_EMAIL=admin@example.com
```
并转发 80 端口(用于 HTTP-01 验证)— 该端口已在 `docker-compose.yml` 中声明。
证书将每12小时自动更新一次。
## 导出格式
部署后,在 `./data/public/` 中会生成三个文件,可通过 `https://your-server:8100/pub/` 访问:
| 文件 | 格式 | 用途 |
|------|------|------|
| `blocklist.txt` | 每行一个 IP | 通用 |
| `blocklist_pfblocker.txt` | 每行 `IP/32` | pfBlockerNG (pfSense/OPNsense) |
| `blocklist_mikrotik.rsc` | `add address=IP list=…` | MikroTik RouterOS |
## 代理 — 在每个节点上安装
代理读取蜜罐数据文件夹中的 `blocklist.txt` 和 `analytics.jsonl`,并通过 systemd 定时器每15分钟将它们发送到中央服务器。
### 1. 在界面中注册节点
打开 Web 界面 → **Settings** → **Register New Node** → 输入节点 ID 和标签 → 复制发放的令牌。
### 2. 在您的蜜罐 `.env` 中添加变量
```
# 补充现有 .env 文件中的 honeypot 设置(参见 agent/.env.example)
CENTRAL_URL=https://your-server:8100
CENTRAL_NODE_ID=rdp-home
CENTRAL_TOKEN=<токен из интерфейса>
CENTRAL_DATA_DIR=/home/homeserver/rdp_honeypot/rdp_honeypot/data
# 对于自签名证书:
CENTRAL_INSECURE=1
```
### 3. 启动代理
代理已内置于蜜罐的 Docker 镜像中,并在容器启动时通过 supervisord 自动运行 — 无需在主机上安装任何东西。
在 `.env` 中添加变量后,只需:
```
docker compose restart
```
### 代理环境变量
| 变量 | 必需 | 默认值 | 描述 |
|------|------|--------|------|
| `CENTRAL_URL` | ✓ | — | 中央服务器的 URL (`https://...`) |
| `CENTRAL_NODE_ID` | ✓ | — | 节点 ID(必须与 UI 中注册的 ID 一致) |
| `CENTRAL_TOKEN` | ✓ | — | UI 中的授权令牌 |
| `CENTRAL_INSECURE` | | `0` | `1` — 禁用 TLS 证书验证(用于自签名证书) |
| `CENTRAL_ANALYTICS_DAYS` | | `7` | 包含多少天的分析数据 |
### 代理调试
```
# honeypot 容器内的 agent 日志:
docker logs rdp-honeypot 2>&1 | grep -i central
# 手动运行 agent(一次性):
docker exec rdp-honeypot python3 /app/agent.py
# 仅限 heartbeat:
docker exec rdp-honeypot python3 /app/agent.py --heartbeat
```
## 数据验证工作流程
```
нода отправляет данные
↓
статус: pending ← UI → Submissions
├── просмотр аналитики (страны, суbnets, учётные данные)
├── проверка пересечений с задеплоенными IP
├── редактирование блоклиста перед одобрением
└── проверка по whitelist
↓
✓ Одобрить / ✗ Отклонить
↓
статус: approved
↓
Deploy → слияние с предыдущим деплоем, дедупликация, фильтрация whitelist
↓
статус: deployed → /pub/blocklist.txt | pfblocker | mikrotik.rsc
```
## CI/CD
每次推送到 `main` 分支和每个版本标签 (`v*`) 都会触发 `.github/workflows/docker.yml`,该工作流会构建多架构镜像 (`linux/amd64` + `linux/arm64`) 并将其发布到 `ghcr.io/robulanetteam/honeypot-central`。
## 仓库结构
```
central/
server.py ← бэкенд (FastAPI + SQLite)
static/app.html ← одностраничный веб-интерфейс (тёмная тема)
requirements.txt
Dockerfile
docker-compose.yml
docker-entrypoint.sh ← генерация TLS-сертификата + запуск uvicorn
.env.example
agent/
agent.py ← агент (встроен в контейнер honeypot, запускается через supervisord)
agent_loop.sh ← цикл запуска агента внутри контейнера
install.sh ← устаревший установщик (systemd), не нужен при использовании rdp_honeypot
.env.example ← переменные для добавления в .env honeypot
.github/workflows/
docker.yml ← GitHub Actions CI/CD (multi-arch)
```
标签:blocklist管理, Docker容器化, HTTPS安全, RDP蜜罐, Web管理界面, 代码示例, 分布式系统, 后端开发, 响应大小分析, 多模态安全, 威胁情报, 威胁防御, 开发者工具, 数据分析, 数据可视化, 网络安全, 节点注册, 蜜罐, 蜜罐部署, 证书利用, 请求拦截, 运维管理, 远程桌面安全, 逆向工具, 镜像部署, 隐私保护, 集中管理