firewall-offline-cmd 是 firewalld 的一個命令行工具,專門設(shè)計用于在沒有運行 firewalld 服務(wù)的環(huán)境中配置防火墻規(guī)則,這篇文章主要介紹了Linux系統(tǒng)之firewall-offline-cmd詳解,需要的朋友可以參考下
firewall-offline-cmd
是 firewalld 的一個命令行工具,專門設(shè)計用于在沒有運行 firewalld 服務(wù)的環(huán)境中配置防火墻規(guī)則。這意味著它可以在系統(tǒng)啟動之前或當(dāng) firewalld 服務(wù)不可用時進(jìn)行防火墻規(guī)則的設(shè)置。這對于需要預(yù)先配置防火墻策略的場景特別有用,例如在系統(tǒng)安裝過程中或者網(wǎng)絡(luò)配置階段。
主要用途
- 離線配置:在無法運行 firewalld 的情況下(如系統(tǒng)未啟動或處于救援模式),使用
firewall-offline-cmd
進(jìn)行防火墻規(guī)則配置。 - 初始化設(shè)置:在首次部署系統(tǒng)時,通過該命令預(yù)設(shè)防火墻規(guī)則,確保系統(tǒng)在網(wǎng)絡(luò)中上線時就具備所需的安全策略。
基本語法
firewall-offline-cmd [選項...]
選項
1. 狀態(tài)管理
選項 | 描述 | 示例 | 注意事項 |
---|
--enabled | 啟用防火墻。如果未指定 --disabled ,默認(rèn)啟用。 | firewall-offline-cmd --enabled | 與 --disabled 互斥。 |
--disabled | 禁用防火墻(禁用 firewalld 服務(wù))。 | firewall-offline-cmd --disabled | 會永久禁用 firewalld 。 |
--check-config | 檢查永久配置(默認(rèn)和系統(tǒng)配置)的 XML 有效性及語義。 | firewall-offline-cmd --check-config | 需結(jié)合 --system-config 使用。 |
2. 區(qū)域管理
選項 | 描述 | 示例 | 注意事項 |
---|
--get-default-zone | 獲取默認(rèn)區(qū)域。 | firewall-offline-cmd --get-default-zone | 默認(rèn)區(qū)域影響未指定區(qū)域的連接和接口。 |
--set-default-zone=zone | 設(shè)置默認(rèn)區(qū)域。 | firewall-offline-cmd --set-default-zone=public | 修改后會影響所有使用默認(rèn)區(qū)域的連接和接口。 |
--get-zones | 列出所有預(yù)定義區(qū)域。 | firewall-offline-cmd --get-zones | 輸出以空格分隔的區(qū)域列表。 |
--info-zone=zone | 顯示指定區(qū)域的詳細(xì)信息(接口、服務(wù)、端口等)。 | firewall-offline-cmd --info-zone=public | 輸出格式包含接口、源地址、服務(wù)等信息。 |
3. 服務(wù)管理
選項 | 描述 | 示例 | 注意事項 |
---|
[--zone=zone] --add-service=service | 在指定區(qū)域添加服務(wù)。 | firewall-offline-cmd --zone=public --add-service=http | 服務(wù)需為 firewalld 提供的預(yù)定義服務(wù)。 |
[--zone=zone] --remove-service-from-zone=service | 從指定區(qū)域移除服務(wù)。 | firewall-offline-cmd --zone=public --remove-service-from-zone=http | 服務(wù)需已存在。 |
[--zone=zone] --list-services | 列出指定區(qū)域的所有服務(wù)。 | firewall-offline-cmd --zone=public --list-services | 輸出以空格分隔的服務(wù)列表。 |
4. 端口管理
選項 | 描述 | 示例 | 注意事項 |
---|
[--zone=zone] --add-port=portid[-portid]/protocol | 在指定區(qū)域添加端口和協(xié)議。 | firewall-offline-cmd --zone=public --add-port=8080/tcp | 協(xié)議支持 tcp 、udp 、sctp 、dccp 。 |
[--zone=zone] --remove-port=portid[-portid]/protocol | 從指定區(qū)域移除端口和協(xié)議。 | firewall-offline-cmd --zone=public --remove-port=8080/tcp | 端口需已存在。 |
[--zone=zone] --list-ports | 列出指定區(qū)域的所有端口。 | firewall-offline-cmd --zone=public --list-ports | 輸出格式為 端口/協(xié)議 。 |
5. ICMP 阻斷
選項 | 描述 | 示例 | 注意事項 |
---|
[--zone=zone] --add-icmp-block=icmptype | 在指定區(qū)域添加 ICMP 阻斷類型。 | firewall-offline-cmd --zone=public --add-icmp-block=echo-request | 需使用 firewall-cmd --get-icmptypes 查詢支持的 ICMP 類型。 |
[--zone=zone] --remove-icmp-block=icmptype | 從指定區(qū)域移除 ICMP 阻斷類型。 | firewall-offline-cmd --zone=public --remove-icmp-block=echo-request | ICMP 類型需已存在。 |
6. IP 轉(zhuǎn)發(fā)與 NAT
選項 | 描述 | 示例 | 注意事項 |
---|
[--zone=zone] --add-forward-port=port=...:proto=...:toaddr=... | 添加 IPv4 端口轉(zhuǎn)發(fā)規(guī)則。 | firewall-offline-cmd --zone=public --add-forward-port=port=80:proto=tcp:toaddr=192.168.1.100 | 僅支持 IPv4,IPv6 需使用富語言。 |
[--zone=zone] --remove-forward-port=port=...:proto=...:toaddr=... | 移除 IPv4 端口轉(zhuǎn)發(fā)規(guī)則。 | firewall-offline-cmd --zone=public --remove-forward-port=port=80:proto=tcp:toaddr=192.168.1.100 | 需完全匹配規(guī)則。 |
7. 接口綁定
選項 | 描述 | 示例 | 注意事項 |
---|
[--zone=zone] --add-interface=interface | 將接口綁定到指定區(qū)域。 | firewall-offline-cmd --zone=public --add-interface=eth0 | 接口需存在且未綁定其他區(qū)域。 |
[--zone=zone] --change-interface=interface | 修改接口所屬區(qū)域。 | firewall-offline-cmd --zone=public --change-interface=eth0 | 若接口未綁定,行為等同于 --add-interface 。 |
8. 源地址綁定
選項 | 描述 | 示例 | 注意事項 |
---|
`[–zone=zone] --add-source=source[/mask] | MAC | ipset:ipset` | 將源地址綁定到指定區(qū)域。 |
9. IPSet 管理
選項 | 描述 | 示例 | 注意事項 |
---|
--new-ipset=ipset --type=type | 創(chuàng)建新的永久 IPSet。 | firewall-offline-cmd --new-ipset=myset --type=hash:ip | 需指定 IPSet 類型(如 hash:ip )。 |
--ipset=ipset --add-entry=entry | 向 IPSet 添加條目。 | firewall-offline-cmd --ipset=myset --add-entry=192.168.1.100 | 條目需符合 IPSet 類型定義。 |
10. 日志記錄
選項 | 描述 | 示例 | 注意事項 |
---|
--set-log-denied=value | 設(shè)置拒絕日志記錄方式。 | firewall-offline-cmd --set-log-denied=all | value 可為 all 、unicast 、broadcast 、multicast 、off 。 |
11. 鎖定功能
選項 | 描述 | 示例 | 注意事項 |
---|
--lockdown-on | 啟用鎖定模式(限制非白名單應(yīng)用修改防火墻)。 | firewall-offline-cmd --lockdown-on | 啟用后需通過白名單管理權(quán)限。 |
--add-lockdown-whitelist-command=command | 添加命令到白名單。 | firewall-offline-cmd --add-lockdown-whitelist-command=/usr/bin/firewall-cmd | 命令需絕對路徑,結(jié)尾 * 表示通配。 |
12. 其他高級功能
選項 | 描述 | 示例 | 注意事項 |
---|
--direct --add-rule ipv4 nat POSTROUTING 0 -s 192.168.1.0/24 -j MASQUERADE | 添加直接的 iptables 規(guī)則。 | firewall-offline-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -s 192.168.1.0/24 -j MASQUERADE | 需熟悉 iptables 語法,優(yōu)先使用富語言。 |
--new-zone-from-file=filename | 從文件導(dǎo)入自定義區(qū)域配置。 | firewall-offline-cmd --new-zone-from-file=/etc/firewalld/zones/custom.xml | 文件需符合 firewalld 區(qū)域配置格式。 |
示例
1. 狀態(tài)管理
1.1 啟用/禁用防火墻
firewall-offline-cmd --enabled
firewall-offline-cmd --disabled
- 作用:啟用或禁用防火墻(通過禁用/啟用
firewalld
服務(wù))。 - 示例:
# 啟用防火墻
$ firewall-offline-cmd --enabled
# 禁用防火墻
$ firewall-offline-cmd --disabled
1.2 檢查配置有效性
firewall-offline-cmd --check-config
- 作用:檢查永久配置(默認(rèn)和系統(tǒng)配置)的 XML 有效性和語義正確性。
- 用途:在修改配置文件后驗證是否符合規(guī)范。
2. 區(qū)域管理
2.1 獲取默認(rèn)區(qū)域
firewall-offline-cmd --get-default-zone
作用:查看默認(rèn)區(qū)域(新接口/源的綁定區(qū)域)。
2.2 設(shè)置默認(rèn)區(qū)域
firewall-offline-cmd --set-default-zone=<zone>
- 作用:將默認(rèn)區(qū)域設(shè)置為
<zone>
(如 public
)。 - 示例:
$ firewall-offline-cmd --set-default-zone=public
2.3 列出活動區(qū)域
firewall-offline-cmd --list-all-zones
- 作用:列出所有區(qū)域及其配置(接口、源、服務(wù)、端口等)。
2.4 查詢接口所屬區(qū)域
firewall-offline-cmd --get-zone-of-interface=<interface>
- 作用:查看接口
<interface>
所屬的區(qū)域。 - 示例:
$ firewall-offline-cmd --get-zone-of-interface=eth0public
2.5 查詢源地址所屬區(qū)域
firewall-offline-cmd --get-zone-of-source=<source>
- 作用:查看源地址
<source>
(IP/MAC/ipset)所屬的區(qū)域。 - 示例:
$ firewall-offline-cmd --get-zone-of-source=192.168.1.100home
3. 服務(wù)管理
3.1 添加服務(wù)到區(qū)域
firewall-offline-cmd [--zone=<zone>] --add-service=<service>
- 作用:將服務(wù)
<service>
(如 http
)添加到指定區(qū)域(默認(rèn)區(qū)域或通過 --zone
指定)。 - 示例:
$ firewall-offline-cmd --zone=public --add-service=http
3.2 移除服務(wù)
firewall-offline-cmd [--zone=<zone>] --remove-service-from-zone=<service>
$ firewall-offline-cmd --zone=public --remove-service-from-zone=http
3.3 查詢服務(wù)是否啟用
firewall-offline-cmd [--zone=<zone>] --query-service=<service>
- 作用:檢查服務(wù)是否在區(qū)域中啟用。
- 返回值:
0
(啟用)、1
(未啟用)。
4. 端口管理
4.1 添加端口到區(qū)域
firewall-offline-cmd [--zone=<zone>] --add-port=<portid[-portid]/protocol>
- 作用:開放指定端口和協(xié)議(如
80/tcp
)。 - 示例:
$ firewall-offline-cmd --zone=public --add-port=80/tcp
4.2 移除端口
firewall-offline-cmd [--zone=<zone>] --remove-port=<portid[-portid]/protocol>
$ firewall-offline-cmd --zone=public --remove-port=80/tcp
4.3 列出區(qū)域端口
firewall-offline-cmd [--zone=<zone>] --list-ports
作用:查看區(qū)域中開放的端口列表。
5. 協(xié)議管理
5.1 添加協(xié)議到區(qū)域
firewall-offline-cmd [--zone=<zone>] --add-protocol=<protocol>
- 作用:允許指定協(xié)議(如
icmp
)。 - 示例:
$ firewall-offline-cmd --zone=public --add-protocol=icmp
5.2 移除協(xié)議
firewall-offline-cmd [--zone=<zone>] --remove-protocol=<protocol>
作用:禁止指定協(xié)議。
6. ICMP 類型管理
6.1 阻止 ICMP 類型
firewall-offline-cmd [--zone=<zone>] --add-icmp-block=<icmptype>
- 作用:阻止特定 ICMP 類型(如
echo-request
)。 - 示例:
$ firewall-offline-cmd --zone=public --add-icmp-block=echo-request
6.2 移除 ICMP 阻止
firewall-offline-cmd [--zone=<zone>] --remove-icmp-block=<icmptype>
7. 轉(zhuǎn)發(fā)端口
7.1 添加端口轉(zhuǎn)發(fā)
firewall-offline-cmd [--zone=<zone>] --add-forward-port=port=<port>:proto=<protocol>[:toport=<port>][:toaddr=<address>]
- 作用:配置 IPv4 端口轉(zhuǎn)發(fā)(NAT)。
- 示例:
$ firewall-offline-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.100
7.2 移除端口轉(zhuǎn)發(fā)
firewall-offline-cmd [--zone=<zone>] --remove-forward-port=port=<port>:proto=<protocol>[:toport=<port>][:toaddr=<address>]
8. 富規(guī)則(Rich Rules)
8.1 添加富規(guī)則
firewall-offline-cmd [--zone=<zone>] --add-rich-rule='<rule>'
- 作用:添加復(fù)雜規(guī)則(如基于源地址、端口、服務(wù)的組合規(guī)則)。
- 示例:
$ firewall-offline-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="22" accept'
8.2 移除富規(guī)則
firewall-offline-cmd [--zone=<zone>] --remove-rich-rule='<rule>'
9. 永久配置
9.1 保存運行時配置
firewall-offline-cmd
默認(rèn)操作的是 永久配置,無需額外保存。
9.2 永久配置選項
所有命令默認(rèn)操作永久配置(如 --add-service
直接修改永久配置文件)。
10. 高級功能
10.1 IPset 管理 創(chuàng)建 IPset:
firewall-offline-cmd --new-ipset=<ipset> --type=<type>
添加條目:
firewall-offline-cmd --ipset=<ipset> --add-entry=<entry>
10.2 直接規(guī)則(Direct Rules)
firewall-offline-cmd --direct --passthrough <ipv4|ipv6|eb> <args>
- 作用:直接調(diào)用
iptables
/ip6tables
命令。 - 示例:
$ firewall-offline-cmd --direct --passthrough ipv4 '-A INPUT -p tcp --dport 22 -j ACCEPT'
11. 鎖定模式(Lockdown)
11.1 啟用鎖定
firewall-offline-cmd --lockdown-on
作用:限制只有白名單內(nèi)的程序可修改防火墻規(guī)則。
11.2 添加白名單命令
firewall-offline-cmd --add-lockdown-whitelist-command=<command>
12. 常見錯誤代碼
代碼 | 含義 |
---|
0 | 成功 |
11 | 已啟用(ALREADY_ENABLED) |
12 | 未啟用(NOT_ENABLED) |
252 | 服務(wù)未運行(NOT_RUNNING) |
253 | 權(quán)限不足(NOT_AUTHORIZED) |
254 | 未知錯誤(UNKNOWN_ERROR) |
13. 示例匯總
13.1 開放 HTTP 服務(wù)
# 添加 HTTP 服務(wù)到默認(rèn)區(qū)域$ firewall-offline-cmd --add-service=http
13.2 配置端口轉(zhuǎn)發(fā)
# 配置 IPv4 端口轉(zhuǎn)發(fā)$ firewall-offline-cmd --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.100
13.3 限制源地址訪問
# 添加富規(guī)則限制源地址訪問 SSH$ firewall-offline-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept'