无法在 nftables 中访问 MAC 地址

无法在 nftables 中访问 MAC 地址

我有一台 Oculus Quest,我希望只有 Oculus 能够看到我的 miniDLNA 服务器。因此,在服务器本身上,我有以下配置:

我给出的 Mac 地址 100% 正确,并且禁用 nft 后一切正常。

#!/usr/sbin/nft -f

flush ruleset

table inet filter {
    chain input {
        type filter hook input priority 0;

        # Allow established and related connections
        ct state established,related accept

        # Allow loopback interface
        iif lo accept

        # Allow SSH connections on port 22222
        tcp dport 22222 accept

        # Allow ICMP (ping) from LAN IP range (192.168.1.x)
        ip protocol icmp icmp type echo-request ip saddr 192.168.1.0/24 counter accept

        # Allow HTTP (port 80) from LAN IP range (192.168.1.x)
        tcp dport 80 ip saddr 192.168.1.0/24 accept
        
    #tcp dport 80 accept

        # Allow HTTPS (port 443) from LAN IP range (192.168.1.x)
        tcp dport 443 accept

        # Allow incoming connections on port 64293 from LAN (192.168.1.0/24)
        tcp dport 64293 ip saddr 192.168.1.0/24 accept

        iifname eno1 udp dport 53 accept
        iifname eno1 tcp dport 53 accept

        # Allow incoming Samba traffic from LAN IP range
        tcp dport 445 ip saddr 192.168.1.0/24 accept

        # Allow MiniDLNA only from a specific MAC address
    ether saddr YX:XY:XY:XY:XY:XY ether daddr YX:XY:XY:XY:XY:XY tcp dport 8200 accept
        
    # Drop all other incoming connections
        drop
    }
}

答案1

据我所知,table inet+hook input只会处理第3层及更高层的流量,即以太网信息在此时已被丢弃。

由于您显然没有进行任何桥接,也许您应该将 MAC 地址规则放入以下ingress钩子中table netdev

table netdev l2filter {
    chain l2input-eno1 {
        type filter hook ingress device eno1 priority 0;
        # ingress hooks are specific to ^^^^ a particular network interface

        # Allow MiniDLNA from specific source MAC address only
        ether saddr YX:XY:XY:XY:XY:XY tcp dport 8200 accept
        # MiniDLNA requests from any other source will be dropped
        tcp dport 8200 drop
    }
}

笔记:我没有测试过这个。如果有人更了解,请随时编辑此内容或写出更好的答案。

l2filter并且l2input-eno1只是人类可读的名称,您可以根据需要选择。

如果您没有桥接或以其他方式使网络接口处于混杂模式,则 NIC 硬件应该已经按目标 MAC 地址过滤传入的单播流量,因此该ether daddr规则应该是不必要的。

另请注意,DLNA 服务器也可能/应该通过 UPnP 发现协议(SSDP = UDP 端口 1900)来声明自己,并且该协议通过多播工作,因此您可能无法完全隐藏网段中 DLNA 服务器的存在,除非您愿意阻止所有传出的 SSDP 公告,这可能会使 Oculus Quest 更难找到 DLNA 服务器。

上述规则肯定会阻止任何其他主机实际访问访问MiniDLNA 服务器,尽管 SSDP 公告将揭示其存在。

相关内容