做外贸独立站这六七年,最让我血压飙升的不是Google又改了核心算法,而是黑五或者大促正起量的时候,手机突然疯狂弹监控报警。只要你的站稍微有点利润,友商使绊子或者敲诈团伙盯上你是迟早的事。今天咱们就抛开那些假大空的技术公文,聊聊服务器遭遇DDoS与CC攻击应急防御的实操手册。不扯那些动辄上万的商业清洗方案,只讲中小站长花小钱甚至不花钱就能把站拉起来的保命手段。
很多人一看到网站打不开、连接超时,就在群里喊“我被DDoS了!”。别急着下结论,处理服务器遭遇DDoS与CC攻击应急防御的第一步是看症状。这俩玩意儿下药方式完全不同,搞混了纯属浪费时间。
502 Bad Gateway 或 504 Gateway Time-out。这是冲着你网站的代码逻辑和数据库来的。中小站长90%遇到的都是CC攻击,因为成本低,随便租个廉价肉鸡脚本就能搞得你痛不欲生。这时候SSH还能连进去,赶紧做以下几步:
登录终端,别瞎猜,用命令看真实状态。输入下面这行,看当前连接数排名前20的IP:
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
再看看Nginx的访问日志,看看对方在刷什么接口(通常是搜索框、WordPress的 admin-ajax.php 或购物车页面):
tail -n 5000 /var/log/nginx/access.log | awk '{print $1,$7}' | sort | uniq -c | sort -nr | head -n 20
如果发现有几个海外IP请求量异常高(一分钟成千上万次),直接上 iptables 物理超度:
iptables -I INPUT -s 123.45.67.89 -j DROP
如果恶意IP像潮水一样换不停,单封IP没用,那就要在Nginx层做限流。
打开你的 nginx.conf,在 http 块加入连接限制,别让恶意请求把PHP和MySQL线程占满:
# 限制单个IP的并发连接数 limit_conn_zone $binary_remote_addr zone=addr:10m; limit_conn addr 20; # 限制请求速率,漏桶算法 limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s; limit_req zone=one burst=10 nodelay;
配完执行 nginx -t 检查,没问题立即 nginx -s reload。这套组合拳下去,CPU利用率通常能从100%瞬间回落到40%左右。
如果你的服务器连SSH都登不上,服务商提示IP进黑洞了,说明这是大流量UDP/SYN Flood,软件层面已经无解。这时候你的防御重心要转移到架构剥离上。
很多人的站被打穿,是因为直接拿源站IP裸奔。
老站长踩过最大的坑:套了CDN依然被打瘫。为什么?因为你的源站真实IP早就暴露了!黑客根本不绕CDN,直接拿着你的原始IP死轰。
mail.domain.com 是重灾区。# 只允许Cloudflare回源,把真实IP变成孤岛 # 偷懒的做法也可以直接用UFW结合官方IP列表脚本批量放行
这一招叫做“绝对隐身”,只要黑客找不到真实IP,所有的DDoS流量都会被Cloudflare的免费全球清洗中心生生吃掉。
做SEO的都知道,机器被攻击不可怕,可怕的是挂起时间过长导致Googlebot疯狂抓取到 500/502 错误,过不了两天收录暴跌、关键词掉光。
503 Service Temporarily Unavailable,并在Header里加上 Retry-After: 3600。搜索引擎看到503知道你是临时故障,不会轻易降权。别信那些所谓“终身防御”的神话,防御成本永远高于攻击成本。黑客花5块钱买流量,你可能要花500块买高防。
处理这种事,核心逻辑就八个字:藏好源站,分流减负。把静态资源和入口全交给CDN扛,后端真实服务器关紧门窗,只认清洗后的流量。把这套流程跑顺了,哪怕对方天天打,你也能安心睡大觉。