原文地址:http://www.excelib.com/article/293/show

提到ICMP大家应该都很熟悉,可能有人会说:不就是ping吗?但是说到ICMP攻击以及相关防御措施可能就有的人不是非常清楚了。

ICMP的概念

要 想理解ICMP攻击以及防范我们还得从ICMP的概念说起,ICMP是“Internet Control Message Protocol”的缩写,意思是“Internet控制消息协议”,他主要用于在不同主机、路由器等设备之间传递控制消息,比如网络是否可以联通、路由 设备地址的发现、路由路径是否合理等内容。

ICMP攻击

ICMP协议被攻击的方法有很多种,比如的“Ping of Death”、使用ICMP数据包发起DDOS攻击、redirect攻击等等,下面学生简单给大家介绍一下。

“Ping of Death”的原理是当发送的数据包大小超过64KB(规定最大64KB)后接收信息的主机就会出现内存分配错误,进一步会导致TCP/IP堆栈崩溃,甚至主机死机!不过这一漏洞在新版的操作系统中已经解决了。

ICMP 的DDOS简单来说就是一直不停地发送ICMP数据包从而占满被攻击主机的带宽,当然,更进一步还可以使用一些手段将流量进行放大,比如将源地址设置为被 攻击主机的“echo-request”类型报文广播给很多第三方主机,这时这些接收到报文的主机就会给被攻击目标主机返回“echo-replay”报 文,这样流量就被放大了。

要理解redirect攻击,首先要明白redirect的作用,学生给大家举个例子大家就明白了,比如有个快递 需要从北京发往广州,结果北京发到沈阳的中转站了,这时候沈阳就觉得不对呀,要往广州发应该往南边发才对怎么能往北边发呢?所以沈阳站就会跟北京站联系, 告诉他:你发的不对,你应该往南边的XXX站发送才对。ICMP中的redirect就是起这个作用的,当路由设备发现某个数据包经过自己不是最优路径时 就会给源地址发一个redirect数据包,告诉对方发的路径不合适,并且指出应该发往的地址。这个功能是很有用的,不过如果被攻击者使用情况就完全不一 样了,他们可以使用这一功能将正常(合理)的路由地址给修改为一个不合理的甚至不存在的地址,这样就会给通讯造成问题,另外,有一些还会将目标地址设置为 他们自己可以控制的主机的地址,这样就可以截获数据了!跟redirect相关的还有router-advertisement、router- solicitation等类型的ICMP数据包。

当然,除了这三种还有很多攻击的类型,比如我们下面会说到的destination-unreachable、source-quench、time-exceeded等类型的攻击。

可能看到这里有的读者就觉得不容易理解了:echo-request、redirect、destination-unreachable等等到底是什么东西呢?其实这都是ICMP的类型,下面学生就来给大家介绍ICMP的类型。

ICMP的类型

ICMP 数据包主要包含三部分内容:类型、代码和附加数据,其中的类型和代码属于包头,代码(code)相当于类型(type)下的细分子类型,我们也可以理解为 他们共同来决定一个ICMP包的类型,比如学生上面给大家讲的redirect的type为5,不过5这个type下面还有4个code——0,、1、 2、3,他们所表示的含义如下表所示

表1:ICMP包Redirect类型表

type
code
描述
5 0 Redirect for network——对网络重定向
5 1 Redirect for host——对主机重定向
5 2 Redirect for TOS and network——对服务类型和网络重定向
5 3 Redirect for TOS and host——对服务类型和主机重定向

具体更多的代码学生就不在这里罗列了,大家很容易就可以找到。在ICMP数据包中type和code就像excel中的两个单元格,只要将相应的数据填入,主机就可以知道这个ICMP包的类型了。

这里的type和code我们当然是不需要记的,在使用的时候只需要用名字就可以了,比如type为8的数据包我们直接写Echo request、type为0的数据包我们直接写Echo Reply就行了,下面学生简单地给大家介绍几个常见的类型

  • Echo request:需要回应的请求,也就是我们常说的ping请求

  • Echo Reply:对ping的回应报文(pong)

  • Destination Unreachable:目标不可达

  • Source Quench:源地址资源紧张,正常情况下当我们要发送数据的路由设备请求过多时就会发出这种ICMP包

  • Time Exceeded:超时,比如TTL用完后就会产生这种类型的数据包

Firewalld针对ICMP攻击的防御方法

firewalld中有专门针对icmp报文的配置方法,而且使用起来也非常简单,我们只需要将firewalld所支持的icmp类型配置到所使用的zone中就可以了,要查看firewalld所支持的icmp类型可以使用下面的命令

firewall-cmd [--permanent] --get-icmptypes

默认的返回结果如下

 destination-unreachable echo-reply echo-request parameter-problem redirect
router-advertisement router-solicitation source-quench time-exceeded

这里的类型前面学生基本都给大家介绍过了,下面来学生来给大家讲怎么使用。跟icmptype相关的命令主要有四个

 firewall-cmd [--permanent] [--zone=zone] --list-icmp-blocks
firewall-cmd [--permanent] [--zone=zone] --add-icmp-block=<icmptype>
firewall-cmd [--permanent] [--zone=zone] --remove-icmp-block=<icmptype>
firewall-cmd [--permanent] [--zone=zone] --query-icmp-block=<icmptype>

他们分别用于列出zone中所阻止的所有icmp类型、添加、删除和查询某个具体的icmp类型,如果指定zone则对具体zone进行操作,否则对当前活动的zone进行操作。

icmp配置文件的结构也非常简单,除了short和description外只有一个destination节点,可以设置对ipv4和ipv6的支持与否。

补充与建议

对于firewalld中的icmp设置大家要特别注意下面三点

1、firewalld只可以阻止指定类型的icmp包,没有其他更多的配置选项

2、如果使用drop、reject这些zone的话,默认所有icmp类型都会阻塞

3、默认情况下firewalld中所配置的icmp类型主要是针对入包的,而对于主机发出的包是不会拦截的。另外,在前面学生跟大家说过firewalld是一款有状态的防火墙,也就是说不同连接之间的关系firewalld在内部是有记录的,所以即使我们将echo-reply设置到zone中之后再去使用本机ping其他主机也是可以收到回复的,这是因为firewalld底层可以识别出那个echo-reply是我们发生去请求的回应。

对于具体哪个类型应该阻止,哪个应该放行大家需要根据自己的实际情况来设定,学生下面给大家提供一些思考的方向和建议。

  • destination-unreachable:当收到这种类型数据包之后相应地址的连接将会被断开,如果是攻击者伪造的数据包,那么会将我们的很多正常连接断开。当将其设置到zone中后我们本机发送的请求还是可以收到destination-unreachable类型回复的,只是直接发给我们的destination-unreachable数据包进不来了,所以建议大家可以阻止。

  • echo-request:主要用于接收ping请求,阻塞之后我们的主机将不可被ping,不过打开后又有可能被攻击,有种惯用的做法是设置开通的频率,比如1秒钟只可以被ping一次,不过这种功能直接使用学生上面给大家介绍的方法是无法设置的,不过没关系,当学习了学生下一节将要给大家介绍的firewalld中的direct之后就可以设置了。

  • echo-reply:这是回应ping信息的包,一般来说我们应该将其阻止,因为他跟destination-unreachable一样,如果是我们本机发出的即使设置了阻止也还是可以接收到的。

  • parameter-problem:当接收到的报文参数错误,无法解析时会返回这种类型的报文。

  • redirect:这种报文学生在前面已经给大家详细介绍过,这里就不再重述了。

  • router-advertisement和router-solicitation:这是一对报文,他们的作用是用来发现路由设备的地址,主机发出router-solicitation类型数据包来查找路由设备,路由设备可以发出router-advertisement类型ICMP数据包来告诉主机自己是路由设备

  • source-quench:这个学生也给大家介绍过了,当源地址设备(比如路由设备)资源紧张时就会发出这种数据包

  • time-exceeded:数据包超时。

最后还是那句话,没有最优配置方法(否则就不需要配置了),大家需要根据自己的实际情况进行配置。

参考文献

http://baike.baidu.com/view/30564.htm

Firewalld防火墙与ICMP攻击的更多相关文章

  1. 第8章 Iptables与Firewalld防火墙

    章节简述: 红帽RHEL7系统已经用firewalld服务替代了iptables服务,新的防火墙管理命令firewall-cmd与图形化工具firewall-config. 本章节基于数十个防火墙需求 ...

  2. CentOS7、REHL7的firewalld防火墙使用简单说明

    title: CentOS7.REHL7的firewalld防火墙使用简单说明 categories: Linux tags: - Linux timezone: Asia/Shanghai date ...

  3. 第7章 Iptables与Firewalld防火墙。

    第7章 Iptables与Firewalld防火墙.     Chapter7_听较强节奏的音乐能够让您更长时间的投入在学习中. <Linux就该这么学> 00:00/00:00     ...

  4. 9.Iptables与Firewalld防火墙

    第9章 Iptables与Firewalld防火墙 章节简述: 保障数据的安全性是继保障数据的可用性之后最为重要的一项工作.防火墙作为公网与内网之间的保护屏障,在保障数据的安全性方面起着至关重要的作用 ...

  5. 24.Firewalld防火墙

    1.Firewalld防火墙的概述 RHEL/CentOS 7系统中集成了多款防火墙管理工具,其中firewalld是默认的防火墙配置管理工具它拥有基于CLI(命令行界面)和基于GUI(图形用户界面) ...

  6. 19、Firewalld防火墙

    安全的考虑方向: 安全框架 OSI七层模型 硬件 机架上锁(机柜) 温度 硬件检查 网络 iptables/firewalld 仅允许公司的IP地址能连接服务器的22端口 公有云使用 安全组 系统 没 ...

  7. firewalld 防火墙

    firewalld防火墙   firewalld简述 firewalld:防火墙,其实就是一个隔离工具:工作于主机或者网络的边缘对于进出本主机或者网络的报文根据事先定义好的网络规则做匹配检测,对于能够 ...

  8. linux系统中firewalld防火墙管理工具firewall-config(GUI图形用户界面)

    firewall-config是firewalld防火墙管理工具的GUI(图形用户界面)版本,几乎可以实现所有以命令行来执行的操作. firewall-config的界面如下图(在终端直接运行fire ...

  9. firewalld防火墙基础

    目录 一.firewalld 概述 二.firewalld与iptables 的区别 三.firewalld 区域概念 四.Firewalld数据处理流程 五.Firewalld检查数据包的源地址的规 ...

随机推荐

  1. 【QT】QML的Mouse事件(MouseArea)详解

    https://blog.csdn.net/ieearth/article/details/42082837

  2. zhx'code1

    void dandiao() { ,tail=; ;a<=k;a++) { ]) tail--; tail++; q[tail][]=z[a];q[tail][]=a; } ;a<=n;a ...

  3. mysql连接踩坑

    本机安装的是wamp,集成了mysql.php.apache.安装了sqlyog客户端. 1.错误代码2003 证明mysql服务没有开启,此时需要开启mysql服务,开启了wamp 2.错误代码10 ...

  4. 基于Ubuntu16.04的GeForce GTX 1080驱动安装,遇到的问题及对应的解决方法

    1.在主机上插上GPU之后,查看设备: $ nvidia-smi Tue Dec :: +------------------------------------------------------- ...

  5. learn go ifelse

    package main // 参考文档: // https://github.com/Unknwon/the-way-to-go_ZH_CN/blob/master/eBook/05.1.md im ...

  6. python3.4 使用BeautifulSoup问题

    事情 记得昨儿还是什么时候,反正是以前,肯定安装过BeautifulSoup,只不过当初可能用的是python setup.py install,这是Python2的安装.然而用Python3运行Be ...

  7. Git使用总结(廖雪峰git)

    安装 $ sudo apt-get install git 配置 # 配置用户名和邮箱 $ git config --global user.name "Your Name" $ ...

  8. ranch分析学习(二)

    紧接上篇,今天我们来分析监督树的工作者,打工仔执行任务的人.废话不多少我们直接进入正题. 3.ranch_server.erl   整个文件的功能主要是存储tcp对应参数的的信息.信息的存储方式采用的 ...

  9. 内联汇编实现 memcpy 和 memset

    #pragma check_stack( off) LPVOID __cdecl _memcpy(void * dst, void* src, size_t size) { int dwSize = ...

  10. install build essential

    CentOS: sudo yum groupinstall 'Development Tools' Ubuntu: sudo apt-get install build-essential