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管理界面, 代码示例, 分布式系统, 后端开发, 响应大小分析, 多模态安全, 威胁情报, 威胁防御, 开发者工具, 数据分析, 数据可视化, 网络安全, 节点注册, 蜜罐, 蜜罐部署, 证书利用, 请求拦截, 运维管理, 远程桌面安全, 逆向工具, 镜像部署, 隐私保护, 集中管理