🌊 第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)。