Red Hat Training

A Red Hat training course is available for RHEL 8

6.9. 管理 ICMP 请求

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

不幸的是,可以使用 ICMP 消息(特别是 echo-requestecho-reply )揭示关于您的网络的信息,并将此类信息滥用于各种类型的活动。因此,firewalld 允许阻止 ICMP 请求来保护您的网络信息。

6.9.1. 列出和阻塞 ICMP 请求

列出 ICMP 请求

位于 /usr/lib/firewalld/icmptypes/ 目录中的独立 XML 文件中描述了 ICMP 请求。您可以阅读这些文件来查看请求的描述。firewall-cmd 命令控制 ICMP 请求操作。

  • 要列出所有可用的 ICMP 类型:

    # firewall-cmd --get-icmptypes
  • IPv4、IPv6 或两个协议都可以使用 ICMP 请求。要查看 ICMP 请求使用了哪些协议:

    # firewall-cmd --info-icmptype=<icmptype>
  • 如果请求当前为 blocked 或 no,则 ICMP 请求的状态将显示 yes。查看 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 请求,客户端会知道您在阻止 ICMP 请求。这样潜在的攻击者仍然可以看到您的 IP 地址在线。要完全隐藏此信息,您必须丢弃所有 ICMP 请求。

  • 阻止和丢弃所有 ICMP 请求:
  • 将区的目标设置为 DROP

    # firewall-cmd --permanent --set-target=DROP

现在,除您明确允许的流量外,所有流量(包括 ICMP 请求)将被丢弃。

阻塞和丢弃某些 ICMP 请求并允许其他请求:

  1. 将区的目标设置为 DROP

    # firewall-cmd --permanent --set-target=DROP
  2. 添加 ICMP 块 inversion 以阻止所有 ICMP 请求:

    # firewall-cmd --add-icmp-block-inversion
  3. 为您要允许的 ICMP 请求添加 ICMP 块:

    # firewall-cmd --add-icmp-block=<icmptype>
  4. 使新设置具有持久性:

    # firewall-cmd --runtime-to-permanent

block inversion 会颠倒 ICMP 请求块的设置,因此所有之前没有被阻止的请求都会被阻止,因为区域的目标更改为 DROP。被阻断的请求不会被阻断。这意味着,如果您想要取消阻塞请求,则必须使用 blocking 命令。

将块 inversion 恢复到完全 permissive 设置:

  1. 将区的目标设置为 default 或 ACCEPT:

    # firewall-cmd --permanent --set-target=default
  2. 删除 ICMP 请求添加的所有块:

    # firewall-cmd --remove-icmp-block=<icmptype>
  3. 删除 ICMP 块 inversion:

    # firewall-cmd --remove-icmp-block-inversion
  4. 使新设置具有持久性:

    # firewall-cmd --runtime-to-permanent