Iptables

iptables 字元串規則轉換為 nftables

  • June 25, 2021

我正在通過從 iptable 遷移到 nftable將規則從 iptable 遷移到 nftable

我現在幾乎沒有 IP 和埠阻止規則以及基於字元串的 iptable 規則,但是通過使用內置的 iptable 轉換規則,我能夠將規則從 iptable 轉換為 nftable,但基於字元串的規則已經在 iptable 中到位翻譯後在 nftables 中註釋。下面是翻譯後的nftable規則

   add rule ip filter INPUT tcp dport 1024-65535 counter accept
   add rule ip filter INPUT udp dport 1024-65535 counter accept
  65535 -j DROP
   # -t filter -A INPUT -p udp -m udp --dport 234 -m string --string abc.exe --algo bm --to 65535 -j DROP
   # -t filter -A INPUT -p udp -m udp --dport 234 -m string --string def.exe --algo bm --to 65535 -j DROP
   # -t filter -A INPUT -p udp -m udp --dport 234 -m string --string hij.exe --algo bm --to 65535 -j DROP
   add rule ip filter INPUT icmp type echo-reply ct state new,related,established  counter accept
   add rule ip filter INPUT icmp type echo-request ct state new,related,established  counter accept
   add rule ip filter INPUT icmp type destination-unreachable ct state new,related,established  counter accept
   add rule ip filter INPUT icmp type time-exceeded ct state new,related,established  counter accept

需要有關如何將基於字元串的 iptable 規則轉換為 nftable 規則的幫助,如果它像上面那樣失敗,我應該參考哪個日誌。

nftables目前沒有 等效項字元串匹配目前位於不受支持的擴展列表中。所有這些不受支持的擴展(可能還有一些受支持的擴展)都不會被翻譯成nftables,因為它們使用的特殊功能不能僅用nftables字節碼(嘗試nft -a --debug=netlink list ruleset查看字節碼)表達,也不能在核心中作為本機nftables模組實現,所以翻譯工具甚至不會嘗試。

如果您對協議有更多了解,並且可以期望在數據包中的固定位置找到字元串,則可以使用原始有效負載表達式此處的範例來執行相同操作。

否則,您可以混合使用 nftablesiptables(包括iptables-nft)規則,只要您在nftables中使用不同的表名,以免與iptables-nft(可能正在使用)發生衝突。目前還沒有計劃淘汰iptables(至少是iptables-nft實現,完全能夠使用各種 xtables 模組,如string)。

這裡t選擇了 table ,所以它不會與 table 衝突filternftablesc_in以優先級 10獲取其輸入鏈(任意稱為),因此在同一位置掛鉤的iptables的 INPUT 鏈優先於其固定優先級 0。將優先級保留為 0 會在哪個鏈(iptables ‘或nftables ‘)之間獲得未定義的順序首先執行。在表之間刪除/接受規則並不重要。重要的情況是在此處完成拆分規則時(但對於這種特定情況,順序沒有什麼特別之處,所以很好),以及更改規則或具有副作用的規則:在nftables 集中添加元素或一個iptables伴侶ipset然後丟棄數據包與先丟棄數據包(然後什麼都沒有)不同。

nft add table ip t
nft add chain ip t c_in '{ type filter hook input priority 10; policy accept; }'

nft add rule ip t c_in tcp dport 1024-65535 counter accept
nft add rule ip t c_in udp dport 1024-65535 counter accept
nft add rule ip t c_in icmp type echo-reply ct state new,related,established  counter accept
nft add rule ip t c_in icmp type echo-request ct state new,related,established  counter accept
nft add rule ip t c_in icmp type destination-unreachable ct state new,related,established  counter accept
nft add rule ip t c_in icmp type time-exceeded ct state new,related,established  counter accept

iptables -t filter -A INPUT -p udp -m udp --dport 234 -m string --string abc.exe --algo bm --to 65535 -j DROP
iptables -t filter -A INPUT -p udp -m udp --dport 234 -m string --string def.exe --algo bm --to 65535 -j DROP
iptables -t filter -A INPUT -p udp -m udp --dport 234 -m string --string hij.exe --algo bm --to 65535 -j DROP

對不起,我不知道該怎麼辦:

   65535 -j DROP

這看起來像是工具的錯字或翻譯錯誤。

當需要兩個世界之間的互動時,可以使用標記傳遞“消息” 。這是優先級很重要的情況。例如,如果出於規則管理的原因只應在nftables中執行 drop 操作,則可以使用它來代替,請記住iptables的 filter/INPUT 優先於nftables的 c_in :

iptables -t filter -A INPUT -p udp -m udp --dport 234 -m string --string abc.exe --algo bm --to 65535 -j MARK --set-mark 0xdead
iptables -t filter -A INPUT -p udp -m udp --dport 234 -m string --string def.exe --algo bm --to 65535 -j MARK --set-mark 0xdead
iptables -t filter -A INPUT -p udp -m udp --dport 234 -m string --string hij.exe --algo bm --to 65535 -j MARK --set-mark 0xdead

並在字元串規則最初所在的位置的短路規則之前插入此nftables規則:...established...

nft add ip t c_in meta mark 0xdead drop

引用自:https://unix.stackexchange.com/questions/655688