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メーリングリストのトレントバック

関連情報