是否有可能在无线接入点过滤客户端间的通信?

是否有可能在无线接入点过滤客户端间的通信?

我有一个在 Raspberry Pi 上运行的路由接入点,并且想使用类似于 iptables 的东西来过滤设备之间的流量,例如:

Desktop.wlan > phone.wlan

我知道你不能使用 iptables,因为它处理第 3 层过滤。我尝试使用 nftables 及其入口过滤,但仍然无法过滤通信。但我确实注意到,使用这样的规则时,有些变化

nft add chain netdev filter input { type filter hook ingress device wlan0 priority -500 \; policy accept \; }

nft add rule netdev filter input ether saddr DESKTOP=MAC-ADDR counter drop

这导致从桌面到 10.0.0.10 (phone.wlan) 的 tracert 从

Tracing route to phone.wlan over a maximum of 30 hops

Tracing route to 10.0.0.10 over a maximum of 30 hops

我不知道这是否意味着发生了什么,但只有当我设置了该规则时才会发生这种情况。但不幸的是,只要设置了该规则,两者仍然可以通信。我不想使用,ap_isolate=1因为我希望我的客户端仍然能够互相交谈,但我希望能够过滤它。

有人知道是否有办法过滤我的网络吗?如果需要更多信息,请告诉我。

答案1

AP 会自动进行 BSS 内中继(将帧从一个客户端 STA 中继到同一 BSS 内的另一个客户端 STA),这通常在 802.11 MAC(无线芯片组)中完成,此时主机操作系统还未看到或了解任何有关流量的信息,更不用说有机会对其采取行动了。

hostapd只是ap_isolate=1禁用了 802.11 芯片组中的 BSS 内中继。这是您所需要的部分功能,因为您希望无线客户端设备之间的流量首先上升到主机操作系统的网络堆栈,这样您就可以在那里应用过滤规则,然后再将一些数据包(过滤器不会阻止的数据包)发送到其他客户端。

不幸的是,我认为大多数软件桥接代码都不够智能,不知道将数据包从它进来的相同接口发送回去,因为这通常是桥接的禁忌,因为它会导致数据包在桥接器/交换机/集线器之间不断地来回往返。

因此,理论上您可以做您所要求的事情,但是否有一种简单的方法可以在您在 AP 设备上运行的任何操作系统中进行设置则是另一个问题。

相关内容