UFW防火墙基础命令,Ubuntu服务器防护
UFW(Uncomplicated Firewall)是Ubuntu上对iptables的简化封装,用几条命令就能控制服务器端口进出。
本文面向零基础用户,按“准备—操作—避坑—验证”顺序,讲清楚如何用UFW基础命令完成Ubuntu服务器防护,最终能独立放行或拒绝端口并确认规则生效。
先检查环境与安装状态
Ubuntu通常预装UFW,先确认是否可用:
sudo ufw version
如果提示命令不存在,先更新软件源再安装:
sudo apt update
sudo apt install ufw
安装后UFW默认是禁用状态,不要急着启用。关键一步:先确认当前SSH端口,避免启用防火墙后把自己挡在外面。
sudo ss -tlnp | grep sshd
常见输出显示监听在0.0.0.0:22,说明SSH端口是22。
如果你的服务器改过端口,以实际显示为准。
放行必要端口再启用
在启用UFW之前,必须放行SSH端口,否则当前连接可能中断。
假设SSH是22端口:
sudo ufw allow 22/tcp
如果用了宝塔面板,还需要放行面板端口(例如8888)和网站端口(80、443):
sudo ufw allow 8888/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
放行完成后启用UFW:
sudo ufw enable
系统会提示可能中断SSH连接,输入y确认。
启用后查看状态:
sudo ufw status verbose
正常会显示Status: active以及已放行的规则列表。结论:先放行再启用,是避免锁死SSH的核心顺序。
日常常用命令与默认策略
UFW的默认策略决定未明确放行的流量如何处理。
查看当前默认策略:
sudo ufw status verbose | grep Default
建议设置为:拒绝所有入站,允许所有出站。
sudo ufw default deny incoming
sudo ufw default allow outgoing
常用操作命令:
- 放行指定端口:
sudo ufw allow 3306/tcp - 拒绝指定端口:
sudo ufw deny 3306/tcp - 删除规则:
sudo ufw delete allow 3306/tcp - 按编号删除:先
sudo ufw status numbered查看编号,再sudo ufw delete 编号 - 禁用防火墙:
sudo ufw disable - 重置所有规则:
sudo ufw reset(谨慎使用)
放行特定IP访问某端口:
sudo ufw allow from 192.168.1.100 to any port 3306 proto tcp
判断条件:只对信任IP开放数据库端口,比直接放行所有来源更安全。
避坑指南
- 启用前务必放行SSH端口,否则远程连接会断开,只能通过VNC或救援模式恢复。
- 修改SSH端口后,记得同步更新UFW规则,旧端口规则可删除。
- 使用Docker时,Docker会直接操作iptables,可能绕过UFW规则。如果发现放行无效,检查Docker的端口映射配置。
ufw reset会清空所有规则并禁用防火墙,执行前确认是否已放行SSH。- 规则顺序影响匹配,但UFW会自动处理,一般按添加顺序即可。
验证规则是否生效
从另一台机器测试端口连通性:
telnet 服务器IP 22
如果连接成功,说明SSH放行生效。
测试一个未放行端口:
telnet 服务器IP 3306
连接被拒绝或超时,说明默认拒绝策略起作用。
也可以在服务器上查看UFW日志:
sudo tail -f /var/log/ufw.log
日志会记录被拦截的流量,帮助判断规则是否符合预期。
常见疑问
UFW和iptables有什么区别?
UFW是iptables的前端工具,命令更简单,适合快速配置。复杂规则仍可直接用iptables。
启用UFW后网站打不开怎么办?
检查是否放行80和443端口,以及Web服务是否正常监听。用sudo ufw status确认规则。
如何只允许特定IP访问SSH?
先删除通用SSH规则,再添加:sudo ufw allow from 你的IP to any port 22 proto tcp。
UFW会影响已建立的连接吗?
启用时已建立的连接通常不受影响,但新连接会按规则处理。建议在维护窗口操作。
掌握以上UFW防火墙基础命令,就能完成Ubuntu服务器防护的基本配置。
建议每次修改规则后都用sudo ufw status verbose复查,确保放行和拒绝符合预期。