linux应对突发流量需分层布防:第一步用sar/iftop/ss快速定位瓶颈;第二步nginx限流保主干;第三步iptables/tc协议级拦截整形;第四步调优conntrack、tcp超时、bbr及缓冲区等内核参数提升韧性。

面对突发访问流量高峰,Linux网络基础设施的应对不是靠单一手段硬扛,而是分层布防、快速定位、动态响应。核心逻辑是:先稳住关键服务不崩,再识别真实来源,最后按需释放或限制资源。
第一步:快速定位瓶颈在哪
别急着加规则或扩容,先用三类工具交叉验证:
- sar -n DEV 1 5:看哪个网卡的 rxkB/s 或 txkB/s 异常飙升,确认是入向还是出向打满
- iftop -i eth0 -P -n:实时排序显示占用带宽最高的对端IP和端口,注意观察是否有大量短连接、非80/443端口或固定目标IP
- ss -s 和 netstat -s | grep -i "time.*wait\|overflow":检查连接状态是否堆积(如 SYN_RECV 过多)、conntrack 表是否溢出、TIME_WAIT 是否失控
第二步:网关层快速限流保主干
Nginx 是最常用也最有效的第一道防线,适合拦截 HTTP/HTTPS 层攻击:
- 用 limit_req_zone 按客户端 IP 建立速率池,例如:
limit_req_zone $binary_remote_addr zone=perip:10m rate=15r/s; - 在 server 或 location 块中启用漏桶+突发缓冲:
limit_req zone=perip burst=30 nodelay; —— 超出速率的请求立即返回503,不排队,避免延迟累积 - 对高频接口(如登录、搜索)单独设更严策略,配合 limit_conn 控制并发连接数
第三步:内核层协议级拦截与整形
当攻击绕过Nginx直连后端端口,或涉及非HTTP协议(如UDP、ICMP、SSH),iptables 和 tc 就是关键:
-
iptables 连接限速:
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 100 -j DROP
iptables -A INPUT -p tcp --dport 22 -m limit --limit 5/minute --limit-burst 10 -j ACCEPT -
tc 流量整形控出口:防止某类流量吃光上行带宽
tc qdisc add dev eth0 root tbf rate 50mbit burst 10k latency 50ms - 务必先放行已建立连接:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT,否则可能锁死自己
第四步:内核参数调优提升韧性
默认配置在高并发下容易成为瓶颈,几项关键调整可显著提升吞吐稳定性:
- 增大连接跟踪表容量:
sysctl -w net.netfilter.nf_conntrack_max=131072 - 缩短空闲连接超时:
sysctl -w net.netfilter.nf_conntrack_tcp_timeout_time_wait=30 - 启用BBR拥塞控制算法:
sysctl -w net.ipv4.tcp_congestion_control=bbr - 调大 socket 接收缓冲区上限:
sysctl -w net.core.rmem_max=16777216











