nftables 오류: 구문 오류, 예상치 못한 Saddr

nftables 오류: 구문 오류, 예상치 못한 Saddr

arp saddr ip 192.168.2.1 counter acceptNftables 방화벽에 규칙을 추가하고 싶습니다 . 다음을 sudo nft -f /etc/nftables2.conf사용하여 구성 파일을 읽을 때

/etc/nftables2.conf:26:21-15: Error: syntax error, unexpected saddr 
                 arp saddr ip 192.168.2.1 counter accept
                                   ^^^^^^

문제의 테이블:

table arp filter {
        chain input {
                type filter hook input priority 0; policy drop;
                arp saddr ip 192.168.2.1 counter accept
        }
        chain output {
                type filter hook input priority 0; policy accept;
        }
}

나는 그것을 고칠 수 없습니다. 처음에는 다른 IP를 시도한 다음 saddr ether <MAC of device>IP 주소 대신 동일한 IP 주소를 시도했지만 결과는 동일했습니다. 최신 Raspberry Pi 운영 체제에서 nftables 버전 0.9.0을 사용하고 있습니다. 누군가 내가 잘못 가고 있는 곳을 지적할 수 있습니까? 조금 길을 잃었어요. 시간 내주셔서 감사합니다.

답변1

귀하의 규칙 세트가 정확합니다. 하지만 너의nftables버전이 좀 많이 구렸네요. 다음은 귀하의 예가 포함된 발표입니다.

[공지] nftables 0.9.1 출시:

안녕하세요!

Netfilter 프로젝트는 다음을 자랑스럽게 선보입니다:

    nftables 0.9.1

이 릴리스에는 수정 사항과 새로운 기능이 포함되어 있으며 Linux 커널 >= 5.2에서 사용할 수 있습니다.

[...]

  • 예를 들어 ARP 발신자와 대상 IPv4 주소가 일치합니다.

      table arp x {
              chain y {
                      type filter hook input priority filter; policy accept;
                      arp saddr ip 192.168.2.1 counter packets 1 bytes 46
              }
      }
    

    이는 192.168.2.1 주소에서 발생하는 ARP 패킷에 대한 규칙 카운터를 업데이트합니다.

따라서 커널 >= 5.2가 필요할 수 있지만(확실하지는 않음) nftables >= 0.9.1이 필요합니다.

커널의 경우:https://www.raspberrypi.org/software/operating-systems/Raspberry Pi 운영 체제는 현재 커널 5.10.x와 함께 제공되는 것으로 나타나므로 이는 논란의 여지가 있습니다.

~을 위한nftables버전이긴 하지만일반적으로 권장되지 않음, 다음을 사용해 볼 수 있습니다.구축함 백포트업데이트된 버전 받기nftables, 현재 0.9.6. 이것이 RPi에 적합하지 않다고 판단되면 (Debian) 소스에서 백포트된 패키지를 다시 컴파일해야 합니다.

참고: 위키는 약간 지연되며 항상 완전히 정확하지는 않을 수 있습니다. 물론 일단 기능이 존재하면 매뉴얼 페이지가 일반적으로 더 정확해집니다. 예를 들어:

버스터버전 0.9.0:

ARP 헤더 표현

arp [ARP 헤더 필드]

비교적구축함 백포트'버전 0.9.6:

ARP 헤더 표현

arp {htype | ptype | hlen | plen | operation | saddr { ip | ether } | daddr { ip | ether }

간단한 사례(및 추가 어려움)에 대한 솔루션

정말 바꿀 수 없다면nftables이와 같은 간단한 경우에는 다음을 사용할 수 있습니다.원래 하중 표현반대로,ARP 프로토콜에 익숙함, 이 프로토콜은 이더넷 및 IPv4에만 사용되는 것이 아니므로 이더넷을 통한 일반적인 IPv4 사용에서 항상 일정하게 유지되는 몇 가지 공통 부분이 있습니다(예: hlen=6, plen=4).

어쨌든, 나는 속임수를 쓰고 nftables 0.9.0을 사용하여 작업 규칙 세트를 다시 읽고, 이를 원시 페이로드로 표시하고, 10진수 출력을 16진수로 변환했습니다(페이로드 오프셋 및 길이 제외).

table arp filter {
    chain input {
        type filter hook input priority 0; policy drop;
        @nh,112,32 0xc0a80201 counter accept
    }

    chain output {
        type filter hook input priority 0; policy accept;
    }
}

Wikipedia의 다음 링크를 사용하면 쉽게 읽을 수 있습니다.

  • 오프셋 112(비트 단위)는 오프셋 14(바이트 단위)입니다. 즉, 보낸 사람 프로토콜 주소입니다 saddr ip.

  • 길이 32비트: IPv4 주소 길이

    0xc0a80201은 192.168.2.1을 의미합니다.

관련 정보