사전 구성된 nftable에 입력 규칙을 멱등적으로 추가하는 방법

사전 구성된 nftable에 입력 규칙을 멱등적으로 추가하는 방법

무료 TCP 포트가 필요한 유틸리티가 있습니다. 기존 구성 파일을 변경하고 싶지 않기 때문에 nftables에 규칙을 동적으로 추가할 수 있어야 합니다.

입력 규칙을 포함하는 filter라는 inet 테이블이 있습니다.

table inet filter {
    chain input {
        type filter hook input priority 0; policy drop;
        # existing rules
    }
}

규칙을 추가하는 것은 쉽습니다. 예를 들면 다음과 같습니다.

nft add rule inet filter input tcp dport { 4848 } ct state new,established counter accept

여기서 질문은 이것을 멱등적인 방식으로 수행하는 방법입니다.

  • 같은 명령을 두 번, 두 번 실행하면정확히 똑같다규칙이 생성되었습니다.
  • nft delete rule inet filter input handle ##변경되는 핸들 번호가 필요하고 이를 사용하여 nft -n -a list ruleset | grep ...핸들 번호를 해결하는 것은 옳지 않다고 느껴집니다.
  • 새 체인을 추가 nft -f하고 매번 새로 고치는 것도 위에서 언급한 대로 작동하지 않습니다.여기:

이것은아니요체인은 거부(또는 삭제) 규칙이 있는 체인보다 (허용 규칙의 형태로) 더 광범위한 액세스를 제공할 수 있습니다.

답변1

컬렉션을 사용하면 관리하기가 더 쉽습니다.

table inet filter {
    set myport_tcp {
        type inet_service
        elements = { 4848 }
    }   

    chain input {
        type filter hook input priority 0; policy drop;
        # existing rules
        tcp dport @myport_tcp ct state new,established counter accept
        # more existing rules
    }
}

다음과 같은 방법으로 컬렉션을 지울 수 있습니다.

nft flush set inet filter myport_tcp 

다음과 같은 방법으로 컬렉션에 새 포트를 추가할 수 있습니다.

nft add element inet filter myport_tcp elements = { 4949 }

또는 다음을 통해 컬렉션에 여러 포트를 추가합니다.

nft add element inet filter myport_tcp elements = { 14949, 9494 }

관련 정보