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, 防洪保护, 防火墙, 隐私保护