关闭 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 请求。
