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只能整段前缀