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可视化, 威胁情报, 安全, 开发者工具, 蜜罐, 证书利用, 超时处理, 逆向工具