Red Hat Training
A Red Hat training course is available for RHEL 8
46.10. 管理 ICMP 请求
Internet 控制消息协议
(ICMP
)是一种支持协议,供各种网络设备用来发送错误消息和表示连接问题的操作信息,例如,请求的服务不可用。ICMP
与 TCP 和 UDP 等传输协议不同,因为它不用于在系统之间交换数据。
不幸的是,可以使用 ICMP
消息(特别是 echo-request
和 echo-reply
)来揭示关于您网络的信息,并将这些信息滥用于各种欺诈活动。因此,firewalld
允许阻止 ICMP
请求,来保护您的网络信息。
46.10.1. 列出和阻塞 ICMP 请求
列出 ICMP
请求
ICMP
请求在 /usr/lib/firewalld/icmptypes/
目录中的单个 XML 文件中进行了描述。您可以阅读这些文件来查看请求的描述。firewall-cmd
命令控制 ICMP
请求操作。
要列出所有可用的
ICMP
类型:# firewall-cmd --get-icmptypes
IPv4、IPv6 或两个协议都可以使用
ICMP
请求。要查看ICMP
请求使用了哪种协议:# firewall-cmd --info-icmptype=<icmptype>
如果请求当前被阻止,则
ICMP
请求显示yes
或如果请求没被阻止,则显示no
。要查看ICMP
请求当前是否被阻止:# firewall-cmd --query-icmp-block=<icmptype>
阻止或取消阻止 ICMP
请求
当您的服务器阻止了 ICMP
请求时,它不会提供通常应该提供的信息。但这并不意味着根本不给出任何信息。客户端会收到特定 ICMP
请求被阻止(拒绝)的信息。应仔细考虑阻止 ICMP
请求,因为它可能会造成通信问题,特别是 IPv6 流量。
要查看
ICMP
请求当前是否被阻止:# firewall-cmd --query-icmp-block=<icmptype>
要阻止
ICMP
请求:# firewall-cmd --add-icmp-block=<icmptype>
要删除
ICMP
请求的块:# firewall-cmd --remove-icmp-block=<icmptype>
在不提供任何信息的情况下阻止 ICMP
请求
通常,如果您阻止了 ICMP
请求,客户端会知道您正在阻止它。这样潜在的攻击者仍然可以看到您的 IP 地址在线。要完全隐藏此信息,您必须丢弃所有 ICMP
请求。
-
要阻止和丢弃所有
ICMP
请求: 将区的目标设为
DROP
:# firewall-cmd --permanent --set-target=DROP
现在,所有流量(包括 ICMP
请求)都将被丢弃,除了您明确允许的流量外。
要阻止和丢弃某些 ICMP
请求,而允许其他请求:
将区的目标设为
DROP
:# firewall-cmd --permanent --set-target=DROP
添加 ICMP 块反转以一次性阻止所有
ICMP
请求:# firewall-cmd --add-icmp-block-inversion
为这些您要允许的
ICMP
请求添加 ICMP 块:# firewall-cmd --add-icmp-block=<icmptype>
使新设置具有持久性:
# firewall-cmd --runtime-to-permanent
块反转 会颠倒 ICMP
请求块的设置,因此所有之前没有被阻止的请求都会因为区的目标变成了 DROP
而被阻止。被阻断的请求不会被阻断。这意味着,如果您想要取消阻塞请求,则必须使用 blocking 命令。
将块 inversion 恢复到完全 permissive 设置:
将区的目标设为
default
或ACCEPT
:# firewall-cmd --permanent --set-target=default
删除
ICMP
请求的所有添加的块:# firewall-cmd --remove-icmp-block=<icmptype>
删除
ICMP
块反转:# firewall-cmd --remove-icmp-block-inversion
使新设置具有持久性:
# firewall-cmd --runtime-to-permanent