当前位置:首页 > 技术 > 正文内容

firewalld 命令行工具 firewall-cmd 详解与实战

访客 技术 2026年5月27日 4

firewall-cmd 是 firewalld 服务的命令行管理界面,用于配置 Linux 系统的动态防火墙规则。自 CentOS 7 起,firewalld 取代了传统的 iptables,成为系统默认的防火墙管理方案。该工具将运行时配置与持久化配置分离,支持在不中断现有连接的情况下动态调整规则。

基础状态管理

查看防火墙守护进程是否运行:

firewall-cmd --state

重新加载规则配置(保留当前连接状态):

firewall-cmd --reload

将当前运行时配置写入磁盘,使其成为永久配置:

firewall-cmd --runtime-to-permanent

完全重置防火墙(会中断所有活动连接,仅在严重故障时使用):

firewall-cmd --complete-reload

区域(Zone)配置

firewalld 使用区域来定义不同网络环境的安全策略。查看系统预定义的区域列表:

firewall-cmd --get-zones

查看当前默认区域:

firewall-cmd --get-default-zone

切换默认区域为 internal:

firewall-cmd --set-default-zone=internal

查看网卡 eth0 所属区域:

firewall-cmd --get-zone-of-interface=eth0

将网卡绑定到指定区域:

firewall-cmd --zone=dmz --change-interface=eth0

服务管理

列出系统预定义的所有服务:

firewall-cmd --get-services

查看当前区域已启用的服务:

firewall-cmd --list-services

查看特定区域的服务配置:

firewall-cmd --zone=work --list-services

临时允许 http 服务(仅运行时生效):

firewall-cmd --add-service=http

永久允许 https 服务(需配合 --permanent):

firewall-cmd --permanent --add-service=https
firewall-cmd --reload

验证服务是否已启用:

firewall-cmd --query-service=mysql

移除指定服务:

firewall-cmd --permanent --remove-service=ftp
firewall-cmd --reload

端口管理

查看当前区域开放的端口:

firewall-cmd --list-ports

临时开放单个 TCP 端口:

firewall-cmd --add-port=3306/tcp

永久开放端口范围(5000-5010):

firewall-cmd --permanent --add-port=5000-5010/tcp
firewall-cmd --reload

支持多种协议类型:

firewall-cmd --permanent --add-port=5060/udp
firewall-cmd --permanent --add-port=8080/sctp

移除端口规则:

firewall-cmd --permanent --remove-port=8080/tcp
firewall-cmd --reload

查询端口状态:

firewall-cmd --query-port=22/tcp

富规则(Rich Rules)配置

富规则提供了更灵活的流量控制机制,支持基于源地址、目的地址、端口、协议等条件的复杂匹配。

查看当前区域的富规则:

firewall-cmd --list-rich-rules

拒绝特定 IPv4 地址的所有访问:

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.50" reject'
firewall-cmd --reload

限制特定网段仅能访问 22 端口:

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.100.0/24" port protocol="tcp" port="22" accept'

删除指定的富规则(建议复制粘贴避免语法错误):

firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="10.0.0.50" reject'
firewall-cmd --reload

添加带超时时间的临时规则(300 秒后自动失效):

firewall-cmd --add-rich-rule='rule family="ipv4" source address="172.16.0.5" accept' --timeout=300s

端口转发与地址伪装

启用 IPv4 地址伪装(NAT):

firewall-cmd --permanent --add-masquerade
firewall-cmd --reload

配置端口转发(将本机 8080 端口转发到内网 192.168.1.10 的 80 端口):

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

查看转发规则:

firewall-cmd --list-forward-ports

IP 集合(IPset)管理

创建 IP 地址集合用于批量管理:

firewall-cmd --permanent --new-ipset=blacklist --type=hash:ip
firewall-cmd --reload

向集合添加单个 IP:

firewall-cmd --permanent --ipset=blacklist --add-entry=192.168.1.100

从文件批量导入 IP 地址:

firewall-cmd --permanent --ipset=blacklist --add-entries-from-file=/tmp/badips.txt

查看集合内容:

firewall-cmd --ipset=blacklist --get-entries

应急模式与锁定机制

启用应急模式(丢弃所有数据包,类似断网):

firewall-cmd --panic-on

关闭应急模式:

firewall-cmd --panic-off

查询应急状态:

firewall-cmd --query-panic

启用配置锁定(防止未授权修改):

firewall-cmd --lockdown-on

添加命令到锁定白名单:

firewall-cmd --permanent --add-lockdown-whitelist-command="/usr/bin/systemctl restart firewalld"

常用配置示例

配置 Web 服务器常用规则:

# 允许 HTTP 和 HTTPS 服务
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https

# 开放自定义管理端口 10000/tcp
firewall-cmd --permanent --add-port=10000/tcp

# 限制 SSH 仅允许管理网段访问
firewall-cmd --permanent --remove-service=ssh
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.10.0/24" service name="ssh" accept'

# 应用配置
firewall-cmd --reload

配置数据库服务器安全策略:

# 创建 IP 白名单集合
firewall-cmd --permanent --new-ipset=db_clients --type=hash:ip
firewall-cmd --permanent --ipset=db_clients --add-entry=10.0.20.5
firewall-cmd --permanent --ipset=db_clients --add-entry=10.0.20.6

# 仅允许白名单 IP 访问 3306 端口
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source ipset="db_clients" port protocol="tcp" port="3306" accept'

# 明确拒绝其他来源的数据库访问
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" port protocol="tcp" port="3306" reject'

firewall-cmd --reload

配置文件路径

firewalld 的配置文件位于以下目录:

  • /usr/lib/firewalld/ — 系统默认配置(不建议修改)
  • /etc/firewalld/ — 用户自定义配置

查看特定区域的配置文件位置:

firewall-cmd --permanent --path-zone=public

查看服务的配置文件位置:

firewall-cmd --permanent --path-service=ssh

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。