如何在 Debian 10 上阻止或取消阻止 Ping 请求

Ping 是一种网络实用程序,用于使用 ICMP 回显请求和回显回复消息检查 Internet 协议网络上系统的可用性。 但是,一些网络管理员更喜欢阻止 ping,因为出于某些原因,他们认为这是一个安全问题。 在之前的一篇文章中,我们已经解释了如何在 Ubuntu 20.04 上阻止或取消阻止 ping 请求。 这篇文章将介绍如何在 Debian 上阻止或取消阻止 ping 请求。

先决条件

  • Debian 操作系统
  • 须藤用户

笔记: 这里解释的过程已经过测试 Debian 10(克星) 系统。

在 Debian 上阻止或取消阻止 Ping 请求

Ping 向目标系统发送 ICMP echo 请求,然后获得 ICMP echo 回复。 在 Linux 操作系统中,当您 ping IP 地址时,它会继续发送 ICMP 数据包,直到您按 Ctrl+C 停止它。 要发送特定数量的数据包,请使用 ping -C 选项。 例如,要发送 3 个 ICMP 数据包,您可以使用以下命令:

$ ping -c 3 <ip-address or hostname>

要阻止对 Debian 系统的 ping 请求,有以下两个选项:

  • 通过内核参数
  • 通过 iptables

我们将解释在 Debian 系统上阻止 ping 请求的两个选项。

通过内核参数阻止或取消阻止 Ping 请求

可以通过修改内核参数来阻塞/解除阻塞Ping请求 net.ipv4.icmp_echo_ignore_all. 此参数控制系统是否应响应 ping 请求。 内核参数的默认值 net.ipv4.icmp_echo_ignore_all “0” 这意味着允许所有 ping 请求. 通过修改这个内核参数的值,可以使系统阻塞ping请求。

修改内核参数有三种不同的方法:

  1. 通过“sysctl”命令
  2. 通过“icmp_echo_ignore_all”文件
  3. 通过“/etc/sysctl.conf”文件

要查看系统当前是阻止还是允许 ping 请求,请在终端中发出以下命令:

$ sudo sysctl -ar ‘icmp_echo’

“icmp_echo_ignore_all”的值为“0”表示不阻塞ping,值为“1”表示不阻塞ping。 以下输出显示 ping 当前在我们的系统中未阻塞。

通过“sysctl”命令阻止或取消阻止 Ping 请求(临时)

如果您需要暂时阻止对系统的 ping 请求,可以使用 sysctl 命令,如下所示:

$ sudo sysctl -w net.ipv4.icmp_echo_ignore_all=1

运行上述命令后,机器将开始阻止向其发送的 ping 请求。 现在,如果另一个系统尝试 ping 您的系统,它将看不到任何响应,如下面的输出所示。

但是,如前所述,此更改将是暂时的。 重新启动系统后,内核参数值将恢复为原始值,并且 ping 将再次解锁。

您还可以使用以下命令取消阻止 ping:

$ sudo sysctl -w net.ipv4.icmp_echo_ignore_all=0

解锁 ping

通过 icmp_echo_ignore_all 文件阻止或取消阻止 Ping 请求(临时)

/proc/sys/net/ipv4/ 目录包含一个文件 icmp_echo_ignore_all 它控制系统是否应响应 ping 请求。

要阻止 ping 请求,您需要更改 icmp_echo_ignore_all 文件格式“0”到“1”。 您可以使用以下命令执行此操作:

$ sudo sh -c ‘echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all’

阻止 ping

但是,这种变化将是暂时的。 重新启动系统后,内核参数值将恢复为原始值,并且 ping 将再次解锁。

您还可以使用以下命令取消阻止 ping:

$ sudo sh -c ‘echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all’

解锁 ping

通过“/etc/sysctl.conf”文件阻止或取消阻止 Ping 请求(永久)

Ping 请求也可以使用 /etc/sysctl.conf 文件。 为了永久阻止 ping 请求,首先编辑 /etc/sysctl.conf 使用以下命令创建文件:

$ sudo nano /etc/sysctl.conf

现在在编辑的文件中,添加以下行:

net.ipv4.icmp_echo_ignore_all = 1

现在保存并 close 这 /etc/sysctl.conf 文件并运行以下命令以应用更改:

$ sysctl -p

要取消阻止 ping,请编辑 /etc/sysctl.conf 文件并更改的值 net.ipv4.icmp_echo_ignore_all 回到0:

net.ipv4.icmp_echo_ignore_all = 0

使用 iptables 阻止或取消阻止 Ping 请求(永久)

iptables 是 Linux 中的一个命令行实用程序,它根据一组规则允许/阻止流量。 Debian 发行版默认包含 iptables 实用程序。 但是,如果您的系统没有此实用程序,您可以按如下方式安装它:

$ sudo apt-get install iptables

现在在终端中发出以下命令来阻止 ping 请求:

$ sudo iptables -A INPUT -p icmp --icmp-type 8 -j REJECT

在上述命令中, 一种 选项用于在 iptables 中附加规则和 icmp 类型 8 用于 ICMP 回显请求s。 此命令在防火墙中添加一条规则,以阻止所有传入的 ping 到您的系统。 添加此规则后,系统将拒绝所有向其发送的 ping 请求。 现在,如果另一个系统尝试 ping 您的系统,它将收到“目的端口不可达“ 信息。

如果您不希望发送用户看到 Destination Port Unreachable 消息,在上述命令中使用 DROP 代替 REJECT 如下

$ sudo iptables -A INPUT -p icmp --icmp-type 8 -j DROP

现在,如果用户 ping 您的系统,它将不会收到任何响应:

要取消阻止 ping,请使用以下命令:

$ sudo iptables -D INPUT -p icmp --icmp-type 8 -j REJECT

或者如果您使用过以下命令 降低 iptables 规则中的选项:

$ sudo iptables -D INPUT -p icmp --icmp-type 8 -j DROP

在上面的命令中, D 选项用于删除 iptables 中的规则和 icmp 类型 8 用于 ICMP 回显请求s。

要列出 iptables 中的规则,请使用以下命令:

$ sudo iptables -L

我们在上面添加的 iptables 规则将无法在系统重新启动后继续存在。 为了使它们在重新启动后仍然存在,您必须安装 iptables 持久化 包裹。 运行以下命令来安装它:

$ sudo apt install iptables-persistent

在 iptables 中添加或删除每条规则后,运行以下命令以使这些规则在重新启动后保持不变:

$ sudo netfilter-persistent save
$ sudo netfilter-persistent reload

这是您可以阻止/取消阻止对 Debian 系统的 ping 请求的方法。 在这篇文章中,您学习了临时或永久阻止/解除阻止 ping 请求的不同方法。 如果您知道我们错过的其他一些阻止/解除阻止 ping 的方法,我们很乐意在下面的评论中知道!