![如何使用 Raspberry Pi 作为 AP(使用 hostapd)通过 Nftables 过滤 ARP 请求](https://linux22.com/image/193532/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20Raspberry%20Pi%20%E4%BD%9C%E4%B8%BA%20AP%EF%BC%88%E4%BD%BF%E7%94%A8%20hostapd%EF%BC%89%E9%80%9A%E8%BF%87%20Nftables%20%E8%BF%87%E6%BB%A4%20ARP%20%E8%AF%B7%E6%B1%82.png)
我正在尝试过滤来自网络中某些 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
}
}