Linux命令使用详解之 UWF

Linux命令使用详解之 UWF

引言

在 Linux 系统中,防火墙是保障系统网络安全的重要组件。ufw(Uncomplicated Firewall)是一个基于 iptables 的前端工具,其设计初衷是简化防火墙规则的配置过程,让普通用户也能轻松管理防火墙,而无需深入了解复杂的 iptables 语法。

ufw 主要功能包括对网络流量进行监控和过滤,通过设置允许、拒绝、限制等规则,控制哪些网络连接可以入站或出站,从而有效防止未经授权的访问、恶意攻击等安全威胁。同时,它还支持日志记录功能,方便管理员对网络活动进行审计和排查问题。

ufw 的基础参数解释

以下是 ufw 参数的基本解析:

  • enable:启用防火墙。开启防火墙后,防火墙将按照预先配置的规则对网络流量进行监控和过滤,保护系统安全。
  • disable:禁用防火墙。此操作会停止防火墙对网络流量的监控和过滤功能,系统将不再受到防火墙规则的保护。
  • default ARG:设置默认策略。ARG 可指定为 allow(允许所有流量通过,除非有规则阻止)或 deny(拒绝所有流量通过,除非有规则允许),这是防火墙的基础防护策略设置。
  • logging LEVEL:设置日志记录级别。LEVEL 可设置为不同的日志详细程度,如 off(关闭日志记录)、low(记录少量关键信息)、medium(记录中等详细信息)、high(记录大量详细信息)等,方便管理员对防火墙活动进行审计和排查问题。
  • allow ARGS:添加允许规则。ARGS 可指定具体的网络流量条件,如特定的端口号、IP 地址、协议等,符合这些条件的流量将被允许通过防火墙。
  • deny ARGS:添加拒绝规则。与 allow 相反,ARGS 定义的网络流量将被防火墙拒绝,无法通过。
  • reject ARGS:添加拒绝并响应规则。当符合 ARGS 条件的流量尝试通过防火墙时,防火墙不仅会拒绝该流量,还会向发起方发送一个拒绝响应,告知对方连接被拒绝。
  • limit ARGS:添加限制规则。通常用于限制特定 IP 地址或端口的连接频率,防止恶意的暴力破解或 DoS 攻击。例如,限制某个 IP 地址在短时间内对某个端口的连接次数。
  • delete RULE|NUM:删除规则。可以通过规则的具体内容(RULE)或规则编号(NUM)来指定要删除的规则,使该规则不再生效。
  • insert NUM RULE:在指定位置插入规则。NUM 表示规则插入的位置序号,RULE 是要插入的规则内容,插入后该规则将按照新的顺序参与流量过滤。
  • prepend RULE:在规则列表开头添加规则。新添加的规则将成为规则列表中的第一条规则,优先对网络流量进行匹配和过滤。
  • route RULE:添加路由规则。用于配置防火墙在路由模式下的流量处理规则,例如允许或拒绝特定的路由流量。
  • route delete RULE|NUM:删除路由规则。可以根据规则内容(RULE)或规则编号(NUM)删除已有的路由规则。
  • route insert NUM RULE:在指定位置插入路由规则。与 insert 类似,但针对的是路由规则,NUM 为插入位置,RULE 为规则内容。
  • reload:重新加载防火墙。此操作会使防火墙重新读取并应用当前的配置规则,通常在修改规则后使用,以确保新规则生效。
  • reset:重置防火墙。将防火墙的配置恢复到初始状态,清除所有自定义规则,同时保留默认的防火墙设置。
  • status:显示防火墙状态。会显示当前防火墙是否启用、默认策略以及已配置的规则等基本信息。
  • status numbered:以编号列表形式显示防火墙规则状态。每条规则都会有一个编号,方便管理员通过编号来管理和引用规则。
  • status verbose:显示详细的防火墙状态。除了基本的状态信息外,还会显示更详细的规则内容、流量统计等信息。
  • show ARG:显示防火墙报告。ARG 可以指定要查看的报告类型,如规则列表、状态统计等,帮助管理员全面了解防火墙的运行情况。
  • version:显示防火墙版本信息。用于查看当前使用的 UFW 防火墙的版本号,方便判断是否需要更新。

ufw 的基础用法

ufw 的核心用法包含以下几方面:

启用和禁用防火墙

在使用 ufw 管理防火墙时,开启和关闭防火墙是基础操作。这两个操作能让你灵活地控制防火墙的工作状态,以适应不同的网络安全需求。

启用防火墙

要启用 ufw 防火墙,可在终端中输入以下命令:

sudo ufw enable

执行该命令后,ufw 会按照当前已配置的规则开始对网络流量进行监控和过滤。需要注意的是,执行此命令需要 sudo 权限,因为防火墙的操作属于系统级操作,普通用户权限不足以完成。启用防火墙后,系统会严格按照规则来处理进出的网络数据包,从而增强系统的安全性。

禁用防火墙

若你想暂时停止 ufw 防火墙的工作,可以使用以下命令:

sudo ufw disable

此命令会使 ufw 停止对网络流量的监控和过滤,此时系统的网络连接将不再受 ufw 规则的限制。不过,在禁用防火墙时需谨慎操作,因为这可能会使系统暴露在潜在的网络安全威胁之下。

设置默认防火墙策略

默认防火墙策略决定了在没有明确规则的情况下,ufw 如何处理进出的网络流量。合理设置默认策略是构建安全网络环境的重要一步。

设置默认入站策略

入站策略控制着外部网络向系统发起的连接请求。通常有两种常见的设置方式:

  • 允许所有入站流量:这种设置适用于测试环境或对网络安全性要求不高的场景。使用以下命令设置:

    sudo ufw default allow incoming
    

    设置后,除非有特定的拒绝规则,否则所有外部的连接请求都会被允许。

  • 拒绝所有入站流量:这是一种更安全的设置方式,适用于生产环境或对安全性要求较高的系统。使用以下命令设置:

    sudo ufw default deny incoming
    

    设置后,只有符合允许规则的外部连接请求才会被处理,其他请求都会被拒绝。

设置默认出站策略

出站策略控制着系统向外部网络发起的连接请求。同样有两种常见的设置方式:

  • 允许所有出站流量:这是比较常见的设置,因为在大多数情况下,系统需要主动与外部网络进行通信,如访问网页、更新软件等。使用以下命令设置:

    sudo ufw default allow outgoing
    

    设置后,除非有特定的拒绝规则,否则系统发起的所有外部连接请求都会被允许。

  • 拒绝所有出站流量:这种设置适用于对系统对外连接有严格限制的场景,如安全隔离的内部网络环境。使用以下命令设置:

    sudo ufw default deny outgoing
    

    设置后,只有符合允许规则的系统外部连接请求才会被处理,其他请求都会被拒绝。

添加和删除防火墙规则

添加和删除防火墙规则是 ufw 管理网络访问权限的核心操作,通过合理配置规则,可以精确控制哪些网络流量可以进出系统。

添加允许规则

允许规则用于指定哪些网络流量可以通过防火墙。以下是一些常见的添加允许规则的示例:

  • 允许特定端口的流量:如果你想允许某个特定端口的流量通过,可使用以下命令。例如,允许 TCP 协议的 80 端口(通常用于 HTTP 服务)流量通过:

    sudo ufw allow 80/tcp
    
  • 允许特定 IP 地址的访问:若要允许某个特定 IP 地址访问系统,可以使用以下命令。例如,允许 IP 地址为 192.168.1.100 的设备访问系统:

    sudo ufw allow from 192.168.1.100
    
  • 允许特定 IP 地址和端口的访问:如果需要更精确的控制,可以指定 IP 地址和端口。例如,允许 IP 地址为 192.168.1.100 的设备访问系统的 22 端口(通常用于 SSH 服务):

    sudo ufw allow from 192.168.1.100 to any port 22
    

添加拒绝规则

拒绝规则用于阻止特定的网络流量通过防火墙。以下是一些常见的添加拒绝规则的示例:

  • 拒绝特定端口的流量:如果你想拒绝某个特定端口的流量通过,可使用以下命令。例如,拒绝 UDP 协议的 53 端口(通常用于 DNS 服务)流量通过:

    sudo ufw deny 53/udp
    
  • 拒绝特定 IP 地址的访问:若要拒绝某个特定 IP 地址访问系统,可以使用以下命令。例如,拒绝 IP 地址为 192.168.1.200 的设备访问系统:

    sudo ufw deny from 192.168.1.200
    

删除规则

当某个规则不再需要时,可以使用以下命令删除规则。删除规则时可以通过规则编号或规则内容来指定要删除的规则。

  • 通过规则编号删除规则:首先使用 sudo ufw status numbered 命令查看规则列表及编号,然后使用以下命令删除指定编号的规则。例如,删除编号为 3 的规则:

    sudo ufw delete 3
    
  • 通过规则内容删除规则:如果你知道规则的具体内容,也可以直接使用规则内容来删除规则。例如,删除允许 TCP 协议 80 端口流量通过的规则:

    sudo ufw delete allow 80/tcp
    

查看防火墙状态

了解防火墙的当前状态对于网络安全管理至关重要。ufw 提供了多种方式来查看防火墙的状态信息。

查看基本状态

使用以下命令可以查看防火墙的基本状态,包括防火墙是否启用、默认策略以及已配置的规则等信息:

sudo ufw status

命令执行后,会显示类似以下的输出:

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)

从输出中可以看出,防火墙处于启用状态(Status: active),并且允许 TCP 协议的 22 端口和 80 端口的流量通过。

查看编号规则列表

若需要更方便地管理规则,可以使用以下命令以编号列表形式显示防火墙规则:

sudo 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)

通过编号列表,你可以更方便地使用规则编号来删除或修改规则。

查看详细状态

使用以下命令可以查看更详细的防火墙状态信息,包括规则的详细内容、流量统计等:

sudo ufw status verbose

该命令会提供更丰富的信息,帮助你全面了解防火墙的运行情况。

防火墙日志设置

防火墙日志记录可以帮助你了解网络活动情况,排查安全问题。ufw 允许你设置不同级别的日志记录。

开启日志记录

要开启防火墙日志记录功能,可以使用以下命令:

sudo ufw logging on

开启后,ufw 会开始记录网络流量的相关信息。

设置日志记录级别

ufw 支持多种日志记录级别,不同级别记录的信息详细程度不同。常见的日志记录级别有:

  • 低级别日志(low):记录较少的关键信息,如被拒绝的连接请求等。使用以下命令设置低级别日志:

    sudo ufw logging low
    
  • 中级别日志(medium):记录中等详细的信息,包括更多的网络连接活动。使用以下命令设置中级别日志:

    sudo ufw logging medium
    
  • 高级别日志(high):记录大量详细的信息,适合在进行安全审计或排查复杂问题时使用。使用以下命令设置高级别日志:

    sudo ufw logging high
    

关闭日志记录

若不需要日志记录功能,可以使用以下命令关闭:

sudo ufw logging off

关闭后,ufw 将停止记录网络流量信息。

ufw 常用命令组合

1. 查看防火墙状态

用于查看 ufw 防火墙的详细启动状态。“verbose” 表示详细的意思,相比于普通的 sudo ufw status 命令,它会输出更多的信息,包括防火墙规则的详细描述、日志记录状态等。

sudo ufw status verbose

eaea6767d5167d8333263f4c9b876d4d.webp

相关命令:

  • sudo ufw status:查看 ufw 防火墙的基本启动状态,只显示防火墙是否启用、默认策略以及已配置的规则的简要信息。
  • sudo ufw status numbered:以编号列表的形式显示防火墙规则,方便后续根据编号对规则进行删除、插入等操作。

2. 查看预定义应用规则列表

ufw 为一些常见的服务(如 HTTP、SSH 等)提供了预定义的规则集,使用此命令可以列出这些预定义规则的名称,方便用户直接使用这些规则来配置防火墙。

sudo ufw app list

8d6339e6e476cd2083c532fbd6f0c770.webp

3. 拒绝入网流量

该命令可以拒绝来自某个ip或者某个网段的入网流量。

  • 拒绝来自指定 IP 地址(23.24.25.100)的所有网络连接请求。当有来自该 IP 地址的数据包尝试进入系统时,防火墙会将其拦截,阻止其与系统建立连接。
  sudo ufw deny from 23.24.25.100
  • 拒绝来自指定网段(23.24.25.0/24)的所有网络连接请求。“23.24.25.0/24” 表示一个包含 256 个 IP 地址(从 23.24.25.0 到 23.24.25.255)的网段,使用此命令可以一次性拒绝该网段内所有 IP 地址的连接请求。
  sudo ufw deny from 23.24.25.0/24
  • 拒绝来自指定网段(23.24.25.0/24)通过 TCP 协议访问任意目标的 80 端口和 443 端口的连接请求。80 端口通常用于 HTTP 服务,443 端口用于 HTTPS 服务,此命令可以阻止该网段内的 IP 地址对这些常见 Web 服务端口的访问。
  sudo ufw deny proto tcp from 23.24.25.0/24 to any port 80,443

4. 允许来自某网段的流量

  • 仅允许来自指定单 IP 地址(192.168.1.100)的所有网络连接请求。与 deny 命令相反,此命令会让防火墙放行来自该 IP 地址的数据包,允许其与系统建立连接。
  sudo ufw allow from 192.168.1.100
  • 仅允许来自指定单 IP 地址(192.168.1.100)连接到任意目标的 3306 端口。3306 端口通常用于 MySQL 数据库服务,此命令可以限制只有该 IP 地址的设备能够访问系统的 MySQL 服务。
  sudo ufw allow from 192.168.1.100 to any port 3306
  • 允许来自指定网段(192.168.1.0/24)的所有 IP 地址连接到任意目标的 3306 端口。这意味着该网段内的所有设备都可以访问系统的 MySQL 服务。
  sudo ufw allow from 192.168.1.0/24 to any port 3306
  • 允许从网络接口 eth2 进入的所有流量连接到任意目标的 3306 端口。在多网络接口的系统中,此命令可以针对特定的网络接口进行规则配置,只允许通过该接口进入的流量访问指定端口。
  sudo ufw allow in on eth2 to any port 3306
  • 如果系统中存在预定义的 http 应用规则,使用此命令可以允许与该规则对应的 HTTP 服务的网络连接。ufw 会根据预定义规则开放相应的端口(通常是 80 端口),让 HTTP 流量可以通过防火墙。
  sudo ufw allow http
  • 如果系统中安装了 Nginx 服务器,并且 ufw 有预定义的 Nginx HTTP 应用规则,使用此命令可以允许与 Nginx HTTP 服务相关的网络连接。ufw 会根据该规则开放相应的端口(通常是 80 端口),让 Nginx 提供的 HTTP 服务可以正常对外提供服务。
  sudo ufw allow 'Nginx HTTP'
  • 允许 TCP 和 UDP 协议的 80 端口的网络连接。这意味着无论是通过 TCP 协议还是 UDP 协议访问 80 端口的流量都会被防火墙放行。
  sudo ufw allow 80
  • 仅允许 TCP 协议的 80 端口的网络连接。与 sudo ufw allow 80 不同,此命令明确指定只允许 TCP 协议的流量通过 80 端口,而 UDP 协议的 80 端口流量会被阻止。
  sudo ufw allow <port>/<protocol>

示例:

  sudo ufw allow 80/tcp
  • 允许 TCP 协议的 7100 到 7200 端口范围的网络连接。这对于需要开放连续端口范围的服务(如某些应用程序的动态端口分配)非常有用。
  sudo ufw allow <start_port>:<end_port>/<protocol>

示例:

  sudo ufw allow 7100:7200/tcp
  • 允许通过 TCP 协议访问任意目标的 80 端口的网络连接。此命令明确指定了协议为 TCP,目标为任意地址,端口为 80,让所有通过 TCP 协议访问 80 端口的流量可以通过防火墙。
  # sudo ufw allow proto <protocol> to <destination> port <port_list>
  
  sudo ufw allow proto tcp to any port 80

可以指定不同的协议、目标和端口列表。例如 sudo ufw allow proto udp to 192.168.1.100 port 53 允许通过 UDP 协议访问 192.168.1.10053 端口的连接。

5. 删除防火墙规则

  • 以编号列表的形式显示防火墙规则。每条规则前面会有一个编号,方便后续根据编号对规则进行删除、插入等操作。这在管理大量规则时非常方便,用户可以快速定位和操作特定的规则。
  sudo ufw status numbered
  • 根据规则编号删除对应的防火墙规则。使用 sudo ufw status numbered 命令可以查看规则编号,然后使用此命令删除指定编号的规则。
  sudo ufw delete 3

sudo ufw delete <rule_number>:可以指定不同的规则编号来删除相应的规则。

  • 通过规则内容删除对应的防火墙规则。此命令会删除允许 8069 端口连接的规则。可以使用此方式删除通过规则内容能够唯一标识的规则。
  sudo ufw delete allow 8069

sudo ufw delete <action> <rule_content>:可以指定不同的操作(如 allow、deny)和规则内容来删除相应的规则。例如 sudo ufw delete deny from 192.168.1.100 删除拒绝来自 192.168.1.100 的规则。

可替代工具

  1. iptables

iptables 是 Linux 系统中最基础的防火墙工具,ufw 实际上是基于 iptables 开发的。iptables 功能强大,支持非常复杂的规则配置,但学习成本较高,需要深入了解网络协议和规则语法。如果需要对防火墙进行非常精细的配置和管理,iptables 是一个不错的选择。

  1. firewalld

firewalld 是 Red Hat 系 Linux 发行版(如 CentOS、Fedora 等)默认使用的防火墙管理工具。它提供了更高级的防火墙管理功能,如区域管理、服务管理等,使用起来相对简单,适合初学者。但与 iptables 相比,firewalld 的规则配置可能不够灵活。

  1. Shorewall

Shorewall 是一个基于 iptables 的高级防火墙配置工具,它提供了更高级的功能和更友好的配置界面。Shorewall 支持多网卡、VPN 等复杂网络环境的配置,适合需要管理复杂网络环境的用户。

总结

综上所述,ufw 以其简单易用的特点,成为了 Linux 系统中管理防火墙的首选工具之一。无论是个人用户还是企业用户,都可以通过 ufw 轻松配置防火墙规则,保护系统的网络安全。但在面对复杂的网络环境和特定的安全需求时,也可以考虑使用其他更强大的防火墙工具。

文章来源: https://study.disign.me/article/202508/19.linux-ufw.md

发布时间: 2025-02-21

作者: 技术书栈编辑