Linux系统之firewall-cmd详解

firewall-cmd 是 firewalld 服务的命令行客户端,用于在 Linux 系统中动态管理防火墙规则。Firewalld 提供了支持网络区域的动态管理防火墙,而不需要重新加载整个防火墙规则集。

基本选项

通用选项

  • -h, --help:显示帮助信息
  • -V, --version:显示版本信息
  • -q, --quiet:不显示状态消息

状态选项

  • --state:检查 firewalld 是否运行
  • --reload:重新加载防火墙规则(保留状态信息)
  • --complete-reload:完全重新加载防火墙(会中断活动连接)
  • --runtime-to-permanent:将当前运行时配置保存为永久配置
  • --check-config:检查永久配置的有效性

区域(Zone)管理

基本区域操作

  • --get-default-zone:显示默认区域
  • --set-default-zone=<zone>:设置默认区域
  • --get-active-zones:显示活动区域及其绑定的接口和源
  • --get-zones:列出所有预定义区域
  • --info-zone=<zone>:显示指定区域的详细信息
  • --list-all-zones:列出所有区域的配置

区域配置

  • --zone=<zone> --list-all:列出指定区域的所有配置
  • --zone=<zone> --list-services:列出区域允许的服务
  • --zone=<zone> --add-service=<service>:允许服务通过防火墙
  • --zone=<zone> --remove-service=<service>:移除允许的服务
  • --zone=<zone> --list-ports:列出允许的端口
  • --zone=<zone> --add-port=<port>/<protocol>:允许端口通过防火墙
  • --zone=<zone> --remove-port=<port>/<protocol>:移除允许的端口

服务(Service)管理

  • --get-services:列出所有预定义服务
  • --info-service=<service>:显示服务的详细信息
  • --add-service=<service>:添加服务(运行时配置)
  • --remove-service=<service>:移除服务

端口管理

  • --add-port=<port>/<protocol>:临时开放端口(如 --add-port=80/tcp
  • --remove-port=<port>/<protocol>:关闭端口
  • --list-ports:列出已开放的端口

接口绑定

  • --zone=<zone> --add-interface=<interface>:将接口绑定到区域
  • --zone=<zone> --change-interface=<interface>:更改接口绑定的区域
  • --zone=<zone> --remove-interface=<interface>:移除接口绑定
  • --zone=<zone> --list-interfaces:列出区域绑定的接口

源地址绑定

  • --zone=<zone> --add-source=<source>:将源地址绑定到区域
  • --zone=<zone> --change-source=<source>:更改源地址绑定的区域
  • --zone=<zone> --remove-source=<source>:移除源地址绑定
  • --zone=<zone> --list-sources:列出区域绑定的源地址

永久配置

  • --permanent:使更改永久生效(需重启或重载防火墙)

    示例:

    firewall-cmd --permanent --add-service=http  # 永久允许HTTP服务
    firewall-cmd --reload  # 重载防火墙使永久更改生效
    

高级功能

直接规则(Direct)

  • --direct --add-rule {ipv4|ipv6|eb} <table> <chain> <priority> <args>:添加直接规则
  • --direct --remove-rule {ipv4|ipv6|eb} <table> <chain> <priority> <args>:移除直接规则

锁定模式(Lockdown)

  • --lockdown-on:启用锁定模式(限制配置更改)
  • --lockdown-off:禁用锁定模式
  • --query-lockdown:查询锁定模式状态

紧急模式(Panic)

  • --panic-on:启用紧急模式(阻止所有网络流量)
  • --panic-off:禁用紧急模式
  • --query-panic:查询紧急模式状态

示例

1. 状态管理

1.1 检查防火墙状态
firewall-cmd --state
  • 作用:检查 firewalld 守护进程是否运行。
  • 输出running(运行中)、not running(未运行)、RUNNING_BUT_FAILED(运行但启动失败)。
  • 示例
    $ firewall-cmd --state
    running
    
1.2 重新加载防火墙规则
firewall-cmd --reload
  • 作用:重新加载防火墙规则,保留当前连接状态。
  • 注意:仅影响运行时配置,不会终止活动连接。
1.3 完全重载防火墙
firewall-cmd --complete-reload
  • 作用:完全重载防火墙,包括内核模块(可能终止活动连接)。
  • 注意:仅在严重问题时使用。

2. 区域管理

2.1 获取默认区域
firewall-cmd --get-default-zone
  • 作用:查看默认区域(新接口/源的绑定区域)。
2.2 设置默认区域
firewall-cmd --set-default-zone=<zone>
  • 作用:将默认区域设置为 <zone>(如 public)。
  • 示例
    $ firewall-cmd --set-default-zone=public
    
2.3 列出活动区域
firewall-cmd --get-active-zones
  • 作用:列出当前绑定到接口或源的活动区域。
  • 输出格式
    zone: public
      interfaces: eth0
      sources: 192.168.1.0/24
    
2.4 查询接口所属区域
firewall-cmd --get-zone-of-interface=<interface>
  • 作用:查看接口 <interface> 所属的区域。
  • 示例
    $ firewall-cmd --get-zone-of-interface=eth0
    public
    
2.5 查询源地址所属区域
firewall-cmd --get-zone-of-source=<source>
  • 作用:查看源地址 <source>(IP/MAC/ipset)所属的区域。
  • 示例
    $ firewall-cmd --get-zone-of-source=192.168.1.100
    home
    

3. 服务管理

3.1 添加服务到区域
firewall-cmd --zone=<zone> --add-service=<service> [--timeout=<timeval>]
  • 作用:将服务 <service>(如 http)添加到指定区域。
  • 参数
    • --timeout:设置临时规则(单位:秒、分钟、小时,如 30m)。
  • 示例
    $ firewall-cmd --zone=public --add-service=http
    
3.2 移除服务
firewall-cmd --zone=<zone> --remove-service=<service>
  • 作用:从区域中移除服务。
  • 示例
    $ firewall-cmd --zone=public --remove-service=http
    
3.3 查询服务是否启用
firewall-cmd --zone=<zone> --query-service=<service>
  • 作用:检查服务是否在区域中启用。
  • 返回值0(启用)、1(未启用)。

4. 端口管理

4.1 添加端口到区域
firewall-cmd --zone=<zone> --add-port=<portid[-portid]/protocol> [--timeout=<timeval>]
  • 作用:开放指定端口和协议(如 80/tcp)。
  • 示例
    $ firewall-cmd --zone=public --add-port=80/tcp
    
4.2 移除端口
firewall-cmd --zone=<zone> --remove-port=<portid[-portid]/protocol>
  • 作用:关闭指定端口。
  • 示例
    $ firewall-cmd --zone=public --remove-port=80/tcp
    
4.3 列出区域端口
firewall-cmd --zone=<zone> --list-ports
  • 作用:查看区域中开放的端口列表。

5. 协议管理

5.1 添加协议到区域
firewall-cmd --zone=<zone> --add-protocol=<protocol> [--timeout=<timeval>]
  • 作用:允许指定协议(如 icmp)。
  • 示例
    $ firewall-cmd --zone=public --add-protocol=icmp
    
5.2 移除协议
firewall-cmd --zone=<zone> --remove-protocol=<protocol>
  • 作用:禁止指定协议。

6. ICMP 类型管理

6.1 阻止 ICMP 类型
firewall-cmd --zone=<zone> --add-icmp-block=<icmptype>
  • 作用:阻止特定 ICMP 类型(如 echo-request)。
  • 示例
    $ firewall-cmd --zone=public --add-icmp-block=echo-request
    
6.2 移除 ICMP 阻止
firewall-cmd --zone=<zone> --remove-icmp-block=<icmptype>

7. 转发端口

7.1 添加端口转发
firewall-cmd --zone=<zone> --add-forward-port=port=<port>:proto=<protocol>[:toport=<port>][:toaddr=<address>]
  • 作用:配置端口转发(NAT)。
  • 示例
    $ firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.100
    
7.2 移除端口转发
firewall-cmd --zone=<zone> --remove-forward-port=port=<port>:proto=<protocol>[:toport=<port>][:toaddr=<address>]

8. 富规则(Rich Rules)

8.1 添加富规则
firewall-cmd --zone=<zone> --add-rich-rule='<rule>' [--timeout=<timeval>]
  • 作用:添加复杂规则(如基于源地址、端口、服务的组合规则)。
  • 示例
    $ firewall-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-cmd --zone=<zone> --remove-rich-rule='<rule>'

9. 永久配置

9.1 保存运行时配置
firewall-cmd --runtime-to-permanent
  • 作用:将当前运行时配置保存为永久配置(需配合 --reload 生效)。
9.2 永久配置选项
  • 所有命令添加 --permanent 参数即可持久化配置,例如:
    $ firewall-cmd --permanent --add-service=http
    

10. 高级功能

10.1 IPset 管理
  • 创建 IPset
    firewall-cmd --permanent --new-ipset=<ipset> --type=<type>
    
  • 添加条目
    firewall-cmd --permanent --ipset=<ipset> --add-entry=<entry>
    
10.2 直接规则(Direct Rules)
firewall-cmd --direct --passthrough <ipv4|ipv6|eb> <args>
  • 作用:直接调用 iptables/ip6tables 命令。
  • 示例
    $ firewall-cmd --direct --passthrough ipv4 '-A INPUT -p tcp --dport 22 -j ACCEPT'
    

11. 锁定模式(Lockdown)

11.1 启用锁定
firewall-cmd --lockdown-on
  • 作用:限制只有白名单内的程序可修改防火墙规则。
11.2 添加白名单命令
firewall-cmd --permanent --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 服务
# 运行时开放
firewall-cmd --add-service=http
# 永久开放
firewall-cmd --permanent --add-service=http
# 重载配置
firewall-cmd --reload
13.2 配置端口转发
firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.100
firewall-cmd --reload
13.3 限制源地址访问
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept'
firewall-cmd --reload
要安装Linux firewall-cmd,您需要执行以下步骤: 1. 确保您的系统是基于CentOS/RHEL 7,并且已启用防火墙服务firewalld。 2. 使用以下命令安装防火墙管理工具firewall-cmd: ``` yum install firewalld ``` 3. 安装完成后,您可以使用firewall-cmd命令行客户端来管理防火墙规则。 例如,您可以使用以下命令查看防火墙状态: ``` firewall-cmd --state ``` 需要注意的是,firewalld是Red Hat Enterprise Linux 7中用于管理主机级别防火墙的默认方法。它通过firewalld.service systemd服务来启动,并使用iptables、ip6tables和ebtables命令来管理Linux内核netfilter子系统。同时,为了防止意外启动*tables.service服务并擦除任何正在运行的防火墙配置,可以使用systemctl mask命令对其进行屏蔽。 引用123 #### 引用[.reference_title] - *1* *2* [Linux 防火墙firewall-cmd配置命令大全](https://blog.csdn.net/weixin_45626288/article/details/120343979)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] - *3* [Linux系统- firewall-cmd的使用详解](https://blog.csdn.net/qq_35550345/article/details/102388546)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值