RHEL7默认防火墙管理命令详解

admin
RHEL7默认使用firewalld作为防火墙管理工具,其核心命令为firewall-cmd,结合systemctl实现服务控制,常用操作包括:通过systemctl start/stop/enable/disable firewalld管理服务启停与开机自启;firewall-cmd --state查看运行状态;--add-port=端口号/协议(如--add-port=80/tcp)开放端口,--permanent参数实现永久生效,需配合--reload重新加载;--get-zones查看可用区域,--set-zone=public设置默认区域,firewalld支持动态配置,无需重启服务即可更新规则,适用于服务动态增删场景,相比iptables更灵活高效。

在RHEL7(Red Hat Enterprise Linux 7)及后续版本中,默认的防火墙管理工具从传统的iptables升级为firewalldfirewalld采用动态管理模式,支持运行时规则更新和区域(Zone)策略管理,相比iptables更灵活且易于使用,本文将详细介绍RHEL7中通过firewalld管理防火墙的核心命令及常见操作场景。

RHEL7默认防火墙工具:firewalld简介

firewalld是RHEL7及更高版本的默认防火墙解决方案,其核心特点包括:

  • 动态管理:无需重启防火墙服务即可应用规则变更,减少服务中断风险。
  • 区域策略:将网络接口划分为不同区域(如publictrusteddmz等),每个区域可独立配置信任级别和规则。
  • 服务化支持:通过预定义的服务(如httphttpsssh)简化端口管理,避免直接操作端口。

firewalld核心管理命令

防火墙服务状态管理

firewalld本身是一个系统服务,可通过systemctl命令控制其运行状态:

RHEL7默认防火墙管理命令详解

  • 启动防火墙

    systemctl start firewalld
  • 停止防火墙(临时关闭,不推荐生产环境使用):

    systemctl stop firewalld
  • 重启防火墙(重载规则并重启服务):

    systemctl restart firewalld
  • 设置开机自启

    systemctl enable firewalld
  • 禁止开机自启

    systemctl disable firewalld
  • 查看防火墙状态

    systemctl status firewalld  # 查看服务运行状态
    firewall-cmd --state         # 查看防火墙是否运行(返回running/running)

查看防火墙规则与区域信息

(1)查看当前活动区域

firewall-cmd --get-active-zones

示例输出(默认区域为public):

public
  interfaces: enp0s3

(2)查看指定区域的规则

firewall-cmd --zone=public --list-all  # 查看public区域所有规则
```  包括:默认策略(`target`)、服务(`services`)、端口(`ports`)、端口转发(`forward-ports`)等。  
#### (3)查看所有预定义服务  
```bash
firewall-cmd --get-services

会列出所有支持的服务(如sshhttphttpsftp等),这些服务对应预定义的端口和协议。

服务管理(基于预定义服务)

通过服务名称管理端口,避免手动记忆端口号(如http默认对应80端口,https对应443端口):

  • 添加服务(临时生效,重启后失效):

    firewall-cmd --zone=public --add-service=http
  • 永久添加服务(需重载防火墙生效):

    firewall-cmd --zone=public --add-service=https --permanent
    firewall-cmd --reload  # 重载配置使永久规则生效
  • 移除服务

    firewall-cmd --zone=public --remove-service=ftp
  • 查看区域已添加的服务

    firewall-cmd --zone=public --list-services

端口管理(直接操作端口)

若服务未预定义,可通过直接开放端口实现:

  • 开放TCP端口(临时生效):

    firewall-cmd --zone=public --add-port=8080/tcp
  • 永久开放UDP端口

    firewall-cmd --zone=public --add-port=53/udp --permanent
    firewall-cmd --reload
  • 移除端口

    firewall-cmd --zone=public --remove-port=8080/tcp
  • 查看区域已开放的端口

    firewall-cmd --zone=public --list-ports

区域管理

firewalld通过区域隔离不同网络环境的信任级别,常用区域包括:

  • public:公共区域(默认),仅允许必要入站连接(如ssh)。
  • trusted:信任区域,允许所有连接。
  • dmz:非军事区,仅允许特定入站连接(如http)。
  • block:拒绝所有入站连接,出站允许。
  • drop:丢弃所有数据包(无日志)。

(1)查看所有区域及其默认策略

firewall-cmd --get-zones

(2)将网络接口绑定到指定区域

firewall-cmd --zone=dmz --add-interface=enp0s3  # 将接口enp0s3加入dmz区域

(3)设置默认区域

firewall-cmd --set-default-zone=trusted  # 设置默认区域为trusted

高级规则配置

(1)端口转发

将本机80端口转发到另一台服务器的8080端口:

firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.100 --permanent
firewall-cmd --reload

(2)富规则(Rich Rules)

通过更灵活的语法实现复杂规则(如限制IP访问):

# 拒绝192.168.1.200访问本机的ssh服务
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.200" service name="ssh" reject' --permanent
firewall-cmd --reload

注意事项

  1. 永久生效与临时生效
    • --permanent参数的修改需执行firewall-cmd --reload才能立即生效,且重启后保留。
文章版权声明:除非注明,否则均为xmsdn原创文章,转载或复制请以超链接形式并注明出处。

取消
微信二维码
微信二维码
支付宝二维码