在 Ubuntu Server 环境下,防火墙管理主要依赖 ufw(Uncomplicated Firewall)或者底层的 iptables/nftables。对于绝大多数生产环境和日常运维来说,UFW 是首选方案,因为它配置简单、逻辑清晰且基于 iptables/nftables 后端。
以下是关于如何在 Ubuntu Server 上启用和管理防火墙规则的详细指南,涵盖从基础操作到高级场景的最佳实践。
1. 确认当前状态与安装
Ubuntu Server 通常默认预装了 UFW,但可能处于禁用状态。首先检查状态:
sudo ufw status verbose
如果显示 Status: inactive,说明防火墙未生效。如果尚未安装(极少见),可以使用以下命令安装:
sudo apt update
sudo apt install ufw
2. 核心原则:先允许 SSH,再启用
这是新手最容易犯的错误:直接启用防火墙可能导致远程连接中断。在启用之前,必须确保你允许了当前的 SSH 连接或未来重新连接的端口。
假设你的 SSH 服务运行在默认端口 22:
# 允许 SSH 连接(推荐指定协议 tcp)
sudo ufw allow ssh
# 或者明确指定端口
sudo ufw allow 22/tcp
如果你修改过 SSH 端口(例如改为 2222),则需相应调整:
sudo ufw allow 2222/tcp
3. 启用防火墙
确认规则已添加后,执行启用命令:
sudo ufw enable
系统会提示这会破坏现有的 SSH 连接,确认即可。启用后,再次检查状态:
sudo ufw status numbered
输出示例:
Status: active
To Action From
-- ------ ----
[ 1] 22/tcp ALLOW IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere
...
4. 常用管理命令详解
允许特定服务或端口
-
Web 服务(HTTP/HTTPS):
sudo ufw allow http sudo ufw allow https # 或者 sudo ufw allow 80/tcp sudo ufw allow 443/tcp -
自定义端口范围(如数据库集群通信):
sudo ufw allow 3000:3005/tcp -
允许特定 IP 访问:
# 仅允许 192.168.1.100 访问 22 端口 sudo ufw allow from 192.168.1.100 to any port 22 -
允许整个子网:
sudo ufw allow from 192.168.1.0/24
拒绝或删除规则
-
拒绝所有入站连接(默认策略):
UFW 默认策略通常是deny incoming。你可以显式设置:sudo ufw default deny incoming sudo ufw default allow outgoing -
删除规则:
使用numbered模式查看规则编号,然后删除:sudo ufw delete <rule_number> # 例如删除第 1 条规则 sudo ufw delete 1 -
重置防火墙:
如果配置混乱,想从头开始:sudo ufw reset
5. 高级场景:日志记录与调试
开启日志记录
UFW 默认不记录大量日志以节省性能,但在排查问题时非常有用:
sudo ufw logging on
日志通常位于 /var/log/syslog 或 /var/log/ufo.log(取决于系统配置)。可以通过 grep 过滤:
sudo grep -i "ufw" /var/log/syslog
调试工具:tcpdump 和 ss
当 UFW 规则看似正确但连接仍失败时,不要只依赖 ufw status。使用更底层的工具验证:
-
检查监听端口:
sudo ss -tlnp | grep :22 -
抓包分析:
sudo tcpdump -i any port 22 -nn观察是否有 SYN 包到达服务器,以及是否有 RST 包返回,这有助于判断是防火墙拦截还是应用层问题。
6. 注意事项与最佳实践
-
IPv6 支持:
确保/etc/default/ufw文件中IPV6=yes。否则,IPv6 流量可能绕过防火墙规则。 -
云环境特殊考量:
如果你在 AWS、阿里云、腾讯云等云平台运行 Ubuntu,务必同时配置安全组(Security Group)。云平台的安全组是网络层的第一道防线,UFW 是主机层第二道防线。两者应保持一致,但优先信任云平台的安全组规则,因为它们在网卡驱动层面生效,性能更高且不受操作系统重启影响。 -
避免使用
iptables直接操作:
除非你有特殊需求,否则不要直接使用iptables命令修改规则,因为这会与 UFW 的状态不同步,导致管理混乱。始终通过ufw命令进行管理。 -
备份规则:
在进行重大变更前,备份当前规则:sudo cp /etc/ufw/user.rules /etc/ufw/user.rules.bak sudo cp /etc/ufw/user6.rules /etc/ufw/user6.rules.bak -
自动化与基础设施即代码(IaC):
在生产环境中,建议将防火墙规则纳入 Ansible、Terraform 或 CloudFormation 模板中,确保每次部署都一致,避免人工操作失误。
总结
Ubuntu Server 的防火墙管理以 ufw 为核心,关键在于:先放行 SSH,再启用防火墙;明确默认拒绝入站,按需开放必要端口;结合云平台安全组实现双重防护。 遵循这些步骤,可以构建一个既安全又易于维护的网络边界。
云技术博客