nftables의 테이블 선언 범위 외부에 ct 도우미 개체를 선언합니다.

nftables의 테이블 선언 범위 외부에 ct 도우미 개체를 선언합니다.

ct helper다음은 현재 객체가 선언되는 방법에 대한 실제 예입니다.nftables 문서

#!/usr/sbin/nft -f

add table filter_4 {
    # TODO: Can helper object be declared outside the scope of table declaration scope?
    # ct helper stateful object
    # "ftp-standard" is the name of this ct helper stateful object
    # "ftp" is the in-kernel name of the ct helper for ftp
    ct helper ftp-standard {
        type "ftp" protocol tcp;
    }
}

그런 다음 개체가 ct helper사용됩니다. 다음과 같이:

add chain filter_4 new_out_4 {
    comment "New output IPv4 traffic"
}

# FTP (active and passive)
# Rule for initial ftp connection (control channel), setting ct helper stateful object to use
# "ftp-standard" is the name of the ct helper stateful object
add rule filter_4 new_out_4 tcp sport >1023 tcp dport 21 ct helper set "ftp-standard" accept

제가 달성하려는 목표는 ct helper컬렉션이 선언되는 방식과 유사한 방식으로 테이블 외부의 개체를 선언하는 구문을 이해하는 것입니다.

테이블 선언 범위 외부에서 컬렉션을 선언하는 방법의 예

add set filter_4 multicast_proto { type inet_proto; comment "IPv4 multicast protocols"; }
add element ip filter_4 multicast_proto { udp, igmp }

비슷한 방식으로 다음과 같은 객체를 선언하고 싶습니다 ct helper.

# Table declaration
add table filter_4

# Declare ct helper separately
add ct helper ftp-standard {
    type "ftp" protocol tcp;
}

물론 이것은 작동하지 않습니다. ct helper이와 같은 \statement를 추가하는 구문은 무엇입니까?

ct helper테이블에 바인딩해야 하는 것 같으니 (사실인가요?) 위의 예에서는 테이블 이름을 지정해야 할 수도 있습니다.

답변1

구문은 다음에 설명되어 있습니다.nft(8):

CT 보조원

add ct helper [family] table name { type type protocol protocol ; [l3proto family ;] }
delete ct helper [family] table name
list ct helpers

귀하의 경우에는 다음과 같습니다.

  • 쉘에서( '적절한 경우 올바른 쉘 이스케이프 사용 포함, nft자체적으로는 상관하지 않음: 인수를 동일하게 구문 분석하지만 별도로 제공됨):

    nft add ct helper filter_4 ftp-standard '{ type "ftp" protocol tcp; }'
    
  • 또는 이미 nft컨텍스트에 있는 경우 다음과 같이 하세요.

    add ct helper filter_4 ftp-standard { type "ftp" protocol tcp; }
    

관련 정보