CentOS中怎么查看firewall防火墙的具体状态?

在CentOS 7及其后续版本中,firewalld(Dynamic Firewall Manager)已经取代了传统的iptables服务,成为默认的防火墙管理工具,它引入了“区域”和“服务”的概念,使得防火墙规则的配置更加灵活和动态,对于系统管理员而言,熟练掌握查看firewalld状态的方法是保障服务器安全的第一步,本文将详细介绍多种查看firewalld状态的命令和技巧,帮助您全面了解防火墙的当前配置。

CentOS中怎么查看firewall防火墙的具体状态?


基础状态检查

最直接、最常用的方法是使用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。
  • TasksMemory:显示服务占用的任务数量和内存资源。
  • CGroup:显示控制组信息。
  • 最近的日志:列出服务启动、停止或出现错误时的最新几条日志,这对于故障排查非常有用。

通过systemctl status,您不仅能知道防火墙是否在运行,还能了解其启动配置和最近的运行情况。


深入查看防火墙规则与区域

仅仅知道防火墙是否运行是远远不够的,了解其具体的规则配置,即哪些端口是开放的,哪些服务是被允许的,才是安全管理的核心。

查看当前活动的区域

firewalld使用“区域”来管理不同的信任级别,每个区域可以绑定到不同的网络接口,并应用一套独立的规则集。

firewall-cmd --get-active-zones

此命令会列出所有当前处于活动状态的区域,以及每个区域所关联的网络接口,输出可能如下:

public
  interfaces: eth0 eth1
dmz
  interfaces: eth2

这表示eth0eth1网卡应用了public区域的规则,而eth2网卡则应用了dmz区域的规则。

CentOS中怎么查看firewall防火墙的具体状态?

查看默认区域

如果某个网络接口没有被明确分配到任何区域,它将使用默认区域的规则。

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
  • 停止防火墙服务

    CentOS中怎么查看firewall防火墙的具体状态?

    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-cmdiptables 有什么区别?我应该使用哪一个?

A2: iptables是Linux内核中传统的防火墙工具,它直接操作内核的netfilter框架,规则管理相对静态,每次修改都需要重新加载整个规则集,容易导致现有连接中断。firewalld是CentOS 7+引入的更高层级的防火墙管理工具,它作为iptables的前端存在,但提供了更友好的管理方式,其主要优势在于:

  1. 动态管理:支持动态添加、删除规则,无需重新加载整个防火墙,不会破坏现有连接。
  2. 区域和服务:引入了区域和服务概念,使得规则配置更符合逻辑,易于管理(将http服务添加到public区域,而不是手动记忆80端口)。
  3. D-Bus接口:提供了D-Bus接口,允许其他应用程序或脚本与之交互。

对于CentOS 7及更高版本,强烈建议使用firewalld,它是系统默认的、被广泛支持和推荐的防火墙管理方案,只有在有特殊需求或需要管理旧系统时,才需要直接使用iptables

【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!

(0)
热舞的头像热舞
上一篇 2025-10-07 13:05
下一篇 2024-08-23 13:53

相关推荐

发表回复

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

联系我们

QQ-14239236

在线咨询: QQ交谈

邮件:asy@cxas.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信