在CentOS 7及其后续版本中,firewalld
(Dynamic Firewall Manager)已经取代了传统的iptables
服务,成为默认的防火墙管理工具,它引入了“区域”和“服务”的概念,使得防火墙规则的配置更加灵活和动态,对于系统管理员而言,熟练掌握查看firewalld
状态的方法是保障服务器安全的第一步,本文将详细介绍多种查看firewalld
状态的命令和技巧,帮助您全面了解防火墙的当前配置。
基础状态检查
最直接、最常用的方法是使用firewall-cmd
命令本身来查询防火墙的运行状态。
使用 firewall-cmd --state
这是最简洁的命令,用于快速判断firewalld
服务是否正在运行。
firewall-cmd --state
执行后,终端会返回两种可能的结果:
running
:表示firewalld
服务正在运行,防火墙处于活动状态。not running
:表示firewalld
服务未运行,防火墙当前未生效。
使用 systemctl status firewalld
systemctl
是CentOS 7+中用于管理服务的核心工具,通过它查看firewalld
的状态,可以获得比firewall-cmd --state
更丰富的信息。
systemctl status firewalld
该命令的输出信息非常详尽,主要包括以下几个关键部分:
- Loaded:显示服务单元文件是否已加载,以及是否设置为开机自启(
enabled
)或禁用(disabled
)。 - Active:明确指出服务当前的状态,如
active (running)
(正在运行)、inactive (dead)
(未运行)等。 - Main PID:显示主进程的ID。
- Tasks 和 Memory:显示服务占用的任务数量和内存资源。
- CGroup:显示控制组信息。
- 最近的日志:列出服务启动、停止或出现错误时的最新几条日志,这对于故障排查非常有用。
通过systemctl status
,您不仅能知道防火墙是否在运行,还能了解其启动配置和最近的运行情况。
深入查看防火墙规则与区域
仅仅知道防火墙是否运行是远远不够的,了解其具体的规则配置,即哪些端口是开放的,哪些服务是被允许的,才是安全管理的核心。
查看当前活动的区域
firewalld
使用“区域”来管理不同的信任级别,每个区域可以绑定到不同的网络接口,并应用一套独立的规则集。
firewall-cmd --get-active-zones
此命令会列出所有当前处于活动状态的区域,以及每个区域所关联的网络接口,输出可能如下:
public
interfaces: eth0 eth1
dmz
interfaces: eth2
这表示eth0
和eth1
网卡应用了public
区域的规则,而eth2
网卡则应用了dmz
区域的规则。
查看默认区域
如果某个网络接口没有被明确分配到任何区域,它将使用默认区域的规则。
firewall-cmd --get-default-zone
默认区域是public
。
查看指定区域的详细规则
这是最实用的命令之一,可以全面了解某个特定区域(如public
)的所有防火墙规则。
firewall-cmd --zone=public --list-all
如果省略--zone
参数,则默认显示默认区域的规则,该命令的输出结构清晰,通常包含以下信息:
项目 | 含义 |
---|---|
public | 区域名称 |
target | 区域的默认处理策略(如DEFAULT , REJECT , DROP ) |
icmp-block-inversion | 是否阻止ICMP包 |
interfaces | 绑定到该区域的网络接口 |
sources | 允许连接的源地址 |
services | 允许通过的服务列表(如ssh , dhcpv6-client , http ) |
ports | 允许通过的端口和协议列表(如8080/tcp , 53/udp ) |
protocols | 允许通过的协议(如icmp ) |
forward-ports | 端口转发规则 |
source-ports | 允许的源端口 |
icmp-blocks | 被阻止的ICMP类型 |
rich rules | 更复杂的富语言规则 |
通过这个表格化的输出,您可以一目了然地看到当前区域允许了哪些服务和端口,如果您在services
列表中看到了ssh
,就意味着SSH服务的默认端口(22)是开放的。
快速查看全局允许的服务和端口
如果您不关心区域,只想快速查看整个防火墙允许了哪些服务和端口,可以使用以下命令:
# 查看所有允许的服务 firewall-cmd --list-services # 查看所有允许的端口 firewall-cmd --list-ports
防火墙服务管理
如果检查后发现firewalld
未运行,但您需要启用它,可以通过systemctl
进行管理。
启动防火墙服务:
sudo systemctl start firewalld
设置防火墙开机自启:
sudo systemctl enable firewalld
停止防火墙服务:
sudo systemctl stop firewalld
禁止防火墙开机自启:
sudo systemctl disable firewalld
在进行任何修改后,特别是添加或移除规则后,建议使用firewall-cmd --reload
命令重新加载配置,使更改立即生效,且不会中断现有的连接。
相关问答
Q1:为什么我使用 firewall-cmd --state
显示 not running
,但我的服务器仍然可以访问某些端口(例如80端口)?
A1: 这是一个非常常见的情况。firewall-cmd --state
显示的not running
仅表示操作系统层面的firewalld
服务没有运行,您的服务器可能处于一个云环境中(如阿里云、腾讯云、AWS等),这些云服务商通常提供了一层额外的网络安全防护,称为“安全组”,安全组在云平台网络层面工作,独立于服务器内部的防火墙,即使服务器内部的firewalld
关闭,只要安全组规则中允许了80端口的入站流量,外部用户依然可以访问,在排查网络连接问题时,需要同时检查firewalld
和云平台的安全组设置。
Q2:firewall-cmd
和 iptables
有什么区别?我应该使用哪一个?
A2: iptables
是Linux内核中传统的防火墙工具,它直接操作内核的netfilter
框架,规则管理相对静态,每次修改都需要重新加载整个规则集,容易导致现有连接中断。firewalld
是CentOS 7+引入的更高层级的防火墙管理工具,它作为iptables
的前端存在,但提供了更友好的管理方式,其主要优势在于:
- 动态管理:支持动态添加、删除规则,无需重新加载整个防火墙,不会破坏现有连接。
- 区域和服务:引入了区域和服务概念,使得规则配置更符合逻辑,易于管理(将
http
服务添加到public
区域,而不是手动记忆80端口)。 - D-Bus接口:提供了D-Bus接口,允许其他应用程序或脚本与之交互。
对于CentOS 7及更高版本,强烈建议使用firewalld
,它是系统默认的、被广泛支持和推荐的防火墙管理方案,只有在有特殊需求或需要管理旧系统时,才需要直接使用iptables
。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复