RHEL 7防火墙配置与使用完全指南

LEAF
RHEL 7默认采用firewalld作为防火墙管理工具,支持动态规则配置,替代了传统iptables,核心功能包括区域管理(如public、trusted等,决定网络信任级别)、服务与端口控制(通过firewall-cmd命令添加/删除http、https等服务或自定义端口),以及持久化设置(--permanent参数确保重启后规则生效),常用命令涵盖启动/停止服务(systemctl start/stop firewalld)、查看状态(firewall-cmd --state)、重新加载规则(firewall-cmd --reload)等,其动态管理特性可实时调整策略,兼顾安全性与灵活性,适用于企业级服务器环境的安全防护。

RHEL 7防火墙基础概述

在RHEL 7及后续版本中,默认的防火墙管理工具从传统的iptables升级为firewalldfirewalld采用动态管理方式,支持运行时规则修改和区域(Zone)策略隔离,能够更灵活地应对复杂的网络环境,它通过netfilter内核框架实现包过滤,同时提供了丰富的命令行和图形化配置接口,适合企业级服务器和桌面环境的网络安全管理。

firewalld核心概念

在配置前,需先理解firewalld的几个核心概念:

区域(Zone)

区域是firewalld的网络策略集合,根据网络信任程度划分,每个区域定义了一组允许/拒绝的服务、端口和规则,RHEL 7预定义了以下区域:

RHEL 7防火墙配置与使用完全指南

  • public:默认区域,适用于公共网络(如互联网),仅允许必要的服务(如SSH)。
  • trusted:完全信任区域,允许所有流量。
  • block:拒绝所有 incoming 流量, outgoing 流量允许。
  • drop:丢弃所有流量(无任何响应)。
  • dmz:隔离区域,用于部署对外服务(如Web服务器),限制内部访问。
  • home/internal:家庭/内部网络区域,信任程度较高,允许常见服务(如Samba)。
  • work:工作区域,适用于办公环境,限制部分服务。

服务(Service)

服务是预定义的端口和协议组合(如http对应80端口/TCP,ssh对应22端口/TCP),用户可直接通过服务名称管理规则,无需记忆端口。

富规则(Rich Rule)

富规则是更精细的规则,支持基于源地址、目标端口、协议、动作(允许/拒绝)等条件的高级过滤,可实现复杂场景的访问控制。

运行时与永久配置

firewalld的配置分为“运行时”(runtime)和“永久”(permanent)两种模式:

  • 运行时配置:立即生效,但重启后失效,适合临时测试。
  • 永久配置:需重载或重启firewalld生效,适合生产环境。

firewalld安装与启动

检查是否已安装

rpm -q firewalld

若未安装,使用yum安装:

yum install firewalld -y

启动并启用firewalld

# 启动服务
systemctl start firewalld
# 设置开机自启
systemctl enable firewalld
# 查看服务状态
systemctl status firewalld

关闭或禁用firewalld(不推荐生产环境)

# 停止服务
systemctl stop firewalld
# 禁用开机自启
systemctl disable firewalld

防火墙区域管理

查看当前区域

# 查看默认区域
firewall-cmd --get-default-zone
# 查看活跃区域(已绑定接口的区域)
firewall-cmd --get-active-zones

修改默认区域

# 设置默认区域为public(常用)
firewall-cmd --set-default-zone=public
# 验证
firewall-cmd --get-default-zone

将接口绑定到指定区域

若服务器有多个网卡(如eth0连接外网,eth1连接内网),可将其绑定到不同区域:

# 将eth0绑定到public区域(永久生效)
firewall-cmd --zone=public --add-interface=eth0 --permanent
# 将eth1绑定到internal区域
firewall-cmd --zone=internal --add-interface=eth1 --permanent
# 重载配置使永久生效
firewall-cmd --reload
# 验证接口绑定
firewall-cmd --get-active-zones

服务管理

查看预定义服务

# 列出所有预定义服务
firewall-cmd --get-services
# 查看public区域当前允许的服务
firewall-cmd --zone=public --list-services

添加/移除服务

# 临时添加http服务(立即生效,重启失效)
firewall-cmd --zone=public --add-service=http
# 永久添加https服务(需重载生效)
firewall-cmd --zone=public --add-service=https --permanent
# 重载配置(永久规则生效)
firewall-cmd --reload
# 移除服务(示例:永久移除ssh)
firewall-cmd --zone=public --remove-service=ssh --permanent
firewall-cmd --reload
# 验证服务列表
firewall-cmd --zone=public --list-services

端口与协议管理

若需开放未预定义的端口(如自定义应用的8080端口),可直接操作端口:

添加端口

# 临时开放TCP 8080端口
firewall-cmd --zone=public --add-port=8080/tcp
# 永久开放UDP 53端口(DNS)
firewall-cmd --zone=public --add-port=53/udp --permanent
firewall-cmd --reload

查看端口

# 查看public区域开放的端口
firewall-cmd --zone=public --list-ports

移除端口

# 永久移除8080端口
firewall-cmd --zone=public --remove-port=8080/tcp --permanent
firewall-cmd --reload

富规则配置

富规则可实现更精细的控制,仅允许特定IP访问SSH服务,拒绝其他所有连接。

添加富规则

# 示例:允许192.168.1.100访问SSH,拒绝其他IP的SSH连接
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" service name="ssh" accept' --permanent
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" service name="ssh" reject' --permanent
# 重载生效
firewall-cmd --reload

查看富规则

firewall-cmd --zone=public --list-rich-rules

移除富规则

需指定完整规则内容:

firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source address="192.168.1.100" service name="ssh" accept' --permanent
firewall-cmd --reload

防火墙高级配置

端口转发

将本机的80端口流量转发到8080端口(需启用IP转发):

# 启用IP转发
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
# 添加端口转发(永久)
firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080 --permanent
firewall-cmd --reload

端口伪装(MASQUERADE,类似SNAT)

适用于内网服务器通过RHEL主机上网的场景:

# 启用伪装(永久)
firewall-cmd --zone=public --add-masquerade --permanent
firewall-cmd --reload

日志记录

记录被拒绝的连接(便于排查问题):

# 设置拒绝流量日志级别(all:记录所有拒绝;unicast:记录单播拒绝)
firewall-cmd --set-log-denied=all
# 查看firewalld日志
journalctl -u firewalld -f

常用操作与排查

查看防火墙状态

# 查看运行时配置(默认区域)
firewall-cmd --list-all
# 查看所有区域配置
firewall-cmd --list-all-zones

重载与重启

# 重载配置(永久规则生效,不中断连接)
firewall-cmd --reload
# 完全重启(中断连接,慎用)
firewall-cmd --complete-reload

常见问题排查

  • 规则不生效:检查是否添加--permanent,是否执行firewall-cmd --reload
  • 连接被拒绝:使用firewall-cmd --list-all检查区域是否开放对应服务/端口,或通过journalctl -u firewalld查看日志。
  • 接口未绑定区域:确认接口是否已激活(ip a),且正确绑定区域(firewall-cmd --get-active-zones)。

firewalld作为RHEL 7的默认防火墙工具,通过区域、服务、富规则等概念实现了灵活的网络安全管理,其动态配置特性(运行时/永久分离)和丰富的功能(端口转发、NAT、日志记录)使其适合企业级应用,掌握firewalld的配置方法,不仅能有效提升服务器安全性,还能满足复杂的网络访问控制需求,在实际使用中,建议先在测试环境验证规则,再部署到生产环境,避免因配置错误导致服务中断。

文章版权声明:除非注明,否则均为XMSDN - MSDN原版系统镜像 | 纯净ISO系统下载原创文章,转载或复制请以超链接形式并注明出处。

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