nftables: 1개의 공통 맵(또는 컬렉션)을 사용하여 다르지만 관련된 규칙을 구현하는 방법은 무엇입니까? (DNA+전진)

nftables: 1개의 공통 맵(또는 컬렉션)을 사용하여 다르지만 관련된 규칙을 구현하는 방법은 무엇입니까? (DNA+전진)

nftables(v0.9.6)을 사용하여 방화벽 + NAT를 설정하고 있습니다. 이 도구는 광범위한 규칙 중복을 방지하기 위해 컬렉션과 매핑을 제공합니다.

공통 데이터 구조(세트 또는 맵)를 사용하여 DNAT 및 필터링 규칙(전달)을 구성하고 싶습니다.

( )하려고 하면 nft --check -f example.conf항상 오류가 발생합니다. 이 작업을 수행할 수 있는 방법을 알고 있나요?반복할 필요 없음NAT는 2개의 데이터 구조(맵과 세트)에 매핑됩니까?

다음은 제가 사용하는 예입니다(대문자 주석 참조).

이것들은지도 및 설정:

table inet filter {
  map mymap {
    type inet_service : ipv4_addr
    elements = {
      12345 : 192.168.0.66,
      4321  : 192.168.0.77
    }
  }

  set myset {
    type ipv4_addr . inet_service
    elements = {
      192.168.0.66 . 12345,
      192.168.0.77 . 4321
    }
  }

이것들은규칙:

  chain natprerouting {
    type nat hook prerouting priority dstnat; # =-100

    # ACCEPTED:
    dnat ip to tcp dport map @mymap

    # ERROR AT PARSING (unexpected string: @myset):
    dnat ip addr . port to @myset
  }

  chain forward {
    type filter hook forward priority filter; # =0

    # ERROR AT PARSING (unexpected dport):
    ip daddr tcp dport map @mymap accept

    # ACCEPTED:
    ip daddr . tcp dport @myset accept
  }
}

dnat to수용 가능한 경우 작동합니다.놓다. 하나 변환할 수 있어요지도가 되다놓다(혹은 그 반대로도)? 어떤 방법이 있나요?

답변1

각각의 DNATed 연결을 명시적으로 수락할 필요가 없습니다.정방향 가닥에서는 연결 추적으로 인해 DNAT가 이미 알려져 있습니다.

ct status dnat accept다음과 같이 사용하세요.

table inet filter {
  chain forward {
    type filter hook forward priority filter; # =0

    # THIS ONE AUTOMATICALLY ACCEPTS ALL OUR DNATed PACKETS
    ct status dnat accept
  }
}

일부 크레딧은 다음과 같습니다.netfilter 메일링 리스트의 Trent Buck.

관련 정보