🐧 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 | 一般封包過濾(主要使用) |
| nat | NAT、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 差異總表
| 特色 | iptables | nftables |
|---|---|---|
| 工具架構 | 多組工具 | 單一 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
}
}
🔗 延伸閱讀
- 🐧 Linux 系列文章
- 🧱 網路診斷與安全
- 🖥 系統管理精選
💬 留下你的觀點,讓討論更精彩!
你的經驗、疑問或想法都能讓本文更完整,歡迎在下方留言交流。
沒有留言: