4、防御策略一:BGP TTL Security (GTSM) 原理与配置
聊到BGP路由欺骗,很多人第一反应就是搞加密、搞认证。但说实话,MD5认证虽然有用,可它防不住一种很刁钻的攻击——伪造源IP的BGP报文。
你想想看,攻击者只要伪造一个合法的源IP,再配上正确的AS号,就能冒充你的邻居发路由过来。这时候怎么办?
嗯,GTSM就是专门干这个的。它的思路很简单:检查报文的TTL值。
4.1 核心原理:TTL为什么能防攻击?
BGP邻居之间,正常情况下只有一跳(直连)或者几跳(通过Loopback建邻)。TTL值在报文经过每一跳时都会减1。
攻击者如果伪造源IP,报文必须经过网络才能到达你。TTL值一定会被减掉。而真正的邻居,报文几乎不经过中间设备,TTL值接近255。
GTSM的做法就是:只接受TTL值大于等于某个阈值的BGP报文。
举个例子:
- 直连EBGP邻居:期望TTL = 255
- 多跳EBGP邻居:期望TTL = 255 - 跳数
- IBGP邻居(Loopback):期望TTL = 255 - 跳数
攻击者伪造的报文,TTL值通常只有几十甚至十几。GTSM直接丢弃,连处理都不处理。
核心逻辑一句话:GTSM不是防伪造IP,而是防伪造IP的报文能到达BGP进程。
4.2 我在项目中遇到的坑
有一次帮客户排查BGP邻居频繁震荡的问题。配置看着都对,MD5也配了,但邻居就是隔几分钟断一次。
查了半天,发现是客户在中间加了一台防火墙。防火墙做了NAT,导致BGP报文的TTL被减了1。GTSM一检查,TTL不对,直接丢包。
所以啊,GTSM虽然好用,但部署前一定要确认路径上的设备不会修改TTL。
4.3 GTSM的配置方法
不同厂商的命令略有差异,但核心参数都一样:
4.3.1 Cisco IOS / IOS-XE
router bgp 65001
neighbor 10.0.0.1 ttl-security hops 1
这里的 hops 1 表示允许TTL值 ≥ 254(255 - 1)。如果是直连邻居,用 hops 1 就行。
4.3.2 Huawei VRP
bgp 65001
peer 10.0.0.1 gtsm hops 1
华为的写法更直白,直接叫 gtsm。参数含义一样。
4.3.3 Juniper JunOS
protocols bgp {
group EBGP {
neighbor 10.0.0.1 {
ttl 1;
}
}
}
Juniper的配置里,ttl 1 表示期望TTL值为255。注意,它和Cisco/Huawei的“允许跳数”概念不同,这里是直接指定期望TTL值。
个人习惯:我一般会在所有EBGP邻居上都启用GTSM,哪怕只是直连。成本极低,收益极高。
4.4 GTSM的适用场景
| 场景 | 是否推荐GTSM | 说明 |
|---|---|---|
| 直连EBGP | 强烈推荐 | TTL固定为255,攻击者无法伪造 |
| 多跳EBGP | 推荐 | 需要精确计算跳数,配置稍复杂 |
| IBGP(Loopback) | 可选 | IBGP通常有IGP保护,但加上也无妨 |
| 跨AS的MPLS VPN | 推荐 | 防止伪造的VPNv4路由注入 |
4.5 避坑指南
我曾经遇到过一个问题:在IBGP场景下,两台路由器通过Loopback建邻,中间经过3台设备。我配置了 hops 3,结果邻居起不来。
查了半天才发现,中间有一台设备做了策略路由,把BGP报文引到了另一个路径上,多绕了一跳。TTL被多减了1。
所以,配置GTSM之前,一定要先确认实际路径的跳数。可以用 traceroute 验证一下。
重要提醒:GTSM不能替代MD5认证。两者是互补关系:
- GTSM防伪造源IP
- MD5防报文篡改
我建议在生产环境中同时启用。
4.6 GTSM的核心逻辑图
下面这张图展示了GTSM的工作流程。你可以看到,攻击者的报文因为TTL值过低,在BGP进程之前就被丢弃了。
4.7 总结
GTSM是我个人非常喜欢的一个防御手段。它简单、高效、几乎零开销。说白了,就是利用网络层的一个小字段,干掉了应用层的一个大漏洞。
你想想看,攻击者要伪造BGP报文,首先得伪造源IP,然后还得让TTL值恰好落在允许范围内。这难度一下子就上去了。
嗯,下一节我们聊聊另一种防御手段——BGP路径验证。不过那是后话了。
一句话记住GTSM:不是所有到达你端口的报文,都值得交给BGP进程处理。TTL就是第一道安检。
公众号:蓝海资料掘金营,微信deep3321