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

🔐 Linux Firewalld / iptables / nftables:三大防火牆整合與最佳實務完整指南

    🔐 Linux Firewalld / iptables / nftables:三大防火牆整合與最佳實務完整指南

    Linux 的防火牆技術從最早期的 iptables,演進到使用 nftables 作為統一架構, 再到現代系統普遍使用的 Firewalld 作為高階管理工具。 這三者常讓人搞混:「到底誰是下一代?誰取代誰?是否能同時使用?」

    本指南將系統性解構三大防火牆的差異、演進關係、設定方法與企業級最佳實務。 文章包含指令示例、架構圖、排錯方式與建議部署方式,可直接作為規劃防火牆策略的參考文件。


    📌 一、總覽:三大防火牆的定位差異

    項目 iptables nftables Firewalld
    類型 傳統防火牆框架 新一代防火牆框架 管理工具(介面)
    後端技術 iptables nftables 可使用 iptables 或 nftables(新系統預設 nft)
    使用指令 iptables / iptables-save nft firewall-cmd / firewall-config
    動態修改 不支援(會重載) 支援 支援
    複雜度 低(Zone + Service)

    核心重點:Firewalld ≠ iptables,也 ≠ nftables。
    Firewalld 是「控制台」,底層仍是 iptables 或 nftables。


    📚 二、三者的演進關係(簡史)

    iptables(傳統框架)
           │
           │  ← 相容層(iptables-nft)
           ▼
    nftables(下一代框架)
           │
           └─ Firewalld(高階管理層)
    
    • RHEL / Rocky / CentOS Stream 8 之後:Firewalld 預設使用 nft。
    • Ubuntu 20.04 起逐步切換,但仍留相容層。
    • iptables 仍能用,但已屬 legacy。

    🧪 三、查看目前系統使用哪一種防火牆框架

    1. Firewalld 是否使用 nft?

    firewall-cmd --info-backend

    2. 查看 nftables 是否在運作

    nft list ruleset

    3. 查看是否使用 iptables-nft 相容層

    iptables -V
    iptables v1.8.x (nf_tables)

    4. 若看到 legacy,表示還在用舊架構

    iptables -V
    iptables v1.8.x (legacy)

    🔥 四、Firewalld:Zone + Service 的現代防火牆思維

    Firewalld 的核心概念是 Zone(信任級別),不再是手動新增 Chain。

    1. 查看所有 Zone

    firewall-cmd --get-zones

    2. 查看當前使用的 Zone

    firewall-cmd --get-active-zones

    3. 啟用常用服務(例如 SSH、HTTP)

    firewall-cmd --add-service=ssh --permanent
    firewall-cmd --add-service=http --permanent
    firewall-cmd --reload

    4. 開 Port

    firewall-cmd --add-port=8080/tcp --permanent
    firewall-cmd --reload

    5. 加入來源 IP 限制

    firewall-cmd --permanent --zone=public --add-rich-rule \
    'rule family="ipv4" source address="1.2.3.4" port port="22" protocol="tcp" accept'

    Firewalld 的 Rich Rule 功能極強,等同於高階的 iptables 指令。


    ⚙️ 五、iptables:傳統防火牆(仍有部分應用依賴)

    舊系統仍大量使用 iptables(例如舊版容器、Legacy 應用)。

    1. 查看規則

    iptables -L -n -v

    2. 開 Port

    iptables -A INPUT -p tcp --dport 8080 -j ACCEPT

    3. 儲存規則

    iptables-save > /etc/iptables.rules

    4. 恢復規則

    iptables-restore < /etc/iptables.rules

    ⚡ 六、nftables:統一且現代化的防火牆框架

    nftables 是未來主流,語法更簡潔、效能更好。

    1. 查看所有規則

    nft list ruleset

    2. 建立一組基本防火牆設定

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

    3. 套用

    nft -f /etc/nftables.conf

    4. 開機套用

    systemctl enable nftables

    🔁 七、避免混用:iptables + nftables 共存時的風險

    在 RHEL / Rocky / Ubuntu 新版系統中,會看到:

    • /usr/sbin/iptables 指向 nft 相容層。
    • /usr/sbin/iptables-legacy 則是完全舊框架。

    混用風險:

    • 兩者規則同步困難。
    • iptables 指令實際寫入的是 nft,不容易追蹤。
    • 某些應用(Docker、Kubernetes)可能使用不同的層。

    最佳實務:

    👉 若使用 Firewalld,就全部由 Firewalld 管理。
    👉 若手動管理,選擇 nft,不要再新增 iptables 規則。
    👉 若應用依賴 iptables(如老舊 VPN),則統一使用 iptables-legacy。


    🛡 八、企業級最佳實務(重點)

    1. 統一工具:不要混用 iptables + nft + Firewalld。
    2. 版本控管:使用 firewall-cmd --permanentnft -f 納入 Git。
    3. 分層策略:Host Firewall(Firewalld/nft) + Network Firewall(FortiGate/Palo Alto)。
    4. 搭配 systemd:確保防火牆於 boot early 啟動。
    5. 阻擋無來源的 INPUT:採預設 DROP。
    6. 允許 outbound:OUTPUT 通常允許,但要審核敏感服務。

    🩹 九、常見錯誤排查

    • Firewalld reload 斷線:使用 --add-service/port 不會中斷,避免手動修改 Zone XML。
    • nft 不生效:確認有套用 nft -f 並啟用 systemd 服務。
    • iptables 生效順序怪異:可能混用 legacy 與 nft 相容層。
    • Docker 覆蓋規則:Docker 會自動建立 iptables chain,建議在其後追加規則。

    💬 互動留言引導(防火牆實戰討論區)

    若你在 Firewalld / iptables / nftables 的佈署或排錯遇到問題,例如:

    • 規則混用不生效
    • 使用 Docker / Kubernetes 後規則怪異
    • nftables 套用後不起作用
    • 系統升級後防火牆框架被切換

    歡迎留言你的系統版本、指令輸出與拓樸,我會協助分析並整理成補充篇更新到本文。


    🔗 延伸閱讀

    — WWFandy・Linux Firewall Notes

    🔗 分享這篇 LINE Facebook X

    沒有留言:

    字級