如何使用 Raspberry Pi 作为 AP(使用 hostapd)通过 Nftables 过滤 ARP 请求

如何使用 Raspberry Pi 作为 AP(使用 hostapd)通过 Nftables 过滤 ARP 请求

我正在尝试过滤来自网络中某些 IP 地址的 ARP 请求。我尝试过:

table arp filter {
        chain input {
                type filter hook input priority 0; policy drop;
                arp saddr ip 192.168.2.1 counter accept #ISP-Router
                arp saddr ip 192.168.1.100 counter accept #Laptop
                arp operation reply counter accept}}

它应该丢弃所有不是来自路由器或笔记本电脑的 ARP 请求。但我的智能手机发送的请求仍然会被我的笔记本电脑收到。 (我的 Pi 充当路由接入点,它通过以太网连接到 ISP 路由器,并使用接口 wlan 实现 AP 功能。)

然后我尝试将表 netdev 与 ingress hook 一起使用,因为(至少在理论上)它应该首先解析:

table netdev wlan {
        chain wlanFilter {
                type filter hook ingress device wlan0 priority 0;
                meta protocol arp counter drop # ARP-requests were still getting from smartphone to laptop, but ARP-Cache on Pi was incomplete afterwards  
                meta pkttype {broadcast, multicast} counter drop # didn´t filter ARP Broadcast}}

我还尝试使用hostapd功能ap_isolate=1。相同的结果。

我使用的 Raspberry Pi 操作系统的内核版本为 5.10.17-v7+,hostapd 版本为 2.8-devel,nft 版本为 0.9.6,dnsmasq 版本为 2.80。ip_forward处于活动状态且 NAT 也处于活动状态。我没有使用桥牌,但要彻底地说:我尝试了具有类似规则的桌桥牌,但没有成功。然后我将整个设置更改为桥接接入点而不是路由。我再次尝试了所有规则集。也没有用。

有没有可能,Hostapd 在像 Nftables 这样的数据包过滤器被强制执行之前就将数据包转发到本地网络?还是我的规则有问题?或者完全是别的什么?

答案1

正如评论中的一些人所建议的,关键是ap_isolate中的选项hostapd.conf。之前它无法工作,因为缺少 BCM43455 芯片驱动程序的支持,该芯片是 Raspberry Pi 3 B+ 的内置网卡。它确实可以与某些 Wifi 适配器中使用的 RT5370 芯片配合使用。因此我在我的设置中使用了其中之一。

我还需要更改一些配置。

第一:predictable interface names在raspi-config中激活,将名称绑定到MAC地址。如果没有它,wlan0(内部卡)和 wlan1(外部卡)的名称有时会在重新启动后交换。

sudo rfkill list第二:使用->停用内置卡sudo rfkill block <number of interface of built-in card>以避免网卡之间的冲突。

然后我按照用户AB的回答https://superuser.com/questions/1661060/hostapd-how-to-block-only-netbios-broadcasts-to-clients-in-same-wlan-by-applyin激活发夹。

现在我可以创建规则来使用网桥系列过滤本地流量。例如:

table bridge br0 {
        chain forward {
                type filter hook forward priority 0; policy drop;
        }
}

可用于隔离所有客户端。可以使用进一步的规则来允许某些通信:

table bridge br0 {
        chain forward {
                type filter hook forward priority 0; policy drop;
                ether type arp accept
        }
}

相关内容