在哪里处理客户端之间的数据包?

在哪里处理客户端之间的数据包?

“服务器”:192.168.1.1

我想“理论上”禁用客户端可以相互“ping”。

我可以使用 iptables 规则吗?例如:

iptables -A FORWARD -m iprange --src-range 192.168.1.2-192.168.1.255 --dst-range 192.168.1.2-192.168.1.255 -j DROP

我是否无法过滤客户端之间的流量? [或者至少将这些数据包重定向到例如:路由器?]

如果我在路由器 [“服务器”] 上运行 tcpdump,我可以看到客户端 [192.168.1.201] 正在 ping 另一个 [192.168.1.162]

# tcpdump
tcpdump: WARNING: eth0: no IPv4 address assigned
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
12:22:26.931343 IP 192.168.1.201 > 192.168.1.162: ICMP echo request, id 12547, seq 141, length 64
12:22:27.819373 IP 192.168.1.201 > 192.168.1.162: ICMP echo request, id 12547, seq 142, length 64
12:22:28.819640 IP 192.168.1.201 > 192.168.1.162: ICMP echo request, id 12547, seq 143, length 64

答案1

您想在哪里禁用它?如果所有流量都通过可以运行 iptables 的路由器或交换机,那么是的,这很简单。

如果你想在每台机器上阻止它,并且它们都运行 iptables,那么是的,再一次 - 简单。

在大多数 TCP/IP 实现中,您可以在客户端禁止 ICMP。

几乎所有允许访问控制的路由器都会让您阻止 ICMP。

但是……你百分百确定你想要吗?许多应用程序确实喜欢一点点 ping 来让他们开心:-)

答案2

你的想法是完全可行的。是否是好的设计我无法判断。

丢弃任何发往路由器的 ICMP 回显请求:

iptables -t filter -I INPUT -p icmp --icmp-type 8 -j DROP

丢弃任何转发的 ICMP 回显请求

iptables -t filter -I FORWARD -p icmp --icmp-type 8 -j DROP

您看到每个主机数据包的原因是它们可能通过集线器连接,集线器只是在较低级别复制流量。在服务器上丢弃这些数据包不会阻碍它们到达客户端。

因此,为了使后一条规则发挥作用,您必须强制主机将其全部流量转发到路由器。这是通过将每个主机的子网限制为其自己的地址来完成的(对主机使用子网掩码 255.255.255.252,同时在路由器上坚持使用 255.255.255.0)。最后,你必须在每个主机的路由表中添加一条静态路由,以便他可以将其数据包转发到服务器:

ip r a 192.168.1.1/32 dev eth0

在此设置中,路由器仍然可以 ping 所有主机。

相关内容