“服务器”: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 所有主机。