关闭 ping
是否允许 ping 由两个因素决定,内核参数和防火墙,只有两个因素都允许的情况下,才能允许被 ping。
内核参数关闭 ping 功能
临时设置 PING 操作
echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all
echo 0 >/proc/sys/net/ipv4/icmp_echo_ignore_all
/proc
目录是一个虚拟的文件系统,它提供了一种访问内核数据结构的方式。/proc/sys/net/ipv4/icmp_echo_ignore_all
文件特别用于控制内核是否忽略所有的 ICMP echo 请求。当这个文件的值设置为 1
时,内核将不会处理任何进入的 ICMP echo 请求,即不会对 ping 请求做出响应。
icmp_echo_ignore_all
不是真实文件,所以不能通过 vim 来编辑修改。
永久设置 PING 操作
# 0表示允许,1表示禁止
echo "net.ipv4.icmp_echo_ignore_all = 1" >> /etc/sysctl.conf
# 使配置生效
sysctl -p
防火墙关闭 ping
这里使用的是 Linux 平台常用的 iptable 防火墙
关闭 ping
# 禁止 ping 功能
iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP
-A INPUT
: 向INPUT
链添加一条规则。INPUT
链是 iptables 中用于处理进入本机的数据包的地方。-p icmp
: 指定规则适用于 ICMP 协议。ICMP(Internet Control Message Protocol)是用于发送控制消息的网络层协议,例如,当你使用ping
命令时,就是发送 ICMP 请求。--icmp-type 8
: 指定规则匹配的 ICMP 类型。ICMP 类型 8 对应于echo request
,也就是我们通常所说的ping
请求。这意味着这条规则将会匹配所有进入的ping
请求。-s 0/0
: 指定源地址为任何地址。0/0
是一个 CIDR 表示法,代表所有的 IPv4 地址。这里使用0/0
表示这条规则不限制源 IP 地址,适用于所有来源的 ICMP 请求。-j DROP
: 指定匹配到的数据包的处理动作为DROP
。DROP
动作意味着所有匹配到该规则的数据包都将被丢弃,不会被本机响应或进一步处理。
开启 ping
如果想要允许 ping 设置
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
-A INPUT
: 这条命令添加一条规则到INPUT
链,该链用于处理进入本机的数据包。-p icmp
: 指定规则适用于 ICMP 协议。--icmp-type echo-request
: 指定规则匹配的 ICMP 类型为echo-request
,这是 ICMP 协议中用于ping
操作的请求类型。-j ACCEPT
: 指定匹配到的数据包的处理动作为ACCEPT
,即接受这些数据包,允许它们通过防火墙。 第一条命令配置防火墙允许所有进入的 ICMPecho-request
类型的数据包通过,这通常意味着允许外部设备对本机发起ping
请求。-A OUTPUT
: 这条命令添加一条规则到OUTPUT
链,该链用于处理从本机出去的数据包。-p icmp
: 指定规则适用于 ICMP 协议。--icmp-type echo-reply
: 指定规则匹配的 ICMP 类型为echo-reply
,这是 ICMP 协议中用于ping
操作的响应类型,即当本机收到echo-request
后,发出的响应。-j ACCEPT
: 指定匹配到的数据包的处理动作为ACCEPT
,即接受这些数据包,允许它们通过防火墙。
第二条命令配置防火墙允许所有出去的 ICMP echo-reply
类型的数据包通过,这通常意味着允许本机对外部 ping
请求做出响应。
将这两条规则结合起来,它们确保了本机可以正常地发送和接收 ping
请求及其响应,这对于网络故障排查和基本的网络连通性测试是非常重要的。如果只有 echo-request
规则而没有 echo-reply
规则,那么其他设备可能无法收到本机的 ping
响应;反之亦然,如果没有 echo-request
规则,本机将无法接收到其他设备的 ping
请求。