1. 引言
UFW(Uncomplicated Firewall,简单防火墙)是 Ubuntu 系统上最常用的防火墙管理工具,它基于 iptables 提供了简洁易用的命令行接口。对于刚接触 Linux 的开发者或运维人员来说,UFW 能大幅降低配置防火墙的门槛,让你用几条命令就能完成端口开放、规则管理等操作。
本文将以 Ubuntu 24.04 LTS 为基础,系统梳理 UFW 的常用命令,从安装、启停、规则管理到端口开放实战,帮助你快速掌握这套防火墙工具。
2. 安装与启用
2.1 安装 UFW
Ubuntu 24.04 默认可能未安装 UFW,可通过以下命令安装:
bash
sudo apt update
sudo apt install ufw -y
2.2 查看状态
安装后先查看当前状态:
bash
sudo ufw status
输出 Status: inactive 表示防火墙未启用。若想查看更详细的信息(含规则编号),可使用:
bash
sudo ufw status verbose
2.3 启用与禁用
启用防火墙(注意:启用前请确保已开放 SSH 端口,避免远程连接中断):
bash
sudo ufw enable
禁用防火墙:
bash
sudo ufw disable
启用后再次查看状态,应显示 Status: active。
3. 基础规则管理
3.1 默认策略
UFW 默认策略为「拒绝所有入站、允许所有出站」。可通过以下命令查看或修改:
bash
sudo ufw default deny incoming
sudo ufw default allow outgoing
3.2 允许与拒绝端口
开放指定端口(以 8080 为例):
bash
sudo ufw allow 8080
拒绝指定端口:
bash
sudo ufw deny 8080
开放端口并指定协议:
bash
sudo ufw allow 8080/tcp
sudo ufw allow 53/udp
3.3 允许特定 IP 访问
允许某个 IP 访问所有端口:
bash
sudo ufw allow from 192.168.1.100
允许某个 IP 访问指定端口:
bash
sudo ufw allow from 192.168.1.100 to any port 22
允许某个网段访问指定端口:
bash
sudo ufw allow from 192.168.1.0/24 to any port 3306
3.4 删除规则
按规则编号删除(先查看编号):
bash
sudo ufw status numbered
sudo ufw delete 3
按规则内容删除:
bash
sudo ufw delete allow 8080
sudo ufw delete allow 8080/tcp
4. 端口开放实战
4.1 开放常用服务端口
以下是一组常见的端口开放命令,可直接复制使用:
bash
# SSH(务必保留)
sudo ufw allow 22/tcp
# HTTP / HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# MySQL
sudo ufw allow 3306/tcp
# PostgreSQL
sudo ufw allow 5432/tcp
# Redis
sudo ufw allow 6379/tcp
# Docker 默认端口
sudo ufw allow 2375/tcp
sudo ufw allow 2376/tcp
4.2 开放端口范围
开放一段连续端口(如 1000-2000):
bash
sudo ufw allow 1000:2000/tcp
sudo ufw allow 1000:2000/udp
4.3 开放端口并限制来源
仅允许内网访问数据库端口:
bash
sudo ufw allow from 192.168.1.0/24 to any port 3306
仅允许特定 IP 访问 SSH:
bash
sudo ufw allow from 203.0.113.10 to any port 22
4.4 查看已开放的端口
bash
sudo ufw status
输出示例:
text
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
3306/tcp ALLOW 192.168.1.0/24
5. 高级用法
5.1 应用配置文件
UFW 支持按应用加载规则,先查看可用应用:
bash
sudo ufw app list
允许某个应用(如 OpenSSH):
bash
sudo ufw allow 'OpenSSH'
5.2 日志功能
开启日志记录:
bash
sudo ufw logging on
查看日志:
bash
sudo tail -f /var/log/ufw.log
5.3 重置规则
清空所有规则并恢复默认策略:
bash
sudo ufw reset
5.4 规则持久化
UFW 的规则在启用后会自动持久化,重启系统后依然生效。若需手动备份规则,可复制配置文件:
bash
sudo cp /etc/ufw/user.rules ~/ufw-user.rules.bak
sudo cp /etc/ufw/before.rules ~/ufw-before.rules.bak
sudo cp /etc/ufw/after.rules ~/ufw-after.rules.bak
6. 常见问题与注意事项
6.1 远程操作前先放行 SSH
在启用 UFW 前,务必先执行:
bash
sudo ufw allow 22/tcp
否则启用防火墙后可能导致 SSH 连接被切断。
6.2 规则顺序
UFW 按规则添加顺序依次匹配,先添加的规则优先生效。默认策略(deny incoming)优先级最低,仅在没有任何规则匹配时才生效。若规则冲突,可通过 sudo ufw status numbered 查看编号,再用 sudo ufw delete 删除后重新添加。
6.3 与 Docker 的兼容性
Docker 默认会直接修改 iptables 规则,绕过 UFW 的管控,导致 Docker 发布的端口即使被 UFW 拒绝也能从外部访问。切勿 在 /etc/docker/daemon.json 中设置 "iptables": false,否则容器将完全无法联网。
推荐做法:在 /etc/ufw/before.rules 末尾追加 Docker 的端口转发规则,例如:
bash
# 允许 Docker 容器访问外部网络
*filter
:DOCKER-USER - [0:0]
:ufw-before-input - [0:0]
-A ufw-before-input -i docker0 -j ACCEPT
COMMIT
修改后执行 sudo ufw reload 生效。这样既能保留 Docker 的网络能力,又能让 UFW 统一管理宿主机端口。
7. 总结
UFW 是 Ubuntu 上高效且易用的防火墙工具,掌握本文介绍的安装、启停、规则管理、端口开放与高级用法,足以应对日常开发与生产环境的防火墙配置需求。建议在操作前先规划好端口清单,并始终保留 SSH 端口的放行规则,避免远程管理中断。
8. 参考命令速查表
| 操作 | 命令 |
|---|---|
| 查看状态 | sudo ufw status |
| 启用防火墙 | sudo ufw enable |
| 禁用防火墙 | sudo ufw disable |
| 开放端口 | sudo ufw allow 8080 |
| 开放端口+协议 | sudo ufw allow 8080/tcp |
| 开放端口范围 | sudo ufw allow 1000:2000/tcp |
| 允许 IP 访问端口 | sudo ufw allow from 192.168.1.100 to any port 22 |
| 删除规则 | sudo ufw delete allow 8080 |
| 查看规则编号 | sudo ufw status numbered |
| 开启日志 | sudo ufw logging on |
| 重置规则 | sudo ufw reset |