UFW 防火墙
UFW(Uncomplicated Firewall)是 Ubuntu 默认的防火墙管理工具,它是 iptables/nftables 的简化前端,让防火墙配置变得简单直观。
基础操作
启用和禁用
# 启用防火墙
sudo ufw enable
# 禁用防火墙
sudo ufw disable
# 查看状态
sudo ufw status
# 查看详细状态
sudo ufw status verbose
# 查看带编号的规则
sudo ufw status numberedWarning
如果你正在通过 SSH 远程管理服务器,在启用防火墙之前必须先放行 SSH 端口(sudo ufw allow ssh)。否则启用防火墙后你将立即失去远程访问权限。
默认策略
# 设置默认拒绝入站连接
sudo ufw default deny incoming
# 设置默认允许出站连接
sudo ufw default allow outgoing
# 推荐的初始配置
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw enable规则管理
允许规则(allow)
# 允许特定端口
sudo ufw allow 22 # SSH
sudo ufw allow 80 # HTTP
sudo ufw allow 443 # HTTPS
# 指定协议
sudo ufw allow 22/tcp
sudo ufw allow 53/udp
# 允许端口范围
sudo ufw allow 6000:6007/tcp
# 允许特定 IP 地址
sudo ufw allow from 192.168.1.100
# 允许特定子网
sudo ufw allow from 192.168.1.0/24
# 允许特定 IP 访问特定端口
sudo ufw allow from 192.168.1.100 to any port 22
# 允许特定子网访问特定端口
sudo ufw allow from 10.0.0.0/8 to any port 3306 proto tcp拒绝规则(deny)
# 拒绝特定端口
sudo ufw deny 23 # Telnet
# 拒绝特定 IP
sudo ufw deny from 203.0.113.50
# 拒绝特定 IP 访问特定端口
sudo ufw deny from 203.0.113.50 to any port 22拒绝并不响应(reject)
与 deny 不同,reject 会向请求者返回拒绝消息:
sudo ufw reject 23
sudo ufw reject from 203.0.113.50删除规则
# 按编号删除
sudo ufw status numbered
sudo ufw delete 3
# 按规则内容删除
sudo ufw delete allow 80
sudo ufw delete deny from 203.0.113.50
# 重置所有规则
sudo ufw reset插入规则
规则按顺序匹配,可以在特定位置插入规则:
# 在第 1 条位置插入规则
sudo ufw insert 1 deny from 203.0.113.50应用配置文件
UFW 支持应用配置文件,简化常见服务的防火墙配置。
查看和使用应用配置
# 列出可用的应用配置
sudo ufw app list
# 查看应用配置详情
sudo ufw app info 'Nginx Full'
# 输出:
# Profile: Nginx Full
# Title: Web Server (Nginx, HTTP + HTTPS)
# Description: Small, but very powerful and efficient web server
# Ports:
# 80,443/tcp
# 使用应用配置
sudo ufw allow 'Nginx Full'
sudo ufw allow 'OpenSSH'
sudo ufw allow 'Samba'创建自定义应用配置
sudo nano /etc/ufw/applications.d/myapp[MyApp]
title=My Custom Application
description=Custom application on port 8080
ports=8080/tcp
[MyApp Full]
title=My Custom Application (Full)
description=Custom application on ports 8080 and 8443
ports=8080,8443/tcp# 更新应用列表
sudo ufw app update MyApp
# 使用新的配置
sudo ufw allow 'MyApp'常见配置场景
Web 服务器
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 'OpenSSH'
sudo ufw allow 'Nginx Full'
# 或
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable数据库服务器
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 'OpenSSH'
# 只允许应用服务器访问数据库
sudo ufw allow from 10.0.1.10 to any port 3306 proto tcp # MySQL
sudo ufw allow from 10.0.1.10 to any port 5432 proto tcp # PostgreSQL
sudo ufw enable邮件服务器
sudo ufw allow 'OpenSSH'
sudo ufw allow 25/tcp # SMTP
sudo ufw allow 587/tcp # SMTP (submission)
sudo ufw allow 993/tcp # IMAPS
sudo ufw allow 995/tcp # POP3S
sudo ufw enableDocker 环境
Docker 默认会绕过 UFW 规则。要解决这个问题:
# 编辑 Docker daemon 配置
sudo nano /etc/docker/daemon.json{
"iptables": false
}# 重启 Docker
sudo systemctl restart docker
# 或使用 UFW 的 DOCKER 规则
sudo nano /etc/ufw/after.rules在文件末尾添加:
# BEGIN UFW AND DOCKER
*filter
:ufw-user-forward - [ACCEPT]
:DOCKER-USER - [ACCEPT]
-A DOCKER-USER -j RETURN -s 10.0.0.0/8
-A DOCKER-USER -j RETURN -s 172.16.0.0/12
-A DOCKER-USER -j RETURN -s 192.168.0.0/16
-A DOCKER-USER -p udp -m udp --sport 53 -j RETURN
-A DOCKER-USER -p tcp -m tcp --sport 80 -j RETURN
-A DOCKER-USER -p tcp -m tcp --sport 443 -j RETURN
-A DOCKER-USER -j ufw-user-forward
COMMIT
# END UFW AND DOCKERsudo ufw reload高级配置
速率限制
UFW 支持连接速率限制,可用于防御暴力破解:
# 限制 SSH 连接速率(30 秒内最多 6 次连接)
sudo ufw limit 22/tcp
# 限制特定端口的速率
sudo ufw limit 8080/tcp日志配置
# 启用日志
sudo ufw logging on
# 设置日志级别
sudo ufw logging low # 低(默认)
sudo ufw logging medium # 中
sudo ufw logging high # 高
sudo ufw logging full # 完整
# 关闭日志
sudo ufw logging off
# 查看防火墙日志
sudo tail -f /var/log/ufw.log
journalctl -k | grep UFWIPv6 支持
# 确保 IPv6 已启用
sudo nano /etc/default/ufw
# 确认: IPV6=yes
# IPv6 规则
sudo ufw allow from 2001:db8::/32 to any port 22直接编辑规则文件
UFW 的规则文件位于 /etc/ufw/:
# 用户规则
sudo nano /etc/ufw/user.rules # IPv4
sudo nano /etc/ufw/user6.rules # IPv6
# 在 UFW 规则之前执行的规则
sudo nano /etc/ufw/before.rules
# 在 UFW 规则之后执行的规则
sudo nano /etc/ufw/after.rules转发规则
如果服务器作为网关或路由器:
# 启用转发
sudo nano /etc/ufw/sysctl.conf
# 取消注释: net/ipv4/ip_forward=1
# 添加 NAT 规则
sudo nano /etc/ufw/before.rules在 *filter 之前添加:
# NAT
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
COMMIT# 允许转发
sudo ufw route allow in on eth1 out on eth0
sudo ufw reload图形化管理
GUFW
# 安装 GUFW(UFW 的图形前端)
sudo apt install gufw
# 启动
gufwGUFW 提供了直观的图形界面,支持:
- 开关防火墙
- 选择预设的安全级别
- 添加和管理规则
- 查看活动日志
Security Center
Ubuntu 26.04 的 Security Center 主要用于安全状态展示和权限提示开关。防火墙规则管理仍建议使用 ufw 命令行或 GUFW。
故障排除
# 检查 UFW 是否正在运行
sudo ufw status
# 检查 iptables/nftables 实际规则
sudo iptables -L -n -v
sudo nft list ruleset
# 临时禁用防火墙排查网络问题
sudo ufw disable
# 排查完毕后重新启用
sudo ufw enable
# 查看被阻止的连接
sudo tail -f /var/log/ufw.log
# 完全重置
sudo ufw resetLast updated on