获得 Linux VPS 后,第一件要做的事就是配置防火墙,控制网络流量的进出,防止端口扫描、暴力破解和未经授权的访问。UFW(Uncomplicated Firewall)是 Ubuntu/Debian 的默认防火墙工具,简单易用、功能强大,适合初学者和专业管理员。
UFW 全称 Uncomplicated Firewall,是 iptables 的前端工具,让防火墙规则管理变得更加简单。自 Ubuntu 8.04 起内置,Debian 完全支持。
为什么 VPS 需要配置防火墙:
💡 提示:启用 UFW 之前务必先允许 SSH,否则会立即被锁定在服务器外面。
Ubuntu 20.04+ 预装了 UFW 但未启用。Debian 可能需要手动安装:
# 更新软件包列表
sudo apt update
# 安装 UFW(Ubuntu 通常已预装)
sudo apt install ufw -y
# 检查版本
ufw version
验证 UFW 已安装但尚未启用:
sudo ufw status
# 输出:Status: inactive
优秀防火墙的核心原则是拒绝所有,按需放行——先关闭一切,再开放必要的端口:
# 拒绝所有入站流量(允许的除外)
sudo ufw default deny incoming
# 允许所有出站流量(服务器正常对外通信)
sudo ufw default allow outgoing
⚠️ 警告:在允许 SSH 之前切勿启用 UFW,否则会立即被锁定在服务器外面。
# 允许端口 22(标准 SSH)
sudo ufw allow 22/tcp
# 或使用服务名称
sudo ufw allow ssh
# 如果使用自定义 SSH 端口如 2222
sudo ufw allow 2222/tcp
# HTTP
sudo ufw allow 80/tcp
# HTTPS
sudo ufw allow 443/tcp
# 通过应用配置文件同时允许 HTTP 和 HTTPS
sudo ufw allow 'Nginx Full'
sudo ufw allow 'Apache Full'
# 允许 TCP 端口 8000-8100
sudo ufw allow 8000:8100/tcp
# FTP 被动模式端口
sudo ufw allow 20000:21000/tcp
# 拒绝 MySQL 端口(不应向公网开放)
sudo ufw deny 3306/tcp
# 删除已有的允许规则
sudo ufw delete allow 80/tcp
# 允许单个 IP 访问所有端口
sudo ufw allow from 203.0.113.10
# 只允许单个 IP 访问端口 22
sudo ufw allow from 203.0.113.10 to any port 22
# 允许整个 /24 子网访问端口 22
sudo ufw allow from 203.0.113.0/24 to any port 22
# 封锁单个 IP
sudo ufw deny from 198.51.100.45
# 封锁整个子网
sudo ufw deny from 198.51.100.0/24
💡 提示:对于拥有固定 IP 的生产服务器,建议将 SSH 和 DirectAdmin 面板端口限制为团队 IP,以获得最高安全性。
UFW 的 limit 命令会自动封锁在 30 秒内连接超过 6 次的 IP:
# 为 SSH 启用速率限制
sudo ufw limit ssh
# 或指定端口号
sudo ufw limit 22/tcp
启用此规则后,UFW 将:
配置好所有规则后,启用 UFW:
# 启用 UFW(会提示确认)
sudo ufw enable
# 输出:
# Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
# Firewall is active and enabled on system startup
⚠️ 按 Y 前请确认:确保已允许 SSH 后再按确认键,否则会立即被锁定。
sudo ufw disable
sudo ufw reload
# 基本状态检查
sudo ufw status
# 带编号的规则列表(便于删除)
sudo ufw status numbered
# 完整详细信息
sudo ufw status verbose
ufw status numbered 输出示例:
Status: active
To Action From
-- ------ ----
[ 1] 22/tcp ALLOW IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere
[ 3] 443/tcp ALLOW IN Anywhere
[ 4] 22/tcp (v6) ALLOW IN Anywhere (v6)
[ 5] 80/tcp (v6) ALLOW IN Anywhere (v6)
[ 6] 443/tcp (v6) ALLOW IN Anywhere (v6)
# 删除编号为 3 的规则
sudo ufw delete 3
日志记录有助于了解被封锁的连接尝试:
# 启用低级日志(仅记录被封锁的数据包)
sudo ufw logging low
# 中级日志(被封锁 + 无效数据包)
sudo ufw logging medium
# 实时查看日志
sudo tail -f /var/log/ufw.log
# 只查看被封锁的条目
sudo grep "BLOCK" /var/log/ufw.log | tail -20
适用于运行 Nginx + DirectAdmin 的 VPS 的实用配置:
# 重置清空规则
sudo ufw --force reset
# 设置默认策略
sudo ufw default deny incoming
sudo ufw default allow outgoing
# SSH + 速率限制(关键)
sudo ufw limit 22/tcp
# DirectAdmin 面板
sudo ufw allow 2222/tcp
# HTTP / HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# FTP(仅在需要时开放)
sudo ufw allow 21/tcp
sudo ufw allow 20000:21000/tcp
# 启用日志记录
sudo ufw logging low
# 启用 UFW
sudo ufw enable
# 验证配置
sudo ufw status numbered
| 命令 | 功能 |
|---|---|
ufw enable | 启用 UFW |
ufw disable | 临时禁用 UFW |
ufw status numbered | 列出所有规则(带编号) |
ufw allow PORT/tcp | 允许 TCP 端口 |
ufw deny PORT/tcp | 封锁 TCP 端口 |
ufw limit ssh | 对 SSH 端口进行速率限制 |
ufw allow from IP | 将 IP 加入所有端口白名单 |
ufw deny from IP | 立即封锁 IP |
ufw delete NUM | 按编号删除规则 |
ufw reload | 重新加载所有规则 |
ufw reset | 重置所有规则为默认值 |
ufw logging low/medium/high | 设置日志级别 |
sudo apt install ufwsudo ufw default deny incoming + allow outgoingsudo ufw allow 22/tcpsudo ufw limit sshsudo ufw enablesudo ufw status verbose在获得 VPS 的第一天就正确配置 UFW,能有效防御端口扫描、暴力破解和未授权访问,是每台 VPS 都应具备的基础安全措施。