黑洞路由、 DDoS 攻击 、 环路

黑洞路由

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:未完待续

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/631056.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大华相机C#学习之IDevice类

获取方式 Enumerator.GetDeviceByGigeIP() 通过IP地址获取设备对象。 private void test_Click(object sender, EventArgs e) {devicesEnumerator.EnumerateDevices();device Enumerator.GetDeviceByGigeIP("192.168.0.11"); } 常用属性 DeviceInfo 获取设备的信…

学习部分排序,插入排序,冒泡排序以及希尔排序

1.插入排序 <1>.首先我们举个例子 我们要把6进行前面的插入&#xff0c;那我们要进行比较&#xff0c;首先确定一个end的指针&#xff0c;然后他指向的数字就是我们需要比较的&#xff0c;如果end指向的数比我们end1 的大的话&#xff0c;那我们就往前挪一个&#xff0c…

Docker向harbor上传大镜像的413报错

文章目录 一、背景二、问题三、处理1.调整harbor相关大小2.正向代理的nginx参数 一、背景 最近遇到了个需求&#xff0c;某厂商的系统模块以容器模式部署在我们的内网环境中&#xff0c;厂商为我们提供了一个公网仓库&#xff0c;需要我们自己下载相关镜像。因此&#xff0c;获…

Spring学习(三)——AOP

AOP是在不改原有代码的前提下对其进行增强 AOP(Aspect Oriented Programming)面向切面编程&#xff0c;在不惊动原始设计的基础上为其进行功能增强&#xff0c;前面咱们有技术就可以实现这样的功能即代理模式。Java设计模式——代理模式-CSDN博客 基础概念 连接点&#xff08…

graphviz使用

安装 brew install graphviz测试 https://github.com/martisak/dotnets?tabreadme-ov-file

从Linux角度具体理解程序翻译过程-----预处理、编译、汇编、链接

前言&#xff1a; 在C语言中&#xff0c;我们知道程序从我们所写的代码到可执行执行的过程中经历了以下过程 1.预处理 2.编译 3.汇编 4.链接 可以通过下图来理解 翻译过程 1.预处理 该过程主要进行以下操作&#xff1a; (1)头文件的包含 (2)define定义符号的替换&#xff…

C语言——九九乘法表

直接上代码实现九九乘法表&#xff0c;完整代码如下&#xff1a; #include <stdio.h>int main(){int i,j;for(i1;i<10;i){for(j1;j<i;j){printf("%d*%d%d\t",j,i,i*j);/*printf("%d*%d%-2d",j,i,i*j);*/}printf("\n");}return 0; }…

常用的7个免费ChatGPT网站

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

SpringCloud系列(5)--SpringCloud微服务工程公共部分提取

前言&#xff1a;在上一章节中我们创建了两个个SpringCloud工程&#xff0c;但在两个工程中分别存在着一些重复的部分&#xff0c;例如重复的实体类&#xff08;如图所示&#xff09;&#xff0c;这样会造成系统的冗余&#xff0c;所以我们需要把公共的类提取到一个工程里&…

41、二叉树-二叉树的层序遍历

思路&#xff1a; 层序遍历就是从左到右依次遍历。这个时候就可以使用队列的方式。例如先把头节点入队&#xff0c;然后遍历开始&#xff0c;首先计算队列长度&#xff0c;第一层&#xff0c;长度为了&#xff0c;遍历一次&#xff0c;依次出队&#xff0c;头结点出队&#xff…

Linux的学习之路:13、进程替代

摘要 本章主要是说一下进程替代用到的函数exec以及自己实现的简易shell 目录 摘要 一、进程程序替换 1、替换原理 2 、替换函数 3、函数解释与命令理解 4、代码演示 1、execl 2、execv 3、execlp 4、execvp 二、简易的myshell 三、代码 myshell exec 一、进程…

Ubuntu 22最新dockers部署redis哨兵模式,并整合spring boot的详细记录(含spring boot项目包)

dockers部署redis哨兵模式&#xff0c;并整合spring boot 环境说明相关学习博客一、在docker中安装redis1、下载dockers镜像包和redis配置文件&#xff08;主从一样&#xff09;2、编辑配置文件&#xff08;主从一样&#xff09;3、启动redis&#xff08;主从一样&#xff09;4…