これを1行で行うにはどうすればよいですか?
tcp dport 53 counter accept comment "accept DNS"
udp dport 53 counter accept comment "accept DNS"
最近の十分なnftables と生のペイロード式を使用することで、それが可能である(ただし、おそらくそれほど有用ではない)ことを伝えるために可能です。
したがって、inet
(dual ip
/ip6
)テーブルの場合、最初にセットを使用して適切なレベル4プロトコル(ここではTCP = 6およびUDP = 17)をフィルタリングする必要があります。次に、ポート53をフィルタリングします。これは便利です [〜#〜] tcp [〜#〜] と [〜#〜] udp [〜#〜] は同じ場所にありますそれぞれの形式の宛先ポート。 dport
は、パケットのTCP/UDP部分の宛先ポートのオフセットとして表されます。前のリンクにあるように、16ビットのサイズで16ビットです。 tcp
とudp
は記号名で使用できますが、dns
はdns
ではなく53
と記述する必要があるようですが、 dns/tcp
とdns/udp
(またはdomain
は後で参照)が2つの異なる "プロトコル名前空間"にあるためだと想像してください。
結果のコマンドは次のとおりです(追加の単一引用符、または二重引用符のエスケープが必要です):
# nft 'add rule inet filter input meta l4proto {tcp, udp} @th,16,16 53 counter accept comment "accept DNS"'
IPv4でのみ必要な場合は、対応するip
テーブルとチェーンを初期化し、inet
をip
に置き換えます。
また、ほぼ同じことが .8.3リリースノート の例として示され、現在 nft
のマニュアルページ に含まれていることに注意してください。動作しません:dns
およびhttp
を53
および80
に置き換える必要があります(とにかく、一部のディストリビューション/バージョンではdomain
が必要になる場合がありますdns
の代わりに)。