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

🐧 Linux 防火牆完整解析:iptables 與 nftables 架構、規則、差異與最佳實務

    🐧 Linux 防火牆完整解析:iptables 與 nftables 架構、規則、差異與最佳實務

    Linux 防火牆是系統管理與雲端架構的核心技能之一,而現今主流架構依然分成兩派:

    • iptables:傳統防火牆框架,沿用多年
    • nftables:新一代 Netfilter 前端,現代 Linux 標準

    本篇文章將以深入但易懂的方式,完整解析兩種架構的差異、封包流程、常見用途、實作方式,以及如何設計最佳防火牆規則。


    🧩 一、Linux 防火牆的基礎:Netfilter 與封包流程

    無論是 iptables 或 nftables,其核心都依賴 Linux Kernel 的 Netfilter 子系統。Netfilter 提供:

    • 封包過濾(Filtering)
    • NAT(Network Address Translation)
    • Port Forwarding
    • Connection Tracking(狀態追蹤)
    • Mangle(特殊封包處理)
    • Raw(繞過 conntrack)

    🔄 Linux 封包流程(示意圖)

    PREROUTING → INPUT → 應用程式
                 ↓
    OUTPUT → POSTROUTING → 網路介面
    FORWARD(需轉發時)
    

    🧱 二、iptables 架構解析(傳統系統)

    iptables 是 Linux 早期的防火牆工具,規則分散於多個 Table/Chain。

    iptables Table 與功能

    Table功能
    filter一般封包過濾(主要使用)
    natNAT、Port Forward
    mangle特殊封包修改
    raw不進行 conntrack

    常見 Chain

    • INPUT
    • OUTPUT
    • FORWARD
    • PREROUTING
    • POSTROUTING

    🔥 三、nftables 架構解析(新世代,取代 iptables)

    nftables 自 Linux Kernel 3.13 起加入,是設計給未來的高效防火牆工具。

    🌟 nftables 優勢

    • 單一工具取代 iptables/ip6tables/ebtables/arptables
    • Set/Map 提升效率
    • IPv4/IPv6 可透過 inet table 同時管理
    • 規則更新不中斷連線
    • 效能更佳

    nftables 基本結構

    • Table
    • Chain
    • Rule
    • Set / Map
    table inet filter {
        chain input {
            type filter hook input priority 0;
            tcp dport 22 accept
            ip saddr { 1.1.1.1, 8.8.8.8 } drop
        }
    }
    

    ⚔️ 四、iptables vs nftables 差異總表

    特色iptablesnftables
    工具架構多組工具單一 nft
    效能
    IPv4/IPv6分開整合 inet table
    大量規則處理較弱Set/Map 高效
    未來趨勢被取代主力

    🛠 五、iptables 實務指令

    查看規則

    iptables -L -n -v

    允許 SSH

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

    阻擋 IP

    iptables -A INPUT -s 1.2.3.4 -j DROP

    NAT 與 Port Forward

    iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.1.100:80
    iptables -t nat -A POSTROUTING -j MASQUERADE
    

    🛠 六、nftables 實務指令

    1️⃣ 建立 Table / Chain

    nft add table inet filter
    nft add chain inet filter input { type filter hook input priority 0; }
    

    2️⃣ 允許 SSH

    nft add rule inet filter input tcp dport 22 accept

    3️⃣ 阻擋 IP

    nft add rule inet filter input ip saddr 1.2.3.4 drop

    4️⃣ NAT

    nft add table ip nat
    nft add chain ip nat postrouting { type nat hook postrouting priority 100; }
    nft add rule ip nat postrouting oif "eth0" masquerade
    

    🔐 七、最佳實務(Production 版)

    • 預設 DROP → 逐步開放必要服務
    • 允許內網來源,如 192.168.0.0/16
    • 允許 loopback
    • 允許已建立連線:ct state established,related
    • 限速防止 SSH 爆破:limit rate 3/minute
    • 集中紀錄:journald / rsyslog / Loki
    • 建議以 nftables 作為 2025 之後的標準

    📁 八、完整 nftables 防火牆範本(可直接使用)

    table inet filter {
        chain input {
            type filter hook input priority 0;
    
            policy drop;
    
            iif lo accept;
            ct state established,related accept;
    
            tcp dport 22 accept;
    
            ip protocol icmp accept;
    
            drop
        }
    }
    

    🔗 延伸閱讀


    💬 留下你的觀點,讓討論更精彩!

    你的經驗、疑問或想法都能讓本文更完整,歡迎在下方留言交流。

    🔗 分享這篇 LINE Facebook X

    沒有留言:

    字級