nftables 업데이트 후 구성 오류

nftables 업데이트 후 구성 오류

지난 2년 동안 동일한 구성으로 nftables를 사용해 왔으며 며칠 전에 프로그램을 업데이트했는데 이제는 모든 문서에 여전히 올바른 것으로 나와 있음에도 불구하고 내 구성이 유효하지 않다고 불평합니다. 어쩌면 누군가 불량 기호 같은 것을 발견할 수 있을까요?

내 구성은 다음과 같습니다.


flush ruleset

# `inet` applies to both IPv4 and IPv6.
table inet filter {
    chain input {
        type filter hook input priority 0;

        # accept any localhost traffic
        iif lo accept

        # no ping floods:
        ip protocol icmp icmp type echo-request limit rate over 10/second burst 4 packets drop
        ip6 nexthdr icmpv6 icmpv6 type echo-request limit rate over 10/second burst 4 packets drop

        # accept traffic originated from us
        ct state established,related accept

        # ssh
        tcp dport 22 accept

        # http/https
        tcp dport 80 accept
        tcp dport 443 accept

        # tftp/netboot
        udp dport 4011 accept
        udp dport 67 accept
        tcp dport 69 accept
        udp dport 69 accept

        # listinator
        tcp dport 8080 accept
        tcp dport 4343 accept

        # smb
        tcp dport 139 accept
        tcp dport 445 accept
        udp dport 137 accept
        udp dport 138 accept

        # mc
        tcp dport 25565 accept

        # count and drop any other traffic
        counter drop
    }

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

    chain forward {
        type filter hook forward priority 0;
        nft add rule inet filter forward ct status dnat accept;
        policy drop;
    }
}

시작할 때 오류가 발생했습니다.

Starting nftables...
/etc/nftables.conf:57:6-8: Error: syntax error, unexpected add
        nft add rule inet filter forward ct status dnat accept;
            ^^^
nftables.service: Main process exited, code=exited, status=1/FAILURE
nftables.service: Failed with result 'exit-code'.
Failed to start nftables.

답변1

이것은 내부에 있습니다.nftables 스크립트명령으로 로드됩니다 nft -f. 그 nft단어는 내부적으로 의미가 없으며 나타나서는 안 됩니다. 그러나 같은 장소에 1 1/2개의 다른 문제가 있습니다. 그럼 보자:

명령이 불평하는 줄 주위에는 다음 nft이 있습니다.

   chain forward {
       type filter hook forward priority 0;
       nft add rule inet filter forward ct status dnat accept;
       policy drop;
   }
  • nft제거할,

  • 이미 inet filter forward(체인) 블록 안에 있습니다.

    따라서 add rule inet filter forward제거도 해야 합니다. 실제로 ;그 뒤에 새로운 줄이 있기 때문에 불필요합니다.

           ct status dnat accept
    
  • policy drop;기본 체인 정의와 함께 넣어야 합니다.

    이번에는 ;구문의 필수 부분이 있습니다. 키워드 policy체인정의, 의 일부가 아님규칙정의. 이는 현재 규칙에 따라 기본 체인 정의와 별도로 허용되는 것처럼 보이지만 이는 의존할 사항이 아닙니다. 이는 이후 릴리스에서 변경될 수 있습니다.

    체인 에도 동일한 설명이 적용됩니다 . 나중에 실수로 규칙을 삽입하지 않도록 기본 체인 정의에서 output분리하지 마십시오 .policy accept;

체인은 forward결국 다음으로 교체되어야 합니다.

    chain forward {
        type filter hook forward priority 0; policy drop;
        ct status dnat accept
    }

올바른 구문이지만 실제로 흥미롭지는 않은 것은 블록 내부가 아닌 구조 외부에서 규칙을 다음과 같이 스크립트 끝에서 정의하는 것입니다.

    chain forward {
        type filter hook forward priority 0; policy drop;
    }
}
add rule inet filter forward ct status dnat accept

어쨌든 체인 블록 nft list ruleset내에서 이전과 같이 다시 표시됩니다 inet filter forward.


노트:

  • 사용하는 것은 괜찮지만 ip protocol icmp사용하는 것은 좋지 않습니다.ip6 nexthdr ipv6-icmp

    그 이유는 IPv4 헤더의 프로토콜이 항상 레이어 4 프로토콜인 IPv4와 달리 IPv6의 경우다음 헤더항상 계층 4(icmp, udp, tcp...) 헤더는 아닙니다.확장 헤더IPv6 헤더와 레이어 4(최종) 헤더 사이에 나타납니다. 이 경우 규칙이 일치하지 않습니다.

    OS는 이 패킷이 어떤 레이어 4 프로토콜에 속하는지 이미 결정했으므로 해당 정보는 패킷 콘텐츠 정보가 아닌 메타 정보로 사용할 수 있습니다 meta l4proto ipv6-icmp.

    이것은 또한매뉴얼 페이지에 문서화되어 있음:

    이 표현식은 ipv6 헤더 필드를 나타냅니다. 를 사용할 때 주의하세요 ip6 nexthdr. 값은 다음 헤더만 참조합니다. 즉, ip6 nexthdr tcpipv6 패킷에 확장 헤더가 포함되지 않은 경우에만 일치합니다. 단편화되었거나 라우팅 확장 헤더를 포함하는 패킷은 일치하지 않습니다. meta l4proto 실제 전송 헤더와 일치시키려는 경우 사용 하고 대신 추가 확장 헤더를 무시하십시오.

    하지만 실제로는 같은 줄에icmpv6 type ... 라인이 포함되어 있으므로 이는 이미 ICMPv6과 일치하도록 레이어 4 프로토콜을 필터링하고 동시에ICMPv6을 사용하면 암시적으로 레이어 3 프로토콜이 IPv6과 일치하도록 설정됩니다.: 올바르게 만드는 데는 아무것도 필요하지 않습니다.

    마찬가지로 이전 줄도 ip protocol icmp같은 이유로 없이 수행할 수 있습니다(그러나 현재 동작은 여전히 ​​괜찮습니다).

    라인:

            ip6 nexthdr icmpv6 icmpv6 type echo-request limit rate over 10/second burst 4 packets drop
    

    간단히 다음으로 대체해야 합니다.

            icmpv6 type echo-request limit rate over 10/second burst 4 packets drop
    

    (앞에 추가할 필요 없이 meta nfproto ipv6 meta l4proto icmpv6)

  • TFTP

  • 포트 값만 다른 동일한 규칙은 다음을 사용하여 인수분해할 수 있습니다.익명 세트.nftables 버전 >= 1.0.2에는-o (최적화) 옵션 도 있습니다.이 작업을 자동으로 시도합니다.

관련 정보