Linuxにはすでにnftables nf_xfrmのモジュールがあり、reqidに関するコードが含まれているようですが、manページにはそれについての説明がありません。
それでは、次のコマンドをnftablesに変換する方法は?
iptables -D FORWARD -s 10.0.0.1/32 -i eth0 -m policy --dir in --pol ipsec --reqid 1 --proto esp -j ACCEPT
nftablesバージョン0.9.0は1年以上前の 2018-06-08にリリース であり、この機能はこのバージョンでは使用できません。カプセル化が解除されたテストのみが利用可能です。
[〜#〜] update [〜#〜]: nftables 0.9.1がリリースされました 2019-06-24なので、すぐにお気に入りのディストリビューションにパッケージ化されることを期待できます。
nftablesでのipsecの追加処理のカーネルサポートは、バージョン4.20で追加されました1。ユーザーランド側では、追加のipsec機能の対応するサポート was が、2018-09-21のlibnftnlのgit masterブランチに追加されました 2 、 およびnftables 4 、 5 、 6。
最後のパッチはreqidを提供するものです:
src:ipsec(xfrm)式を追加します。これにより、パケット、ipsecrequest idおよびSPIに関連付けられたxfrm状態のipsecトンネル/ビートアドレスでのマッチングが可能になります。
例:
ipsec in ip saddr 192.168.1.0/24 ipsec out ip6 daddr @endpoints ipsec in spi 1-65536
(まあ、リクエストIDの例も、実装されていない可能性のある基になるプロトコルと一致するものもありません。後で参照してください)
したがって、この機能を使用するには、現在少なくともこれが必要です。
OPのiptablesルールが削除ではなく追加だった場合(これは現在 handleキーワードを使用して)nftablesでのみ実行できます 変換する必要がありますこれに(ボイラープレートを含む):
nft add table ip filter
nft add 'chain ip filter forward { type filter hook forward priority filter; policy accept; }'
nft add rule ip filter forward ip saddr 10.0.0.1 iifname "eth0" ipsec in reqid 1 accept
meta ipsec exists
の前にipsec in reqid 1
を追加しなかった:reqidをテストする必要があるため、テストはすでにipsecカプセル化解除の対象になっている。
利用可能にされていない、または言及されていないもの ドキュメント内 は--proto esp
と同等であるため、指定できませんでした。
Espプロトコルの一致がreally必要な場合、外部カプセル化パケットにマークを使用すると、カプセル化解除後にマークが保持されることがわかっているため、それを実行する必要があると想像できます。
nft add table ip filter
nft add 'chain ip filter input { type filter hook input priority filter; policy accept; }'
nft add 'chain ip filter forward { type filter hook forward priority filter; policy accept; }'
nft add rule ip filter input ip protocol esp meta mark set 1
nft add rule ip filter forward meta mark 1 ip saddr 10.0.0.1 iifname "eth0" ipsec in reqid 1 accept
免責事項:塩の粒度で取り、構文のみをテストしました(git commit 1e5c6f0ed0315046537612f5a80e506d37a7f8e を使用してnftablesを使用)。これは、IPSecでは実際には確認されていません。おそらく、UDPカプセル化ESPに4500/UDPを追加するルールもあるでしょう。
1 netfilter:nf_tables:xfrm式を追加
2 expr:rt:ipsec match support
3 expr:xfrmサポートを追加
4 src:rt:ルートがipsec変換を実行するかどうかをチェックするサポートを追加
5 src:meta secpathをmeta ipsecに名前変更
6 src:ipsec(xfrm)式を追加