Nftables
聲明鏈以使用(netdev)入口掛鉤時如何使用變數作為設備名稱?
對於
netdev
過濾表的ingress
鉤子,我想將設備名稱儲存在一個變數中,但我不知何故無法弄清楚正確的語法。它的工作原理如下:
table netdev filter { chain ingress { type filter hook ingress device ens33 priority -500; # ... } }
…但我想用一個變數代替
ens33
就行:type filter hook ingress device ens33 priority -500;
當我使用以下內容時,出現錯誤:
define extif = ens33 table netdev filter { chain ingress { type filter hook ingress device $extif priority -500; # ... } }
錯誤內容如下:
Error: syntax error, unexpected '$', expecting string or quoted string or string with a trailing asterisk
現在我也嘗試
ens*
希望它類似於ens+
iniptables
,但隨後錯誤變為我在提供無效設備名稱時也遇到的錯誤:Error: Could not process rule: No such file or directory chain ingress { ^^^^^^^
同樣的引用對我不起作用。該文件也沒有提供可以使其工作的線索。
如何將外部介面的名稱(或名稱)放在變數中,以便將它們用作節
device
上的參數type filter hook ...
?核心為 5.8,系統為 Ubuntu 20.04。
nftables
報告為v0.9.3 (Topsy)
.
唉,這個功能是從nftables 0.9.7開始添加的。使用 nftables 0.9.8 測試時,您的規則集按原樣工作。
此更新檔增加了對在鍊 和流表定義中使用設備變數的支持,例如。
define if_main = lo table netdev filter1 { chain Main_Ingress1 { type filter hook ingress device $if_main priority -500; policy accept; } }
簽字人:Pablo Neira Ayuso pablo@netfilter.org
netdev 系列鏈註冊到一個或多個(從核心 5.5 和 nftables 0.9.3 開始)介面,這些介面必須在鏈定義之前都存在。不能使用萬用字元。
多設備鏈語法略有不同:
table netdev filter { chain ingress { type filter hook ingress devices = { ens33, ens34 } priority -500; # ... } }
或者使用nftables >= 0.9.7:
define extifs = { ens33, ens34 } table netdev filter { chain ingress { type filter hook ingress devices = $extifs priority -500; # ... } }
只有一個界面(例如
{ ens33 }
:)以先前的現有語法顯示回來。