🌊 第07章 · 端口规划与防火墙

21115-21117 等端口开放

端口规划与防火墙

这一章讲一架同时跑"网站、代理、远程协助"的服务器该怎么规划端口,以及如何在云安全组与本机防火墙双层放行。核心原则:只开真正需要对外暴露的端口,其余一律关。本机场景就同时放行了 80/443、22、21115-21117。

一台生产服务器的端口全景(本机参考)

端口 协议 作用 是否对外 备注
22 TCP SSH 管理 建议限来源 禁 root/密码,密钥登录
80 / 443 TCP 网站系(Nginx 反代) 开 统一由 nginx 终止 TLS
3000 TCP bangdream 后端 仅 127.0.0.1 由 nginx 反代,不直接暴露
3010 TCP lovelive 后端 仅 127.0.0.1 同上
3081 TCP dsh 前端 仅 127.0.0.1 同上
8090 TCP GitLab 内部 仅 127.0.0.1 外层 nginx -> 8090
10086 TCP Xray inbound 仅 127.0.0.1 经 nginx WS 反代
21115/21116 TCP/UDP RustDesk hbbs 开 21116 需 TCP+UDP
21117 TCP RustDesk hbbr 开 中继
3306 TCP MySQL 仅 127.0.0.1 禁止对外
9090/9100 TCP Prometheus / node-exporter 仅 127.0.0.1 监控

关键原则 | 后端服务(应用、数据库、代理 inbound)一律只监听 127.0.0.1,由外层 nginx(监听 0.0.0.0:443)反代。这样对外只需暴露 80/443 + 特殊端口(22、21115-21117)。

监听地址怎么看(127.0.0.1 vs 0.0.0.0)

ss -tlnp | grep ':3306'
# 127.0.0.1:3306   → 只本机可访问(安全)
ss -tlnp | grep ':443'
# 0.0.0.0:443      → 对外可访问(预期)

警示 | 若 MySQL/应用误监听 0.0.0.0,即使你防火墙没放行,云安全组没开放,也可能被内网/网络边界扫描到。务必让数据库等敏感服务仅监听回环。

云安全组(第一层)放行示例

云控制台 安全组/防火墙 → 入站规则,只加:

优先级 协议/端口 来源 说明
1 TCP 22 你的管理 IP SSH
2 TCP 80 0.0.0.0/0 HTTP
3 TCP 443 0.0.0.0/0 HTTPS
4 TCP 21115 0.0.0.0/0 RustDesk hbbs
5 TCP 21116 + UDP 21116 0.0.0.0/0 RustDesk hbbs
6 TCP 21117 0.0.0.0/0 RustDesk hbbr

注意 | 云安全组是"最外圈",这里没放行就直接拒绝;本机防火墙是第二圈。任何一层没放,都连不上。排查连不上时先看云安全组。

本机防火墙(第二层)放行示例

sudo ufw default deny incoming
sudo ufw allow 22
sudo ufw allow 80,443/tcp
sudo ufw allow 21115/tcp
sudo ufw allow 21116/tcp
sudo ufw allow 21116/udp
sudo ufw allow 21117/tcp
sudo ufw enable
sudo ufw status verbose

提示 | 本机当前 ufw status 若显示 inactive,表示本机这层没起作用、完全交给云安全组——这也是合法的做法。用哪层做主,要一致并清楚,别两圈都不开还不自知。

常见踩坑

坑 后果 解决
只放 TCP 漏 UDP RustDesk 连不上 21116 要同时放 TCP+UDP
后端监听 0.0.0.0 端口暴露在外 改 listen 127.0.0.1:3306 等
忘了放 22 就开启防火墙 远程被封死 先放 22 再 enable;或 VNC 救援
nginx 之外再额外暴露 3000/3306 多出攻击面 只保留 80/443 反代
出站被限制 拉依赖/发信失败 云安全组出站默认放行即可

验证端口是否真的通(内外部)

# 本机:看监听与地址
ss -tlnp | grep -E ':22|:443|:2111[0-9]'
# 本机:确认只本机的服务确实只监听 127.0.0.1
ss -tlnp | grep ':3306'
# 外部:从另一台机器测(或 curl)
nc -zv 2.25.183.241 443
nc -zuv 2.25.183.241 21116

相关命令

  • ss -tlnp 看全部监听;ss -tuln 含 UDP。
  • ufw status verbose / ufw enable 管本机防火墙。
  • iptables -L -n 看内核规则(ufw 底层)。
  • netstat -tulnp(较旧,等价 ss)。