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

5.7 KiB
Raw Permalink Blame History

恶意 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