ek-mc/mini-firewall
GitHub: ek-mc/mini-firewall
这是一个基于cron的轻量级防火墙脚本,用于Linux服务器自动防护洪泛攻击。
Stars: 2 | Forks: 0
# 小型防火墙
适用于 Linux 服务器的轻量级基于 cron 的防护洪泛攻击防火墙,使用 **ipset + iptables**(支持 IPv4 和 IPv6)。
## 状态
- 版本:**v0.4.0**
- 许可证:MIT
- 最新发布:https://github.com/ek-mc/mini-firewall/releases/latest
## 功能
- 通过 cron 每分钟运行一次。
- 扫描受保护端口(默认:`80,443`)的活跃 TCP 连接。
- 通过 `ipset` + `iptables`(IPv4)和 `ip6tables`(IPv6)对高连接数的公共 IP 进行封禁。
- 使用**原生 ipset 超时**自动解封(默认:15 分钟)。
- **重复违规升级处理**:在 `ESCALATE_WINDOW_SECONDS`(默认:24 小时)内被封禁 `BAN_ESCALATE_THRESHOLD`(默认:3)次的 IP 将被移至一个无过期时间的永久封禁列表。
- 支持**白名单**文件以跳过受信任的 IP。
- 支持 `--dry-run` 模式。
- 支持 `--status` 模式。
- 支持 `--metrics` 模式,并将 Prometheus 风格的快照写入 `/var/lib/ddos-guard/metrics.prom`。
- 可选通过环境变量 `ALERT_WEBHOOK_URL` 在封禁事件时发送 Webhook 警报。
- 操作日志记录到 `/var/log/ddos-guard.log`。
## 文件
- `ddos-guard.sh` — 主检测/封禁脚本。
- `install-cron.sh` — 安装辅助脚本。
- `uninstall.sh` — 卸载辅助脚本。
- `CHANGELOG.md` — 发行说明。
- `VERSION` — 当前版本。
## 默认行为
- 受保护端口:`80,443`
- 每个 IP 的阈值:`120`
- 封禁时间:`900 秒`
- 升级阈值:在 `86400 秒`(24 小时)内达到 `3` 次封禁 → 永久封禁
你可以在 `ddos-guard.sh` 文件的顶部更改这些设置:
- `PROTECTED_PORTS`
- `THRESHOLD_PER_IP`
- `BAN_SECONDS`
- `BAN_ESCALATE_THRESHOLD` — 触发永久封禁前,在窗口期内的封禁次数(默认:`3`)
- `ESCALATE_WINDOW_SECONDS` — 用于计算重复违规的滚动窗口时间(默认:`86400` = 24 小时)
## IPv6 支持
当 `ip6tables` 可用时,IPv6 封禁会自动启用。将额外创建两个 ipset:
- `ddos_block6` — 临时 IPv6 封禁(与 IPv4 相同的 TTL)
- `ddos_persistent6` — 用于重复违规者的永久 IPv6 封禁
如果未安装 `ip6tables`,IPv6 封禁将被静默跳过。
## 白名单
文件:`/etc/ddos-guard/whitelist.txt`
每行添加一个受信任的公共 IP(IPv4 或 IPv6),例如:
```
1.2.3.4
2001:db8::1
```
## 可选 Webhook 警报
在运行脚本之前(或在 cron 包装器中)设置一个环境变量:
```
export ALERT_WEBHOOK_URL="https://example.com/webhook"
```
## 安装指南
### 1) 克隆仓库
```
git clone https://github.com/ek-mc/mini-firewall.git
cd mini-firewall
```
### 2) 安装依赖项
- 需要安装了以下组件的 Linux:
- `ipset`
- `iptables`
- `ip6tables`(可选,用于 IPv6 封禁)
- `ss`(来自 `iproute2`)
- `flock`(来自 `util-linux`)
在 Debian/Ubuntu 上:
```
sudo apt-get update
sudo apt-get install -y ipset iptables ip6tables iproute2 util-linux
```
### 3) 配置阈值(可选)
编辑 `ddos-guard.sh`:
- `PROTECTED_PORTS`
- `THRESHOLD_PER_IP`
- `BAN_SECONDS`
- `BAN_ESCALATE_THRESHOLD`
- `ESCALATE_WINDOW_SECONDS`
### 4) 安装 cron 任务
```
sudo bash install-cron.sh
```
### 5) 验证
```
sudo crontab -l | grep ddos-guard.sh
sudo tail -n 50 /var/log/ddos-guard.log
sudo bash ddos-guard.sh --status
```
### 6) 试运行测试
```
sudo bash ddos-guard.sh --dry-run
```
### 7) 指标快照
```
sudo bash ddos-guard.sh --metrics
cat /var/lib/ddos-guard/metrics.prom
```
### 8) 卸载(如需要)
```
sudo bash uninstall.sh
```
## 日志和状态
- 日志文件:`/var/log/ddos-guard.log`
- 锁文件:`/var/run/ddos-guard.lock`
- 白名单:`/etc/ddos-guard/whitelist.txt`
- 统计文件:`/var/lib/ddos-guard/stats.env`
- 指标文件:`/var/lib/ddos-guard/metrics.prom`
- 违规者记录:`/var/lib/ddos-guard/offenders/`
## 注意事项(重要)
- 这是一个基础防御脚本,**并非**完整的 DDoS 防护平台。
- 对于生产环境的 WordPress/高流量场景,请配合使用:
- Nginx `limit_req/limit_conn`
- fail2ban
- CDN/WAF 控制
- 请仔细测试,以避免阻止合法流量。
## 更新日志
参见 [CHANGELOG.md](CHANGELOG.md)。
## 许可证
MIT — 参见 [LICENSE](LICENSE)。
标签:cron任务, Cutter, ETW劫持, ipset, iptables, IPv4, IPv6, IP封禁, Linux服务器, PowerShell, Shell脚本, TCP连接管理, Webhook警报, 升级策略, 性能监控, 恶意IP阻止, 日志记录, 服务器防护, 白名单, 监控, 网络安全, 网络层防御, 网络防护, 自动封禁, 自动规则, 连接限制, 重复违规处理, 防DDoS, 防洪保护, 防火墙, 隐私保护