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封禁, 安全防护, 应用安全, 网络调试, 自动化, 运维, 防火墙