菜鸟科技网

防火墙状态命令有哪些?

在Linux和Windows操作系统中,防火墙是保障网络安全的重要屏障,通过查看防火墙状态可以确认其是否正常运行、规则配置是否生效等,不同系统、不同防火墙工具的查看命令存在差异,以下将详细介绍常见环境下查看防火墙状态的具体命令及操作方法,并辅以表格对比和实际场景说明,帮助用户快速掌握相关技能。

防火墙状态命令有哪些?-图1
(图片来源网络,侵删)

Linux系统中查看防火墙状态命令

Linux系统常用的防火墙工具包括iptablesfirewalld(CentOS 7+、RHEL 7+默认)以及ufw(Ubuntu等Debian系发行版默认),不同工具对应的命令和操作逻辑有所不同。

基于iptables的防火墙(传统Linux发行版)

iptables是Linux内核集成的数据包过滤工具,通过规则链控制网络流量,查看其状态需使用iptables命令结合-L(列出规则)、-n(以数字形式显示地址和端口,避免DNS解析延迟)、-v(显示详细信息)等选项。

  • 基本状态查看

    sudo iptables -L -n -v

    执行后会显示当前所有规则链(INPUT、OUTPUT、FORWARD等)的规则数量、匹配数据包/字节数、目标动作(ACCEPT、DROP、REJECT等),若输出中“pkts”和“bytes”列均为0,可能表示规则未生效或无流量通过;若“Chain INPUT (policy ACCEPT)”显示默认策略为ACCEPT,则未匹配规则的默认动作为允许通过。

    防火墙状态命令有哪些?-图2
    (图片来源网络,侵删)
  • 检查防火墙是否运行
    iptables未加载规则或服务未启动,可能提示“Chain INPUT (policy ACCEPT) pkts bytes target prot opt in out source destination”且无规则详情,可通过以下命令确认iptables服务状态:

    sudo systemctl status iptables  # 对于systemd系统

    sudo service iptables status    # 对于SysVinit系统

    若服务未运行,需先启动:sudo systemctl start iptables,并设置开机自启:sudo systemctl enable iptables

  • 简化输出(仅显示规则数量)
    若仅需查看规则总数而非详情,可使用-S选项以规则语法形式输出:

    防火墙状态命令有哪些?-图3
    (图片来源网络,侵删)
    sudo iptables -S

基于firewalld的防火墙(CentOS 7+、RHEL 7+、Fedora等)

firewalld是动态管理防火墙的工具,支持区域(Zone)和运行时/永久配置,查看状态需使用firewall-cmd命令。

  • 查看防火墙运行状态

    sudo firewall-cmd --state

    输出running表示防火墙已启动,not running表示未启动。

  • 显示详细配置信息(包括区域、规则、服务)

    sudo firewall-cmd --list-all

    此命令会输出当前活跃区域(默认为public)、目标动作(默认为DROP)、允许的服务(如ssh、http等)、端口规则、富规则等详细信息。

    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:
  • 查看所有区域及其默认策略

    sudo firewall-cmd --get-active-zones  # 查看活跃区域
    sudo firewall-cmd --get-zones         # 查看所有区域
  • 检查特定服务或端口是否开放

    sudo firewall-cmd --query-service ssh    # 查看ssh服务是否开放(返回yes/no)
    sudo firewall-cmd --query-port 8080/tcp  # 查看8080端口是否开放

基于ufw的防火墙(Ubuntu、Debian等)

ufw(Uncomplicated Firewall)是简化版防火墙工具,命令更直观,默认处于禁用状态(部分Ubuntu版本可能已启用)。

  • 查看防火墙状态

    sudo ufw status

    输出可能为:Status: active(已启用)、Status: inactive(已禁用),或Status: inactive (v6)(仅IPv6启用)。

  • 显示详细规则(包括编号、方向、协议、端口等)

    sudo 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)
  • 查看规则编号(用于删除或修改规则)

    sudo ufw status numbered

    输出会为每条规则添加编号,如:

       [ 1] 22/tcp                   ALLOW IN    Anywhere
       [ 2] 80/tcp                   ALLOW IN    Anywhere

Windows系统中查看防火墙状态命令

Windows系统防火墙分为“Windows Defender 防火墙”(控制面板界面)和“高级安全Windows Defender防火墙”(管理单元),可通过命令行或图形界面查看状态。

使用netsh命令(命令提示符或PowerShell)

netsh是Windows网络配置的命令行工具,可查看防火墙状态和规则。

  • 查看防火墙基本状态

    netsh advfirewall show allprofiles

    输出会显示域配置、专用配置、公用配置的防火墙状态(如“状态: ON”)、防火墙超时设置等。

  • 查看当前防火墙规则

    netsh advfirewall firewall show rule name=all

    此命令会列出所有规则,包括规则名称、方向(入站/出站)、协议、端口、操作(允许/阻止)等,输出较长,可结合findstr筛选:

    netsh advfirewall firewall show rule name=all | findstr "80"
  • PowerShell命令(推荐,功能更强大)
    在PowerShell中,可使用Get-NetFirewallRule cmdlet:

    Get-NetFirewallRule | Format-Table Name, DisplayName, Enabled, Direction, Action -AutoSize

    输出所有规则的名称、显示名称、启用状态、方向、操作等信息,筛选特定规则:

    Get-NetFirewallRule -DisplayName "Remote Desktop*" | Format-Table *

图形界面查看(辅助参考)

  • Windows Defender防火墙(基础设置)
    控制面板 → 系统和安全 → Windows Defender防火墙 → 点击左侧“启用或关闭Windows Defender防火墙”,可查看当前各网络类型(域、专用、公用)的防火墙状态。

  • 高级安全防火墙(详细规则)
    控制面板 → 系统和安全 → Windows Defender防火墙 → 高级安全,打开管理单元,可查看入站/出站规则、连接安全规则等,支持筛选和编辑。

不同防火墙工具命令对比

为方便快速查阅,以下将常见防火墙状态查看命令整理为表格:

操作系统 防火墙工具 基本状态查看命令 详细信息查看命令 备注
Linux iptables sudo iptables -L -n -v sudo iptables -S(规则语法) 需确保iptables服务已启动
Linux firewalld sudo firewall-cmd --state sudo firewall-cmd --list-all 支持区域动态管理
Linux ufw sudo ufw status sudo ufw status verbose 默认禁用,需手动启用
Windows netsh(CMD) netsh advfirewall show allprofiles netsh advfirewall firewall show rule 适用于命令提示符
Windows PowerShell Get-NetFirewallProfile Get-NetFirewallRule | Format-Table * 功能更强大,支持对象筛选

相关问答FAQs

Q1: 为什么执行sudo iptables -L -n -v后显示“Chain INPUT (policy ACCEPT) pkts bytes target prot opt in out source destination”且无规则?
A: 此现象通常有两种原因:一是iptables服务未启动,可通过sudo systemctl status iptables确认,若未启动则执行sudo systemctl start iptables;二是当前无任何自定义规则,仅显示默认策略(ACCEPT表示未匹配规则时允许数据包通过),若需添加规则,可使用iptables -I INPUT -p tcp --dport 22 -j ACCEPT(允许SSH连接)等命令。

Q2: Ubuntu系统中如何确认ufw防火墙是否成功阻止了特定IP的访问?
A: 可通过以下步骤验证:

  1. 首先添加阻止规则,假设要阻止IP168.1.100
    sudo ufw deny from 192.168.1.100
  2. 查看规则是否生效:
    sudo ufw status numbered

    确认规则中包含“deny from 192.168.1.100”。

  3. 从被阻止的IP主机尝试访问Ubuntu服务器的指定端口(如SSH的22端口),若连接失败,则说明规则生效;也可在Ubuntu服务器上查看日志:
    sudo tail -f /var/log/ufw.log | grep "192.168.1.100"

    日志中应包含“BLOCKED”相关信息。

分享:
扫描分享到社交APP
上一篇
下一篇