Files
kefu/im/网络拥塞处理-2026-08-31.md
2026-09-03 08:38:17 +08:00

109 lines
5.9 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.
# 网络拥塞与请求防护处理记录
2026-08-31,北京时间。服务器:47.106.181.28。
## 当前结果
17:42 的验证中,公网网站首页和宝塔登录页均已恢复访问:
| 检查 | 结果 |
| --- | --- |
| 公网网站首页,普通路径 | 200,约 0.66 秒 |
| 公网宝塔登录页,普通路径 | 200,约 0.70 秒,标题为“宝塔Linux面板” |
| 公网宝塔登录页,代理接口路径 | 200,约 0.58 秒,同样取得完整登录页 |
| 服务器本机网站首页 | 200,约 0.02 秒 |
| 服务器本机文章页 | 200,约 0.03 秒 |
| 服务器本机另一站点首页 | 200,约 0.03 秒 |
| 服务器本机宝塔 HTTPS | 200,约 0.08 秒 |
| 已确认的刷请求特征 | Nginx 直接关闭连接,无 HTTP 响应;日志记 444 |
这些是当前采样结果,不能视为持续攻击下的长期可用性保证。面板的自签名证书没有更换,浏览器证书信任提示仍可能出现;测试没有通过 HTTPS 提交面板账号密码。
## 发现的压力
17:35,原首页频率限制已撤回且 Nginx 配置中相关规则计数为 0;此时公网仍有超时。MySQL 活跃查询为 1,CPU 空闲约 62%,但已建立 TCP 连接约 14,338 条。
同一时段最近 1,000 次站点访问中有 999 次符合已确认的异常特征:GET/HEAD 首页、带随机 `r` 参数、没有 User-Agent。随后 4,000 条样本跨约 3 秒,3,996 条为该类请求,来自 113 个来源。证据支持持续异常请求和连接压力参与了本轮网络拥塞,不能把所有故障直接归因于数据库或首页频率限制。
系统运行时间显示服务器约在 16:34 重启过,重启原因未确认。本轮未执行服务器、MySQL、PHP 或宝塔重启。
## 实际修改
### 1. 撤回正常首页的频率限制
17:18 移除了此前新增的两处 Nginx include,通过配置检查后平滑重载。仅删除本次加入的引用,保留站点配置里的其他内容。原每 IP 5 次/秒、首页总量 50 次/秒等频率限制现已停用。
撤回前配置备份:
`/www/backup/txiaw-mysql-fix-20260831/www.txiaw.com-before-rate-limit-rollback-20260831-171842.conf`
### 2. 仅关闭已确认异常请求的连接
17:36 重新加载精简后的两个防护 include,里面不再有 `limit_req`、`limit_req_zone` 或首页总量限制。对上述已确认异常特征执行 Nginx `return 444`,减少 HTTP 429 应答和 PHP 调用开销。正常浏览器首页、文章页和其他站点不适用该条件。
当前文件:
- `/www/server/panel/vhost/nginx/www.txiaw.com.conf`
- `/www/server/panel/vhost/nginx/txiaw-home-protection-http.inc`
- `/www/server/panel/vhost/nginx/txiaw-home-protection-server.inc`
已验证配置合法、精确拦截规则已加载、原频率限制未加载。修改前备份位于:
`/www/backup/txiaw-mysql-fix-20260831/before-abuse-connection-close-20260831-173658/`
PHP 对同一异常特征的 429 拦截仍作为后备保护。数据库新索引和首页缓存保留,没有删除索引或业务数据。
### 3. 临时拦截 84 个确认异常来源
17:42:02 创建原生 ipset 超时集合 `txiaw_cc_0831`,通过一条独立 iptables INPUT 规则仅拦截集合中来源访问 **TCP 80**。
入选条件同时满足:最近且跨度不超过 30 秒的日志样本;同源异常请求不少于 20 次;该站样本异常比例不低于 98%;平均至少 5 次/秒;公网 IPv4;同时出现在当前 80 端口 TCP 对端中。排除了本次 SSH 来源和服务器地址。
- 仅限确认的 84 个来源和 HTTP 80 端口,不修改 SSH 22、HTTPS 443、宝塔 8686 的规则。
- 每个集合成员有效期 **900 秒**,约在 **17:57:01 自动到期**。
- 没有配置自动续封、后台轮询或定时任务,也没有主动将该规则保存到开机配置。
- 到期后空集合的匹配规则不拦截地址,Nginx 的异常特征拦截继续存在。
- 截至 17:42:45,该临时规则已丢弃约 67,556 个包。
只应将这一措施视为紧急缓解。15 分钟后若同批来源继续攻击,仍可能重新产生较大的连接压力;长期源站保护需要结合云侧流量、带宽和防护能力进一步处理。
## 前后采样
| 指标 | 撤回频率限制后、精确断开前 | 精确断开和临时来源拦截后 |
| --- | --- | --- |
| 采样时间 | 17:35 | 17:42 |
| 已建立 TCP 连接 | 全机约 14,338 | 80 端口约 484;443 端口约 31 |
| CPU 空闲 | 约 62% | 约 54% |
| 网卡接收 | 约 4.71 Mbps | 约 2.99 Mbps |
| 网卡发送 | 约 5.11 Mbps | 约 3.55 Mbps |
| 本机首页 | 约 1.1 秒 | 约 0.02 秒 |
| 公网宝塔 | 多次超时 | 两条测试路径均成功,约 0.58–0.70 秒 |
流量持续变化,采样窗口较短,不能把每个指标的全部变化单独归因于某一项修改。未取得云平台带宽上限或流量清洗事件,不能认定已查明具体云侧瓶颈。
## 审计记录与撤回
远程记录均位于 `/www/backup/txiaw-mysql-fix-20260831/`:
- `rate-limit-rollback.json`、`rate-limit-rollback-verified.json`
- `abuse-connection-close.json`、`abuse-connection-close-verified.json`
- `temporary-abuse-source-filter.json`:含入选来源和启用时间,权限 0600
- `network-mitigation-final.json`
如需立即解除本次临时 IP 拦截,只清空这个专用集合即可,不要清空整个防火墙:
```sh
ipset flush txiaw_cc_0831
```
若还需移除空匹配规则和集合,按顺序执行:
```sh
iptables -w 5 -D INPUT -p tcp --dport 80 -m set --match-set txiaw_cc_0831 src -m comment --comment txiaw-confirmed-abuse-expiring -j DROP
ipset destroy txiaw_cc_0831
```
如需撤回 Nginx 精确断开规则,应移除这两处专用 include 引用,执行 `nginx -t`,通过后平滑重载。不要恢复此前每 IP/全站首页的频率限制,也不需要回滚数据库或导入表备份。
[Nginx 官方说明:444 关闭连接且不发送响应头](https://nginx.org/en/docs/http/ngx_http_rewrite_module.html#return)。