1.
概述与目标
- 目标:构建能抵御SYN/UDP/HTTP泛洪的自建
高防CDN节点和统一监控告警链路。
- 原则:边缘丢弃尽量早、缓存减轻源站、协同清洗与BGP协商黑洞/FlowSpec。
- 开源工具栈:FRR/BIRD、XDP/eBPF、nftables、nginx/Varnish/HAProxy、FastNetMon、Prometheus/Grafana、ELK/Zeek。
- 部署模型:多机房Anycast+本地清洗+上游联动(FlowSpec或黑洞)。
- 指标SLA:针对SYN flood目标将被动丢弃流量降至<1Gbps、pp s降至可控范围(<1Mpps)。
2.
边缘过滤与速率限制(L3/L4)
- 使用XDP/eBPF在内核最早点位进行7-80%初级丢弃,减少用户态负载。示例:XDP程序丢掉不合规UDP或源IP伪造包。
- nftables/ipset做黑名单与速率限制,举例:nftables limit 每秒1000个连接。
- SYN Cookies + netfilter调整:net.ipv4.tcp_syncookies=1, tcp_max_syn_backlog=4096。
- 使用tcp-proxy(HAProxy)或直连BPF对高pps进行fast-path转发。
- 边缘做SSL终止并记录真实客户端IP(X-Forwarded-For),以便WAF/日志关联。
3.
缓存/代理与WAF(L7)
- Varnish/NGINX做静态内容缓存,减少回源请求,配置cache-control和grace策略。
- NGINX例子:limit_req_zone $binary_remote_addr zone=rl:10m rate=20r/s; 并在location应用limit_req。
- ModSecurity或NAXSI做请求指纹与异常模式阻断,结合规则库定期更新。
- HAProxy做TCP/HTTP多路复用、健康检查与连接限额;后端用upstream权重分流。
- 在边缘记录请求日志并送Logstash/Fluentd到ELK,用于攻击溯源与规则更新。
4.
Anycast、BGP与清洗协同
- 利用FRR/BIRD做Anycast路由,节点在全球不同VPS/机房宣告相同前缀。
- 当本地无法承受时,触发BGP FlowSpec规则或发送黑洞给上游ISP清洗。示例:FastNetMon触发FlowSpec API。
- FRR配置示例片段:router bgp 65000; neighbor 1.2.3.4 remote-as 65001; network 203.0.113.0/24。
- 结合上游清洗和本地XDP规则,优先在越靠近源头的节点丢弃可疑流量。
- Anycast配合GeoDNS(PowerDNS)用于健康感知路由优先级调整。
5.
监控、告警与溯源链路
- 流量监控:FastNetMon读sFlow/netflow或pcap,检测pps、bps、流量增长阈值触发告警。
- 指标体系:node_exporter(CPU/内存/conntrack)、blackbox_exporter(HTTP可用性)、fastnetmon_exporter(DDoS指标)汇入Prometheus。
- 可视化:Grafana建立面板,关键面板:pps、bps、连接数、HTTP 5xx比例、回源率。
- 日志与溯源:Suricata/Zeek用于L7会话分析,日志写入Elasticsearch,配合Kibana做攻击模式检索。
- 告警:Prometheus Alertmanager结合PagerDuty/钉钉Webhook自动化触发BGP/FlowSpec策略。
6.
真实案例与节点配置示例(含数据表)
- 案例:某网站遭遇来自Botnet的SYN flood,攻击峰值200Gbps/35Mpps,影响节点CPU与内存。
- 处理流程:本地XDP先丢弃40%无效包,nftables速率限制再减30%,最终通过上游FlowSpec清洗后留存<0.8Gbps。
- 节点配置:单机规格如下表所示,及清洗前后对比数据。
- 后续:基于Suricata溯源出10个恶意源AS,加入黑名单并由FRR下发FlowSpec。
- 结论:结合XDP+nft+Anycast+FlowSpec+FastNetMon可将大规模DDoS从不可用恢复到可承受状态(见下表)。
| 节点 | 规格 | 攻击峰值 | 边缘丢弃后 | 清洗后保留 |
| Edge-1 | 8vCPU / 32GB / 10Gbps | 200Gbps / 35Mpps | 80Gbps / 10Mpps | 0.6Gbps / 0.5Mpps |
| Edge-2 | 16vCPU / 64GB / 40Gbps | 120Gbps / 20Mpps | 40Gbps / 4Mpps | 0.9Gbps / 0.4Mpps |
| Scrubber | 32vCPU / 128GB / 100Gbps | 合流后100Gbps | 本地丢弃20Gbps | 0.2-1.0Gbps至源站 |
7.
实施建议与常见误区
- 先做观测再下规则,避免误杀正常用户;阈值应基于基线历史数据设置。
- 不可只依赖单一层,L3/L4/L7多层配合才能有效防御复杂攻击。
- Anycast需注意不同机房容量和上游线路差异,做好流量工程。
- 自动化告警要配合人工处置流程,避免误触发大规模黑洞。
- 定期演练(演练FlowSpec下发、节点失效切换)并保存回滚脚本与配置模板。