129 lines
5.7 KiB
Markdown
129 lines
5.7 KiB
Markdown
# 恶意 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
|