Linux
檢查是否在使用 iptables 或 nftables
給定一個處於未知配置狀態的主機,我想知道是否有一種有效的方法可以非互動地確定防火牆規則集是否由
iptables
or管理nftables
。聽起來很簡單,我已經考慮了很多,但還沒有給出有意義的答案來編寫腳本……
最近在 Kubernetes 中解決了這個問題的一個變體,因此值得看看那裡做了什麼。(變體是是否使用
iptables-legacy
或iptables-nft
及其 IPv6 變體來驅動主機的規則。)Kubernetes 採用的方法是查看各個“保存”命令和(及其 IPv6 變體)輸出的行
iptables-legacy-save
數iptables-nft-save
。如果前者產生十行或更多的輸出,或者產生的輸出比後者多,則認為iptables-legacy
應該使用;否則,iptables-nft
應該使用它。在您的情況下,決策樹可能如下所示:
- 如果
iptables
未安裝,請使用nft
;- 如果
nft
未安裝,請使用iptables
;- 如果
iptables-save
不產生任何定義規則的輸出,請使用nft
;- 如果
nft list tables
並且nft list ruleset
不產生任何輸出,請使用iptables
.如果
iptables-save
和nft list ...
都產生輸出,而iptables
不是iptables-nft
,我不確定自動化過程可以決定。