Skip to Content

UFW 防火墙

UFW(Uncomplicated Firewall)是 Ubuntu 默认的防火墙管理工具,它是 iptables/nftables 的简化前端,让防火墙配置变得简单直观。

基础操作

启用和禁用

# 启用防火墙 sudo ufw enable # 禁用防火墙 sudo ufw disable # 查看状态 sudo ufw status # 查看详细状态 sudo ufw status verbose # 查看带编号的规则 sudo ufw status numbered
Warning

如果你正在通过 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 enable

Docker 环境

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 DOCKER
sudo 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 UFW

IPv6 支持

# 确保 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 # 启动 gufw

GUFW 提供了直观的图形界面,支持:

  • 开关防火墙
  • 选择预设的安全级别
  • 添加和管理规则
  • 查看活动日志

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 reset
Last updated on