Ubuntu 24.04 UFW 全命令攻略:从入门到端口开放实战

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
相关推荐
叼烟扛炮9 小时前
Linux 学习笔记(四十一):TCP 并发演进——从单进程到多线程服务器
linux·运维·服务器·网络·笔记·学习·tcp/ip
ynchyong9 小时前
Linux 有两个 “版本“
linux·发行版·内核版本
叼烟扛炮9 小时前
Linux 学习笔记(四十四):HTTP 协议解析与极简 Web 服务器实战
linux·服务器·学习
叼烟扛炮9 小时前
Linux 学习笔记(四十三):网络编程进阶——自定义协议解决 TCP 粘包与守护进程
linux·开发语言·网络·笔记·tcp/ip
Decay__10 小时前
09_MySQL 闪回与时间点恢复 —— binlog 回放、mysqlbinlog、PITR 与误删恢复
运维·数据库·sql·mysql·架构
久曲健的测试窝10 小时前
2026软件测试工具选型指南:双模式如何化解UI脚本维护难题
运维·人工智能·科技·aigc
Escalating_xu10 小时前
【Linux 网络编程】DNS 与 ICMP:从域名解析到 ping、traceroute,把“网络通不通”问清楚
linux·网络·php
NailiConveyor11 小时前
柔性物流方案如何适配工厂升级?自动化输送流水线定制要点
大数据·运维·自动化·制造·业界资讯
Lsetea12 小时前
Certbot webroot申请SSL证书总是404:Nginx挑战目录与路径映射检查
运维·nginx·https·ssl证书·certbot
如若12312 小时前
Windows SSH + Headscale/Tailscale 组网及免密登录完整配置教程
运维·windows·ubuntu·ssh·内网穿透