barateza/ddos-analysis
GitHub: barateza/ddos-analysis
一款高性能 Bash 工具集,用于 Plesk 服务器的 DDoS 实时检测与事后日志取证分析。
Stars: 0 | Forks: 0
# DDoS 分析自动化脚本
欢迎,守护者。本脚本将原本繁琐的恶意流量排查过程,转化为一个针对 Plesk 服务器的流线型、自动化调查工具。它能跨多个虚拟主机收集、过滤并报告 HTTP 日志——还支持通过 AbuseIPDB 进行可选的信誉检查。
## 关键特性
### 实时攻击检测 (`--real-time`)
- **实时连接监控**:通过 `ss` 快照跟踪 ESTABLISHED、SYN_RECV 和 TIME_WAIT 状态
- **SYN-Flood 检测**:当 SYN_RECV 计数超过配置的阈值时自动报警
- **目标 IP 识别**:在多 IP 环境中识别受攻击的具体服务器 IP
- **域名负载跟踪**:实时尾随日志(Log tailing),在攻击展开时识别最受攻击的域名
### 事后分析 (默认模式)
- **取证调查**:提取所有虚拟主机在指定攻击日期的日志条目
- **零拷贝流式处理**:直接从 gzip/纯文本源分析日志 —— 比基于拷贝的方式快约 90%
- **IP 信誉**:可选的 AbuseIPDB 集成,用于自动评分(Python 3 原生解析器)
- **域名到 IP 关联**:生成详细报告,准确显示每个 IP 攻击了哪些域名
### 小时级模式分析 (`--hourly-analysis`)
- **基线异常检测**:使用可配置的阈值标记流量峰值(默认:基线以上 200%)
- **攻击窗口**:精确识别事件的开始、峰值和恢复时间
- **CSV 导出**:生成可用于电子表格和利益相关者报告的可操作指标
### 架构与安全性
- **Dry-Run 模式**:在执行前预览所有操作
- **双栈支持**:完全兼容 IPv4 和 IPv6,包括内部范围过滤
- **可移植性**:跨 Linux 发行版运行,依赖项极少
## 前置条件
- **操作系统**:Linux(已在 Ubuntu、Debian、RHEL、CentOS 上测试)
- **权限**:需要 Root 权限(系统日志和网络状态)
- **工具**:`bash`、`grep`、`find`、`curl`、`python3`(用于 AbuseIPDB)、`ss`(实时模式)、`awk`(小时级分析)
## 快速开始
```
# Make 可执行
chmod +x ddos-analysis.sh
# 事后分析 (交互式)
sudo ./ddos-analysis.sh --log-days 3
# 实时监控
sudo ./ddos-analysis.sh --real-time --refresh-rate 2
# With IP 信誉查询
export ABUSEIPDB_API_KEY="your_api_key_here"
sudo ./ddos-analysis.sh --with-abuseipdb-query
```
## 核心选项
| 标志 | 用途 |
|---|---|
| `-d`, `--dry-run` | 预览操作而不进行修改 |
| `-l`, `--log-days DAYS` | 日志收集的时间窗口(默认:3) |
| `--date DATE` | 指定攻击日期(例如 `15/Jan/2026`)用于非交互式使用 |
| `--target-ip IP` | 将调查范围过滤到特定的服务器 IP |
| `--no-cleanup` | 退出时保留带有时间戳的调查目录 |
| `--baseline-threshold %` | 小时级异常检测的灵敏度(默认:200) |
| `--export-csv` | 将小时级分析导出为 CSV |
## 示例
```
# Non-interactive 事后分析 With 信誉查询
./ddos-analysis.sh --date "15/Jan/2026" --target-ip "203.0.113.5" --with-abuseipdb-query
# 高敏感度实时监控
./ddos-analysis.sh --real-time --syn-threshold 100 --refresh-rate 1
```
## 工作原理
### 实时模式
1. 使用 `ss` 跟踪 ESTABLISHED 和 SYN_RECV 连接数
2. 当 SYN_RECV 阈值被超过时发出警报
3. 按活动连接数对源 IP 进行排名
4. 显示哪些服务器 IP 正在遭受攻击
5. 尾随最近的访问日志以识别最受攻击的域名
### 事后模式
1. 在 `/tmp/ddos_investigation_` 下创建安全的工作目录
2. 流式传输所有 vhost 目录中的 `access*` 文件
3. 按指定的攻击日期过滤条目
4. 统计并排序顶级 IP;运行可选的 AbuseIPDB 查询
5. 将每个 IP 映射到其攻击的域名
## 故障排除
| 问题 | 解决方法 |
|---|---|
| 权限被拒绝 | 使用 `sudo` 运行 |
| `ss` 未找到 | 安装 `iproute2` |
| AbuseIPDB 错误 | 验证 `ABUSEIPDB_API_KEY` 已设置且 `python3` 可用 |
## 链接
- [ROADMAP.md](ROADMAP.md) — 开发历史和计划阶段
- [CHANGELOG.md](CHANGELOG.md) — 发布历史
- [Apache License 2.0](LICENSE)
- [Plesk KB Article #12377282594199](https://support.plesk.com/hc/en-us/articles/12377282594199) — 相关知识库参考
标签:AbuseIPDB, certspotter, DDoS检测, HTTP日志, IPv6, IP信誉, Linux运维, Plesk, PowerShell, SYN泛洪, Ubuntu, 事后取证, 密码管理, 应用安全, 异常检测, 插件系统, 网络安全, 配置错误, 隐私保护