阻止来自特定 IP 地址的 ping

阻止来自特定 IP 地址的 ping

我的服务器是 Ubuntu 12.04:->IP 192.168.56.100我有一个客户端 Ubuntu 13.04:->IP 192.168.56.101

我必须阻止从客户端到服务器的 ping 所以我编写了 IPTABLE 规则。

iptables -A INPUT -i eth0 -p ICMP -s 192.168.56.101 -j DROP

现在客户端无法 ping 通服务器,这部分没问题,但服务器无法 ping 通客户端,这是不应该发生的。在添加此规则之前,服务器和客户端都可以互相 ping 通。

请告诉我这里我遗漏了什么......

给出的答案是正确的,但是它是如何工作的......添加--icmp-typeecho-r​​equest 确实解决了这个问题,但是这个规则被添加到 INPUT 链规则中,那么这个规则怎么会与 OUTPUT 链混淆,因为它阻止了对客户端的 ping。

答案1

据我了解,ping命令会向主机发送 ICMP 回显请求,然后主机会回复 ICMP 回显回复。因此,如果您阻止所有 ICMP,ping 根本不起作用。

您应该添加这个:

iptables -A INPUT -i eth0 -p icmp --icmp-type echo-request -s 192.168.56.101 -j DROP

这将仅阻止请求,但不阻止回复

在评论中回答你的问题

它不会阻止传出的 ping 请求。它会阻止所有传入的 ICMP 数据包。

当你执行ping

  1. ping发送 ICMP 请求数据包到192.168.56.101(这是传出的 ICMP)

  2. 192.168.56.101接收该数据包并发送回复ICMP数据包返回你的服务器

  3. 现在你的服务器 iptables 阻止了这个传入的回复数据包。这就是正在发生的事情。

sudo tcpdump ip proto \\icmp你可以使用上的这个命令来检查192.168.56.101。它将在线显示所有 ICMP 请求/回复。

做这个:

  1. 从服务器中删除此规则:

    iptables -A INPUT -i eth0 -p icmp --icmp-type echo-request -s 192.168.56.101 -j DROP

  2. 将此规则添加到您的服务器:

    iptables -A INPUT -i eth0 -p ICMP -s 192.168.56.101 -j DROP

  3. 现在执行此命令192.168.56.101

    sudo tcpdump ip proto \\icmp

  4. ping 192.168.56.101在服务器上执行。

现在您应该看到192.168.56.101它接收了 ping 请求并发送了回复。但是服务器上的 iptables 阻止了此回复。

答案2

显然你不会收到任何回复。ping 请求包含两个部分:

  • 客户端 -> 服务器:ICMP 回显请求(又名“ping”)
  • 服务器 -> 客户端:ICMP 回应应答(又名“pong”)

阻止所有类型的 ICMP 将惹麻烦如果你想阻止客户端“ping”(发送 PING 请求),那么在服务器

-A INPUT -i eth0 -s 192.168.56.101/32 -p ICMP --icmp-type echo-request -j DROP

为了首先阻止客户端发送 ICMP ping 请求,您可以在客户

-A OUTPUT -o eth0 -d 192.168.56.100/32 -p ICMP --icmp-type echo-request -j DROP

不过,从客户端角度来看,避免阻止客户端 ping 单个 IP 地址的情况非常罕见。你这样做的唯一原因是因为你的任务要求ICMP ping 数据包通过网络从客户端流向服务器。

不过,我很奇怪你为什么要在 LAN 上阻止 ping 请求。使用 ARP,客户端仍然可以知道该服务器已连接到网络。

相关内容