引言
在 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
相关命令:
sudo ufw status
:查看 ufw 防火墙的基本启动状态,只显示防火墙是否启用、默认策略以及已配置的规则的简要信息。sudo ufw status numbered
:以编号列表的形式显示防火墙规则,方便后续根据编号对规则进行删除、插入等操作。
2. 查看预定义应用规则列表
ufw 为一些常见的服务(如 HTTP、SSH 等)提供了预定义的规则集,使用此命令可以列出这些预定义规则的名称,方便用户直接使用这些规则来配置防火墙。
sudo ufw app list
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.100
的 53
端口的连接。
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 的规则。
可替代工具
- iptables
iptables 是 Linux 系统中最基础的防火墙工具,ufw 实际上是基于 iptables 开发的。iptables 功能强大,支持非常复杂的规则配置,但学习成本较高,需要深入了解网络协议和规则语法。如果需要对防火墙进行非常精细的配置和管理,iptables 是一个不错的选择。
- firewalld
firewalld 是 Red Hat 系 Linux 发行版(如 CentOS、Fedora 等)默认使用的防火墙管理工具。它提供了更高级的防火墙管理功能,如区域管理、服务管理等,使用起来相对简单,适合初学者。但与 iptables 相比,firewalld 的规则配置可能不够灵活。
- Shorewall
Shorewall 是一个基于 iptables 的高级防火墙配置工具,它提供了更高级的功能和更友好的配置界面。Shorewall 支持多网卡、VPN 等复杂网络环境的配置,适合需要管理复杂网络环境的用户。
总结
综上所述,ufw 以其简单易用的特点,成为了 Linux 系统中管理防火墙的首选工具之一。无论是个人用户还是企业用户,都可以通过 ufw 轻松配置防火墙规则,保护系统的网络安全。但在面对复杂的网络环境和特定的安全需求时,也可以考虑使用其他更强大的防火墙工具。
文章来源: https://study.disign.me/article/202508/19.linux-ufw.md
发布时间: 2025-02-21
作者: 技术书栈编辑