EveryonelovesDDOS/T88J672
GitHub: EveryonelovesDDOS/T88J672
基于 T-Pot 蜜罐平台的自动化威胁响应系统,通过实时解析 Suricata 日志计算威胁评分并自动生成 iptables 防火墙规则来拦截恶意 IP。
Stars: 0 | Forks: 0
# FYP2 集成 T-Pot 蜜罐平台以实现自动化防火墙规则生成
该系统从 Elasticsearch 读取 T-Pot 蜜罐和 Suricata 事件,为每个攻击者的 IPv4 地址计算威胁评分,应用具有过期时间的 iptables 规则,记录审计追踪,并提供一个只读的 Flask 仪表板。
## 前置条件、工具和库(学术要求)
要执行此源代码并复制该环境,需要以下工具、版本和库:
### 1. 系统、云平台和工具
* **操作系统:** Ubuntu 24.04 LTS
* *下载:* [Ubuntu 24.04 LTS 官方下载](https://ubuntu.com/download/server)
* *(注意:本地测试并不严格要求使用 GCP;您可以在本地下载并安装 Ubuntu 来运行模拟。但是,本项目使用了云服务商,因为拥有公共外部 IP 地址对于主动吸引真实的全球攻击者至关重要。)*
* **云基础架构:** Google Cloud Platform (GCP)
* *链接:* [Google Cloud 免费计划](https://cloud.google.com/free)
* *(提示:如果在 GCP 上部署以捕获实时流量,请记住使用新账户注册以领取 300 美元的免费赠金,该赠金仅限 90 天试用期内使用。)*
* **蜜罐平台:** T-Pot 24.04.1(标准/HIVE 安装)
* *下载与说明:* [T-Potce GitHub 仓库](https://github.com/telekom-security/tpotce)
* **防火墙工具:** Linux `iptables`(Ubuntu 上预装)
* **日志聚合:** Elasticsearch(打包在 T-Pot Docker 容器中)
### 2. 编程语言与库
* **Python 版本:** Python 3.12+
* **所需的 Python 库:** 所有依赖项均列在 `requirements.txt` 中。核心库包括:
* `Flask`(用于 Web 仪表板)
* `elasticsearch`(用于查询 Suricata 日志的 Python 客户端)
* `pytz`(用于时区转换)
* `pytest`(用于本地验证和单元测试)
### 3. 数据集 / 数据库使用
本项目**不使用静态的 CSV/Kaggle 数据集**。
* **实时数据:** 威胁情报是由与 T-Pot 蜜罐服务(Cowrie、Dionaea 等)和 Suricata IDS 交互的真实攻击者动态生成的。日志存储在本地 Elasticsearch 集群的 `logstash-*` 索引中。
* **模拟数据:** 用于评分、测试或离线执行时,请运行 `python generate_sample_data.py`。该脚本向系统中注入逼真的模拟 Suricata JSON 日志,以便在不需要真实恶意流量的情况下测试威胁评分和防火墙生成引擎。
## 生产架构
在运行 T-Pot 的同一台 GCP 虚拟机上运行此项目。独立引擎是唯一允许更改防火墙规则的进程。仪表板仅读取 Elasticsearch、审计数据库和持久化的拦截状态。
- `main.py`:评分和防火墙引擎,由 systemd 以 root 用户身份运行
- `dashboard/app.py`:只读仪表板,由 Gunicorn 提供服务
- `modules/data_source.py`:T-Pot Elasticsearch 集成
- `modules/firewall_manager.py`:经过验证的 IPv4 iptables 规则及过期清理
- `data/audit.db`:SQLite 审计追踪
- `data/block_state.json`:持久化的拦截元数据
对于基于 Docker 的 T-Pot 安装,部署时如果存在 `DOCKER-USER` 链,则会使用它。如果不存在,则回退到 `INPUT` 链。引擎在系统重启后会根据真实的内核规则核对持久化状态,并重新应用缺失的规则。
## 在 T-Pot GCP 虚拟机上部署
上传并解压项目,然后运行以下命令之一:
安全模式,仪表板仅通过 SSH 隧道访问:
```
cd ~/fyp2_tpot
sudo FYP2_RESET_CONFIG=true bash deploy/deploy.sh
```
FYP 演示模式,在您为 `tcp:5000` 添加 GCP VPC 防火墙规则后,可以通过 `http://:5000` 访问仪表板:
```
cd ~/fyp2_tpot
sudo FYP2_RESET_CONFIG=true FYP2_DASHBOARD_PUBLIC=true bash deploy/deploy.sh
```
部署脚本将执行以下操作:
1. 安装 Python、venv、pip 和 iptables。
2. 创建 `.venv` 并安装 `requirements.txt`。
3. 使用生成的仪表板密码和会话密钥创建 `/etc/fyp2.env`。
4. 检测 `DOCKER-USER` 与 `INPUT` 链。
5. 检测您的 SSH 源 IP 并将其添加到白名单。
6. 在启动前验证 Elasticsearch、iptables 和 SQLite。
7. 安装并启动引擎和仪表板的 systemd 服务。
脚本会打印一次生成的仪表板密码。该密码也存储在 `/etc/fyp2.env` 中,仅 root 用户可读取。
## Elasticsearch 配置
默认设置假设 Elasticsearch 由 T-Pot 在本地暴露:
```
ES_HOST=127.0.0.1
ES_PORT=64298
ES_SCHEME=http
ES_INDEX=logstash-*
```
如果部署检查无法连接,请编辑:
```
sudo nano /etc/fyp2.env
```
支持的认证/TLS 设置:
```
ES_USERNAME=
ES_PASSWORD=
ES_SCHEME=https
ES_VERIFY_CERTS=true
ES_CA_CERT=/path/to/ca.crt
```
然后重新运行:
```
sudo bash deploy/deploy.sh
```
## 安全地打开仪表板
仪表板默认绑定到 `127.0.0.1:5000`。如果您在部署时使用了 `FYP2_DASHBOARD_PUBLIC=true`,它将绑定到 `0.0.0.0:5000` 以进行演示访问。在您自己的计算机上运行:
```
ssh -L 5000:127.0.0.1:5000 YOUR_GCP_USER@YOUR_GCP_EXTERNAL_IP
```
然后在本地打开 `http://127.0.0.1:5000`。这样可以避免在公共 HTTP 端口上暴露密码。
## 运维操作
```
sudo systemctl status fyp2-engine fyp2-dashboard
sudo journalctl -u fyp2-engine -f
sudo journalctl -u fyp2-dashboard -f
sudo /usr/sbin/iptables -nL DOCKER-USER --line-numbers
```
在编辑 `/etc/fyp2.env` 之后:
```
sudo systemctl restart fyp2-engine fyp2-dashboard
```
重要的生产环境设置:
```
FIREWALL_LIVE=true
THREAT_SCORE_THRESHOLD=50
BLOCK_EXPIRY_HOURS=24
POLL_INTERVAL_SECONDS=300
ADMIN_IP=YOUR_PUBLIC_ADMIN_IP
```
如果没有设置 `FIREWALL_LIVE=true`,引擎将安全地处于 DRY-RUN(空转)模式。只有当 iptables 确认成功时,防火墙命令才被计为已拦截;失败的命令将记录为 `BLOCK_FAILED`。
## 本地验证
```
python generate_sample_data.py
DATA_SOURCE=file FIREWALL_LIVE=false python main.py --dry-run
pytest tests -v
```
该项目包含针对评分、时间戳解析、白名单安全性、无效 IP 处理、空转行为、防火墙命令失败以及状态持久化成功的测试。
## 重要范围说明
防火墙引擎必须在由其 iptables 规则控制发往 T-Pot 流量的虚拟机上运行。将其安装在单独的虚拟机上虽然能成功对事件进行评分,但无法拦截到达 T-Pot 虚拟机的流量。
标签:CISA项目, Elasticsearch, Flask, Metaprompt, XXE攻击, 网络信息收集, 自动化威胁响应, 蜜罐系统, 请求拦截, 逆向工具, 防火墙自动化