BGP安全性
1.MD5:
BGP使用TCP作为传输层协议,为提高BGP的安全性,可以在建立TCP连接时进行MD5认证。但BGP的MD5认证并不能对BGP报文认证,它只是为TCP连接设置MD5认证密码,由TCP完成认证。如果认证失败,则不建立TCP连接。对于认证,不会立刻断开邻居关系,而是像ISIS一样,一旦无法识别对方的认证,但是无法立刻断开,而是需要等待hold时间之后断开邻居关系。
2.GTSM(Generalized TTL Security Mechanism):
GTSM通过检测IP报文头中的TTL值是否在一个预先定义好的特定范围内,对IP层以上业务进行保护,增强系统的安全性。使能BGP的GTSM策略后,接口板对所有BGP报文的TTL值进行检查。根据实际组网的需要,对于不符合TTL值范围的报文,GTSM可以设置为通过或丢弃。配置GTSM缺省动作为丢弃时,可以根据网络拓扑选择合适的TTL有限值范围,不符合TTL值范围的报文会被接口板直接丢弃(默认值为【1-255都可以】),这样就避免了网络攻击者模拟的“合法”BGP报文发送到设备的179端口占用CPU。该功能与EBGP多跳互斥,此功能一般也配置在IBGP邻居之间,EBGP邻居一般为TTL为1不进行修改。当然,这个功能在OSPF中也存在。
说明: GTSM和peer ebgp-max-hop功能均与BGP报文的TTL值相关,只能对同一对等体或对等体组使能两种功能中的一种。
缺省情况下,BGP对等体(组)上未配置GTSM功能。我们将TTL值设置为255,也就是表示必须为直连BGP邻居发来的TCP建立请求我才和它进行BGP邻居关系的建立(TTL发送的第一跳默认是255,当设备进行转发到不同的网段时再减少,如果减小到0就表示不可达,出现了环路)。
实验:
现在用R1和R2的两个物理接口之间建立相应的邻居关系,最后互相接收的报文的是TTL值为254,我们在R1上配置TTL值必须为255,然后观察TCP连接是否会成功:接收TTL的计算公式:【255-配置+1,255】,默认为【1,255】,所以我们将配置值设置为1,表示只接收TTL为255 的报文:peer 10.1.2.1 valid-ttl-hops 1
然后当holdtime超时后,连接断开(先断开的那边给对端发送notification消息):
执行命令display bgp peer verbose,查看BGP对等体的认证详细信息:
3.限制从对等体接收的路由数量,防止资源耗尽性攻击。
当设备遭到恶意攻击或者网络中出现错误配置时,会导致BGP从邻居接收到大量的路由,从而消耗大量路由器的资源。因此管理员必须根据网络规划和路由器容量,对运行时所使用的资源进行限制。BGP提供了基于对等体的路由控制,限定邻居发来的路由数量,这样可以避免上述问题。
4.AS_Path长度保护。
通过在入口和出口两个方向对AS_Path的长度进行限定,直接丢弃AS_Path超限的报文。
执行命令system-view,进入系统视图。
执行命令bgp as-number,进入BGP视图。
执行命令as-path-limit as-path-limit-num,配置AS_Path属性中AS号的最大个数。
配置as-path-limit命令后,接收路由时会检查AS_Path属性中的AS号是否超限。如果超限则丢弃路由,因此,AS_Path属性中AS号的最大个数被限制得过小,会造成路由的丢失。
路由衰减
当BGP应用于复杂的网络环境时,路由振荡十分频繁。为了防止频繁的路由振荡带来的不利影响,BGP使用路由衰减来抑制不稳定的路由。
路由振荡指路由表中添加一条路由后,该路由又被撤销的过程。当发生路由振荡时,设备就会向邻居发布路由更新,收到更新报文的设备需要重新计算路由并修改路由表。所以频繁的路由振荡会消耗大量的带宽资源和CPU资源,严重时会影响到网络的正常工作。
图1 BGP衰减示意图
路由衰减使用惩罚值(Penalty value)来衡量一条路由的稳定性,惩罚值越高说明路由越不稳定。如图1所示,路由每发生一次振荡,BGP便会给此路由增加1000的惩罚值,其余时间惩罚值会慢慢下降。当惩罚值超过抑制阈值(suppress value)时,此路由被抑制,不加入到路由表中,也不再向其他BGP对等体发布更新报文。被抑制的路由每经过一段时间,惩罚值便会减少一半,这个时间称为半衰期(half-life)。当惩罚值降到再使用阈值(reuse value)时,此路由变为可用并被加入到路由表中,同时向其他BGP对等体发布更新报文。从路由被抑制到路由恢复可用的时间称为抑制时间(suppress time)。
路由衰减只对EBGP路由起作用,对IBGP路由不起作用。这是因为IBGP路由可能含有本AS的路由,而IGP网络要求AS内部路由表尽可能一致。如果路由衰减对IBGP路由起作用,那么当不同设备的衰减参数不一致时,将会导致路由表不一致。
BGP Tracking
BGP Tracking可以为BGP提供快速的链路故障检测,加速BGP网络的收敛速度。当使能了BGP Tracking功能的BGP对等体之间的链路发生故障时,BGP Tracking将快速感知到达邻居的路由的不可达,并由路由管理模块通知到BGP,从而实现快速收敛。
与BFD特性相比,BGP Tracking配置简单,只需在本地配置而不需要全网配置。但是由于BGP Tracking是路由层面的感知方式,而BFD是链路层面的感知方式,所以BGP Tracking收敛速度比BFD慢,不适用于对收敛时间要求较高的语音等业务。
应用
如图1所示,RouterA、RouterB和RouterC之间建立了IGP连接,RouterA和RouterC之间建立了IBGP邻居,在RouterA上配置了BGP Tracking功能。当RouterA和RouterB之间的链路发生故障时,首先IGP进行快速收敛,然后BGP Tracking将感知到达RouterC的路由不可达,并通知RouterA上的BGP,最后RouterA中断与RouterC之间的BGP连接。
说明
如果IBGP邻居的建立依赖于IGP路由,应配置从BGP Tracking发现邻居不可达到BGP中断连接的时间间隔,使该时间间隔大于IGP路由收敛时间。否则,在闪断导致的IGP路由震荡恢复之前,可能BGP邻居关系就已经中断了,这样将导致不必要的BGP收敛。
BGP ORF
BGP基于前缀的ORF(Outbound Route Filtering)能力,能将本端设备配置的基于前缀的入口策略通过路由刷新报文发送给BGP邻居。BGP邻居根据这些策略构造出口策略,在路由发送时对路由进行过滤(发送时过滤是最好的方式,减少带宽的浪费)。这样不仅避免了本端设备接收大量无用的路由,降低了本端设备的CPU使用率,还有效减少了BGP邻居的配置工作,降低了链路带宽的占用率。(只能通过前缀列表进行匹配)
应用
当本端设备希望BGP邻居只发送它需要的路由,而BGP邻居又不愿意针对不同设备维护不同的出口策略时,可以运用BGP ORF特性。
图1 域间EBGP邻居场景
如图1所示,直连BGP邻居中,RouterA、RouterB协商基于前缀的ORF能力后,RouterA将本地配置的基于前缀的入口策略打包到Route-refresh报文中发送给RouterB。RouterB根据接收到的路由刷新报文构造出口策略,通过Route-refresh报文发送路由给RouterA。RouterA只收到它需要的路由,而RouterB不必维护路由策略,减少了配置工作。
图2 域内RR场景
如图2所示,域内带RR的BGP邻居,RouterA、RouterB为RR的客户端,RouterA与RR、RouterB与RR,分别协商基于前缀的ORF能力,RouterA、RouterB将本地配置的基于前缀的入口策略打包到Route-refresh报文中发送给RR。RR根据接收到的前缀信息构造出口策略,通过Route-refresh报文将路由反射给RouterA、RouterB。RouterA和RouterB只收到需要的路由,RR不必维护路由策略,减少了配置工作。
BGP按组打包
目前现网路由表的快速增长,以及网络拓扑的复杂性导致BGP需要支持更多的邻居。特别是一些邻居数目多且路由量大的场景下,针对路由器需要给大量的BGP邻居发送路由,且大部分邻居具有相同出口策略的特点,要求较高的打包发包性能。
按组打包技术将所有拥有共同出口策略的BGP邻居当作是一个打包组。这样每条待发送路由只被打包一次然后发给组内的所有邻居,使打包效率指数级提升。例如,一个反射器有100个客户机,有10万条路由需要反射。如果按照每个邻居分别打包的方式,反射器RR在向100个客户机发送路由的时候,所有路由被打包的总次数是10万×100。而按组打包技术将这个过程变为10万×1,性能相当于提升了100倍。
应用
在邻居数目多、路由量大且大部分邻居具有相同出口策略的场景下,按组打包技术极大的提高了BGP打包发包性能。按组打包的典型应用场景主要有以下三种情况:
- 在国际关口局场景
如图1所示,IGW Router会向所有相邻AS发送路由。如果IGW Router支持BGP按组打包功能,那么它的BGP的转发性能将得到较大的提升。
图1 国际关口局典型组网图
- 路由反射器场景
如图2所示,RR会向所有Client发送路由。如果RR支持BGP按组打包功能,那么它的BGP的转发性能将得到较大的提升。
图2 路由反射器典型组网图
- ASBR场景
如图3所示,作为ASBR的RouterB从EBGP邻居RouterA收来路由后,会向所有IBGP邻居发送。如果RouterB支持BGP按组打包功能,那么它的BGP的转发性能将得到较大的提升。
图3 PE与多个IBGP邻居连接典型组网图
Active-Route-Advertise
默认情况下路由只需在BGP中优选即可向邻居发布。配置了此特性之后,路由必须同时满足在BGP协议层面优选与在路由管理层面活跃两个条件,才能向邻居发布。
只有当BGP路由被成功的安装进IP或IPv6路由表,该路由才能被发送给邻居。
与命令bgp-rib-only(用来禁止BGP路由下发到IP路由表)互斥,因为一起配置的时候,所有条目不允许加表了,肯定都不会发送给对端了,就没有了意义。
4字节AS号概念
拓扑描述
R2收到R1的一条四字节AS的路由,AS号码为10.1。
R2与R3建立邻居,需要令R3认为R2的AS号为AS_TRANS。
R2发送路由给R3的时候把AS_TRANS记录在AS_Path里面,把10.1与自己的AS号码20.1按照BGP要求的顺序记录在AS4_Path。
R3对于不识别的属性AS4_Path不作处理依然保留,它只按照BGP的规则来发送路由给R4。当然它认为R4的AS号码也AS_TRANS。
这样当R4收到从R3来的路由会把AS_PATH中的AS_TRANS按照顺序替换为AS4_Path里所记录的相应的地址,在R4上把AS_PATH属性还原为30 20.1 10.1。
4字节AS号定义的角色:
New Speaker:支持4字节AS号扩展能力的对等体。
Old Speaker:不支持4字节AS号扩展能力的对等体。
New Session:New Speaker之间建立的BGP连接。
Old Session:New Speaker和Old Speaker之间或者Old Speaker之间建立的BGP连接。
协议扩展:
定义了2种新的可选过渡属性AS4_Path(属性码为0x11)和AS4_Aggregator属性(属性码为0x12)用于在Old Session上传递4字节AS信息。
如果New Speaker和Old Speaker建立连接,定义AS_TRANS(保留值为23456)用于衔接2字节AS和4字节AS。并且23456以后无法变回来。
新的AS号有三种写法:(华为支持asdot写法)
splain:就是一个十进制的数字。
asdot+:写成(2字节).(2字节)的形式,所以旧的2字节AS123可以写成0.123,AS65536是1.0;最大为65535.65535。
X*65535+Y=X.Y, X*65535+Y为整数形式的AS号
asdot:旧的2字节写法照旧,新的4字节写成asdot+的形式。(1-65535;1.0-65535.65535)
按策略进行下一跳迭代
BGP需要对非直连的下一跳进行路由迭代,但是如果不对迭代到的路由进行过滤的话,可能会迭代到一个错误的转发路径上。按策略进行下一跳迭代就是通过配置路由策略来限制迭代到的路由。如果路由不能通过路由策略,则该路由迭代失败。
拓扑描述:
R1和R2、R3之间通过Loopback口建立IBGP邻居。R1从R2、R3分别收到了前缀为10.0.0.0/24的BGP路由。其中从R2收到的BGP路由的原始下一跳为2.2.2.2。另外,R1上Ethernet0/0/0的接口地址为2.2.2.100/24。 当R2正常运行时,R1收到从R2发来的前缀为10.0.0.0/24的路由会迭代到IGP路由2.2.2.2/32。但是当R2的IGP发生故障时,IGP路由2.2.2.2/32被撤销,这样就导致下一跳重新迭代。在R1上会用原始下一跳2.2.2.2在IP路由表中进行最长匹配迭代,结果会迭代到2.2.2.0/24的路由上。但此时用户期望的是,当到2.2.2.2的路由不可达时,可以重新选路优选到3.3.3.3的路由。实际上该故障主要是由于BGP收敛引起的,从而产生了路由的瞬时黑洞。 配置下一跳迭代策略,可以通过到BGP路由原始下一跳所依赖路由的掩码长度来过滤迭代路由。可以通过配置下一跳迭代策略,使到原始下一跳2.2.2.2只能依赖于2.2.2.2/32的IGP路由。
BGP同步:
目的:
为了保证IGP环境中依然能够传递BGP条目的流量,避免路由黑洞。
拓扑说明(在同步开启情况下):
R4通过BGP学习到R1宣告的10.0.0.0/24网络(从IBGP对等体学习到对应路由的时候)。R4在将该网络通告给R5之前,会首先检查自己的IGP路由表是否已经存在10.0.0.0/24网络。如果R4本地IGP路由表项存在10.0.0.0/24网络,则将该网络通告给R5;如果R4本地IGP路由表项不存在10.0.0.0/24网络,则不能将该网络通告给R5。如果想让R4的IGP表项由中存在10.0.0.0/24的路由条目,就需要将BGP重分发进入IGP这样让大量的条目进入IGP明显是不可取的。
当然,在华为VRP平台中,BGP的同步是默认关闭的,且不能够手动开启。那么常见解决BGP的路由黑洞问题有两种方法:
建立iBGP全互联连接,使每台路由器都能收到路由,保证AS内部的可达性。
使用MPLS VPN技术来解决,具体细节将在MPLS笔记进行讨论。