ayzeta/csf-autogroup
GitHub: ayzeta/csf-autogroup
为 CSF 防火墙自动将多个被封禁的攻击者 IP 合并为子网级封禁规则,防止 csf.deny 列表溢出。
Stars: 1 | Forks: 0
# CSF 自动分组
自动将攻击者 IP 合并为子网封禁,适用于 **ConfigServer
Security & Firewall (CSF)**,防止暴力破解洪泛超出你的
`csf.deny` 行数限制。
当来自同一个 `/24` 的数十个 IP 猛攻你的服务器时,逐个封禁它们
会很快填满拒绝列表。此脚本会对它们进行分组:在同一个
`/24` 中出现多个被封禁的单个 IP 时 → 封禁整个 `/24` 并移除单个 IP(释放名额)。
多次违规者将从临时封禁升级为永久封禁;`/16` 范围仅被标记为
待审查(从不自动封禁——范围太广)。当拒绝
列表接近其限制时,它还会向你发送电子邮件。
适用于**任何 CSF 服务器**(无论是否使用 cPanel)。除了 CSF 和
可用的 `mail` 命令外,无其他依赖项。
## ⚠️ 首先阅读此内容
此脚本会**修改你的防火墙**——它会自动封禁整个 `/24` 子网(256 个
地址)。配置错误的阈值,或者合法访问者的 IP 落在被封禁的
`/24` 中,都可能导致人们被锁定。
- 在 `/etc/csf/csf.allow` 中**将你自己的 IP 加入白名单**(CSF 的允许会覆盖拒绝)。
- **从高阈值开始**,并观察 `/var/log/csf_autogroup.log` 几天,然后再信任它。
- `/16` 在设计上仅作警告;只有 `/24` 和单个 IP 会被自动封禁。
## 它的作用
| 触发条件 | 操作 |
|--------|--------|
| 包含 **≥3** 个永久封禁单个 IP 的 `/24` | 永久封禁该 `/24`,移除单个 IP |
| 包含 **≥5** 个永久封禁单个 IP 的 `/24` | 封禁 `/24` + `do not delete` |
| 跨越 **≥2** 个 `/24` 且包含 **≥5** 个单个 IP 的 `/16` | 通过电子邮件警告(每天一次)—— 不自动封禁 |
| 包含 **≥3** 个临时封禁(首次)的 `/24` | 对该 `/24` 临时封禁 12小时,并记录 |
| 再次发现相同的 `/24` | 升级为永久封禁 + `do not delete` |
| 包含 **≥5** 个单个 IP / **≥2** 个 `/24` 的临时 `/16` | 通过电子邮件警告(每天一次) |
| 拒绝列表达到其限制的 **≥80%** | 电子邮件警报 |
已被更广泛的永久封禁所覆盖的单个 IP 将被清理,计数器
会被定期修剪(默认 180 天),并且日志大小受限(默认 5000 行)。
## 安装
```
git clone https://github.com/ayzeta/csf-autogroup.git
cd csf-autogroup
sudo bash install.sh
```
安装程序会询问语言(`en`/`tr`)、警报电子邮件和 cron 间隔,
写入 `config.env`,并安装 root cron 作业。你可以随时重新运行它。
### 手动安装
```
cp config.env.example config.env # edit ALERT_MAIL, MSG_LANG, thresholds
chmod 700 csf_autogroup.sh
( crontab -l 2>/dev/null; echo '*/10 * * * * /path/to/csf_autogroup.sh >/dev/null 2>&1' ) | crontab -
```
## 配置
所有设置都位于 `config.env` 中(与脚本同级)—— 参见
[`config.env.example`](config.env.example)。关键选项:
- `MSG_LANG` — `en` 或 `tr`(日志**和**警报电子邮件均为双语的)。
- `ALERT_MAIL` — 警报发送的目标邮箱。
- `THRESHOLD_24`, `THRESHOLD_24_PERMANENT`, `THRESHOLD_16`, `THRESHOLD_TEMP_24`,
`THRESHOLD_TEMP_16` — 根据你的流量调整灵敏度。
手动运行一次以查看其工作方式:`./csf_autogroup.sh`(观察日志)。
## 卸载
```
crontab -l | grep -v 'csf_autogroup.sh' | crontab -
# 可选:
rm -f /var/log/csf_autogroup.log
rm -rf /var/lib/csf_autogroup
```
已存在的 `/24` 封禁将保留在 `csf.deny` 中,直到你手动移除它们(`csf -dr `)。
## 语言
日志和警报电子邮件提供**英语**和**土耳其语**版本 —— 设置
`MSG_LANG=en` 或 `MSG_LANG=tr`。写入 `csf.deny` 的封禁注释遵循
相同的设置。
## 许可证
MIT — 参见 [LICENSE](LICENSE)。
标签:ConfigServer, IP封禁, 安全防护, 应用安全, 网络调试, 自动化, 运维, 防火墙