Debian系统ufw防火墙生产配置

生产环境里的 Debian 服务器如果没配好防火墙,相当于把家门敞开在公网上。
本文要解决的就是这个问题:如何用 ufw 这套工具,在不影响业务的前提下只开放必要端口,把风险面压到最小。
配置完成后,你能清楚看到哪些端口在监听、哪些端口对外关闭,也能应对常见的规则冲突和误封问题。
下面直接按实际运维流程来走。

动手前先确认环境

开始操作前,确认下面几项,避免配置到一半发现自己环境不对:

  • 系统是 Debian 10/11/12 或基于 Debian 的发行版,用 cat /etc/debian_version 查看。
  • 当前登录用户有 root 权限,或者能通过 sudo -i 切换到 root。
  • 知道服务器上跑的业务需要哪些端口,例如 SSH 通常是 22,Nginx 是 80/443,MySQL 如果不对外可以不开。
  • 如果服务器在云平台(比如阿里云、腾讯云、泽御云等),先登录云控制台确认安全组规则,避免云安全组和系统内防火墙互相拦截。

这里特别提醒:千万不要在没保留远程连接通道的情况下执行防火墙默认拒绝规则,否则你可能把自己锁在服务器外面。
建议先放行 SSH 端口再操作。

安装并启用 ufw,先定默认拒绝策略

Debian 系统不一定预装 ufw,先安装:

apt update && apt install -y ufw

安装后先设置默认策略:入站默认拒绝,出站默认允许。
这是生产配置的核心思路:只放行明确允许的端口,其余一律丢弃。

ufw default deny incoming
ufw default allow outgoing

注意顺序:一定先放行 SSH,再启用 ufw。
如果 SSH 端口不是默认 22,改成你自己的端口:

ufw allow 22/tcp comment 'SSH'

然后启用防火墙:

ufw enable

启用过程会提示可能中断现有连接,输入 y 确认。
启用后立刻检查 SSH 是否还能通,如果卡住,等几秒没反应,就用云控制台的 VNC 或救援模式回滚。

按业务清单只开放必要端口

生产环境里“必要端口”是指业务真正需要对外提供服务的端口,不是所有服务端口。
先看看哪些端口在监听:

ss -tlnp

输出里 Local Address:Port 列就是当前监听端口。
根据业务类型,放行规则参考如下:

| 业务 | 端口 | 命令 |
| --- | --- | --- |
| SSH | 22(或自定义) | ufw allow 22/tcp |
| HTTP | 80 | ufw allow 80/tcp |
| HTTPS | 443 | ufw allow 443/tcp |
| DNS 对外 | 53 | ufw allow 53 |
| 邮件发送 | 25 | ufw allow 25/tcp |

如果数据库(如 MySQL 3306)只需要本机或内网访问,不要向公网放行,直接用下面命令删除默认规则:

ufw delete allow 3306/tcp

需要限制来源 IP 时,用来源地址限定:

ufw allow from 192.168.1.0/24 to any port 3306 proto tcp

这条只允许内网网段访问 3306,公网 IP 会被拒绝,比单纯开放更安全。

常见误配置和避坑点

生产环境最容易踩的坑集中在下面几处:

  • 先启用再放行 SSH:这会导致当前连接立刻断开。正确顺序是先 ufw allow 22/tcp,再 ufw enable
  • 端口协议写错:只写 ufw allow 80 会同时放行 tcp 和 udp,但某些服务只需要 tcp。建议明确 80/tcp80/udp,减少不必要的暴露。
  • 放行规则重复叠加:多次执行同一放行命令会生成多条规则,查看时用 ufw status numbered 检查,同名规则可以删除多余项。
  • 修改端口后忘记更新规则:如果改了 SSH 端口,旧 22 规则还在放行,新端口没放行,等于白改。改端口前先加入新规则再删除旧规则。
  • 云安全组和 ufw 冲突:云控制台安全组和系统 ufw 是两层过滤,任何一层拒绝都会断连。排查时先分别查看两层规则,再测试连通性。

验证规则是否生效,并保持长期可维护

配置完成后要验证,不能只看规则列表。

查看当前规则:

ufw status verbose

能看到每一条规则、默认策略和状态。
如果端口不对,用 ufw delete 删除指定规则。

测试端口连通性,可以在本机用 curl 检测 HTTP:

curl -I http://127.0.0.1

外网测试可以用另一台机器的 nc 或在线端口扫描工具(注意只扫自家服务器,别碰别人的)。

更细的验证:检查防火墙日志,确认有没有异常丢弃:

journalctl -u ufw --since today | grep "BLOCK"

如果发现有效业务被拦截,用 ufw allow 补规则,或者检查规则顺序。
需要永久生效的话,ufw 默认规则会写入系统配置,重启后仍然保留。

最后建议把规则做成脚本或文档放进服务器配置目录,例如 /etc/ufw/applications.d/,后续变更能追溯。
这样即使哪天换人维护,也不会因为不知道放行了哪些端口而酿成事故。

如果你正在处理 Debian 系统的 ufw 防火墙生产配置,只开放必要端口这一需求,建议先按本文顺序走完,再根据实际业务调整端口。
遇到连不上、规则不生效、端口被墙这类问题,优先回看避坑部分,并对照云平台安全组一起排查。
维护好端口清单,就是维护好服务器的第一道门。

分享到:
上一篇
KVM宿主机遭受网络攻击,虚拟机带宽打满限流
下一篇
MySQL数据库定期备份脚本,mysqldump+压缩+过期
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意