🔥 什么是 firewalld?
? firewalld
是一個動態管理防火墻的守護進程(daemon),它提供了一個 D-Bus 接口來管理系統或用戶的防火墻規則。與傳統的靜態 iptables
不同,firewalld
支持:
- 區域(Zones)
- 服務(Services)
- 端口/協議控制
- NAT、IP偽裝、端口轉發等高級功能
????????適用于 RHEL/CentOS/Fedora/SUSE/openSUSE 等主流 Linux 發行版。
🧱 firewalld 的核心概念
1. 區域(Zone)
? firewalld
將網絡連接劃分為不同的“區域”,每個區域有不同的信任級別和默認策略。
Zone Name | Description |
| 最低信任度,丟棄所有未明確允許的包 |
| 拒絕所有入站連接(帶 ICMP 拒絕響應) |
| 公共網絡,默認配置,用于外部環境 |
| 外部網絡,啟用了 NAT |
| 隔離區,只允許特定服務訪問 |
| 工作網絡,信任部分內部設備 |
| 家庭網絡,信任較多內部設備 |
| 內部網絡,高度信任 |
| 最高信任,允許所有流量 |
????????可以通過命令查看當前默認區域:
sudo firewall-cmd --get-default-zone
2. 服務(Service)
????????預定義的服務是一組端口和協議的組合,例如:
ssh
http
https
ftp
samba
- 自定義服務(可添加)
????????查看所有支持的服務:
sudo firewall-cmd --get-services
3. 端口(Port)
????????可以按協議(TCP/UDP)開放指定端口,例如:
sudo firewall-cmd --add-port=8080/tcp
4. 運行時 vs 永久設置
- 運行時設置:重啟后失效。
- 永久設置:加上
--permanent
參數保存,重啟后依然生效。
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload
🛠? 常用命令詳解
一,基本命令
? firewalld
是一個動態管理 Linux 系統防火墻的工具,它使用 firewall-cmd
命令進行配置。以下是一些常用的 firewall-cmd
命令及其說明:
1. 啟動 firewalld
服務
sudo systemctl start firewalld
2. 停止 firewalld
服務
sudo systemctl stop firewalld
3. 重啟 firewalld
服務
sudo systemctl restart firewalld
4. 啟用 firewalld
服務開機自啟動
sudo systemctl enable firewalld
5. 禁用 firewalld
服務開機自啟動
sudo systemctl disable firewalld
6. 查看 firewalld
服務狀態
sudo systemctl status firewalld
二,基本防火墻操作
1. 查看防火墻狀態
sudo firewall-cmd --state
2. 查看當前區域信息
sudo firewall-cmd --get-active-zones
3. 查看接口所屬區域
sudo firewall-cmd --get-zone-of-interface=interface_name
示例:查看 eth0
接口所屬區域
sudo firewall-cmd --get-zone-of-interface=eth0
4. 列出所有區域
sudo firewall-cmd --list-all-zones
三,配置防火墻規則
1. 添加服務到區域(立即生效,不持久化)
sudo firewall-cmd --zone=zone_name --add-service=service_name
示例:在 public
區域添加 HTTP 服務
sudo firewall-cmd --zone=public --add-service=http
2. 添加服務到區域(持久化)
sudo firewall-cmd --zone=zone_name --add-service=service_name --permanent
示例:在 public
區域持久化添加 HTTP 服務
sudo firewall-cmd --zone=public --add-service=http --permanent
3. 移除服務(立即生效,不持久化)
sudo firewall-cmd --zone=zone_name --remove-service=service_name
示例:在 public
區域移除 HTTP 服務
sudo firewall-cmd --zone=public --remove-service=http
4. 移除服務(持久化)
sudo firewall-cmd --zone=zone_name --remove-service=service_name --permanent
示例:在 public
區域持久化移除 HTTP 服務
sudo firewall-cmd --zone=public --remove-service=http --permanent
四,端口管理
1. 添加端口(立即生效,不持久化)
sudo firewall-cmd --zone=zone_name --add-port=port/protocol
示例:在 public
區域添加 TCP 端口 8080
sudo firewall-cmd --zone=public --add-port=8080/tcp
2. 添加端口(持久化)
sudo firewall-cmd --zone=zone_name --add-port=port/protocol --permanent
示例:在 public
區域持久化添加 TCP 端口 8080
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
3. 移除端口(立即生效,不持久化)
sudo firewall-cmd --zone=zone_name --remove-port=port/protocol
示例:在 public
區域移除 TCP 端口 8080
sudo firewall-cmd --zone=public --remove-port=8080/tcp
4. 移除端口(持久化)
sudo firewall-cmd --zone=zone_name --remove-port=port/protocol --permanent
示例:在 public
區域持久化移除 TCP 端口 8080
sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
五,其他常用命令
1. 重新加載防火墻配置
sudo firewall-cmd --reload
2. 列出當前區域所有規則
sudo firewall-cmd --zone=zone_name --list-all
示例:列出 public
區域的所有規則
sudo firewall-cmd --zone=public --list-all
3. 查看所有可用服務
sudo firewall-cmd --get-services
4. 添加 IP 地址到信任區域
sudo firewall-cmd --zone=trusted --add-source=ip_address
示例:信任 192.168.1.100
IP 地址
sudo firewall-cmd --zone=trusted --add-source=192.168.1.100
5. 移除 IP 地址從信任區域
sudo firewall-cmd --zone=trusted --remove-source=ip_address
示例:移除 192.168.1.100
IP 地址
sudo firewall-cmd --zone=trusted --remove-source=192.168.1.100
這些命令可以幫助您管理和配置 firewalld
防火墻,確保系統的網絡安全。
六 查看狀態和基本信息
# 查看是否運行
sudo firewall-cmd --state# 查看當前默認區域
sudo firewall-cmd --get-default-zone# 查看當前活動的區域及其接口
sudo firewall-cmd --get-active-zones# 查看當前區域的所有規則
sudo firewall-cmd --list-all
? 添加規則(服務 / 端口 / 協議)
開放服務
# 添加 SSH 服務(臨時)
sudo firewall-cmd --add-service=ssh# 永久添加 HTTP 服務
sudo firewall-cmd --permanent --add-service=http# 重新加載配置
sudo firewall-cmd --reload
開放端口
# 開放單個端口
sudo firewall-cmd --permanent --add-port=8080/tcp# 開放端口范圍
sudo firewall-cmd --permanent --add-port=5000-6000/udp# 刪除端口
sudo firewall-cmd --permanent --remove-port=8080/tcp
🔄 修改默認區域
# 設置默認區域為 public
sudo firewall-cmd --set-default-zone=public
🌐 IP 地址過濾(黑白名單)
白名單(允許某個 IP)
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" accept'
黑名單(拒絕某個 IP)
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.200" reject'
📦 NAT 和端口轉發
啟用 masquerade(IP偽裝):
sudo firewall-cmd --permanent --add-masquerade
將 80 端口轉發到 8080:
sudo firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toport=8080
將 80 端口轉發到另一臺主機:
sudo firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toaddr=192.168.1.100
📄 富規則(Rich Rules)
富規則提供了更細粒度的控制方式,例如:
# 允許來自 192.168.1.0/24 的 SSH 訪問
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="22" accept'# 拒絕特定 MAC 地址訪問
sudo firewall-cmd --permanent --add-rich-rule='rule source mac="aa:bb:cc:dd:ee:ff" drop'
📋 日志記錄
開啟日志記錄:
sudo firewall-cmd --permanent --add-log-denied=all
選項包括:
all
:所有被拒絕的數據包unicast
:單播數據包broadcast
:廣播數據包multicast
:多播數據包
📂 配置文件路徑
- 服務定義文件:
/usr/lib/firewalld/services/
- 區域定義文件:
/usr/lib/firewalld/zones/
- 用戶自定義配置:
/etc/firewalld/
🧪 示例:配置 Web 服務器防火墻
# 啟用 firewalld
sudo systemctl enable firewalld --now# 設置默認區域為 public
sudo firewall-cmd --set-default-zone=public# 永久開放 HTTP 和 HTTPS 服務
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https# 開放 8080 端口用于測試應用
sudo firewall-cmd --permanent --add-port=8080/tcp# 添加 IP 白名單
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" accept'# 限制 SSH 到特定 IP
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept'# 拒絕其他所有 SSH 請求
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" service name="ssh" reject'# 重載配置
sudo firewall-cmd --reload
📚 總結:firewalld 優勢
優點 | 描述 |
動態更新 | 不需要重啟服務即可修改規則 |
區域劃分 | 更靈活地適應不同網絡環境 |
易于維護 | 提供了服務抽象,簡化配置 |
支持 Rich Rules | 細粒度控制訪問權限 |
圖形界面支持 | GNOME/KDE 下有圖形化工具 |