如何匹配 nftables 中的 reqid?
似乎 linux 已經有一個用於 nftables nf_xfrm 的模組,其中包含一些關於 reqid 的程式碼,但是在手冊頁中沒有關於它的描述。
那麼,如何將以下命令翻譯成 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 於2018-06-08發布,一年多前,此版本不提供此功能。只有已解封裝的測試可用。
更新:nftables 0.9.1 已於2019 年 6 月 24 日發布,因此人們可以希望它很快會被打包到自己喜歡的發行版中。
在 4.20 1版本中添加了對nftables中 ipsec 額外處理的核心支持。在使用者態方面,在 2018 年 9 月 21 日左右的 git master 分支中為 libnftnl 2、3和 nftables 4、5、6添加了對其他 ipsec 功能的相應支持。
最後一個更新檔提供reqid:
src:添加 ipsec (xfrm) 表達式 這允許匹配與數據包、ipsec 請求 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 協議,可以想像在外層信封數據包上使用標記應該可以做到,知道標記在解封裝後被保留:
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 01e5c6f0ed0315046537612f5a80e506d37a7f8e 的nftables)。這實際上並未在 IPSec 上得到驗證。對於 UDP 封裝的 ESP,可能還需要為 4500/UDP 添加規則。
1 netfilter:nf_tables:添加 xfrm 表達式