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