nftables에서 체인 우선순위를 사용하는 시기와 방법

nftables에서 체인 우선순위를 사용하는 시기와 방법

nftables에서 체인을 구성할 때 priority값을 제공해야 합니다. 온라인 예제는 거의 항상 a를 0으로 설정합니다 . 때로는 일부 후크( , ) piority에 100 값이 사용됩니다 .outputpostrouting

nftables 위키말해야 해:

우선 순위는 체인을 주문하거나 특정 Netfilter 내부 작업 전후에 배치하는 데 사용할 수 있습니다. 예를 들어, 우선순위가 -300인 사전 라우팅된 후크의 체인은 연결 추적 작업 전에 배치됩니다.

참고로 다음은 iptables에서 사용되는 다양한 우선순위 목록입니다.

  • NF_IP_PRI_CONNTRACK_DEFRAG (-400): 조각 모음 우선 순위
  • NF_IP_PRI_RAW (-300): 연결 추적 작업 이전에 원본 테이블의 기존 우선순위를 지정합니다.
  • NF_IP_PRI_SELINUX_FIRST (-225): SELinux 작업
  • NF_IP_PRI_CONNTRACK (-200) : 연결 추적 작업
  • NF_IP_PRI_MANGLE (-150) : 관리 작업
  • NF_IP_PRI_NAT_DST (-100): 대상 NAT
  • NF_IP_PRI_FILTER(0) : 필터 연산, 필터 테이블
  • NF_IP_PRI_SECURITY (50): 보안 테이블의 위치(예: secmark)를 설정할 수 있습니다.
  • NF_IP_PRI_NAT_SRC (100): 소스 NAT
  • NF_IP_PRI_SELINUX_LAST (225): 패킷 종료 시 SELinux
  • NF_IP_PRI_CONNTRACK_HELPER (300): 종료 시 연결 추적

이는 priority내부 Netfilter 작업과 컨트롤의 상호 작용을 보여 주지만 iptables에서 사용되는 값만 예로 언급합니다.

어떤 경우에 priority관련이 있나요(즉, 값 ≠ 0으로 설정해야 함)? 동일한 후크가 있는 여러 체인에만 적용됩니까? nftables와 iptables를 결합하는 것은 어떻습니까? 올바른 값을 결정하는 데 관련된 내부 Netfilter 작업은 무엇입니까 priority?

답변1

업데이트: ( iptables-nft대신 iptables-legacy) 사용nftables커널 API 및 재사용 가능한 호환성 레이어확장 테이블커널 모듈(iptables-extensions) 현지인이 없을 때nftables번역 가능. 그것은 다음과 같이 보아야 한다.nftables이 문제를 제외하면 대부분의 경우 이전 버전과 마찬가지로 우선순위가 고정되어 있으므로nftables'여기서 우선순위는 여전히 중요합니다.


iptables(레거시) 및nftables둘 다 동일한 netfilter 인프라를 사용하고 서로 다른 위치에서 후크를 사용합니다. 거기에 설명이 있습니다:웹 필터 후크, 또는 이것을 가지고systemtap 맨페이지, 일부 후크 처리를 기록합니다.

PRIORITY는 동일한 패킷에서 실행되는 다른 netfilter 후크 기능과 관련하여 프로브 포인트가 실행되어야 하는 순서를 지정하는 정수 우선순위입니다. Hook 기능은 각 패킷에 대해 가장 작은 우선순위 번호부터 가장 큰 우선순위 번호 순으로 실행됩니다. [...]

또는 netfilter에 대한 블로그가 있습니다.Netfilter를 사용하여 네트워크 패킷을 필터링하는 방법 - 1부 Netfilter Hooks (블로그가 사라졌습니다.백트래커대신 링크하세요. )

이 모든 것은 다양한 모듈/기능이 각각에서 구현될 수 있음을 보여줍니다.5개의 가능한 후크(IPv4의 경우) 각 후크 내에서는 후크에 등록된 우선순위에 따라 호출됩니다.

이 후크는 다음 용도로만 사용되는 것이 아닙니다.iptables또는nftables. 위의 systemtap과 심지어 netfilter의 자체 하위 모듈과 같은 다양한 사용자가 있습니다. 예를 들어 IPv4의 경우 iptables 또는 nftables와 함께 NAT를 사용하는 nf_conntrack_ipv4경우우선순위가 다른 4개의 Hook에 총 6회 등록. 모듈은 nf_defrag_ipv4레지스터를 순차적으로 가져옵니다.NF_INET_PRE_ROUTING/NF_IP_PRI_CONNTRACK_DEFRAGNF_INET_LOCAL_OUT/NF_IP_PRI_CONNTRACK_DEFRAG

그렇습니다. 우선순위는 동일한 후크 내에서만 관련이 있습니다. 그러나 동일한 후크에는 여러 사용자가 있고 이미 사전 정의된 우선순위가 있으므로(일반적으로 다른 후크 간에 동일한 값을 재사용하는 것은 아니지만), 이들 주위에서 올바르게 상호작용하려면 호환 가능한 우선순위를 사용해야 합니다.

예를 들어, 조각화되지 않은 패킷에 대해 일찍 규칙을 실행한 다음 나중에(평소와 같이) 조각 모음된 패킷에 대해 규칙을 실행해야 한다면 두 개만 등록하면 됩니다.nftables사전 경로의 체인 중 하나는 <= -401(예: -450)이고 다른 하나는 -399및 사이 -201(예: -300)입니다. 최고iptablesconntrack이 조각화된 패킷을 볼 수 없다는 것은 최근까지 불가능했기 -300때문에 초기 조각 모음이 사용되었습니다(커널 4.15부터는 옵션에 등록 raw_before_defrag되지만 -450동시에 두 가지를 모두 수행할 수는 없었지만 iptables-nft, 해당 기능이 제공되지 않음) 옵션).


이제 사이의 상호 작용에 대해nftables그리고iptables: 둘 다 함께 사용할 수 있습니다. 이전 커널의 NAT를 제외하고 둘 다 netfilter의 nat 리소스를 놓고 경쟁합니다. 하나만 nat를 등록해야 합니다.Wiki에 설명된 대로 커널 >= 4.18을 사용하지 않는 한. 이것nftablesiptables와 동일한 우선순위를 갖도록 설정뉘앙스가 있습니다.

둘 다라면iptables그리고nftables함께 사용하면 상호작용과 필요한 효과 순서 때문에 하나를 다른 것보다 먼저 사용해야 합니다. 단지 약간 낮거나 높을 뿐입니다.nftables'에 따라 우선순위가 적용됩니다.iptables'는 변경할 수 없습니다.

예를 들어 대부분의 경우iptables설정을 사용하면 됩니다.nftables특정 일치 기능이 있으며 다음에 적용되지 않습니다.iptables패킷을 표시한 다음 표시를 처리합니다.iptables, 특정 목표를 지원하기 때문입니다(예: 멋진iptables LED 타겟LED 깜박임) 사용할 수 없음nftables. 조금 낮은 우선순위 값을 등록하면 됩니다.nftables후크를 사용하여 이전에 완료되었는지 확인하세요. 예를 들어 일반적인 입력 필터링 규칙의 경우 이 값이 -5대신 사용 됩니다. 이 값은 그렇지 않은 경우 이전에 실행될 값보다 0낮아서는 안 됩니다.-149iptables' INPUT mangle chain 이것은 우리가 원하는 것이 아닐 수도 있습니다. 이는 입력 사례에서 중요한 유일한 다른 낮은 값입니다. 예를 들어 NF_IP_PRI_CONNTRACK고려해야 할 임계값이 없습니다 .연결하다이 우선순위에 등록되지 않은 것이 있습니다 NF_INET_LOCAL_IN.SELinux도 이 후크에 뭔가를 등록하지 않았습니다.그것과 관련된 것이 정말로 중요하다면 -225여기에는 특별한 의미가 없습니다.

관련 정보