web-dev-qa-db-ja.com

UDPとTCPの両方をnftablesの1行で一致させる方法

これを1行で行うにはどうすればよいですか?

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

最近の十分なnftables と生のペイロード式を使用することで、それが可能である(ただし、おそらくそれほど有用ではない)ことを伝えるために可能です。

したがって、inet(dual ip/ip6)テーブルの場合、最初にセットを使用して適切なレベル4プロ​​トコル(ここではTCP = 6およびUDP = 17)をフィルタリングする必要があります。次に、ポート53をフィルタリングします。これは便利です [〜#〜] tcp [〜#〜][〜#〜] udp [〜#〜] は同じ場所にありますそれぞれの形式の宛先ポート。 dportは、パケットのTCP/UDP部分の宛先ポートのオフセットとして表されます。前のリンクにあるように、16ビットのサイズで16ビットです。 tcpudpは記号名で使用できますが、dnsdnsではなく53と記述する必要があるようですが、 dns/tcpdns/udp(またはdomainは後で参照)が2つの異なる "プロトコル名前空間"にあるためだと想像してください。

結果のコマンドは次のとおりです(追加の単一引用符、または二重引用符のエスケープが必要です):

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

IPv4でのみ必要な場合は、対応するipテーブルとチェーンを初期化し、inetipに置き換えます。

また、ほぼ同じことが .8.3リリースノート の例として示され、現在 nftのマニュアルページ に含まれていることに注意してください。動作しません:dnsおよびhttp53および80に置き換える必要があります(とにかく、一部のディストリビューション/バージョンではdomainが必要になる場合がありますdnsの代わりに)。

3
A.B