1.
初步判断:确认故障范围与紧急级别
a) 先在本地或同机房不同出口做 ping -c4 服务器IP 和 traceroute -n IP,判断是单点到机房网络还是全球不可达。
b) 检查控制台(云/机房高防面板)是否有告警、流量激增或被清洗记录;记录开始时间、峰值流量和攻击类型(SYN/UDP/HTTP)。
c) 用手机4G或外部主机尝试访问服务,确认是全局访问失败还是局部节点异常,以决定是否要立即切换备机或触发应急预案。
2.
查看高防面板与BGP路由状态
a) 登录高防服务商控制台,查看实时曲线(总流量、清洗流量、黑洞/限速动作),并截图保存证据。
b) 检查是否有BGP劫持/公告变更(用 bgp.he.net / RIPE tools 或 traceroute 到多个海外节点验证)。
c) 如发现高防已触发清洗,记录规则ID并按需申请临时放宽或人工介入以避免误杀正常流量。
3.
网络与连接详细排查命令
a) ss -s / ss -tanp | grep :80 查看连接数量与状态;netstat -anp | grep ESTABLISHED 数量统计。
b) 使用 tcpdump -n -i eth0 'tcp port 80 or 443' -c 200 保存样本包并离线分析,注意来源IP、SYN比率、重复包。
c) 如怀疑链路丢包或延迟,使用 mtr -r -c 100 IP 分析逐跳丢包,并与运营商对接拿路由器界面日志。
4.
系统资源与进程检查(CPU、内存、连接数)
a) top / htop 查看CPU、内存占用;ps aux --sort=-%mem|-cpu 找出占用高进程。
b) free -m、vmstat 1 5、iostat -x 1 3 判断是否IO瓶颈;若IO高,检查是否有大量日志或备份占用磁盘。
c) lsof -nP | grep deleted 查找被删除但占用空间的大文件;若磁盘满可重启相关进程或删除文件后执行 systemctl restart rsyslog。
5.
日志与应用层排查(Web/DB)
a) 查看 /var/log/nginx/access.log 和 error.log:tail -n 200 | awk '{print $1}' | sort | uniq -c 排序识别热点IP。
b) 检查应用错误(PHP-FPM、Tomcat、Gunicorn):journalctl -u php-fpm -n 200 或查看应用框架日志得出错误堆栈。
c) 若是数据库连接耗尽,查看 MySQL max_connections 设置并通过 SHOW PROCESSLIST 排查慢查询,临时提升 max_connections 并优化慢查询。
6.
内核参数与连接跟踪调整(快速缓解)
a) 启用 SYN cookies:sysctl -w net.ipv4.tcp_syncookies=1;调整 backlog:sysctl -w net.ipv4.tcp_max_syn_backlog=4096。
b) 调整 conntrack:sysctl -w net.netfilter.nf_conntrack_max=262144;如 conntrack 表满,可临时清空 conntrack -F(注意有连接中断风险)。
c) 缩短 TIME-WAIT:sysctl -w net.ipv4.tcp_fin_timeout=30 及 net.ipv4.tcp_tw_reuse=1 等,快速释放连接槽。
7.
针对DDOS的紧急封堵与IP黑名单操作
a) 使用 ipset 管理大规模黑名单:ipset create blacklist hash:ip maxelem 2000000;然后 ipset add blacklist 1.2.3.4。
b) 绑定 ipset 到 iptables:iptables -I INPUT -m set --match-set blacklist src -j DROP;如使用 nftables 参考 nft 命令。
c) 对攻击端口进行速率限制:iptables -I INPUT -p tcp --dport 80 -m limit --limit 200/s --limit-burst 500 -j ACCEPT,其余直接丢弃或转到黑名单。
8.
应用层快速恢复(网站维护页、后端重启、流量切换)
a) 若服务不可用,先切到静态维护页:nginx 上设置临时 location,将 / 指向 maintenance.html 并 reload nginx。
b) 重启关键服务:systemctl reload nginx; systemctl restart php-fpm 或者 graceful 重启应用进程(避免中断正在处理的请求)。
c) 必要时启动备机或切换浮动IP/Elastic IP 到备用实例,并通过DNS或LB短时间内切换流量,减少业务中断。
9.
磁盘、文件系统与数据库紧急恢复步骤
a) df -h 检查磁盘,若 /var 满,删除历史日志或 tar 打包搬到其他分区;使用 logrotate -f 强制轮转并 systemctl restart rsyslog。
b) 若数据库崩溃,先备份数据文件再尝试恢复(mysqldump 或 冷备份复制),按需切换到只读模式并使用从库接管。
c) 若文件系统损坏,先 umount 只读挂载点并用 fsck -y /dev/sdX 修复(在维护窗口或冷启动下操作)。
10.
与服务商协同、提交工单与证据采集
a) 立即向高防或机房提交工单并附上流量曲线、tcpdump 样本、mtr 输出和时间线,要求启动上游清洗或BGP紧急策略。
b) 若需切换清洗策略,沟通白名单/黑名单逻辑并要求手动放行可信IP。
c) 记录所有变更(谁、何时、做了什么),便于事后回溯与结案报告。
11.
事后加固与长期防御建议
a) 部署CDN与WAF做应用层防护,配置严格的HTTP限流与爬虫规则。
b) 按需增加冗余(多可用区或多机房),配置自动故障转移与健康检查,保证单点失效时快速切换。
c) 定期演练应急预案、保存攻击样本用于机器学习检测、并把关键参数写入运维文档(sysctl、iptables、ipset脚本)。
12.
问:遇到高防新加坡服务器被大量SYN/半开连接攻击,最先做什么?
问:最先做什么?
答:立即开启内核保护(sysctl -w net.ipv4.tcp_syncookies=1)、提升 tcp_max_syn_backlog,临时清空 conntrack(conntrack -F)并在高防面板申请上游清洗,同时用 ipset+iptables 快速丢弃重复非法源IP。
13.
问:如何在不影响正常业务的情况下快速阻断攻击流量?
问:如何快速阻断且不影响业务?
答:优先在高防面板按特征(源IP、UA、目的端口)做流量策略;在机上用 ipset 管理黑名单并配合 iptables 精准拦截;对HTTP层用WAF/NGINX限流或验证码机制保护登录与接口,逐步放行被误拦的IP。
14.
问:恢复后哪些指标和日志必须保存用于复盘与供服务商核查?
问:恢复后需要保存哪些证据?
答:保存流量曲线截图、tcpdump pcap 样本、mtr/traceroute 输出、nginx/access/error 日志、conntrack 状态、iptables/ipset 变更记录和高防面板事件ID,形成时间线并归档以便复盘与申诉。
来源:运维经验分享高防新加坡服务器常见故障排查与快速恢复步骤