firewall-offline-cmd 是 firewalld 的一个命令行工具,专门设计用于在没有运行 firewalld 服务的环境中配置防火墙规则。这意味着它可以在系统启动之前或当 firew
firewall-offline-cmd
是 firewalld 的一个命令行工具,专门设计用于在没有运行 firewalld 服务的环境中配置防火墙规则。这意味着它可以在系统启动之前或当 firewalld 服务不可用时进行防火墙规则的设置。这对于需要预先配置防火墙策略的场景特别有用,例如在系统安装过程中或者网络配置阶段。
主要用途
- 离线配置:在无法运行 firewalld 的情况下(如系统未启动或处于救援模式),使用
firewall-offline-cmd
进行防火墙规则配置。 - 初始化设置:在首次部署系统时,通过该命令预设防火墙规则,确保系统在网络中上线时就具备所需的安全策略。
基本语法
firewall-offline-cmd [选项...]
选项
1. 状态管理
选项 | 描述 | 示例 | 注意事项 |
---|
--enabled | 启用防火墙。如果未指定 --disabled ,默认启用。 | firewall-offline-cmd --enabled | 与 --disabled 互斥。 |
--disabled | 禁用防火墙(禁用 firewalld 服务)。 | firewall-offline-cmd --disabled | 会永久禁用 firewalld 。 |
--check-config | 检查永久配置(默认和系统配置)的 xml 有效性及语义。 | firewall-offline-cmd --check-config | 需结合 --system-config 使用。 |
2. 区域管理
选项 | 描述 | 示例 | 注意事项 |
---|
--get-default-zone | 获取默认区域。 | firewall-offline-cmd --get-default-zone | 默认区域影响未指定区域的连接和接口。 |
--set-default-zone=zone | 设置默认区域。 | firewall-offline-cmd --set-default-zone=public | 修改后会影响所有使用默认区域的连接和接口。 |
--get-zones | 列出所有预定义区域。 | firewall-offline-cmd --get-zones | 输出以空格分隔的区域列表。 |
--info-zone=zone | 显示指定区域的详细信息(接口、服务、端口等)。 | firewall-offline-cmd --info-zone=public | 输出格式包含接口、源地址、服务等信息。 |
3. 服务管理
选项 | 描述 | 示例 | 注意事项 |
---|
[--zone=zone] --add-service=service | 在指定区域添加服务。 | firewall-offline-cmd --zone=public --add-service=http | 服务需为 firewalld 提供的预定义服务。 |
[--zone=zone] --remove-service-from-zone=service | 从指定区域移除服务。 | firewall-offline-cmd --zone=public --remove-service-from-zone=http | 服务需已存在。 |
[--zone=zone] --list-services | 列出指定区域的所有服务。 | firewall-offline-cmd --zone=public --list-services | 输出以空格分隔的服务列表。 |
4. 端口管理
选项 | 描述 | 示例 | 注意事项 |
---|
[--zone=zone] --add-port=portid[-portid]/protocol | 在指定区域添加端口和协议。 | firewall-offline-cmd --zone=public --add-port=8080/tcp | 协议支持 tcp 、udp 、sctp 、dccp 。 |
[--zone=zone] --remove-port=portid[-portid]/protocol | 从指定区域移除端口和协议。 | firewall-offline-cmd --zone=public --remove-port=8080/tcp | 端口需已存在。 |
[--zone=zone] --list-ports | 列出指定区域的所有端口。 | firewall-offline-cmd --zone=public --list-ports | 输出格式为 端口/协议 。 |
5. icmp 阻断
选项 | 描述 | 示例 | 注意事项 |
---|
[--zone=zone] --add-icmp-block=icmptype | 在指定区域添加 icmp 阻断类型。 | firewall-offline-cmd --zone=public --add-icmp-block=echo-request | 需使用 firewall-cmd --get-icmptypes 查询支持的 icmp 类型。 |
[--zone=zone] --remove-icmp-block=icmptype | 从指定区域移除 icmp 阻断类型。 | firewall-offline-cmd --zone=public --remove-icmp-block=echo-request | icmp 类型需已存在。 |
6. ip 转发与 nat
选项 | 描述 | 示例 | 注意事项 |
---|
[--zone=zone] --add-forward-port=port=...:proto=...:toaddr=... | 添加 ipv4 端口转发规则。 | 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 端口转发规则。 | firewall-offline-cmd --zone=public --remove-forward-port=port=80:proto=tcp:toaddr=192.168.1.100 | 需完全匹配规则。 |
7. 接口绑定
选项 | 描述 | 示例 | 注意事项 |
---|
[--zone=zone] --add-interface=interface | 将接口绑定到指定区域。 | firewall-offline-cmd --zone=public --add-interface=eth0 | 接口需存在且未绑定其他区域。 |
[--zone=zone] --change-interface=interface | 修改接口所属区域。 | firewall-offline-cmd --zone=public --change-interface=eth0 | 若接口未绑定,行为等同于 --add-interface 。 |
8. 源地址绑定
选项 | 描述 | 示例 | 注意事项 |
---|
`[–zone=zone] --add-source=source[/mask] | mac | ipset:ipset` | 将源地址绑定到指定区域。 |
9. ipset 管理
选项 | 描述 | 示例 | 注意事项 |
---|
--new-ipset=ipset --type=type | 创建新的永久 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 | 设置拒绝日志记录方式。 | firewall-offline-cmd --set-log-denied=all | value 可为 all 、unicast 、broadcast 、multicast 、off 。 |
11. 锁定功能
选项 | 描述 | 示例 | 注意事项 |
---|
--lockdown-on | 启用锁定模式(限制非白名单应用修改防火墙)。 | firewall-offline-cmd --lockdown-on | 启用后需通过白名单管理权限。 |
--add-lockdown-whitelist-command=command | 添加命令到白名单。 | firewall-offline-cmd --add-lockdown-whitelist-command=/usr/bin/firewall-cmd | 命令需绝对路径,结尾 * 表示通配。 |
12. 其他高级功能
选项 | 描述 | 示例 | 注意事项 |
---|
--direct --add-rule ipv4 nat postrouting 0 -s 192.168.1.0/24 -j masquerade | 添加直接的 iptables 规则。 | firewall-offline-cmd --direct --add-rule ipv4 nat postrouting 0 -s 192.168.1.0/24 -j masquerade | 需熟悉 iptables 语法,优先使用富语言。 |
--new-zone-from-file=filename | 从文件导入自定义区域配置。 | firewall-offline-cmd --new-zone-from-file=/etc/firewalld/zones/custom.xml | 文件需符合 firewalld 区域配置格式。 |
示例
1. 状态管理
1.1 启用/禁用防火墙
firewall-offline-cmd --enabled
firewall-offline-cmd --disabled
- 作用:启用或禁用防火墙(通过禁用/启用
firewalld
服务)。 - 示例:
# 启用防火墙
$ firewall-offline-cmd --enabled
# 禁用防火墙
$ firewall-offline-cmd --disabled
1.2 检查配置有效性
firewall-offline-cmd --check-config
- 作用:检查永久配置(默认和系统配置)的 xml 有效性和语义正确性。
- 用途:在修改配置文件后验证是否符合规范。
2. 区域管理
2.1 获取默认区域
firewall-offline-cmd --get-default-zone
作用:查看默认区域(新接口/源的绑定区域)。
2.2 设置默认区域
firewall-offline-cmd --set-default-zone=<zone>
- 作用:将默认区域设置为
<zone>
(如 public
)。 - 示例:
$ firewall-offline-cmd --set-default-zone=public
2.3 列出活动区域
firewall-offline-cmd --list-all-zones
- 作用:列出所有区域及其配置(接口、源、服务、端口等)。
2.4 查询接口所属区域
firewall-offline-cmd --get-zone-of-interface=<interface>
- 作用:查看接口
<interface>
所属的区域。 - 示例:
$ firewall-offline-cmd --get-zone-of-interface=eth0public
2.5 查询源地址所属区域
firewall-offline-cmd --get-zone-of-source=<source>
- 作用:查看源地址
<source>
(ip/mac/ipset)所属的区域。 - 示例:
$ firewall-offline-cmd --get-zone-of-source=192.168.1.100home
3. 服务管理
3.1 添加服务到区域
firewall-offline-cmd [--zone=<zone>] --add-service=<service>
- 作用:将服务
<service>
(如 http
)添加到指定区域(默认区域或通过 --zone
指定)。 - 示例:
$ firewall-offline-cmd --zone=public --add-service=http
3.2 移除服务
firewall-offline-cmd [--zone=<zone>] --remove-service-from-zone=<service>
$ firewall-offline-cmd --zone=public --remove-service-from-zone=http
3.3 查询服务是否启用
firewall-offline-cmd [--zone=<zone>] --query-service=<service>
- 作用:检查服务是否在区域中启用。
- 返回值:
0
(启用)、1
(未启用)。
4. 端口管理
4.1 添加端口到区域
firewall-offline-cmd [--zone=<zone>] --add-port=<portid[-portid]/protocol>
- 作用:开放指定端口和协议(如
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 列出区域端口
firewall-offline-cmd [--zone=<zone>] --list-ports
作用:查看区域中开放的端口列表。
5. 协议管理
5.1 添加协议到区域
firewall-offline-cmd [--zone=<zone>] --add-protocol=<protocol>
$ firewall-offline-cmd --zone=public --add-protocol=icmp
5.2 移除协议
firewall-offline-cmd [--zone=<zone>] --remove-protocol=<protocol>
作用:禁止指定协议。
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. 转发端口
7.1 添加端口转发
firewall-offline-cmd [--zone=<zone>] --add-forward-port=port=<port>:proto=<protocol>[:toport=<port>][:toaddr=<address>]
$ firewall-offline-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.100
7.2 移除端口转发
firewall-offline-cmd [--zone=<zone>] --remove-forward-port=port=<port>:proto=<protocol>[:toport=<port>][:toaddr=<address>]
8. 富规则(rich rules)
8.1 添加富规则
firewall-offline-cmd [--zone=<zone>] --add-rich-rule='<rule>'
- 作用:添加复杂规则(如基于源地址、端口、服务的组合规则)。
- 示例:
$ 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 移除富规则
firewall-offline-cmd [--zone=<zone>] --remove-rich-rule='<rule>'
9. 永久配置
9.1 保存运行时配置
firewall-offline-cmd
默认操作的是 永久配置,无需额外保存。
9.2 永久配置选项
所有命令默认操作永久配置(如 --add-service
直接修改永久配置文件)。
10. 高级功能
10.1 ipset 管理 创建 ipset:
firewall-offline-cmd --new-ipset=<ipset> --type=<type>
添加条目:
firewall-offline-cmd --ipset=<ipset> --add-entry=<entry>
10.2 直接规则(direct rules)
firewall-offline-cmd --direct --passthrough <ipv4|ipv6|eb> <args>
- 作用:直接调用
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
作用:限制只有白名单内的程序可修改防火墙规则。
11.2 添加白名单命令
firewall-offline-cmd --add-lockdown-whitelist-command=<command>
12. 常见错误代码
代码 | 含义 |
---|
0 | 成功 |
11 | 已启用(already_enabled) |
12 | 未启用(not_enabled) |
252 | 服务未运行(not_running) |
253 | 权限不足(not_authorized) |
254 | 未知错误(unknown_error) |
13. 示例汇总
13.1 开放 http 服务
# 添加 http 服务到默认区域$ firewall-offline-cmd --add-service=http
13.2 配置端口转发
# 配置 ipv4 端口转发$ firewall-offline-cmd --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.100
13.3 限制源地址访问
# 添加富规则限制源地址访问 ssh$ firewall-offline-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept'
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论