阻止对Linux系统的ICMP请求有几种常用的方式,如防火墙规则、修改系统配置文件等。一些系统管理员经常会阻止发送到其服务器的ICMP消息,便于在恶劣网络上把Linux机器隐藏到外界视线之外,或防止某种IP泛洪和拒绝服务攻击。关于禁ICMP请求的方法华纳云在下文为大家一一分享。
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
如果需要允许特定ICMP请求,可以用:
sudo iptables -A INPUT -p icmp --icmp-type echo-request -s [允许的IP地址] -j ACCEPT
[允许的IP地址]填入想要允许ping的IP地址或IP地址范围。
通过以下命令重新启动UFW防火墙来应用规则:
# ufw disable && ufw enable
在使用Firewalld接口管理iptables规则的CentOS或Red 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 计算机,您应该会在远程计算机上收到“请求超时”或“目标主机无法访问”消息。
另外使用firewalld防火墙也可以组织ICMP请求,firewalld是一种常用动态防火墙管理工具,特别是使用CentOS 7及以上版本时。阻止ICMP请求:
sudo firewall-cmd --permanent --zone=public --icmp-block-in=echo-request
以上命令会永久地在public区域组织ICMP echo请求。
修改规则后,要重新加载firewalld来应用更改:
sudo firewall-cmd --reload
通过修改sysctl配置可以设置内核参数来组织ICMP请求。编辑sysctl配置文件:
sudo nano /etc/sysctl.conf
在文件中添加以下行:
net.ipv4.icmp_echo_ignore_all = 1
以上命令可以阻止全部ICMP echo请求。保存文件并退出编辑器,然后应用更改:
sudo sysctl -p
以上应用更改前,大家需要了解清楚其影响,阻止ICMP请求可能影响网络诊断和监控工具。确保有其他方式来监控和诊断网络问题。且不同Linux发行版和配置可能需要不同的命令或工具管理防火墙规则。