跳转至

UFW Ubuntu 防火墙

一句话概述:UFW(Uncomplicated Firewall)是 Ubuntu 默认的防火墙管理工具,用简单的命令控制哪些端口开放、哪些端口关闭,比直接写 iptables 规则容易 100 倍。

核心知识点

概念白话解释
防火墙控制哪些网络流量能进出你的服务器
UFWiptables 的简化前端,命令更友好
入站(Incoming)外部到你服务器的流量
出站(Outgoing)你服务器到外部的流量
允许(Allow)放行流量
拒绝(Deny)丢弃流量(不响应)
拒绝并通知(Reject)拒绝流量但告诉对方被拒了

安装配置

# Ubuntu 通常已预装
sudo apt install ufw  # 如果没有就安装

# ⚠️ 重要:开启前先允许 SSH!
sudo ufw allow ssh  # 或 sudo ufw allow 22
# 不做这步就开防火墙 = 把自己锁在门外!

# 开启防火墙
sudo ufw enable  # 启用防火墙

# 查看状态
sudo ufw status  # 简要状态
sudo ufw status verbose  # 详细状态(显示默认策略)
sudo ufw status numbered  # 带编号的规则列表

默认策略

sudo ufw default deny incoming  # 默认拒绝所有入站(推荐)
sudo ufw default allow outgoing  # 默认允许所有出站

基本使用

按端口允许

sudo ufw allow 80  # 允许 HTTP
sudo ufw allow 443  # 允许 HTTPS
sudo ufw allow 3000  # 允许 Node.js 开发端口
sudo ufw allow 5432  # 允许 PostgreSQL(谨慎!)

按服务名允许

sudo ufw allow ssh  # SSH(22)
sudo ufw allow http  # HTTP(80)
sudo ufw allow https  # HTTPS(443)
sudo ufw app list  # 列出所有可用的应用配置

按 IP 限制

# 只允许特定 IP 访问
sudo ufw allow from 192.168.1.100  # 允许这个 IP 的所有流量
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

# 拒绝特定 IP
sudo ufw deny from 1.2.3.4  # 封禁某 IP

按协议限制

sudo ufw allow 53/tcp  # 只允许 TCP 的 53 端口
sudo ufw allow 53/udp  # 只允许 UDP 的 53 端口
sudo ufw allow 6000:6007/tcp  # 允许端口范围 6000-6007

删除规则

sudo ufw status numbered  # 先查看编号
# [1] 22/tcp ALLOW IN Anywhere
# [2] 80/tcp ALLOW IN Anywhere

sudo ufw delete 2  # 按编号删除第 2 条规则
sudo ufw delete allow 80  # 按规则内容删除

高级用法

限速(防暴力破解)

sudo ufw limit ssh  # SSH 限速:30 秒内超过 6 次连接就临时封禁
# 简单有效的 SSH 防暴力破解

日志

sudo ufw logging on  # 开启日志
sudo ufw logging medium  # 日志级别:low/medium/high/full
# 日志位置:/var/log/ufw.log
sudo tail -f /var/log/ufw.log  # 实时查看

Nginx/Apache 应用配置

sudo ufw app list  # 查看可用应用
# Available applications:
#   Nginx Full   (80,443)
#   Nginx HTTP   (80)
#   Nginx HTTPS  (443)
#   OpenSSH      (22)

sudo ufw allow 'Nginx Full'  # 同时允许 HTTP 和 HTTPS

典型 Web 服务器配置

# 推荐的 Web 服务器防火墙配置
sudo ufw default deny incoming  # 默认拒绝入站
sudo ufw default allow outgoing  # 默认允许出站
sudo ufw allow ssh  # SSH(必须!)
sudo ufw allow 'Nginx Full'  # HTTP + HTTPS
sudo ufw limit ssh  # SSH 限速
sudo ufw enable  # 启用

常见报错

报错信息原因解决方案
SSH 连不上了开防火墙前没允许 SSH通过云平台控制台登录,ufw allow ssh
ERROR: Could not find a profile应用配置不存在ufw app list 查看可用配置
规则不生效防火墙没启用sudo ufw enable
Docker 绕过 UFWDocker 直接操作 iptables需要额外配置 Docker UFW 规则
端口扫描仍可探测UFW deny 会丢弃包但端口仍可探测正常行为,deny 已经阻止连接

速查表

# 基础命令
sudo ufw enable           # 启用防火墙
sudo ufw disable          # 关闭防火墙
sudo ufw status           # 查看状态
sudo ufw status verbose   # 详细状态
sudo ufw status numbered  # 带编号

# 规则管理
sudo ufw allow <端口>     # 允许端口
sudo ufw deny <端口>      # 拒绝端口
sudo ufw delete <编号>    # 删除规则
sudo ufw reset            # 重置所有规则
sudo ufw limit <端口>     # 限速

# 常用组合
sudo ufw allow ssh        # 允许 SSH
sudo ufw allow http       # 允许 HTTP
sudo ufw allow https      # 允许 HTTPS
sudo ufw allow from <IP>  # 允许特定 IP
sudo ufw deny from <IP>   # 封禁 IP
sudo ufw allow <端口>/tcp # 指定协议
sudo ufw allow <起>:<止>/tcp  # 端口范围

参考:UFW 手册 | Ubuntu 防火墙文档