nftables를 사용하여 한 줄로 특정 포트에 대해 UDP와 TCP를 일치시키는 방법

nftables를 사용하여 한 줄로 특정 포트에 대해 UDP와 TCP를 일치시키는 방법

한 줄로 어떻게 할 수 있나요?

tcp dport 53 counter accept comment "accept DNS"
udp dport 53 counter accept comment "accept DNS"

답변1

충분히 새로운 경우 다음과 같이 nftables작성할 수 있습니다.

meta l4proto {tcp, udp} th dport 53 counter accept comment "accept DNS"

실제로 다음과 같이 하면 더 잘할 수 있습니다.

set okports {
  type inet_proto . inet_service
  counter
  elements = {
    tcp . 22,  # SSH
    tcp . 53,  # DNS (TCP)
    udp . 53   # DNS (UDP)
}

그런 다음:

meta l4proto . th dport @okports accept

포트/서비스 이름(from)을 사용하려는 경우 domain대신 작성할 수도 있습니다.53/etc/services

답변2

이것이 가능하다는 것을 모든 사람에게 보여 주려면 (아마도 그다지 유용하지는 않을 것입니다) 예, 가능합니다.최근의 nftable원시 페이로드 표현.

따라서 inet(이중 ip/ ip6) 테이블의 경우 먼저 적절하게 필터링된 레벨 4 프로토콜 세트(여기서는 TCP=6 및 UDP=17)를 사용한 다음 포트 53을 필터링해야 합니다. 이것은 매우 편리합니다.전송 제어 프로토콜그리고UDP 프로토콜해당 형식의 대상 포트 위치는 동일합니다. dport패킷의 TCP/UDP 부분에서 대상 포트의 오프셋으로 표현됩니다(이전 링크에 표시된 대로 16비트, 크기 16). tcp및 는 기호 이름을 통해 사용할 수 있지만 not 으로 선언해야 하는 udp것처럼 보이지만 이는 및 (또는 나중에 참조)이 두 개의 서로 다른 "프로토콜 네임스페이스"에 있기 때문이라고 상상할 수 있습니다 .dns53dnsdns/tcpdns/udpdomain

생성된 명령은 다음과 같습니다(여기에 작은따옴표를 추가하거나 큰따옴표를 이스케이프 처리해야 함).

# nft 'add rule inet filter input meta l4proto {tcp, udp} @th,16,16 53 counter accept comment "accept DNS"'

IPv4만 필요한 경우 해당 ip테이블과 체인을 초기화 inet하고 ip.

또한 거의 동일한 내용이 예제로 제공됩니다.0.8.3 릴리스 노트이제 포함됨nft매뉴얼 페이지아쉽게도 이 예제는 작동하지 않습니다. dns및를 and로 바꿔야 http합니다 (일부 배포판/버전에서는 대신 이를 요구할 수 있음 ).5380domaindns

관련 정보