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 발표를 통해 그 존재가 드러날 것입니다.

관련 정보