5.7 KiB
5.7 KiB
恶意 IP 自动封禁与站点恢复记录
时间:2026-09-02
服务器:47.106.181.28
说明:本记录不保存任何登录密码。
已完成
-
安装宝塔官方
Fail2ban防爆破2.5,并设置开机启动。- 服务状态:active / enabled
- 基础 jail:
sshd、ftpd - SSH/FTP:5 次失败、5 分钟统计窗口、封禁 24 小时
-
开启宝塔内置“恶意 IP 自动封禁”。
- 开关文件:
/www/server/panel/config/firewalld_malicious_ip.pl - 当前值:
open - 宝塔系统任务:每天 04:43 执行
- 封禁集合:
in_bt_malicious_ipset
- 开关文件:
-
增加 Web 高频恶意访问自动封禁。
- Fail2ban jail:
nginx-web-abuse - 统计窗口:60 秒
- 阈值:单 IP 180 次请求
- 封禁时间:24 小时
- 封禁集合:
in_bt_web_abuse - 该机制达到阈值后直接封禁,不使用 Nginx 请求排队或全站限速。
- 已将当时确认的 15 个高频攻击地址加入 24 小时封禁集合。
- Fail2ban jail:
-
搜索引擎蜘蛛保护。
- 放行范围仅限 TCP 80/443,不放行 SSH 等其他端口。
- 白名单规则排在恶意 IP 丢弃规则之前。
- 每分钟读取新增 Nginx 日志。
- User-Agent 命中后还会进行反向 DNS 和正向 DNS 一致性验证,防止普通攻击者伪造蜘蛛 UA。
- 覆盖百度、360/So、搜狗、神马、必应、谷歌,以及 Yandex、DuckDuckGo、Yahoo、Bytespider、Amazon 等常见蜘蛛标识。
- 最终检查时白名单内有 38 个已验证地址;最近一次任务从 10 个候选地址中验证通过 2 个。
-
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 秒无增长。
站点性能修复
- 恢复 Nginx 监听,并修复宝塔防火墙重载后本机回环连接被国家规则误处理的问题。
- 重启已饱和的 PHP 5.6 FPM;保留现有 80 个最大子进程和 8192 backlog 配置。
- 对以下 PHP 5.6 站点启用 120 秒公共 FastCGI 微缓存:
www.bchongw.comm.bchongw.comwww.xxiaw.comm.xxiaw.comwww.txiaw.com
- 微缓存绕过 POST、查询字符串、登录/管理/会员/API/支付/上传等路径,以及带会话或授权信息的请求。
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