1.
一、初步检查与信息收集
1) 确认故障影响范围:单节点/多个IP/全部站点;记录开始时间与感知途径(监控告警、用户反馈)。
2) 收集基础指标:CPU、内存、磁盘IO、负载(load)、网络入流量与出流量、丢包率与延迟;使用 top、free、iostat、iftop、vnstat 等工具。
3) 获取连接与端口信息:ss -tunlp 或 netstat -tunlp,查看监听端口和异常程序。
4) 检查最近变更:配置、代码、证书、域名解析、DNS记录、CDN回源策略、更新补丁或迁移计划。
5) 验证外部可达性:从多地执行 ping、traceroute、mtr;如仅美国节点受影响,记录路由跳数与丢包点。
2.
二、网络层诊断与常见问题定位
1) 带宽与包速(pps)分析:使用 iftop、nload、bmon 监测瞬时吞吐,参考阈值示例(见后表)。
2) 丢包与高延迟判断:通过 mtr 定位丢包发生在哪一跳,若在上游承载商处需及时联系ISP。
3) 路由黑洞或BGP问题:检查自有公网IP是否被黑洞/过滤,使用 bgp.he.net 或与骨干提供商确认。
4) MTU/分片问题:若异常报文片段或HTTPS握手失败,检查 MTU、TCP MSS;可临时将 MTU 从1500降为1400 测试。
5) NAT/防火墙状态:检查 iptables/nftables、云平台安全组、主机路由表,确认是否误封源IP或端口。
3.
三、应用层与服务检查(Nginx/Apache/数据库)
1) 查看 Web 服务错误日志:/var/log/nginx/error.log、access.log,注意 5xx/502/504 的时间点与来源IP。
2) 连接数与 keepalive 设置:使用 ss -s 查看 ESTAB 数,调整 nginx keepalive_timeout、worker_connections、worker_rlimit_nofile。
3) 后端池与数据库连接耗尽:检查 MySQL/Postgres 线程数、慢查询、连接池配置(例如 max_connections=500)。
4) PHP-FPM/应用进程崩溃:查看 php-fpm 日志,调整 pm.max_children、pm.start_servers 以匹配内存与并发。
5) 回源与负载均衡故障:若使用 CDN,请验证回源健康检查、回源IP白名单与 HTTPS SNI 配置。
4.
四、域名与CDN排错流程
1) DNS解析检查:使用 dig @8.8.8.8 example.com A/AAAA/CNAME,确认解析生效与TTL是否过高。
2) CDN配置验证:确认加速域名是否已在 CDN 控制台启用,回源地址是否正确,回源协议设置(HTTP/HTTPS)是否一致。
3) SSL/TLS 问题定位:使用 openssl s_client -connect host:443 -servername domain 检查证书链、SNI。
4) 缓存与回源策略:检查是否误配置了缓存规则导致旧内容或回源循环;清理 CDN 缓存做对比测试。
5) DNS 缓存失效处理:若修改DNS后不生效,可通过调整本地 /etc/hosts 或请求客户刷新DNS,或降低TTL再变更。
5.
五、DDoS识别与应急处置
1) 基线与阈值设定:示例基线——正常流量 1k pps、50 Mbps、CPU < 30%;当入包速>50k pps 或带宽>500 Mbps 即可怀疑攻击。
2) 快速过滤策略:使用 iptables/nftables 限速 conntrack、tcp syn rate-limit、iptables -A INPUT -p tcp --syn -m limit --limit 50/s --limit-burst 200 -j ACCEPT。
3) 黑名单与速率限制:通过 fail2ban 或 crowdsec 针对异常来源设短期封禁与连接数限制(connlimit)。
4) CDN/清洗服务切换:如攻击超出承载能力,立即启用CDN的"已知DDoS防护"或将流量切到上游清洗服务。
5) 日志与取证:保存 tcpdump 抓包样本(示例:tcpdump -c 100000 -w attack.pcap -n -i eth0),以便上报运营商/安全厂商。
6.
六、真实案例:美国VPS遭遇SYN Flood的排查与处置
1) 案件概述:某站群美国VPS集群(10台节点)突然出现部分站点无法访问,监控显示入流速激增与大量半连接。
2) 主机配置示例:VPS 配置:Ubuntu 20.04,4 vCPU,8GB RAM,100GB SSD,公网带宽 1Gbps,IP:203.0.113.10。
3) 监控数据(异常时刻):CPU 95%,load 48.2,入包 220k pps,入流量 620 Mbps,established 520k。
4) 采取措施:临时在边界路由丢弃高频 SYN 源,启用 iptables 限速规则,联系 CDN 切换到"扁平清洗"模式。
5) 后续处理:调整内核参数(见配置示例),持久化防护策略并部署云端WAF与流量清洗服务。
7.
七、关键配置示例与恢复建议
1) 内核网络优化(示例sysctl命令与建议值):
net.core.somaxconn=1024
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_tw_reuse=1
net.netfilter.nf_conntrack_max=262144
net.ipv4.tcp_max_syn_backlog=2048
2) Nginx 基本性能配置示例:worker_processes auto;worker_connections 4096;keepalive_timeout 15;client_body_timeout 10;
3) iptables 快速限流规则示例:iptables -A INPUT -p tcp --syn -m limit --limit 50/s --limit-burst 200 -j ACCEPT;iptables -A INPUT -p tcp --syn -j DROP(谨慎)。
4) 恢复步骤建议:缩小故障范围 -> 临时封禁疑似攻击源 -> 启用外部清洗或CDN -> 调优内核与服务 -> 恢复正常流量并持续观察48小时。
5) 备忘:保持最新的运维Runbook、及时更新监控阈值、与ISP/云厂商建立24/7联系人。
8.
附:流量与性能对比示例表(基线 vs 攻击)
| 指标 | 基线 | 攻击峰值 |
| CPU 利用率 | 10% | 95% |
| 系统负载(load) | 0.5 | 48.2 |
| 入包速(pps) | 1,000 pps | 220,000 pps |
| 入带宽 | 50 Mbps | 620 Mbps |
| 建立连接数 | 200 | 520,000 |
来源:站群运维人员必读的美国群站服务器故障排查手册