🔐 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。
🛡 八、企業級最佳實務(重點)
- 統一工具:不要混用 iptables + nft + Firewalld。
- 版本控管:使用
firewall-cmd --permanent或nft -f納入 Git。 - 分層策略:Host Firewall(Firewalld/nft) + Network Firewall(FortiGate/Palo Alto)。
- 搭配 systemd:確保防火牆於 boot early 啟動。
- 阻擋無來源的 INPUT:採預設 DROP。
- 允許 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 套用後不起作用
- 系統升級後防火牆框架被切換
歡迎留言你的系統版本、指令輸出與拓樸,我會協助分析並整理成補充篇更新到本文。
🔗 延伸閱讀
- 🛡 Linux 安全強化:SELinux / AppArmor / Auditd / Fail2Ban 完整指南
- 🔐 Firewalld / iptables / nftables 整合範例(舊版補充)
- 📊 Linux 監控工具:top / htop / glances / nmon / dstat 完整解析
- 🗄️ Linux Logrotate 進階指南:Log 輪轉、壓縮、清理與自動化
- 🧱 Linux NFS 完整指南:NFSv3 / v4 / Kerberos / 性能調校
— WWFandy・Linux Firewall Notes
沒有留言: