上篇文章我们与大家讲解了 Cisco IOS-XE 系统下的防御思路,见文章:《使用 CISCO VRF 技术防止 IXP Member 恶意占用带宽资源》
今天再来浅谈下 JunOS 下一些防御方案。
拓扑整图:
你需要有的材料:
- Juniper MX 路由器一台 (如果你使用的是 SRX 路由器也是可以的)
- 服务器若干台(为方便模拟,拓扑图中以一台表示)
- 一条 Transit 链路
- 一条 IXP 链路(这里模拟的是德国的 DE-CIX )
你需要准备的事情:
- 配置好接口 IP 地址 (已预配)
- 配置好 BGP session (已预配)
- 确认网络通信一切正常
下面开始准备工作
1.验证 MX 路由器下客户端与 114.114.114.114 的通信
[admin@LittleWolf-Customer] > tool traceroute 114.114.114.114 # ADDRESS LOSS SENT LAST AVG BEST WORST 1 192.0.2.1 66.. 4 timeout 13.2 13.2 13.2 2 59.43.100.1 0% 3 2.8ms 3.9 2.6 6.2 3 59.43.100.3 0% 3 3.3ms 4.8 2.3 8.8 4 114.114.114.114 0% 3 3ms 3.6 3 4.1
2.验证我方和实验对方的网络连通性
[admin@LittleWolf-Customer] > tool traceroute 114.51.41.9 # ADDRESS LOSS SENT LAST AVG BEST WORST 1 192.0.2.1 40% 5 1.6ms 9.2 1.6 24.4 2 59.43.100.1 0% 5 7.1ms 6.8 2.6 11.1 3 59.43.100.3 0% 5 6.8ms 5.5 3.1 7.7 4 202.97.100.0 0% 5 5.8ms 7.7 5.8 10.7 5 114.51.41.9 0% 5 4.8ms 7.7 3.5 16.6
准备工作结束,接下来连接与 DE-CIX 的物理线缆并配置与 Route Server 的 BGP session (接口 IP 地址已经标注在拓扑图上,配置BGP的过程已略过)。
配置完成后,检查 MX 路由器的关于 114.114.114.0/24 这个段的路由表:
root@vMX-VFP-LittleWolf-Backbone> show route 114.114.114.0/24 exact inet.0: 8 destinations, 8 routes (8 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both 114.114.114.0/24 *[BGP/170] 00:23:22, localpref 100 AS path: 4809 4134 1919 I, validation-state: unverified > to 59.43.100.1 via ge-0/0/3.0
可见路由表正确,只有 Transit ( China Telecom 4809 ) 发过来的路由。
再检查一下对端路由器:
Others-backbone#show ip bgp 114.114.114.114 BGP routing table entry for 114.114.114.0/24, version 3 Paths: (1 available, best #1, table default, not advertised to any peer) Not advertised to any peer Refresh Epoch 1 4134 1919 202.97.100.1 from 202.97.100.1 (202.97.200.1) Origin IGP, localpref 100, valid, external, best Community: no-advertise rx pathid: 0, tx pathid: 0x0
也是没有问题的,对端只有从 Transit ( China Telecom 4134 ) 接收到了该路由。
上文提到过, IXP 逻辑上可以将其视为一个巨大的交换机 ,所有的路由器都存在于一张二层网络内,所以是可以通过写静态路由的方式来强行将数据包 next-hop 更改为别人的 IXP 接口的。同样的,为了防止 IXP member 恶意占用带宽,我们可以在 Juniper 路由器上使用类似于 Cisco VRF 的技术 — Routing-instance.
首先,我们在 AS114514 写入静态路由来模拟恶意占用带宽的情况:
Others-backbone(config)# ip route 114.114.114.114 255.255.255.255 80.81.192.100
然后,在 AS114514 下的服务器上测试路由走向:
[admin@Others-Customer] > tool traceroute 114.114.114.114 # ADDRESS LOSS SENT LAST AVG BEST WORST 1 114.51.41.1 0% 3 4.9ms 8.2 4.9 13.9 2 80.81.192.100 0% 3 12.8ms 9.8 6.7 12.8 3 59.43.100.1 0% 2 4.6ms 5.6 4.6 6.5 4 59.43.100.3 0% 2 6.4ms 6 5.6 6.4 5 114.114.114.114 0% 2 5.6ms 5.5 5.4 5.6
可见数据包被成功的路由到 AS138667 的骨干路由器后,再被转发到 AS4809 CN2 链路。未经授权的数据占用了 AS138667 的大量带宽资源。为了预防这种现象,我们可以为路由器配置 Routing-instance.
配置如下:
[edit interfaces ge-0/0/1 unit 0 family inet] + filter { + input decix-forward; // 将防火墙规则应用在接口 input 方向,所有从 该接口进入的流量必须经过 routing-instance 转发 + } [edit policy-options] + policy-statement decix-import { // 定义导入路由的过滤器规则 + term import-local { + from { + instance master; // 从主路由表导入 + protocol [ local direct ]; // 导入直连和本地路由 + } + then accept; + } + term last-reject { + then reject; // 拒绝其他路由导入 + } + } [edit] + firewall { + family inet { + filter decix-forward { + term decix-forward { + then { + routing-instance decix; // 定义防火墙规则,用于将其应用在接口上。所有从 decix 进入的流量将被送入 routing-instance 进行路由判断。 + } + } + } + } + } + routing-instances { + decix { + instance-type forwarding; // 由于 JunOS 拥有多种类型的 routing-instance,可以实现很多功能,这里为了以后的扩展性,选择类型为纯转发 + routing-options { + static { + route 0.0.0.0/0 discard; // 默认拒绝所有报文转发 + } + instance-import decix-import; // 按照过滤器的规则导入本地直连路由以及客户通过 BGP 传入的路由 + } + } + }
验证配置好后的路由表:
root@vMX-VFP-LittleWolf-Backbone> show route table decix.inet.0 decix.inet.0: 7 destinations, 7 routes (7 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both 0.0.0.0/0 *[Static/5] 00:11:10 Discard 192.0.2.0/24 *[Direct/0] 00:07:33 > via ge-0/0/2.0 192.0.2.1/32 *[Local/0] 00:07:33 Local via ge-0/0/2.0 59.43.100.0/31 *[Direct/0] 00:07:33 > via ge-0/0/3.0 59.43.100.0/32 *[Local/0] 00:07:33 Local via ge-0/0/3.0 80.81.192.0/21 *[Direct/0] 00:07:33 > via ge-0/0/1.0 80.81.192.100/32 *[Local/0] 00:07:33 Local via ge-0/0/1.0
可见该路由表里只有导入的直连路由,没有通过 Transit 传入的路由。而因为在接口定义了防火墙规则,所以从 DE-CIX 接口来的数据将全部经过该 routing-instance 转发。并且由于导入了直连路由,所以对方访问 AS138667 的网络资源是正常的。但如果接收到了未经授权的数据( 如: destination address = 114.114.114.114 ),那么一定会匹配到 0.0.0.0/0 这条路由条目从而被丢弃。
路由跟踪( IXP 互通):
[admin@LittleWolf-Customer] > tool traceroute 114.51.41.9 # ADDRESS LOSS SENT LAST AVG BEST WORST 1 192.0.2.1 0% 3 1.9ms 12 1.9 22 2 80.81.192.200 0% 2 5.9ms 5.9 5.8 5.9 3 114.51.41.9 0% 2 6.7ms 6 5.3 6.7
[admin@Others-Customer] > tool traceroute 192.0.2.100 # ADDRESS LOSS SENT LAST AVG BEST WORST 1 114.51.41.1 0% 4 1.4ms 1.5 1.2 1.7 2 80.81.192.100 0% 4 4.9ms 39.9 4.7 144.9 3 192.0.2.100 0% 4 6.7ms 6.4 5.5 6.9
路由跟踪(模拟恶意占用带宽 ):
[admin@Others-Customer] > tool traceroute 114.114.114.114 # ADDRESS LOSS SENT LAST AVG BEST WORST 1 114.51.41.1 0% 3 1.7ms 1.9 1 3.1 2 100% 3 timeout 3 100% 2 timeout 4 100% 2 timeout 5 100% 2 timeout 6 100% 2 timeout [admin@Others-Customer] > ping 114.114.114.114 count=3 SEQ HOST SIZE TTL TIME STATUS 0 114.114.114.114 timeout 1 114.114.114.114 timeout 2 114.114.114.114 timeout sent=3 received=0 packet-loss=100%
在启用 Routing-instance 技术后,未经授权的数据进入接口后将被阻止,避免了带宽资源无谓的消耗,节省了开支。
同样可以在过滤器里通过匹配动态路由的方式来实现自动化。