在 Debian 系统中,ufw(Uncomplicated Firewall)是默认且推荐的防火墙管理工具。它基于 iptables,但提供了更简洁的命令行接口,非常适合服务器环境使用。
以下是启用 ufw 防火墙的标准操作流程及关键注意事项,特别是针对云服务器场景的安全配置建议。
1. 安装与检查状态
大多数 Debian 版本(如 Debian 10 Buster, 11 Bullseye, 12 Bookworm)默认已预装 ufw。如果没有安装,可以通过以下命令安装:
sudo apt update
sudo apt install ufw
安装完成后,检查当前状态:
sudo ufw status verbose
如果显示 Status: inactive,说明防火墙尚未启用。
2. 设置默认策略(关键步骤)
在启用防火墙之前,必须先设置默认的出入站规则,否则可能导致 SSH 连接被阻断,造成服务器失联。
Debian 默认策略通常已经是:
- 入站(Input):拒绝(Deny)
- 出站(Output):允许(Allow)
你可以显式地确认或修改这些默认策略:
# 设置默认入站策略为拒绝所有连接
sudo ufw default deny incoming
# 设置默认出站策略为允许所有连接
sudo ufw default allow outgoing
注意:对于大多数个人服务器和小型应用,允许所有出站流量是合理的,因为客户端需要访问外部网络获取更新、时间同步等。但如果你的服务器有严格的安全合规要求,可以考虑限制出站流量至必要端口。
3. 添加必要的放行规则
在启用防火墙前,务必确保你需要的服务端口对公网开放。最关键的规则是允许 SSH 连接。
允许 SSH 连接
SSH 默认使用 22 端口。如果你更改了 SSH 端口,请替换对应的端口号。
# 允许 IPv4 和 IPv6 的 SSH 连接
sudo ufw allow ssh
# 或者明确指定端口
sudo ufw allow 22/tcp
允许 Web 服务(HTTP/HTTPS)
如果你的服务器提供网站服务:
sudo ufw allow http # 80 端口
sudo ufw allow https # 443 端口
其他常见服务
根据实际需求开放端口,例如 MySQL(仅限内网或特定 IP)、Redis 等。出于安全考虑,数据库端口通常不建议直接暴露给公网。
# 示例:允许来自特定 IP 的 MySQL 连接
sudo ufw allow from 192.168.1.100 to any port 3306 proto tcp
4. 启用 UFW 防火墙
完成上述规则配置后,即可启用防火墙:
sudo ufw enable
系统会提示:“Command may disrupt existing ssh connections. Proceed with operation (y|n)?”
输入 y 并回车确认。
此时,防火墙已激活,并且只允许你之前配置的端口通过。
5. 验证状态
再次检查防火墙状态,确保规则正确加载:
sudo 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)
6. 日常管理与故障排除
查看日志
如果怀疑某些连接被错误拦截,可以查看 UFW 日志:
sudo tail -f /var/log/ufw.log
删除规则
如果需要移除某条规则,可以使用编号或具体命令:
# 根据编号删除(例如删除第 1 条规则)
sudo ufw delete 1
# 或者直接删除规则
sudo ufw delete allow ssh
禁用防火墙
如需临时关闭防火墙进行调试:
sudo ufw disable
云服务器特别注意事项
-
云厂商安全组(Security Group)优先:
国内主流云厂商(阿里云、腾讯云、华为云等)都提供了“安全组”功能。UFW 是主机内部的防火墙,而安全组是云平台层面的防火墙。最佳实践是:- 在云控制台安全组中:仅开放必要端口(如 22, 80, 443)。
- 在主机内部 UFW 中:同样配置相应规则,形成双重防护。
- 如果安全组已经限制了端口,UFW 中的对应规则将不会生效(因为数据包根本不会到达主机网卡),但这不影响 UFW 作为最后一道防线的存在价值。
-
避免锁定自己:
永远不要在未配置 SSH 放行规则的情况下启用 UFW。一旦误操作导致 SSH 断开,你将无法通过远程连接修复,只能借助云控制台的 VNC 终端或救援模式进行恢复。 -
IPv6 支持:
确保/etc/default/ufw文件中IPV6=yes,以便同时保护 IPv6 流量。
通过以上步骤,你可以在 Debian 云服务器上安全、有效地启用 UFW 防火墙,提升系统安全性。
云技术博客