Menu Close
Settings Close

Language and Page Formatting Options

1.11. 管理 ICMP 请求

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

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

1.11.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>
  • 如果请求当前被阻止了,则 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 请求,客户端会知道您阻止了 ICMP 请求。这样潜在的攻击者仍然可以看到您的 IP 地址在线。要完全隐藏此信息,您必须丢弃所有 ICMP 请求。

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

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

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

阻止和丢弃某些 ICMP 请求,而允许其他的请求:

  1. 将区的目标设为 DROP

    # firewall-cmd --permanent --set-target=DROP
  2. 添加 ICMP block 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. 将区的目标设置为 defaultACCEPT:

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

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

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

    # firewall-cmd --runtime-to-permanent