DDoS数据包保护和过滤
1)为什么需要它
DDoS是资源的"质量降解":带/pps,状态表,内核/IRQ CPU,连接池,应用程序限制。目的是放松保护:消除网络周边的体积,中和协议异常到TCP/IP堆栈,并在L7上切断不需要的请求,同时为合法用户保留SLO。
2)攻击类
2.1 L3/L4 (volumetric/protocol)
Volumetric: UDP flood, UDP-reflection/amplification (DNS/CLDAP/NTP/SSDP/memcached/mDNS), GRE flood.
Protocol/state exhaustion: SYN flood, ACK/RST flood, TCP connection-exhaustion, ICMP flood, TCP fragmentation.
QUIC/UDP功能:虚假的开始/回归风暴,spoofed源。
2.2 L7 (application)
HTTP/1.1:查询昂贵的路线,头部超大/场滑动。
HTTP/2: Rapid Reset, stream-flood, HEADERS flood, PRIORITY abuse.
HTTP/3 (QUIC)-连接/线程未完成,Initial flood。
Slow-атаки: slowloris/slow-read/slow-POST.
gRPC/WebSocket:无限流、消息流、大型框架。
3)基本保护架构
1.Anycast + Scrubbing
在全局范围内喷洒流量并通过提供商争夺中心(切断边缘的volumetric/欺骗活动)。
2.Multi-CDN / Multi-Edge
域差异(Web,API,静态),read负载的保护和缓存聚合。
3.其周边的低级过滤器
路由器上的ACL(RFC1918,bogon,故意虚假端口)。
eBPF/XDP用于通过签名和rate限制提前下降到conntrack。
4.L7周边(NGINX/Envoy/WAF)
按键压缩RPS,挑战(captcha/PoW),缓存,优先级"昂贵"路径。
5.内部可持续性
连接池,队列,电路/时间,服务隔离(bulkhead)和带有"堵塞"(shedder)的自动缓存。
4)网络"阀门": 立即打开什么
4.1 Linux sysctl(内核/堆栈)
bash
TCP SYN flood sysctl -w net. ipv4. tcp_syncookies=1 sysctl -w net. ipv4. tcp_max_syn_backlog=4096 sysctl -w net. ipv4. tcp_synack_retries=3
Conntrack/sysctl -w net tables. netfilter. nf_conntrack_max=262144 sysctl -w net. netfilter. nf_conntrack_tcp_timeout_established=300
ICMP/redirect sysctl -w net. ipv4. icmp_echo_ignore_broadcasts=1 sysctl -w net. ipv4. conf. all. accept_redirects=0 sysctl -w net. ipv4. conf. all. send_redirects=0
sysctl -w net socket resources. core. somaxconn=4096 sysctl -w net. core. netdev_max_backlog=250000 sysctl -w net. core. rmem_max=134217728 sysctl -w net. core. wmem_max=134217728
4.2 nftables:基本过滤器和软件包上的ratelimit
nft table inet filter {
sets {
bogon { type ipv4_addr; flags interval; elements = { 0. 0. 0. 0/8, 10. 0. 0. 0/8, 100. 64. 0. 0/10,
127. 0. 0. 0/8, 169. 254. 0. 0/16, 172. 16. 0. 0/12, 192. 0. 2. 0/24, 192. 168. 0. 0/16, 198. 18. 0. 0/15, 224. 0. 0. 0/4 } }
}
chains {
input {
type filter hook input priority 0; policy drop;
ip saddr @bogon drop ct state established,related accept
UDP amplification ports - limit pps udp dport {53,123,1900,11211,389,1900,5353} limit rate over 2000/second drop
SYN rate-limit tcp flags syn tcp dport {80,443} limit rate over 2000/second drop
ICMP flood ip protocol icmp limit rate 100/second accept
}
}
}
4.3 XDP/eBPF(想法)
带有spoofed源的早期数据包(欢迎路由器上的uRPF)。
pps per/32和per/24哈希桶;动态"隔离"源。
UDP-reflection签名:DNS响应到输入(在上下文之外过滤)。
5) UDP加工: 库存和单元
常见反射器/放大器:DNS(开放解析器),NTP(单片),CLDAP,SSDP,mDNS,Memcached(UDP),Chargen。
措施:- 关闭/限制UDP服务,最大限度地减少打开的端口。
- 在外围限制已知端口的pps/比特率。
- DNS推荐:仅对其网络进行递归,RRL(响应率限制),ANY最小化。
- NTP只是对值得信赖的"盗版",对公共的"盗版"。
6) TCP state exhaustion
SYN flood:"tcp_syncookies=1",上升"tcp_max_syn_backlog","synack_retries=3",通过pps下降。
ACK/RST洪水:低级限制,删除非法序列(nftables/ebpf)。
Border上的Conntrack-less:在无状态签名上可能存在过滤器的地方,不要浪费状态表。
7)HTTP/2/3和"智能"L7攻击
HTTP/2快速重置:RST框架频率限制和开放流数;在异常时关闭连接。
Stream abuse: лимит concurrent streams, headers size, max frame size.
QUIC/HTTP/3:限制Initial pps,包括Retry;短的handshake taymout。
NGINX (L7片段)
nginx
Header/body constraint client_max_body_size 1m;
large_client_header_buffers 4 8k;
HTTP/2 limits http2_max_concurrent_streams 128;
http2_recv_buffer_size 256k;
Rate limit by IP (example)
limit_req_zone $binary_remote_addr zone=reqs:20m rate=100r/s;
limit_req zone=reqs burst=200 nodelay;
Envoy(反重置和限制)
yaml http2_protocol_options:
max_concurrent_streams: 128 initial_stream_window_size: 65536 max_outbound_frames: 10000 stream_error_on_invalid_http_messaging: true
8)慢速攻击和资源保护
Slowloris/slow-read/slow-POST:启用"proxy_request_buffering on",低平均时间,最低可接受的"read_rate"。
在请求的较长跨包间隔内终止连接。
在应用程序上-早期阅读/丢弃主体,JSON尺寸/深度限制。
9) L7过滤: 谁更重要-让它通过
流量分类:known good (mTLS/JWT合作伙伴),注册用户,匿名。
优先级:"昂贵"的写作路线(存款/结论)-保护但跳过已确认的路线;读取目录-缓存+throttle。
挑战层:高峰时灰色区域的captcha/PoW/JS挑战。
10)缓存,coalescing和退化
用于静态/准静态响应的边缘缓存,"stale-wile-revalidate"。
请求协商:在代理和应用程序中将并行请求捕获到一个密钥。
Degrade模式:禁用次要字节(个性化、繁重的报告),发出"轻松"页面。
11)可观测性和遥测
度量(per RED/节点/群集):- L3/L4: `pps_in/out`, `bps_in/out`, `drop_pps{reason}`, `syn_recv`, `conntrack_used/limit`, `xdp_drop_pps`.
- L7: `requests_total{route}`, `429_total`, `challenge_total{type}`, `h2_rst_rate`, `slow_req_total`.
- 相关:CPU IRQ软硬,NIC queue drops, run-queue length.
Logs:采样,按/24,ASN,端口和签名汇总;没有PII。
Tracing:包含在白名单上,紧急扩展调试示意图。
12)应对计划(runbook)
1.细节:触发pps/bps/429/h2_rst_rate阈值。
2.分类:级别(L3/4/7),协议(UDP/TCP/h2/h3),地理/ASN。
- 在提供程序上启用scrubbing/blackhole配置文件,
- 加强nftables/ebpf限制,
- 降低L7极限并提高挑战,
- 启用"Retry for QUIC" (Initial flood)。
- 4.通讯:状态页面,合作伙伴通知模板。
- 5.Forenzika: PCAP捕获60-120秒,top talkers ASNs/ports采样。
- 6.回顾:更新签名、阈值、反射器列表。
13)测试和演习
每季一次DDoS-drill花花公子:合成UDP/HTTP bursts,慢流量,HTTP/2重置。
Game day:在CDN之间切换Anycast/迁移,降级为"轻型模式"。
提供商验证:SLA scrubbing,过滤器打开/关闭时间,max pps/bps。
14)反模式
在volumetric攻击中仅依靠L7-WAF。
Border上缺乏uRPF/ACL,并且正面"重"过滤。
无限制的标题/身体和长长的保持在顶峰。
没有Anycast/多边缘的单一区域/ROR。
缺少NIC/IRQ/CPU库存和队列监视。
没有缓存/聚合-每个后端额外的RPS。
15) iGaming/财务细节
时间高峰(比赛/德比/乐透抽签):提前扩大POP容量,包括激进的系数缓存,为匿名者铺设金丝雀挑战赛。
支付/出站路线:带有mTLS的单独边缘池,短时间,竞争限制;没有0-RTT。
地理政策:区域性同行,ASN过滤的"托管",快速地理切换。
与DDoS事件中的防冻交叉:velocity限制和Risk API移至"硬"配置文件。
16)准备就绪支票清单
[] Anycast или multi-edge/CDN;已检查scrubbing通道。
- Border-ACL/uRPF;nftables/ebpf/XDP配置文件,contrack-less过滤。
- Sysctl调节TCP/SYN,用于UDP端口放大器的极限pps。
- HTTP/2/3限制(streams, frames, headers),慢速保护,body/header-limits.
- L7限制和挑战;高速缓存和外围连接。
- Dashbords pps/bps/conntrack/IRQ+L7 RED;h2_rst/429异常。
- Runbook/Playbook,提供商联系人,单击打开配置文件。
- 教义:bursts,slow,HTTP/2 reset;报告和记录改进。
- 分开的支付/关键路线池、mTLS和严格的限制。
17) TL;DR
放松保护:Anycast+scrubbing消除体积,eBPF/XDP+nftables将碎片切成堆栈,L7限制/挑战/缓存保留SLA。调节TCP (SYN cookies, backlog),限制UDP放大器,设置HTTP/2/3限制和慢速保护。有运行簿并进行培训;对于iGaming-在高峰时段提前扩展边缘,并使用mTLS和严格的限制分离支付路径。