BGP多线主机DDoS防护硬核实战:基于Flowspec动态路由策略的秒级自动清洗

1. 流量清洗的瓶颈与Flowspec的破局

传统DDoS防护在BGP多线主机上依赖中心化清洗集群——流量先牵引至清洗中心,再回注源站。这种模式延迟高(绕路)、带宽成本高,且对L4/L7混合攻击响应迟钝。BGP Flowspec(RFC 5575)将过滤规则直接推送到网络边缘,实现近源丢包,无需回注。关键点:Flowspec不是静态ACL,而是通过BGP动态下发可编程的流量匹配+动作(如rate-limit、redirect to VRF、drop)。

2. 底层原理:BGP Flowspec的报文与动作

Flowspec NLRI包含:

  • 类型1:目的IP前缀
  • 类型2:源IP前缀
  • 类型3:协议号
  • 类型4-7:端口范围、DSCP、ICMP类型/码等
  • 动作:traffic-rate 0(丢弃)、redirect VRF、mark DSCP等

当主机侧的检测程序(如FastNetMon、eBPF嗅探)识别到攻击流量,立即调用ExaBGP/Bird向邻居路由器推送Flowspec规则。路由器在硬件层面直接匹配并丢弃,延迟从秒级降至微秒级。轻云互联的BGP多线主机支持与上游交换Flowspec能力,实测在10Gbps线速下丢包零CPU消耗。

3. 实战配置:ExaBGP + iptables联动自动下发

3.1 安装ExaBGP与irond

# 主机侧(轻云互联BGP实例)
apt install exabgp -y
pip install exabgp-healthcheck  # 可选,监控BGP会话

配置exabgp.conf(关键部分):

neighbor 10.0.0.1 {
  router-id 192.168.1.100;
  local-address 10.0.0.2;
  local-as 65001;
  peer-as 65000;
  flow route 10.0.0.0/24 {
    match {
      source-prefix 5.5.5.0/24;
      protocol udp;
      destination-port 53;
    }
    then {
      traffic-rate 0;  # 丢弃
    }
  }
}

3.2 动态检测触发(基于nfqueue + fastnetmon)

安装FastNetMon,配置嗅探网卡:

# fastnetmon.conf
network = eth0
threshold_pps = 10000
ban_action = exabgp
exabgp_community = 65000:666

当攻击超过阈值,FastNetMon调用脚本向ExaBGP发送 EXABGP_FLOW_ADD 命令。示例脚本(python):

#!/usr/bin/env python3
import socket
import sys

def flow_ban(prefix, attack_type):
    flow = f"flow route {prefix} match protocol {attack_type} then traffic-rate 0\n"
    sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
    sock.connect('/var/run/exabgp.sock')
    sock.send(flow.encode())
    sock.close()

if __name__ == '__main__':
    ip = sys.argv[1]
    flow_ban(ip + '/32', 'udp')

4. 排错指南:Flowspec规则没生效?

  • 检查BGP会话状态exabgpcli show neighbor 10.0.0.1 确认 capability 中支持 flow
  • 验证路由器是否接收:登录对端核心交换机(Cisco Nexus: show bgp flow-spec detail;Juniper: show route table inetflow.0)。
  • 避免路由黑洞坑:如果Flowspec的 traffic-rate 0 未立即生效,改用 redirect 到空VRF:
# 在路由器上创建null0 VRF
vrf definition NULL
  rd 65000:1
  address-family ipv4
!
interface Null0
  vrf forwarding NULL
!
# Flowspec动作改为
then redirect 65000:1
  • 错误触发导致自黑:务必在匹配条件中加上 source-prefix 限制,或使用 destination-port 误判。

5. 性能实测:vs 传统iptables/xdp

同样是UDP放大攻击(DNS/NTP),iptables在10Gbps下CPU飙升80%且丢包5%。Flowspec完全在路由器硬件完成,主机CPU占用<2%。轻云互联BGP多线主机的上行交换机支持硬件Flowspec,清洗后有效吞吐无损失,且多线BGP可实现跨运营商近源过滤。注意:需要与上游ISP协调开放Flowspec扩展,否则退而求其次使用BGP RTBH(但RTBH只能整段前缀