XDibox/ssh-honeypot
GitHub: XDibox/ssh-honeypot
一个用 Python 编写的轻量级 SSH 蜜罐,通过记录并分析所有凭据攻击尝试来收集威胁情报和构建攻击者画像。
Stars: 0 | Forks: 0
# SSH Honeypot
一个轻量级的 SSH honeypot,使用 Python 编写,可记录针对它的每一次凭据尝试。它永远不会授予 shell 访问权限——它只会记录攻击者。
本项目作为一个网络安全作品集项目开发,旨在展示威胁情报收集、攻击者行为分析以及防御性工具的开发。
## 工作原理
1. 监听可配置的端口(默认:2222,在生产环境中请使用 22)
2. 呈现逼真的 OpenSSH banner 以吸引扫描器
3. 接受 SSH 连接,但始终拒绝身份验证
4. 记录每一次尝试:时间戳、IP、用户名、密码、SSH 客户端版本
5. 使用 GeoIP 数据丰富每条记录(国家、城市、ISP、代理/托管标记)
6. 写入结构化的 JSON 日志,用于分析和报告
## 架构
```
ssh-honeypot/
├── honeypot.py # Entry point & CLI
├── config.py # Port, logging, GeoIP settings
├── report.py # Attack statistics report + IP feed export
├── honeypot.service # systemd service file
└── core/
├── server.py # paramiko SSH server — captures credentials
├── logger.py # Dual logging: human-readable text + JSON
└── geoip.py # GeoIP enrichment via ip-api.com
```
## 安装说明
```
git clone https://github.com/XDibox/ssh-honeypot.git
cd ssh-honeypot
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
```
## 用法
```
# 在端口 2222 上运行(不需要 root)
python3 honeypot.py
# 在端口 22 上运行(需要 root/sudo — 用于生产环境)
sudo python3 honeypot.py --port 22
# 禁用 GeoIP enrichment(速度更快,无外部请求)
python3 honeypot.py --no-geo
# 自定义日志文件
python3 honeypot.py --log /var/log/honeypot.log --json /var/log/honeypot.json
```
### 作为 systemd 服务运行
```
# 编辑 honeypot.service:设置正确的路径
sudo cp honeypot.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable honeypot
sudo systemctl start honeypot
# 实时监控
sudo journalctl -u honeypot -f
```
## 日志格式
### 文本日志 (`honeypot.log`)
```
2026-05-28 03:14:22 | CONNECT | 45.142.212.100:54231
2026-05-28 03:14:23 | ATTEMPT | 45.142.212.100:54231 [Russia, Moscow — Aeza Group] | user='root' pass='123456' | client='SSH-2.0-libssh2_1.10.0'
2026-05-28 03:14:23 | DISCONNECT | 45.142.212.100:54231
```
### JSON 日志 (`honeypot.json`)
```
{
"timestamp": "2026-05-28T03:14:23+00:00",
"ip": "45.142.212.100",
"port": 54231,
"username": "root",
"password": "123456",
"client_version": "SSH-2.0-libssh2_1.10.0",
"geo": {
"country": "Russia",
"country_code": "RU",
"city": "Moscow",
"isp": "Aeza Group Ltd.",
"org": "AS210644 AEZA GROUP Ltd",
"proxy": false,
"hosting": true
}
}
```
## 报告
```
# 完整的攻击报告
python3 report.py
# 从特定日期进行过滤
python3 report.py --since 2026-05-28
# 将攻击者 IP 导出为明文 feed
# (兼容 network-ids threat intel feed)
python3 report.py --export-feed attackers.txt
```
示例输出:
```
════════════════════════════════════════════════════════════════
SSH HONEYPOT REPORT | 2026-05-28 00:00 → 2026-05-28 23:59
Total attempts: 4821
════════════════════════════════════════════════════════════════
TOP ATTACKING IPs
45.142.212.100 ████████████████████████████ 842 RU, Moscow [VPN/Proxy]
185.220.101.47 ████████████████░░░░░░░░░░░░ 531 DE, Frankfurt
TOP USERNAMES TRIED
root ████████████████████████████ 3104
admin ████████████░░░░░░░░░░░░░░░░ 1247
TOP PASSWORDS TRIED
123456 ████████████████████░░░░░░░░ 892
password ████████████░░░░░░░░░░░░░░░░ 541
```
## 与 network-ids 集成
导出攻击者 feed 并将其加载到 [network-ids](https://github.com/XDibox/network-ids) 威胁情报引擎中:
```
python3 report.py --export-feed attackers.txt
# 在 network-ids config.py 中:
THREAT_INTEL = {
'feed_files': ['/path/to/ssh-honeypot/attackers.txt'],
...
}
```
## 许可证
MIT License — 详情请参阅 [LICENSE](LICENSE)。
标签:Elastic, Paramiko, Python, SSH, 威胁情报, 安全, 开发者工具, 无后门, 蜜罐, 证书利用, 超时处理, 逆向工具