网站搜索

如何阻止对 Linux 系统的 Ping ICMP 请求


一些系统管理员经常阻止发送到服务器的 ICMP 消息,以便在粗糙的网络上向外界隐藏 Linux 机器,或者防止某种 IP 泛洪和拒绝服务攻击。

在 Linux 系统上阻止 ping 命令的最简单方法是添加 iptables 规则,如下例所示。 Iptables 是 Linux 内核 netfilter 的一部分,通常在大多数 Linux 环境中默认安装。

iptables -A INPUT --proto icmp -j DROP
iptables -L -n -v  [List Iptables Rules]

在 Linux 系统中阻止 ICMP 消息的另一种通用方法是添加以下内核变量,该变量将丢弃所有 ping 数据包。

echo “1” > /proc/sys/net/ipv4/icmp_echo_ignore_all

为了使上述规则永久生效,请将以下行附加到 /etc/sysctl.conf 文件中,然后使用 sysctl 命令应用该规则。

echo “net.ipv4.icmp_echo_ignore_all = 1” >> /etc/sysctl.conf 
sysctl -p

在附带 UFW 应用程序防火墙的基于 Debian 的 Linux 发行版中,您可以通过将以下规则添加到 /etc/ufw/before.rules 文件来阻止 ICMP 消息,如图所示在下面的摘录中。

-A ufw-before-input -p icmp --icmp-type echo-request -j DROP

通过发出以下命令重新启动 UFW 防火墙以应用规则。

ufw disable && ufw enable

在使用 Firewalld 接口管理 iptables 规则的 CentOSRed Hat Enterprise Linux 发行版中,将以下规则添加到丢弃 ping 消息。

firewall-cmd --zone=public --remove-icmp-block={echo-request,echo-reply,timestamp-reply,timestamp-request} --permanent	
firewall-cmd --reload

为了测试防火墙规则是否已成功应用于上述所有情况,请尝试从远程系统 ping 您的 Linux 计算机 IP 地址。如果 ICMP 消息被阻止发送到您的 Linux 机器,您应该在远程计算机上收到“请求超时”或“目标主机无法访问”消息。