熱門分類
載入中…
目錄0%

🐧 Linux Firewalld / iptables / nftables 深度比較與最佳實務

    🐧 Linux Firewalld / iptables / nftables 深度比較與最佳實務

    Linux 防火牆技術隨著 Kernel Netfilter 架構多年演進,目前主要存在三種層級與角色:

    • iptables — 傳統 Netfilter API,20 年歷史(逐步被取代)
    • nftables — 新世代防火牆框架(官方未來方向)
    • Firewalld — 管理工具/前端介面(非防火牆本體)

    許多使用者容易誤解 Firewalld 與 nftables、iptables 的關係,因此本篇內容會以「架構 → 概念 → 指令 → 實務 → 最佳實務」方式一次講清楚。


    🔥 一、三者的核心定位(不要再搞混)

    名稱層級用途是否建議未來使用
    iptables Kernel Netfilter API 傳統封包過濾與 NAT ❌ 逐步淘汰
    nftables 新一代 Netfilter API 更高效的防火牆與 NAT 模型 ✅ 是未來主力
    Firewalld 管理前端(非防火牆) 以 Zone / Service 管理規則 ✅ 桌面 / Server 推薦

    重點:Firewalld 不是 Kernel Firewall,本質上只是「控制後端」的工具。

    RHEL8 / CentOS 8 / Rocky 8、RHEL9 開始:

    • Firewalld → 預設後端使用 nftables
    • iptables → 使用 iptables-nft 模式(已轉譯為 nftables)

    因此大多數現代系統即使你輸入 iptables -L,實際上也是由 nftables 接手。


    🐧 二、iptables 與 nftables 的架構差異

    1. iptables 架構(傳統)

    • 基於「四張表 + 五個鏈」
    • 大量規則會明顯拖慢效能(線性搜尋)
    • IPv4 與 IPv6 需分開管理
    • NAT 與 Filter 彼此獨立,維護成本高

    2. nftables 架構(新一代)

    • 所有功能統一在「table → chain → rule」模型內
    • 採用 B-Tree 方式搜尋,大量規則效能遠高於 iptables
    • IPv4/IPv6 同時處理(不需 iptables/ip6tables 分開)
    • 支援「set / map」高階語法,大幅降低 rule 數量

    簡單講:iptables 太老舊,只適合兼容;nftables 才是現代架構。


    🧩 三、Firewalld 與 nftables 的關係

    Firewalld 本身不是防火牆,而是:

    • Zone 管理模型(public、dmz、work …)
    • Service 事先定義 port/protocol
    • Rich rule 類似 iptables 的語法
    • 後端可切換:iptables 或 nftables

    RHEL8 之後 Firewalld 80% 以上的部署都使用:

    Firewalld → nftables → Kernel Netfilter

    因此 Firewalld 最大意義是:

    • 簡化管理
    • 減少語法錯誤
    • 大量使用者不需碰 nftables 原始語法

    ⚙️ 四、常用指令對照表

    1. 查看規則

    iptablesnftablesFirewalld
    iptables -L -n -v nft list ruleset firewall-cmd --list-all

    2. 新增規則

    iptablesnftablesFirewalld
    iptables -A INPUT -p tcp --dport 22 -j ACCEPT nft add rule inet filter input tcp dport 22 accept firewall-cmd --add-service=ssh --permanent

    📘 五、Firewalld 最佳實務(企業 100% 通用)

    1. 僅使用 permanent + reload(不要用 runtime-only)

    firewall-cmd --add-service=https --permanent
    firewall-cmd --reload
    

    2. 如果要寫複雜規則 → 用 rich rule

    firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.0.0.0/24 port port=22 protocol=tcp accept'
    

    3. 大型企業環境 → 建議直接寫 nftables policy

    理由:
    • 可讀性更好
    • 效能更強
    • 支援 set/map 表達式,規則更少

    🔧 六、nftables 最佳實務(高階環境建議直接採用)

    1. 基礎架構

    table inet filter {
      chain input {
        type filter hook input priority 0;
    
        ct state established,related accept
        iif lo accept
        ip saddr 192.168.1.0/24 tcp dport { 22, 80, 443 } accept
        drop
      }
    }
    

    2. 使用集合(set)一次處理多 IP

    set admin_hosts {
      type ipv4_addr;
      elements = { 192.168.1.10, 192.168.1.20 }
    }
    
    tcp dport 22 ip saddr @admin_hosts accept
    

    3. IPv4/IPv6 同時管理(inet table)

    這是 iptables 做不到的,也是 nftables 最大優勢之一。


    💡 七、iptables 是否仍需要?

    情境建議
    舊版系統(CentOS 6/7、Debian 8) 只能使用 iptables
    新版系統(RHEL8+、Debian 12、Ubuntu 22.04) 改用 nftables(或 Firewalld)
    容器(Docker、Kubernetes) 仍會看到 iptables,但內核可能已經用 nftables

    結論:iptables 不會立即消失,但已被視為 legacy 技術。


    🏁 八、建議你該用哪一個?(快速決策)

    • 一般 Linux Server → Firewalld
    • 企業、客製需求、效能要求 → nftables
    • 舊環境 → iptables(無法避免)

    若你只有一台伺服器:用 Firewalld 最省時。 若你要做安全審計、SIEM、政治大學資安研究:用 nftables 才是王道。


    📚 延伸閱讀(自動挑選 A)

    🔗 分享這篇 LINE Facebook X

    沒有留言:

    字級