DDoS攻击防护配置:从零搭建可落地的服务器防护方案
DDoS攻击防护配置的核心思路是分层拦截:先靠云厂商的高防清洗大流量,再在服务器上用 Nginx 和 iptables 限制异常连接,最后通过日志和监控验证效果。
本文按零基础用户能直接照做的顺序,讲清每一步的命令和配置。
先判断你面对的是哪种攻击
DDoS 是分布式拒绝服务攻击的简称,攻击者用大量机器同时请求你的服务器,把带宽或连接数占满,正常用户就访问不了。
动手配置前,先确认攻击类型,否则可能配错方向。
- 流量型攻击:带宽被占满,表现为网站完全打不开、ping 超时。这类攻击单靠服务器配置挡不住,必须上云高防或 CDN 清洗。
- 连接型攻击:大量 TCP 连接堆积,表现为服务器负载飙升、连接数异常。iptables 和系统内核参数能缓解。
- 应用层攻击:模拟正常请求刷接口或页面,表现为 CPU 高、数据库慢,但带宽正常。Nginx 限速和限连接数更有效。
登录服务器后,
先用 top 看 CPU 和负载,
用 netstat -an | awk '/tcp/ {print $6}' | sort | uniq -c 统计连接状态,
判断是哪种类型。
服务器侧的基础防护配置
这部分配置适合连接型和应用层攻击,操作前建议先备份现有配置。
调整内核参数抗连接堆积
编辑 /etc/sysctl.conf,加入或修改以下内容:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_fin_timeout = 30
net.ipv4.ip_local_port_range = 1024 65000
执行 sysctl -p 让配置生效。tcp_syncookies 能缓解 SYN Flood,tcp_max_syn_backlog 增大半连接队列。
用 iptables 限制单 IP 连接数
下面规则限制单个 IP 对 80 和 443 端口的并发连接不超过 50,超过就丢弃:
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j DROP
iptables -A INPUT -p tcp --dport 443 -m connlimit --connlimit-above 50 -j DROP
保存规则:
CentOS 用 service iptables save,
Ubuntu 用 iptables-save > /etc/iptables/rules.v4。注意:
阈值要按自己业务调整,
设太低会误伤正常用户,
建议先观察正常峰值连接数再定。
Nginx 限速和限连接
在 nginx.conf 的 http 块中加入:
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
在 server 块中加入:
limit_req zone=req_limit burst=20 nodelay;
limit_conn conn_limit 20;
执行 nginx -t 检查语法,再 nginx -s reload 重载。rate=10r/s 表示每 IP 每秒 10 个请求,burst=20 允许突发 20 个。
这个值需要根据实际业务压测后微调。
云防护接入与流量清洗
流量型攻击靠服务器自身配置很难扛住,正确做法是接入云厂商的高防 IP 或 CDN。
操作路径(以主流云厂商为例):登录云控制台,进入 DDoS 高防或 Web 应用防火墙产品页,购买高防 IP 实例,把域名解析指向高防 IP,再在高防控制台配置回源地址为你的真实服务器 IP。
配置完成后,攻击流量先到高防节点清洗,正常流量回源。
宝塔面板用户如果已安装 Nginx 防火墙插件,可以在面板的“软件商店”中找到“Nginx 防火墙”,在“全局配置”里开启 CC 防护,并设置单 IP 访问频率。
这属于应用层防护,不能替代高防。
配置后怎么验证有没有生效
验证分三步,缺一步都可能误判。
- 看连接数:执行
netstat -an | grep :80 | wc -l,对比配置前后的并发连接数,异常连接应明显下降。 - 看 Nginx 日志:
tail -f /var/log/nginx/access.log,观察是否有单一 IP 高频请求被限制,返回 503 或 429 说明限速生效。 - 看防护面板:云高防控制台通常有流量清洗报表,能看到攻击流量和被清洗的峰值。
如果配置后网站仍打不开,
先检查 iptables 规则是否误封了自己的 IP,
用 iptables -L -n --line-numbers 查看,
必要时用 iptables -D INPUT 规则编号 删除。
容易踩的几个坑
- 限速阈值照抄网上数值:不同业务并发差异很大,建议先用监控工具记录正常峰值,再设置比峰值高 20% 到 30% 的阈值。
- 只配服务器不接高防:面对大流量攻击,服务器配置只是辅助,高防清洗才是主力。
- 改完配置不重载:Nginx 改完必须
nginx -s reload,iptables 规则重启后会丢失,务必保存。 - 忘记放行自己 IP:配置 iptables 时建议先加一条放行自己管理 IP 的规则,避免把自己关在门外。
DDoS 防护没有一劳永逸的方案,配置完成后要定期查看日志和监控,根据攻击特征调整阈值。
如果攻击持续且流量很大,及时联系云厂商升级防护套餐,比在服务器上硬扛更有效。