黑洞路由
DDoS 攻击
DDoS 攻击是一种针对服务器、服务或网络的恶意行为。DDoS 攻击通过向目标发送大量流量,使其不堪重负,导致资源和带宽被耗尽。因此,目标可能会变慢或崩溃,无法正常处理合法的流量。DDoS 攻击通常是由僵尸网络发起的,这些僵尸网络由大量感染了 恶意软件的计算机和设备组成,并受到攻击者的控制,通过向目标发送大量流量,从而淹没目标。由于 僵尸网络可能包含成百上千台设备,因此安全防御措施难以检测和抵御此类攻击。常见的 DDoS 攻击包括 ICMP 泛洪攻击、 SYN 泛洪攻击、Slowloris 攻击和 HTTP 泛洪攻击。
环路
环路是网络中数据包在转发过程中无限循环的情况,导致数据包无法正常到达目的地,最终造成网络的拥塞和故障。环路通常是由于网络设备配置不正确或网络拓扑结构设计缺陷引起的。
出现环路的原因可能包括以下几点:
-
错误的路由配置:当网络中的路由配置错误时,可能会导致数据包在转发过程中出现环路。比如,如果网络设备上存在相互交叉的路由,数据包就可能在不同的路径上形成环路。
-
网络拓扑设计缺陷:在网络拓扑结构设计中,如果存在设计缺陷或复杂的网络结构,可能会增加环路的发生概率。例如,网络中存在多个路径到达同一目的地,但没有足够的路由选择机制来避免环路。
-
动态路由协议问题:在使用动态路由协议时,如果路由协议的配置不正确或网络中存在不稳定的连接,可能导致路由信息不一致或更新延迟,进而引发环路问题。
-
网络设备故障:网络设备的硬件故障或软件异常也可能导致环路的发生。例如,路由器或交换机的转发表出现异常,无法正确处理数据包的转发。
示例
DeviceA作为本地网络的网关,本地网络使用一个B类网段地址172.16.0.0/16。DeviceA通过DeviceB、DeviceC和DeviceD分别与三个子网相连。
正常情况下,DeviceA的路由表应包含三部分路由:
-
到172.16.2.0/24、172.16.3.0/24和172.16.4.0/24三个子网的路由。
-
到DeviceB、DeviceC及DeviceD的网段路由。
-
到ISP网络的缺省路由。
问题:
如果ISP侧网络路由器DeviceE接收到目的地址是172.16.10.0/24网段内的报文,则DeviceE会把该报文转发到DeviceA。
如果该报文的目的地址不是DeviceB、DeviceC和DeviceD所连网段的网络地址,DeviceA查找路由表后,会找到缺省路由,然后把该报文发给DeviceE。
因此这些目的地址不是DeviceB、DeviceC和DeviceD所连网段的网络地址,但是172.16.10.0/24网段的网络地址的报文,会在DeviceA和DeviceE之间如此反复被传输,形成路由环路。
黑洞路由
什么是黑洞路由 ?
为了解决路由黑洞问题(环路),或防止doss、黑客攻击,防止服务器造成不必要的性能损耗或带宽占用
实现方案
- 配置一条静态的网络路由
- 对于交换机或者路由器来说,当转发网络设备在转发某些数据包时,如果使用出接口为Null0的路由,指向该接口的路由,符合的报文都会被丢弃,就像直接被丢到一个黑洞里
- 对于ubuntu系统来说,实现黑洞路由的方式参考:https://www.cyberciti.biz/tips/how-do-i-drop-or-block-attackers-ip-with-null-routes.html,http://www.uni-koeln.de/~pbogusze/posts/Blackhole_routing_with_linux.html
Null0接口实现解决环路
针对以上路由环路示例的解决方案描述
在实际应用中,一般会在DeviceA上配置一条到NULL0接口的静态路由。这样,当DeviceA收到目的网段不是本地三个子网的报文后,DeviceA会根据精确匹配原则,找到出接口是NULL0接口的路由,然后把该报文丢弃。
由此可见,在DeviceA上配置一条出接口是NULL0接口的静态路由,可以防止路由环路
。
Null0接口作用
-
用于过滤流量:NULL0接口提供了过滤流量的一个可选的方法。可以通过将不想要的报文发送到NULL0接口,避免使用访问控制列表。
-
NULL0接口和访问控制列表都可以用于过滤流量,这两种用法各有裨益。下面对NULL0接口和访问控制列表进行简单比较。
-
如果使用访问控制列表,首先要配置ACL规则,然后将它应用到接口。当路由器收到报文时,要首先查找访问控制列表:
- 如果是接受,还要查找转发表,再对报文进行转发或丢弃。
- 如果是拒绝,就直接扔掉。
-
-
NULL0接口的配置简单,只需将不想要的报文的出接口指定为NULL0接口。当路由器收到报文时,直接查找转发表,发现出接口是NULL0接口,则路由器不对报文做任何处理,直接丢弃。
所以对比起来,应用NULL0接口效率高,速度快。比如某路由器不希望收到某个指定目的地址的报文,用NULL0接口实现,只需配置路由。如果用访问控制列表实现,需要先配置一条ACL规则,然后再将这条规则在路由器的相应接口上应用。但是,NULL0接口不能细化流量,它面向的对象是整个路由器。访问控制列表是可以面向接口的。如果细致到需要控制面向接口的流量,NULL0接口就不能满足要求了。比如某路由器不希望在本地接口Serial1/0/0上收到目的地址是172.18.0.0/16的流量。用NULL0接口是不能实现的,只能通过配置ACL规则,然后将其应用到接口Serial1/0/0。
实现
# 设置了一个规则,让所有数据包都按照表 225 进行路由,并且设置了规则的优先级为 225。
ip rule add from all table 225 prio 225
# 在路由表 225 中添加了一个路由项,将目标网络地址为 192.168.194.0/24 的数据包丢弃。
# 在225中添加黑洞路由,比如网段是为192.168.194.0/24,则命令为
ip route add blackhole 192.168.194.0/24 table 225
# 删除225中的黑洞路由,比如保护子网为192.168.194.0/24,则命令为
ip route del blackhole 192.168.194.0/24 table 221
todo:未完待续