博客 / Linux/ CentOS 7 Firewalld 防火墙配置与管理详解

CentOS 7 Firewalld 防火墙配置与管理详解

CentOS 7 Firewalld 防火墙配置与管理详解

CentOS 7 防火墙:从 iptables 到 firewalld

CentOS 7 及后续版本中,默认的防火墙管理工具已从传统的 iptables 变更为 firewalld。Firewalld 提供了动态管理防火墙规则的能力,支持运行时修改配置而无需重启服务,并引入了“区域(zone)”的概念来简化网络安全管理。官方文档可参考:Red Hat Enterprise Linux 7 Security Guide

Firewalld 服务管理

使用 systemctl 命令管理 firewalld 服务。

启动与停止服务

# 启动防火墙服务
systemctl start firewalld.service

# 停止防火墙服务
systemctl stop firewalld.service

设置开机自启

# 启用开机自启动
systemctl enable firewalld.service

# 禁用开机自启动
systemctl disable firewalld.service

Firewalld 基本状态与配置操作

查看状态与规则

# 查看防火墙运行状态
firewall-cmd --state

# 查看当前区域(默认为 public)的所有规则
firewall-cmd --list-all

重载配置

修改规则后,需要重载配置使其生效(不会中断现有连接)。

firewall-cmd --reload

端口管理

添加端口

使用 --add-port 参数添加端口。添加 --permanent 参数可使规则永久生效(重启后保留)。

# 临时添加单个 TCP 端口 9527(重启后失效)
firewall-cmd --add-port=9527/tcp

# 永久添加单个 TCP 端口 9527
firewall-cmd --permanent --add-port=9527/tcp

# 永久添加一个 TCP 端口范围(9527-10001)
firewall-cmd --permanent --add-port=9527-10001/tcp

指定区域操作

可以针对特定区域(如 public)进行操作。

# 在 public 区域永久添加 TCP 端口 8010
firewall-cmd --zone=public --permanent --add-port=8010/tcp

# 在 public 区域永久删除 TCP 端口 8010
firewall-cmd --zone=public --permanent --remove-port=8010/tcp

# 查询 public 区域是否开放了 TCP 端口 8010
firewall-cmd --zone=public --query-port=8010/tcp

查看端口监听状态

使用 ss 命令可以验证端口是否已在系统层面监听。

ss -tlnp | grep :80

服务管理

Firewalld 预定义了常见服务(如 http、https),直接添加服务比手动添加端口更方便。

为 Web 服务器开放端口

以下命令为 public 区域永久添加 HTTP (80) 和 HTTPS (443) 服务,并重载配置。

firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload

重要说明与最佳实践

  • 永久规则:带 --permanent 参数的规则会写入配置文件(/etc/firewalld/),但不会立即生效,需要执行 firewall-cmd --reload 或重启 firewalld 服务。
  • 运行时规则:不带 --permanent 的参数会立即生效,但重启服务后会丢失。测试时建议先添加运行时规则,验证无误后再添加为永久规则。
  • 区域概念:Firewalld 通过区域管理不同信任级别的网络接口。如果不指定 --zone,默认对当前活动的默认区域(通常是 public)进行操作。使用 firewall-cmd --get-default-zone 查看默认区域。
  • 配置备份:在进行重大修改前,建议备份配置文件:sudo cp -r /etc/firewalld/ /etc/firewalld.backup

发表评论

您的邮箱不会公开。必填项已用 * 标注。