Files
kefu/im/恶意IP自动封禁安装记录-2026-09-02.md
2026-09-03 08:38:17 +08:00

129 lines
5.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 恶意 IP 自动封禁与站点恢复记录
时间:2026-09-02
服务器:47.106.181.28
说明:本记录不保存任何登录密码。
## 已完成
1. 安装宝塔官方 `Fail2ban防爆破` 2.5,并设置开机启动。
- 服务状态:active / enabled
- 基础 jail:`sshd`、`ftpd`
- SSH/FTP:5 次失败、5 分钟统计窗口、封禁 24 小时
2. 开启宝塔内置“恶意 IP 自动封禁”。
- 开关文件:`/www/server/panel/config/firewalld_malicious_ip.pl`
- 当前值:`open`
- 宝塔系统任务:每天 04:43 执行
- 封禁集合:`in_bt_malicious_ipset`
3. 增加 Web 高频恶意访问自动封禁。
- Fail2ban jail:`nginx-web-abuse`
- 统计窗口:60 秒
- 阈值:单 IP 180 次请求
- 封禁时间:24 小时
- 封禁集合:`in_bt_web_abuse`
- 该机制达到阈值后直接封禁,不使用 Nginx 请求排队或全站限速。
- 已将当时确认的 15 个高频攻击地址加入 24 小时封禁集合。
4. 搜索引擎蜘蛛保护。
- 放行范围仅限 TCP 80/443,不放行 SSH 等其他端口。
- 白名单规则排在恶意 IP 丢弃规则之前。
- 每分钟读取新增 Nginx 日志。
- User-Agent 命中后还会进行反向 DNS 和正向 DNS 一致性验证,防止普通攻击者伪造蜘蛛 UA。
- 覆盖百度、360/So、搜狗、神马、必应、谷歌,以及 Yandex、DuckDuckGo、Yahoo、Bytespider、Amazon 等常见蜘蛛标识。
- 最终检查时白名单内有 38 个已验证地址;最近一次任务从 10 个候选地址中验证通过 2 个。
5. Nginx 免费防火墙 IP 黑名单。
- 用户提供的文本解析出 757 个唯一公网 IPv4 地址。
- 宝塔免费 WAF 的 `ip_black.json` 中已存在同样 757 条规则,导入检查未产生重复项。
- 与当时搜索蜘蛛白名单无重叠。
## 攻击原因与处理
本次高负载并非单纯的 MySQL 索引问题,主要由两轮分布式请求造成:
- 第一轮对 `www.txiaw.com` 使用固定 `TG@td666` 参数,样本中占比超过 98%。
- 第二轮改为 `/?r=随机字符串`,并伪造 Chrome、手机和微信浏览器 UA。查询字符串会绕过公共 FastCGI 缓存,导致每次请求进入 PHP。
- `m.bchongw.com` 同时出现多个地址短时间随机抓取数百个 `/down/...` 动态页面,产生大量 502/499。
已实施:
- 在 Nginx 进入 PHP 前精准拒绝上述两个已确认攻击特征。
- 真实搜索蜘蛛 UA 保留例外;网络层白名单另外执行 DNS 双向验证。
- 被精准拒绝的请求不再写入 `www.txiaw.com.log`,避免 4 GB 以上日志继续高速增长并拖累磁盘。
- 保留正常首页、正常带参页面和站内功能。
验证结果:
- 正常 `www.txiaw.com` 首页:HTTP 200,服务器本机约 0.045 秒。
- 随机 `r=` 攻击:约 0.017 秒断开,未进入 PHP。
- `TG@td666` 攻击:约 0.011 秒断开,未进入 PHP。
- 百度蜘蛛 UA 访问相同 `r=` 测试路径:HTTP 200。
- 攻击日志连续 5 秒无增长。
## 站点性能修复
1. 恢复 Nginx 监听,并修复宝塔防火墙重载后本机回环连接被国家规则误处理的问题。
2. 重启已饱和的 PHP 5.6 FPM;保留现有 80 个最大子进程和 8192 backlog 配置。
3. 对以下 PHP 5.6 站点启用 120 秒公共 FastCGI 微缓存:
- `www.bchongw.com`
- `m.bchongw.com`
- `www.xxiaw.com`
- `m.xxiaw.com`
- `www.txiaw.com`
4. 微缓存绕过 POST、查询字符串、登录/管理/会员/API/支付/上传等路径,以及带会话或授权信息的请求。
5. `www.xxiaw.com/app_games/indexN.html` 增加应用层列表缓存:
- 新鲜期 900 秒
- 过载时可返回 24 小时内的有效旧缓存,避免占用 PHP-FPM 执行昂贵旧查询
- `index3.html` 最终外网测试 HTTP 200,约 2.12 秒
外网最终测试:
- `https://www.bchongw.com/`:HTTP 200,约 1.48 秒
- `https://m.bchongw.com/`:HTTP 200,约 0.61 秒
- `https://www.xxiaw.com/app_games/index3.html`:HTTP 200,约 2.12 秒
- 宝塔 8686 端口可访问;未登录访问面板路由返回 404 属正常面板隐藏入口行为
压力回落记录:
- 1 分钟 load average:约 39.10 降至 13.70,并继续下降
- 已建立 Web 连接:约 1801 降至 571
- PHP 5.6 子进程:70 降至 30
- MySQL 最终检查约占 4.8% CPU,因此没有盲目增加数据库索引
## 宝塔官方接口状态
`https://www.bt.cn/api/bt_waf/get_system_malicious` 在最终检查时仍返回 HTTP 502。该问题来自宝塔官方接口,不是本机网络或脚本错误。
已对 `/www/server/panel/script/malicious_ip_task.py` 增加:
- 最多 3 次请求重试与超时控制
- 官方接口失败时不清空 `/var/log/IP-DAILY-LOG.log`
- 下次计划任务继续处理保留下来的候选地址
- 每次处理前后恢复蜘蛛白名单和本机回环规则
因此官方情报接口恢复后会在每天 04:43 自动同步;接口不可用期间,本机 Fail2ban Web 自动封禁仍独立工作。
## 主要备份
- `/www/backup/fail2ban-install-20260902-181216`
- `/www/backup/malicious-ip-enable-20260902-184145`
- `/www/backup/malicious-ip-task-retry-20260902-185346.py`
- `/www/backup/free-waf-ip-black-20260902-185156.json`
- `/www/backup/public-microcache-20260902-185748`
- `/www/backup/txiaw-attack-marker-20260902-190622`
- `/www/backup/xxiaw-list-cache-20260902-191226`
- `/www/backup/web-autoban-20260902-192605`
- `/www/backup/txiaw-r-flood-20260902-193050`
## 最终检查
- Nginx 配置检测成功
- Fail2ban ping 返回 pong
- Fail2ban jail:`ftpd`、`sshd`、`nginx-web-abuse`
- 蜘蛛白名单定时器 active / enabled
- 宝塔恶意 IP 自动封禁开关为 open
- Nginx 免费 WAF IP 黑名单共 757 条
- 站点首页和指定列表页均返回 HTTP 200