sxper123/sxp
GitHub: sxper123/sxp
一个低交互 SSH 蜜罐系统,通过模拟 SSH 服务诱捕攻击者并联动 iptables 自动封禁恶意 IP,同时提供 Web 可视化面板进行攻击数据分析与趋势监控。
Stars: 0 | Forks: 0
# SSH 蜜罐系统
低交互 SSH 蜜罐,用于捕获暴力破解攻击,自动记录攻击来源 IP、尝试账号密码、Shell 命令等行为,并通过 iptables 自动封禁恶意 IP。提供 Web 管理面板进行数据可视化分析、攻击趋势监控及黑白名单管理。
## 一、项目背景与目的
在网络攻防对抗中,暴露在公网的 SSH 端口会持续遭受来自全球的暴力破解攻击。传统手段难以有效感知攻击态势、定位攻击来源。
**本项目目标:**
- 部署低交互 SSH 蜜罐,诱捕攻击者,记录攻击行为全貌;
- 提供 Web 可视化面板,实时掌握攻击趋势、来源地区、攻击时段分布;
- 通过 iptables 自动封禁高频攻击 IP,降低真实服务被攻击的风险;
- 支持黑白名单管理,避免误封合法 IP;
- 自动维护 IP 归属地数据,实现攻击来源地图化展示。
## 二、核心功能
| 编号 | 功能 | 说明 |
|------|------|------|
| FUNC-01 | SSH 蜜罐 | 监听 7777 端口,模拟 SSH 服务,记录登录尝试的全部载荷 |
| FUNC-02 | Web 管理面板 | 浏览器访问,查看攻击记录、数据分析、黑名单管理 |
| FUNC-03 | iptables 自动封禁 | 高频攻击 IP 自动加入 BLACKLIST 链封禁 |
| FUNC-04 | 黑白名单管理 | Web 面板添加/删除白名单 IP,避免误封 |
| FUNC-05 | 攻击地区分布 | 自动查询 IP 归属地(国家/地区/城市/ISP),地图化展示 |
| FUNC-06 | 30 天攻击趋势 | 折线图展示近 30 天攻击次数变化 |
| FUNC-07 | 24 小时时段分布 | 柱状图展示每日攻击高峰时段 |
| FUNC-08 | 进程保活 | keep.bin 守护进程,异常自动重启,7x24 不间断 |
| FUNC-09 | IP 归属地定时更新 | 每小时自动查询新 IP 的归属地信息 |
| FUNC-10 | 登录认证 | Web 面板密码保护,防止未授权访问 |
## 三、技术架构
┌──────────────────────────────────┐
│ keep.bin (保活守护) │
│ 每 30s 检测 7777 端口,异常重启 │
│ 首次启动自动添加 cron 定时任务 │
└─────────────┬────────────────────┘
│ 启动/监控
┌─────────────▼────────────────────┐
│ ff-enhanced.bin (主程序) │
│ │
│ ┌─────────┐ ┌────────────────┐ │
│ │ SSH 蜜罐 │ │ Web 管理面板 │ │
│ │ :7777 │ │ :5000 │ │
│ └────┬────┘ └───────┬────────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌─────────────────────────────┐ │
│ │ data.db (SQLite) │ │
│ │ 攻击记录 / 黑白名单 / 配置 │ │
│ └─────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────┐ │
│ │ iptables (自动封禁) │ │
│ │ WHITELIST / BLACKLIST 链 │ │
│ └─────────────────────────────┘ │
└───────────────────────────────────┘
async_ip_updater.bin (cron 每小时)
─────────────────────────────────
使用 ip-api.com 查询新 IP 归属地 → 写入 data.db
## 四、端口说明
| 端口 | 协议 | 服务 | 说明 |
|------|------|------|------|
| 5000 | TCP | Web 管理面板 | Flask 内置服务器,密码保护 |
| 7777 | TCP | SSH 蜜罐 | 模拟 SSH 服务,诱捕攻击者 |
## 五、快速部署(编译版)
使用 Nuitka 预编译的独立可执行文件,无需 Python 环境。
### 5.1 文件结构(release 包)
release/
├── keep.bin # 保活守护进程(启动入口)
├── ff-enhanced.bin # 蜜罐主程序 + Web 面板
├── async_ip_updater.bin # IP 归属地更新工具
├── start.sh # 一键启动脚本
├── stop.sh # 一键停止脚本
├── config.json # 配置文件(密码等)
├── data.db # SQLite 数据库
├── ip_cache.json # IP 归属地缓存
├── templates/ # Web 面板模板
│ ├── login.html
│ ├── index.html
│ ├── analysis.html
│ ├── stats.html
│ ├── config.html
│ ├── report.html
│ └── error.html
└── *.so # 运行时依赖库(Nuitka standalone)
### 5.2 安装步骤
# 1. 上传压缩包并解压
mkdir -p /opt/sxp
tar xzf 0722-release.tar.gz -C /opt/sxp/
cd /opt/sxp/release
# 2. 赋予执行权限
chmod +x keep.bin ff-enhanced.bin async_ip_updater.bin start.sh stop.sh
# 3. 关闭 firewalld(避免干扰 iptables 规则)
systemctl stop firewalld 2>/dev/null
systemctl disable firewalld 2>/dev/null
# 4. 清空已有 iptables 规则(程序启动后自动建链)
iptables -F 2>/dev/null
iptables -X 2>/dev/null
# 5. 启动
bash start.sh
### 5.3 验证部署
# 检查进程
ps aux | grep -E "keep.bin|ff-enhanced.bin" | grep -v grep
# 检查端口
ss -tlnp | grep -E "5000|7777"
# 访问 Web 面板
curl -I http://127.0.0.1:5000
### 5.4 停止服务
bash stop.sh
## 六、源码运行(开发/调试)
### 6.1 环境要求
| 依赖 | 版本/说明 |
|------|-----------|
| 操作系统 | CentOS 7/8/Stream、Ubuntu 等 Linux 发行版 |
| Python | 3.9+ |
| Flask | Web 框架 |
| requests | HTTP 请求库 |
| psutil | 进程管理 |
| SQLite3 | 数据库(Python 内置) |
| iptables | 封禁策略 |
### 6.2 安装依赖
pip3.9 install flask requests psutil
### 6.3 启动
cd /sxp1105/0722
nohup python3.9 keep.py > /dev/null 2>&1 &
`keep.py` 启动后自动完成:
- 拉起蜜罐服务(SSH 蜜罐 7777 + Web 面板 5000)
- 端口保活守护:每 30 秒检测一次,连续 3 次失败自动重启
- 首次运行自动添加 crontab 定时任务
## 七、Web 管理面板
浏览器访问 `http://<服务器IP>:5000`,使用 `config.json` 中配置的密码登录。
### 页面功能
| 页面 | 路由 | 功能 |
|------|------|------|
| 登录页 | `/login` | 密码认证,防未授权访问 |
| 攻击记录 | `/` (首页) | 攻击 IP、账号密码、来源地区、时间,支持搜索筛选 |
| 数据分析 | `/analysis` | 30天攻击趋势图、地区分布饼图、24小时时段图、地区TOP10 |
| 统计概览 | `/stats` | 关键指标仪表盘:攻击总量、封禁数、唯一IP等 |
| 配置管理 | `/config` | 修改密码、调整封禁阈值等参数 |
| 报告页 | `/report` | 攻击详情报告 |
## 八、iptables 联动机制
程序运行时自动创建以下 iptables 链:
WHITELIST → 白名单 IP,直接 ACCEPT
BLACKLIST → 黑名单 IP,直接 DROP
- 攻击 IP 达到频率阈值时,自动加入 BLACKLIST 链
- 白名单中 IP 的访问在 WHITELIST 链中被放行,不会触发封禁逻辑
- Web 面板支持动态添加/删除黑白名单 IP,实时生效
## 九、定时任务
`keep.py` / `keep.bin` 首次运行时会自动添加 crontab:
# IP 归属地自动更新 — 每小时执行
0 * * * * cd <项目目录> && python3.9 async_ip_updater.py --auto >> hourly_ip.log 2>&1
# 每天清理过期 PID 文件
5 0 * * * find <项目目录> -name "async_ip_updater.pid" -mtime +1 -delete
数据来源:ip-api.com 免费 API(40 次/分钟限制,结果缓存 7 天)。
## 十、编译打包
使用 Nuitka 将 Python 源码编译为 C 可执行文件,无需目标机器安装 Python。
cd /sxp1105/0722
bash build.sh
编译产物输出到 `release/` 目录:
| 产物 | 大小 | 说明 |
|------|------|------|
| `ff-enhanced.bin` | ~24M | 蜜罐主程序(含 Flask + 全部依赖) |
| `keep.bin` | ~6M | 保活守护进程 |
| `async_ip_updater.bin` | ~12M | IP 归属地更新工具 |
打包发布:
cd /sxp1105/0722
tar czf 0722-release.tar.gz release/
## 十一、项目文件清单
0722/
├── ff-enhanced.py # 主程序源码:蜜罐 + Web 面板
├── keep.py # 保活守护进程源码
├── async_ip_updater.py # IP 归属地更新工具源码
├── config.json # 系统配置文件
├── data.db # SQLite 攻击记录数据库
├── ip_cache.json # IP 归属地查询缓存
├── build.sh # Nuitka 一键编译脚本
├── README.md # 项目说明文档
├── templates/ # Web 前端模板
│ ├── login.html # 登录认证页
│ ├── index.html # 攻击记录列表
│ ├── analysis.html # 数据可视化分析
│ ├── stats.html # 统计概览仪表盘
│ ├── config.html # 系统配置管理
│ ├── report.html # 攻击详情报告
│ └── error.html # 错误提示页
├── release/ # 编译产物(部署用,gitignore)
│ ├── keep.bin
│ ├── ff-enhanced.bin
│ ├── async_ip_updater.bin
│ ├── start.sh
│ ├── stop.sh
│ ├── config.json
│ ├── data.db
│ ├── ip_cache.json
│ ├── templates/
│ └── *.so
└── 0722-release.tar.gz # 发布压缩包
## 十二、常见问题
**Q: Web 面板无法访问?**
检查 5000 端口是否监听:`ss -tlnp | grep 5000`;确认防火墙已关闭。
**Q: 蜜罐端口被占用?**
修改 `ff-enhanced.py` 中 `HONEYPOT_PORT` 配置项。
**Q: IP 归属地显示"未知"?**
检查 `async_ip_update.log`,如大量失败则网络可能无法访问 ip-api.com。
**Q: 如何修改 Web 管理密码?**
编辑 `config.json` 修改 `password` 字段后重启服务。
标签:iptables, SSH, Web可视化, 威胁情报, 安全, 开发者工具, 蜜罐, 证书利用, 超时处理, 逆向工具