Ubuntu 防火墙完全指南:UFW 让系统更安全
在当今网络威胁日益增长的环境中,为您的 Ubuntu 系统配备一个强大的防火墙至关重要。Uncomplicated Firewall (UFW) 是 Ubuntu 默认的防火墙配置工具,旨在简化复杂的 iptables 管理。它提供了一个用户友好的命令行界面,让网络安全对于新手和经验丰富的管理员都触手可及。本文将详细介绍如何安装、配置和管理 UFW,以确保您的系统安全。
1. UFW 的安装与状态
UFW 通常在 Ubuntu 系统中预装。您可以通过以下命令检查其安装状态:
bash
sudo ufw status verbose
如果 UFW 处于非活动状态,您将看到 “Status: inactive”。如果需要安装,请运行以下命令:
bash
sudo apt update
sudo apt install ufw -y
安装完成后,UFW 默认处于非活动状态。
2. 理解 UFW 的默认策略
UFW 采用“默认拒绝”策略,这意味着它会阻止所有未经明确允许的传入连接,同时默认允许所有传出流量。这为大多数服务器提供了一个安全的基线。
- 设置默认传入策略为拒绝(推荐):
bash
sudo ufw default deny incoming - 设置默认传出策略为允许(默认):
bash
sudo ufw default allow outgoing - 如果您需要更严格的控制,可以拒绝所有传出连接,但这需要您明确允许所有必需的传出流量:
bash
sudo ufw default deny outgoing
如果拒绝传出流量,您必须明确允许重要的传出连接,例如 DNS (端口 53)、HTTP (端口 80)、HTTPS (端口 443) 和 NTP (端口 123/udp) 等,以确保系统正常运行。
3. 启用和禁用 UFW
SSH 用户特别注意: 如果您通过 SSH 连接到服务器,在启用 UFW 之前,必须允许 SSH 连接,以避免被锁定在服务器之外。
-
在启用 UFW 前允许 SSH:
bash
sudo ufw allow OpenSSH
此命令会启用OpenSSH应用程序配置文件,它允许所有默认 SSH 端口 (22) 上的传入 SSH 连接。 -
启用 UFW:
bash
sudo ufw enable
您会收到一个警告,提示启用防火墙可能会中断现有的 SSH 连接。输入y并按 Enter 键继续。UFW 将被激活并配置为在系统启动时自动启动。 -
禁用 UFW:
bash
sudo ufw disable
禁用 UFW 会暂时停止防火墙,允许所有网络流量而不进行过滤,这会使您的系统面临攻击。
4. 管理 UFW 规则
UFW 允许您根据端口、服务名称、应用程序配置文件或 IP 地址定义规则来允许或限制流量。
允许连接
- 按端口号:
bash
sudo ufw allow 80/tcp # 允许端口 80 (HTTP) 上的传入 TCP 流量
sudo ufw allow 443/tcp # 允许端口 443 (HTTPS) 上的传入 TCP 流量
sudo ufw allow 53/udp # 允许端口 53 (DNS) 上的传入 UDP 流量 - 按服务名称:
bash
sudo ufw allow http # 等同于允许端口 80/tcp
sudo ufw allow https # 等同于允许端口 443/tcp - 使用应用程序配置文件: UFW 带有针对常见应用程序(如 OpenSSH、Nginx 和 Apache)的预定义配置文件。
- 列出可用的配置文件:
bash
sudo ufw app list - 获取配置文件信息:
bash
sudo ufw app info "Nginx Full" - 启用配置文件:
bash
sudo ufw allow "Nginx Full" # 允许 HTTP (80) 和 HTTPS (443) 流量
请注意,对于包含多个词的配置文件名称,需要用引号括起来。
- 列出可用的配置文件:
- 从特定 IP 地址/子网:
bash
sudo ufw allow from 192.168.1.100 to any port 22 # 允许特定 IP 的 SSH 连接
sudo ufw allow from 192.168.1.0/24 to any port 3306 # 允许特定子网的 MySQL 连接 - 到特定网络接口:
bash
sudo ufw allow in on eth0 to any port 80 # 允许 eth0 接口上的 HTTP 流量
拒绝连接
bash
sudo ufw deny 23/tcp # 拒绝端口 23 (Telnet) 上的传入 TCP 流量
sudo ufw deny from 192.168.1.105 # 拒绝来自特定 IP 的所有流量
删除规则
- 通过指定规则:
bash
sudo ufw delete allow 80/tcp
sudo ufw delete allow "Nginx Full" - 通过规则编号(对于复杂规则很有用):
- 列出带编号的规则:
bash
sudo ufw status numbered - 按编号删除:
bash
sudo ufw delete <rule_number>
- 列出带编号的规则:
5. 高级配置
-
速率限制: UFW 可以限制连接尝试次数,以防止暴力破解攻击。
bash
sudo ufw limit ssh # 限制 SSH 端口的连接
此规则通常在 30 秒内允许 6 次连接尝试。 -
端口转发: 对于更高级的场景,例如端口转发,您可能需要编辑
/etc/ufw/before.rules文件。这通常用于将流量从一个端口重定向到另一个端口。 -
IPv6 支持: UFW 支持 IPv4 和 IPv6。添加的规则通常同时适用于两者。您可以检查
/etc/default/ufw文件以确保IPV6设置为yes。
6. 日志记录
UFW 提供日志记录功能,用于跟踪连接尝试、识别潜在威胁和解决连接问题。
- 启用日志记录:
bash
sudo ufw logging on -
设置日志级别:
bash
sudo ufw logging low | medium | high | fulllow:记录不匹配规则的被阻止数据包和已记录的规则。medium:包括low级别的日志以及无效数据包、新连接和速率受限的日志。high:包括速率受限和不受限数据包的日志。full:所有不受限数据包。
默认日志级别为low。
-
日志文件位置: UFW 日志通常存储在
/var/log/ufw.log、/var/log/syslog或kern.log中,也可以在journald中找到。 -
解释日志: UFW 日志条目通常以
[UFW BLOCK]、[UFW ALLOW]或[UFW LIMIT]等前缀开头,表示所采取的操作。它们还包括IN=(接口)、SRC=(源 IP)、DST=(目标 IP)以及SPT=(源端口)、DPT=(目标端口)等详细信息。
7. 重置 UFW
重置 UFW 会禁用防火墙,删除所有现有规则,并将默认策略重置为拒绝传入和允许传出流量。
bash
sudo ufw reset
8. 最佳实践
- 在远程服务器上启用 UFW 之前,务必允许 SSH 访问,以防止被锁定。
- 在可能的情况下,使用特定的 IP 范围而不是允许来自任何地方 (
any),以增强安全性。 - 对 SSH 等面向公众的服务实施速率限制。
- 定期审计并删除未使用的规则,以保持配置的整洁。
- 监控 UFW 日志以查找异常活动。
- 在部署到生产环境之前,在开发环境中测试防火墙更改。
通过遵循本指南,您可以有效地配置和管理 Ubuntu 上的 UFW,从而显著提升系统的安全性和抵御网络威胁的能力。