设置 UFW 防火墙保护 VPS 端口安全的核心是默认拒绝所有入站连接,仅放行必要的 SSH 和业务端口。适用场景为 Ubuntu/Debian 系 Linux 服务器,操作前需确保当前 SSH 会话不被中断。
先说结论:UFW 适合 Ubuntu/Debian 系统快速构建主机层防火墙,优先放行 SSH 端口再启用策略,最后通过状态命令验收。
- 适合:Ubuntu 14.04 及以上、Debian 等默认支持 UFW 的 Linux 发行版
- 优先做:执行允许 SSH 规则后再开启防火墙,防止远程连接断开
- 再验证:使用 ufw status verbose 确认规则生效且默认策略为 deny
命令速用版
以下命令用于快速初始化 UFW 基础安全策略,需在 root 或 sudo 权限下执行。
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp
sudo ufw enable
sudo ufw status verbose
为什么会这样
默认拒绝入站流量能最大程度减少暴露面,防止未授权端口被扫描利用。VPS 公网 IP 通常直面互联网,开放所有端口会导致 SSH 暴力破解或服务漏洞被直接攻击。UFW 作为 iptables 的前端管理工具,简化了规则配置流程,适合单机防火墙场景。
分步处理
第一步:检查 UFW 状态与依赖
执行 sudo ufw status 查看当前状态,若未安装则运行 sudo apt update && sudo apt install ufw。确认系统为 Ubuntu 或 Debian,CentOS 默认使用 firewalld 而非 UFW。
第二步:设置默认策略
运行 sudo ufw default deny incoming 设置入站默认拒绝,运行 sudo ufw default allow outgoing 设置出站默认允许。此步骤确保未明确允许的端口无法被外部访问。
第三步:放行必要端口
执行 sudo ufw allow 22/tcp 放行 SSH 连接,若修改过 SSH 端口则替换为实际端口号。若有 Web 服务,执行 sudo ufw allow 80/tcp 和 sudo ufw allow 443/tcp。
第四步:启用防火墙
执行 sudo ufw enable 启用规则,系统会提示可能中断 SSH 连接,确认已放行 SSH 端口后输入 y 继续。
第五步:限制特定 IP 访问(可选)
若需更高安全级别,执行 sudo ufw allow from 1.2.3.4 to any port 22 仅允许特定管理 IP 连接 SSH。
怎么验证是否生效
执行 sudo ufw status verbose 查看当前规则列表,确认 Status 为 active 且 Default 为 deny (incoming)。使用 ss -tulpn 检查本地监听端口,确认服务正常运行。从外部网络尝试 telnet 未放行端口,连接应被拒绝或超时。
常见坑
第一,启用前未放行 SSH 端口会导致远程连接永久断开,需通过云厂商控制台 VNC 恢复。第二,云服务商安全组与 UFW 同时存在时,需确保两者策略不冲突,安全组优先级通常更高。第三,IPv6 环境需确认 UFW 是否配置了 IPv6 规则,默认配置可能仅针对 IPv4。
常见问题
如何重置 UFW 所有规则?
执行 sudo ufw reset 可清除所有配置并禁用防火墙,重置后需重新配置规则。
如何查看被拦截的日志?
UFW 日志通常位于/var/log/ufw.log,使用 sudo tail -f /var/log/ufw.log 可实时查看拦截记录。
允许特定 IP 访问所有端口怎么做?
使用 sudo ufw allow from 1.2.3.4 命令可放行指定 IP 的所有入站流量,适用于可信管理机。
参考来源
Ubuntu Community Help: UFW - Community Help Wiki (https://help.ubuntu.com/community/UFW)
Debian Administrator's Handbook: Firewall section (https://debian-handbook.info/browse/stable/sect.kernel-firewall.html)