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)
酷番叔酷番叔
上一篇 5天前
下一篇 5天前

相关推荐

  • Linux触摸屏失灵?一键安装驱动解决

    安装前的准备确认硬件识别终端执行:lsusb # 查看USB触摸设备cat /proc/bus/input/devices | grep -i touch # 检查内核是否识别触摸设备若设备未列出,需检查硬件连接或驱动兼容性(如部分旧设备需内核模块usbtouchscreen),更新系统避免依赖冲突:sudo……

    2025年6月13日
    4400
  • Linux软链接路径变了怎么更新

    重新创建软链接的核心步骤重新创建需先删除旧链接,再新建链接,不可直接覆盖,命令格式:rm -f /path/to/old_link # 强制删除旧链接ln -s /path/to/new_target /path/to/new_link # 创建新链接示例:将原链接 ~/downloads 指向新的目标 /mn……

    2025年8月6日
    1800
  • Linux静态库动态库选哪个?

    静态库(.a)生成步骤编译源码为目标文件gcc -c source1.c source2.c -Wall -O2 # -O2优化 -Wall显示警告生成 source1.o 和 source2.o 文件,打包为静态库ar rcs libmylib.a source1.o source2.o # rcs参数确保覆……

    2025年8月5日
    1900
  • Linux下如何开启Apache服务?

    在Linux系统中开启Apache服务是搭建Web服务的基础步骤,Apache作为开源的HTTP服务器,广泛应用于网站托管和Web应用部署,不同Linux发行版的安装和配置命令略有差异,本文将以主流的Ubuntu/Debian和CentOS/RHEL系列为例,详细说明Apache服务的完整开启流程,涵盖安装、配……

    2025年8月23日
    1500
  • Linux vim如何退出?新手必学的退出命令技巧

    在Linux系统中,vim作为一款强大的文本编辑器,其多模式操作特性让新手在退出时常常感到困惑,vim的退出操作需结合当前模式(普通模式、插入模式、可视模式等)和需求(是否保存修改、是否强制退出)来选择正确命令,本文将详细解析vim的各种退出方式,帮助用户在不同场景下高效退出编辑器,vim的基本模式与退出前提v……

    6天前
    1200

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信