蓝易云CDN:网站遭遇DDoS攻击怎么办?全面防御与应急处理指南
网站遭遇DDoS攻击怎么办?全面防御与应急处理指南 🛡️
网站突然打不开、加载转圈、后台显示带宽被打满——十有八九是DDoS攻击找上门了。这种攻击的本质是用海量垃圾流量淹没你的服务器,让正常用户无法访问。不管你经营的是电商站、论坛还是企业官网,掌握一套完整的应急处置和长效防御方案都至关重要。

一、30秒快速判断:是不是真的在被攻击 🔎
网站卡顿的原因很多,不能一上来就下定论。先用几条命令快速排查:
# 查看当前服务器总连接数
ss -s
ss -s 会输出当前TCP连接的总览统计,包括已建立连接数、等待关闭的连接数等。正常情况下一个中小型网站的并发连接数在几百到几千,如果突然飙升到数万甚至更高,基本可以判定遭遇了攻击。
# 查看哪些IP建立了最多连接
ss -ant | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -15
这条命令的处理逻辑是:先列出所有TCP连接,提取远端IP地址,统计每个IP出现的次数,按降序排列后取前15名。正常用户一般只会建立个位数连接,如果某个IP同时维持了几百甚至上千个连接,几乎可以确定是攻击源 😤
# 观察实时网络流量
iftop -n -P
iftop 以动态刷新的方式展示当前网卡上的流量情况,-n 不做DNS反解提高显示速度,-P 显示端口号。通过它可以直观看到流量来源和大小,判断攻击的规模和方向。
二、紧急止损:把攻击流量挡在门外 🚧
确认遭受攻击后,按优先级执行以下操作:
第一步:批量封禁高频恶意IP
# 自动封禁连接数超过100的IP
ss -ant | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | awk '$1>100{print $2}' | while read ip; do
iptables -I INPUT -s "$ip" -j DROP
echo "已封禁: $ip"
done
这段脚本先统计每个IP的连接数,筛选出连接数超过100的异常IP,然后逐个添加iptables丢弃规则。-I INPUT 确保规则插入到链的最前面优先生效,-j DROP 直接丢弃数据包不做任何回应,避免服务器浪费资源去发送拒绝报文。
第二步:启用SYN Cookie抵御洪水攻击
sysctl -w net.ipv4.tcp_syncookies=1
sysctl -w net.ipv4.tcp_max_syn_backlog=262144
sysctl -w net.core.somaxconn=65535
tcp_syncookies=1 是对抗SYN Flood的核心参数。开启后,当SYN等待队列溢出时,内核不再为半连接分配内存,转而通过加密的Cookie来校验后续ACK包的合法性,只有完成三次握手的连接才会分配资源。tcp_max_syn_backlog 扩大半连接队列到26万,somaxconn 把监听队列扩大到6.5万,给服务器更大的缓冲余量 💪
第三步:切入高防CDN清洗流量
手动封IP只是权宜之计,面对分布式攻击需要专业的流量清洗能力。将域名CNAME解析到高防CDN节点后,攻击流量会先到达CDN边缘节点,经过清洗过滤后,只有干净的正常请求才会回源到你的服务器。
切换完成后验证解析是否生效:
nslookup yourdomain.com
返回的IP地址应该是CDN节点而非源站真实IP。如果源站IP之前已经暴露,建议同步更换源站IP并重新配置回源地址,彻底切断攻击者直连源站的可能。
三、应用层防护:拦截"聪明"的CC攻击 🧩
大流量DDoS靠高防节点扛,但CC攻击模拟正常请求反复刷页面,靠的是精细化限流策略:
# 全局限流配置
limit_req_zone $binary_remote_addr zone=web_zone:30m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=web_conn:20m;
server {
# 对动态页面限流
location ~ \.php$ {
limit_req zone=web_zone burst=20 nodelay;
limit_conn web_conn 20;
# 拒绝空Referer和空UA的请求
if ($http_user_agent = "") { return 444; }
fastcgi_pass unix:/run/php-fpm.sock;
}
# 静态资源无需严格限流
location ~* \.(css|js|jpg|png|gif|ico)$ {
expires 30d;
access_log off;
}
}
这段配置的设计思路是"动静分离"。rate=10r/s 限制每个IP每秒最多10次动态请求,burst=20 允许瞬时突发20个请求。return 444 是Nginx特有的状态码,含义是直接关闭连接不返回任何内容,比403更节省资源。静态资源设置30天浏览器缓存并关闭日志记录,减少攻击期间不必要的IO开销。
四、源站锁死:建立防火墙白名单 🔐
接入CDN后最关键的一步是锁死源站入口,否则攻击者一旦拿到源站IP就可以绕过CDN直接打击:
# 创建专用防火墙链
iptables -N CDN_WHITELIST
# 添加CDN回源IP段(根据实际CDN提供的IP段填写)
iptables -A CDN_WHITELIST -s 10.0.0.0/8 -j ACCEPT
iptables -A CDN_WHITELIST -s 172.16.0.0/12 -j ACCEPT
# 放行SSH管理端口(限制管理IP)
iptables -A INPUT -p tcp --dport 22 -s 你的管理IP -j ACCEPT
# Web端口走白名单链
iptables -A INPUT -p tcp --dport 80 -j CDN_WHITELIST
iptables -A INPUT -p tcp --dport 443 -j CDN_WHITELIST
# 白名单之外全部拒绝
iptables -A CDN_WHITELIST -j DROP
这段规则创建了一个名为 CDN_WHITELIST 的自定义链,所有访问80/443端口的流量都必须经过这条链的检查。只有来自CDN回源IP段的请求被放行,其余全部丢弃。SSH端口单独限制为管理员IP才能访问,防止暴力破解。这种架构下,即使源站IP泄露,攻击者的流量也会被防火墙直接丢弃 😎
五、长期防线:建立持续防护体系 📊
应急处理结束后,必须复盘并建立长效机制:
流量监控告警 —— 在服务器上部署实时监控,对带宽、连接数、QPS设定合理阈值。一旦突破阈值立即告警推送,把响应时间从"发现网站打不开了"缩短到"收到告警后30秒内介入"。
日志留存分析 —— 保留至少7天的Nginx访问日志和防火墙日志。攻击过后通过分析TLS指纹、请求特征、攻击节奏等信息,提炼出针对性的拦截规则,让同类攻击下次再来时直接被挡住。
定期演练容灾 —— 提前规划好CDN切换流程、IP更换流程、防火墙规则模板,形成标准化的应急预案文档。紧急关头能照着操作手册快速执行,远比临时翻资料要靠谱得多 ✅
总结
网站防DDoS没有一招制敌的银弹,靠的是层层设防:内核层加固TCP协议栈抵御洪水攻击,网络层用高防CDN清洗流量并隐藏源站,应用层做精细化限流拦截CC攻击,管理层建立监控告警和应急预案。把每一层都做扎实,遇到攻击时才能快速止损、从容应对。