firewalld 詳解
firewalld 是 Linux 系統中一個動態防火墻管理工具,取代了傳統的 iptables
,提供更靈活、動態的規則配置,支持運行時修改且無需重載服務。以下是其核心概念、常用操作及示例指南:
一、核心概念
-
區域(Zone)
定義網絡環境的信任級別,不同區域綁定不同規則。常用預置區域:public
:默認區域,適用于不信任的公共網絡。home
:家庭網絡,允許部分服務(如SSH、打印機)。internal
:內部網絡,信任度高于home
。trusted
:允許所有流量。
-
服務(Service)
預定義規則集合(如http
、ssh
),包含端口和協議,簡化配置:sudo firewall-cmd --list-services # 查看允許的服務
-
端口與協議
支持手動開放端口(TCP/UDP):sudo firewall-cmd --add-port=8080/tcp # 開放TCP 8080端口
-
富規則(Rich Rules)
復雜規則配置,支持IP、端口范圍、限速等:sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="3306" protocol="tcp" accept'
-
直接規則(Direct Rules)
直接調用底層iptables/ip6tables
命令(高級使用):sudo firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -p tcp --dport 9090 -j ACCEPT
二、常用命令
功能 | 命令示例 |
---|---|
查看狀態 | sudo firewall-cmd --state |
默認區域 | sudo firewall-cmd --get-default-zone |
修改默認區域 | sudo firewall-cmd --set-default-zone=internal |
列出所有區域 | sudo firewall-cmd --list-all-zones |
添加服務 | sudo firewall-cmd --zone=public --add-service=http |
開放端口 | sudo firewall-cmd --zone=public --add-port=443/tcp |
重載配置 | sudo firewall-cmd --reload |
永久生效 | 添加 --permanent 參數,隨后重載:sudo firewall-cmd --permanent --add-port=8080/tcp |
三、配置示例
-
允許 HTTP/HTTPS 流量
sudo firewall-cmd --zone=public --add-service=http --permanent sudo firewall-cmd --zone=public --add-service=https --permanent sudo firewall-cmd --reload
-
限制 SSH 訪問(僅允許 192.168.1.0/24 網段)
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept' --permanent sudo firewall-cmd --reload
-
轉發端口(將80端口轉發到內部8080)
sudo firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080 --permanent sudo firewall-cmd --reload
四、注意事項
-
防止鎖定
測試規則前確保允許當前SSH連接,或設置寬限期:sudo firewall-cmd --panic-on # 緊急模式(阻斷所有流量) sudo firewall-cmd --panic-off # 恢復
-
備份配置
備份/etc/firewalld/
目錄下的配置文件(如zones/
和services/
)。 -
日志與監控
查看防火墻日志(通常位于/var/log/messages
或journalctl -u firewalld
)。
五、總結
firewalld 通過動態管理、區域劃分和預定義服務簡化了防火墻配置,適合需要靈活調整規則的場景(如服務器、多網絡環境)。掌握核心概念與常用命令后,可高效保障系統安全,避免網絡攻擊。
👉 提示: 使用 man firewall-cmd
或 firewall-cmd --help
獲取更多參數細節。
以下是對 firewalld 常用命令的詳細解析,涵蓋基礎配置、服務管理、端口操作及高級規則的定義。通過這些命令可以高效管理 Linux 系統的防火墻策略。
firewalld 常用命令
一、基礎狀態與配置
1. 查看防火墻狀態
firewall-cmd --state
- 功能:檢查
firewalld
是否正在運行。 - 輸出:
running
(運行中)或not running
(未運行)。
2. 查看默認區域
firewall-cmd --get-default-zone
- 功能:顯示當前默認的防火墻區域(如
public
、home
、internal
)。 - 典型場景:確認新網絡接口自動綁定的區域。
3. 修改默認區域
firewall-cmd --set-default-zone=internal
- 功能:將默認區域更改為
internal
(或其他預定義區域)。 - 注意:修改會立即生效,但不影響已綁定的接口。
4. 列出所有區域詳情
firewall-cmd --list-all-zones
- 功能:顯示所有區域(
zones
)的詳細配置(服務、端口、來源IP等)。 - 簡化版:使用
--zone=public --list-all
查看特定區域。
二、服務與端口管理
1. 允許服務通過防火墻
firewall-cmd --zone=public --add-service=http
- 功能:在
public
區域允許http
服務(預定義端口80/tcp)。 - 永久生效:添加
--permanent
參數,并執行firewall-cmd --reload
。
2. 移除已允許的服務
firewall-cmd --zone=public --remove-service=ssh
- 功能:在
public
區域移除對ssh
服務的放行。 - 緊急場景:若誤封了SSH,通過物理控制臺或KVM恢復。
3. 開放自定義端口
firewall-cmd --zone=public --add-port=8080/tcp
- 功能:手動開放TCP端口
8080
。 - 多端口:支持范圍
3000-4000/udp
。
4. 查看已開放的端口
firewall-cmd --zone=public --list-ports
三、IP與網絡規則
1. 允許特定IP訪問
firewall-cmd --zone=public --add-source=192.168.1.10
- 功能:允許來自
192.168.1.10
的所有流量通過public
區域。 - 網段支持:使用
192.168.1.0/24
表示整個子網。
2. 拒絕某IP的流量
firewall-cmd --zone=public --add-source=10.0.0.5 --set-target=DROP
- 功能:將來自
10.0.0.5
的流量全部丟棄。
四、高級規則(Rich Rules)
適用于復雜場景,支持端口、IP、協議等多條件組合。
1. 限速規則(如每秒允許2個連接)
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4"source address="192.168.1.0/24"port port="22" protocol="tcp"limit value="2/s" accept'
2. 拒絕某個IP訪問特定端口
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4"source address="203.0.113.50"port port="80" protocol="tcp"reject'
五、端口轉發與NAT
1. 將外部80端口轉發到內部8080
firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080
- 要求:啟用IP偽裝(
masquerade
)以實現NAT:
firewall-cmd --zone=public --add-masquerade
六、臨時與永久規則
1. 臨時規則(測試用)
- 若不添加
--permanent
,規則將在重啟后失效。 - 示例:臨時允許MySQL端口:
firewall-cmd --zone=public --add-port=3306/tcp
2. 永久規則(需重載生效)
firewall-cmd --permanent --zone=public --add-port=3306/tcp
firewall-cmd --reload
- 注意:直接修改配置文件(
/etc/firewalld/
)后也需重載。
七、應急操作
1. 緊急阻斷所有流量
firewall-cmd --panic-on
- 恢復命令:
firewall-cmd --panic-off
八、命令總結表
類別 | 命令示例 |
---|---|
服務管理 | firewall-cmd --add-service=ftp --permanent |
端口管理 | firewall-cmd --remove-port=9090/udp |
IP規則 | firewall-cmd --add-source=172.16.0.0/16 --zone=trusted |
富規則 | firewall-cmd --add-rich-rule='rule family="ipv6" drop' --permanent |
重載配置 | firewall-cmd --reload |
九、注意事項
- 操作順序:建議先測試臨時規則,確認無誤后再保存為永久規則。
- 防鎖定:修改遠程服務(如SSH)規則時,確保留有恢復途徑。
- 日志監控:通過
journalctl -u firewalld
跟蹤防火墻行為。
掌握這些命令后,可靈活應對服務器部署、網絡隔離、端口轉發等典型場景。