Linux系统如何查看防火墙的当前运行状态?

在Linux系统中,防火墙是保障服务器安全的重要组件,用于控制进出网络的流量,防止未授权访问,查看防火墙状态是日常运维中的常见操作,不同Linux发行版可能使用不同的防火墙管理工具(如iptablesfirewalld、ufw等),本文将详细介绍如何通过这些工具查看防火墙状态,包括核心命令、参数解析及实际输出示例。

linux 如何查看防火墙状态

Linux防火墙工具概述

Linux系统的防火墙实现主要分为两类:基于内核 netfilter 框架的 iptables(传统工具)和 nftables(新一代工具),以及用户空间的管理工具如 firewalld(动态管理,CentOS 7+ 默认)和 ufw(Uncomplicated Firewall,Ubuntu/Debian 简化工具),查看防火墙状态需根据系统默认工具选择对应命令。

通过iptables查看防火墙状态

iptables 是 Linux 2.4 及以上版本内置的防火墙工具,通过表(table)和链(chain)管理规则,默认使用 filter 表(过滤数据包),查看状态的核心命令如下:

基础命令:列出所有规则

iptables -L -n -v
  • -L:列出指定表的所有规则(默认 filter 表,包含 INPUTOUTPUTFORWARD 三条链)。
  • -n:以数字形式显示IP地址和端口(避免DNS解析,加快速度)。
  • -v:显示详细信息,如规则匹配的包数量、字节大小、网络接口等。

输出示例

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
 1500 120K ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
    3   240 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22
  • policy ACCEPT:链的默认策略(ACCEPT/DROP/REJECT)。
  • pkts bytes:规则匹配的数据包数量和总字节数。
  • target:规则动作(ACCEPT接受、DROP丢弃、REJECT拒绝并返回错误)。

查看指定链的规则

iptables -L INPUT --line-numbers
  • --line-numbers:为规则添加行号,方便后续修改(如删除规则时通过行号定位)。

查看防火墙运行状态(需确保iptables服务已启动)

systemctl status iptables
# 或
service iptables status

若输出显示 Active: active (running),则防火墙正在运行;若 Active: inactive (dead),则未启动。

通过firewalld查看防火墙状态

firewalld 是 CentOS 7+、RHEL 7+、Fedora 等发行版的默认防火墙管理工具,支持动态规则更新(无需重启服务),查看状态的核心命令如下:

查看防火墙运行状态

firewall-cmd --state
  • 输出 running 表示防火墙运行中,not running 表示未运行。

列出所有规则(含区域、服务、端口等)

firewall-cmd --list-all

输出示例

public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: ssh dhcpv6-client
  ports: 8080/tcp
  protocols:
  forward: no
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
  • public (active):当前激活的区域(默认为 public,可自定义)。
  • services:允许通过的服务的列表(如 ssh 对应22端口)。
  • ports:手动开放的端口(如 8080/tcp)。

查看激活的区域及规则

# 查看当前激活的区域
firewall-cmd --get-active-zones
# 查看指定区域的规则(如public区域)
firewall-cmd --zone=public --list-services

检查防火墙服务状态

systemctl status firewalld

Active: active (running),则服务正常运行。

linux 如何查看防火墙状态

通过ufw查看防火墙状态

ufw(Uncomplicated Firewall)是 Ubuntu/Debian 系列的简化防火墙工具,通过 ufw 命令管理规则,查看状态的核心命令如下:

查看防火墙状态(是否启用)

ufw status
  • 输出 Status: active 表示已启用,Status: inactive 表示未启用。

查看详细规则(含方向、协议、端口等)

ufw status verbose

输出示例

Status: active
To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
  • To:目标端口/协议(如 22/tcp)。
  • Action:动作(ALLOW/DENY)。
  • From:来源地址(Anywhere 表示所有IP,Anywhere (v6) 表示IPv6)。

查看带行号的规则(方便管理)

ufw status numbered

输出中每条规则前会添加行号,

     Status: active
       To                       Action      From
       --                       ------      ----
[ 1] 22/tcp                     ALLOW IN    Anywhere
[ 2] 80/tcp                     ALLOW IN    Anywhere
[ 3] 22/tcp (v6)                ALLOW IN    Anywhere (v6)
[ 4] 80/tcp (v6)                ALLOW IN    Anywhere (v6)

检查ufw服务状态

systemctl status ufw

Active: active (exited) 表示服务已启用并正常运行(exited 是正常状态,因ufw无持续守护进程)。

通过nftables查看防火墙状态

nftables 是 iptables 的替代品,CentOS 8+、Ubuntu 20.04+ 等较新版本已默认使用,其规则通过 nft 命令管理,查看状态的核心命令如下:

列出所有规则集

nft list ruleset

输出示例

table inet filter {
  chain input {
    type filter hook input priority filter; policy accept;
    iifname lo accept
    tcp dport 22 drop
  }
  chain forward {
    type filter hook forward priority filter; policy accept;
  }
}
  • table inet filter:定义 inet 类型的 filter 表(同时支持IPv4/IPv6)。
  • chain input:输入链,type filter hook input priority filter 表示钩子到 input 链,优先级为 filter
  • policy accept:链的默认策略。

查看指定表或链的规则

# 查看filter表的所有链
nft list table inet filter
# 查看input链的规则
nft list chain inet filter input

检查nftables服务状态

systemctl status nftables

Active: active (running) 表示服务正常运行。

linux 如何查看防火墙状态

防火墙状态查看工具对比

为方便快速选择工具,以下表格总结不同发行版及对应的核心查看命令:

工具名称 适用发行版 核心查看命令 输出关键字段
iptables CentOS 7-、RHEL 7-、Ubuntu 14.04 iptables -L -n -v 链策略、规则匹配数、目标动作
firewalld CentOS 7+、RHEL 7+、Fedora firewall-cmd --list-all 激活区域、允许服务、开放端口
ufw Ubuntu、Debian ufw status verbose 规则方向、目标端口、来源地址
nftables CentOS 8+、Ubuntu 20.04+ nft list ruleset 表/链定义、钩子类型、默认策略

常见问题排查

若查看防火墙状态时发现异常(如规则未生效、服务未启动),可按以下步骤排查:

  1. 确认防火墙服务是否运行:通过 systemctl status <防火墙服务> 检查(如 firewalldiptables)。
  2. 检查规则语法:使用 iptables -L -nfirewall-cmd --check 验证规则是否正确。
  3. 确认规则是否加载到内核:iptables 规则需通过 service iptables save 保存(CentOS 7-),firewalld 规则需通过 firewall-cmd --reload 重新加载。

相关问答FAQs

Q1:为什么执行 iptables -L 显示的规则为空,但防火墙状态显示为运行?

A:这可能是由于以下原因:

  1. 防火墙的默认策略为 ACCEPT(允许所有流量),且未添加任何过滤规则,因此规则列表为空,可通过 iptables -L -n -v 查看链的默认策略(policy ACCEPT)。
  2. 规则未正确保存:在 CentOS 7- 等系统中,iptables 规则需手动保存(service iptables save),否则重启后会丢失。
  3. 使用了其他防火墙工具:如系统默认使用 firewalld,其规则会覆盖 iptables,需通过 firewall-cmd --list-all 查看规则。

Q2:如何判断防火墙是否阻止了某个端口的访问?

A:可通过以下步骤排查:

  1. 测试端口连通性:使用 telnetnc(netcat)测试目标端口,若连接失败,可能是防火墙拦截。
    telnet <IP地址> <端口号>  # telnet 192.168.1.100 22
    nc -zv <IP地址> <端口号>   # nc -zv 192.168.1.100 80
  2. 查看防火墙规则:根据使用的防火墙工具,检查对应端口是否被允许(如 iptables -L INPUT -n | grep 22 查看22端口规则)。
  3. 检查防火墙日志:若规则为 DROPREJECT,可通过日志确认拦截记录。
    • iptables 日志:grep 'DENY' /var/log/iptables.log(需提前配置日志)。
    • firewalld 日志:journalctl -u firewalld | grep 'BLOCK'
    • ufw 日志:ufw status verbose 查看规则,或 tail -f /var/log/ufw.log 查看实时日志。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/20789.html

(0)
酷番叔酷番叔
上一篇 2025年8月31日 09:54
下一篇 2025年8月31日 10:16

相关推荐

  • 如何修改linux上的ip

    Linux 上修改 IP,可通过修改网络配置文件(如/etc/sysconfig/network-scripts/ifcfg-eth0),或使用 ifconfig、ip

    2025年8月10日
    5400
  • 如何搭建Linux服务器?新手入门详细步骤

    在搭建Linux服务器时,需从硬件选型、系统安装、基础配置、安全加固到服务部署逐步推进,确保服务器稳定、安全且满足业务需求,以下是详细步骤:硬件选型与准备硬件配置需根据服务器用途(如Web服务、数据库、文件存储等)合理规划,核心参数包括CPU、内存、存储、网络及冗余设计,用途CPU核心数内存容量存储类型网络带宽……

    2025年9月21日
    4300
  • Linux查看文件目录的具体命令和方法有哪些?

    在Linux系统中,查看文件目录是日常操作中最基础也最频繁的任务之一,掌握相关命令能高效管理文件系统,Linux文件目录以根目录“/”为起点,所有文件和目录都挂载在根目录下,通过不同命令可以灵活查看目录内容、层级结构及文件属性,基础查看命令:lsls(list)是最常用的目录查看命令,默认显示当前目录下的文件名……

    2025年9月13日
    4700
  • Linux系统如何查询当前系统版本信息?

    在Linux系统中,查询系统版本信息是日常运维和开发中常见的操作,无论是软件安装、依赖兼容性检查,还是问题排查,准确获取版本信息都至关重要,Linux发行版众多,不同系统查询版本的方法略有差异,本文将详细介绍通用及各主流发行版的查询方式,并辅以示例说明,通用查询方法(适用于大多数发行版)使用lsb_releas……

    2025年8月31日
    5700
  • linux 如何查找 安装包

    在Linux系统中,查找安装包是日常管理和维护的重要操作,不同发行版使用的包管理器不同,但核心逻辑相似,本文将详细介绍主流Linux发行版中查找安装包的方法,包括系统自带工具和第三方辅助工具,帮助用户快速定位所需软件包,基于Debian/Ubuntu系统的包查找方法Debian及其衍生版(如Ubuntu、Lin……

    2025年10月5日
    3700

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信