Linux防火墙-firewalld与ICMP控制 【Linux服务器】

我们上一篇通过一个网络拓扑展示了rich规则配置的技术细节,并且我们用rich规则也配置了如何简单地阻止不可信的网络对防火墙的骚扰。我们本篇会深入讨论firewalld对icmp的配置Linux防火墙-firewalld与ICMP控制 【Linux服务器】_第1张图片
C/C++Linux服务器开发/后台架构师https://ke.qq.com/course/417774?flowToken=1031343

ICMP协议简介

互联网控制消息协议(ICMP)是各种网络设备用来发送错误消息和操作信息的支持协议,所述错误消息和操作信息指示连接问题,例如,所请求的服务不可用。ICMP不同于TCP和UDP等传输协议,因为它不用于在系统之间交换数据。

遗憾的是,互联网总有人可能会使用ICMP消息,特别是回应请求和回应回复,泄露有关您的网络的信息,并将这些信息滥用于各种欺诈活动。因此,firewalld可以阻止ICMP请求以保护您的网络信息。

如何阻止和启用ICMP?

首先,使用以下命令检查我们正在使用的ICMP类型。

firewall-cmd --get-icmptypes
Linux防火墙-firewalld与ICMP控制 【Linux服务器】_第2张图片
要在指定区域上添加icmp阻塞,可以使用以下命令。 例如,这里我要在external区域添加icmp阻塞,在阻止之前,只需执行icmp ping即可确认icmp阻塞的状态。

当您的服务器阻止ICMP请求时,它不会提供通常会提供的信息。然而,这并不意味着没有提供任何信息。客户端接收特定ICMP请求被阻止(拒绝)的信息。应该仔细考虑阻止ICMP请求,因为它可能会导致通信问题,尤其是IPv6流量。

要查看ICMP请求当前是否被阻止,请执行以下操作:

firewall-cmd --zone=external --query-icmp-block=echo-request 

如果返回no的话,要阻止ICMP请求,请执行以下操作:

firewall-cmd --zone=external --add-icmp-block=echo-request 
firewall-cmd --zone=external --add-icmp-block=echo-reply 
firewall-cmd --runtime-to-permanent 

检查一下配置,貌似没什么问题?

Linux防火墙-firewalld与ICMP控制 【Linux服务器】_第3张图片
firewalld在icmp处理上有些bug,即便你已经使用持久配置了,也不会立即生效的,此时建议还是reload一下。
但从上图的icmp阻塞来说不如理想,我仍然能从192.168.50.17的主机得到防火墙的Packet filtered的错误反馈,这不是告知嗅探者你防火墙的存在吗!只是防火墙把他正在阻止了,我们需要的是不返回任何信息。

在完全不提供任何信息的情况下阻止ICMP请求

要完全隐藏此信息,您必须丢弃所有ICMP请求,这是以前iptables防火墙一贯使用的DROP大法。

  • 首先,将external的target设定为DROP
firewall-cmd --zone=external --set-target=DROP --permanent 
firewall-cmd --reload 

验证external区域的target是否为DROP?
Linux防火墙-firewalld与ICMP控制 【Linux服务器】_第4张图片
注意:不要迷信firewalld会对ICMP数据包的过滤会动态生效的,在没有reload之前,你原先在客户端测试icmp请求依然显式答应。

我们在192.168.50.0/24找其他主机测试一下ping是否没返回任何错误信息,如下图在一台Linux主机中显示"0 received 100% packet loss"
Linux防火墙-firewalld与ICMP控制 【Linux服务器】_第5张图片
在Windows主机中,同样没有接收到任何数据包
Linux防火墙-firewalld与ICMP控制 【Linux服务器】_第6张图片
现在,除非您显式允许的流量除外,所有流量(包括ICMP请求)都将被丢弃。

要阻止和丢弃某些ICMP请求并允许其他请求,请执行以下操作:
Redhat推荐使用icmp-block-inversion的命令选项,我是不建议使用,这种黑白颠倒的操作一旦时间久远,你看回防火墙配置会感觉很别扭。Linux防火墙-firewalld与ICMP控制 【Linux服务器】_第7张图片
最简单的方式是使用上一篇提到的rich规则,假设网络拓扑中192.168.50.10是我们可信的主机,且是固定的ip地址,和防火墙不定时地测试彼此是否在线,此时我们只需定义一条rich规则允许192.168.50.10向防火墙发起ICMP请求。规则如下
Linux防火墙-firewalld与ICMP控制 【Linux服务器】_第8张图片

Linux服务器开发/架构师面试题、学习资料、教学视频和学习路线图(资料包括C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg等),免费分享有需要的可以自行添加学习交流群960994558
Linux防火墙-firewalld与ICMP控制 【Linux服务器】_第9张图片

你可能感兴趣的:(Linux,Linux,服务器开发)