为什么总有人说『443 之外少暴露』
搭建一台服务器,最常见的安全建议就是「尽量只开 80/443」。原因很简单:端口越多,暴露面越大——每个开放端口都是一个可能被利用的入口。想把这个建议落到操作里,先得认识端口本身。
端口是什么,为什么有 65535 个
一台机器上同时跑着 Web、数据库、SSH……操作系统怎么把网络包准确地交给对应的应用?靠 端口号:TCP/UDP 报文头的目标端口决定数据交给谁。
TCP 报文头: [源端口][目标端口][序号]…
目标端口 = 该机器上哪个应用在处理这个连接
0–65535 一共 65536 个数字,其中 1–1023 是知名端口(well-known,常需特权绑定),1024–49151 注册端口,49152–65535 动态/私有端口。
常用端口速查(按用途)
Web 与加密
| 端口 | 服务 | 备注 |
|---|---|---|
| 80 | HTTP | 常做 301→443 |
| 443 | HTTPS | 加密、默认必开 |
| 8443 | HTTPS 备用 | Web 管理/备用 |
远程管理与运维
| 端口 | 服务 | 备注 |
|---|---|---|
| 22 | SSH | 建议改默认/仅密钥/限来源 |
| 3389 | RDP (Windows) | 公网强烈不建议直开 |
| 21 | FTP | 明文传输,建议 SFTP/SCP |
文件传输
| 端口 | 服务 | 备注 |
|---|---|---|
| 21 | FTP | 明文 |
| 22 | SFTP/SCP | 走 SSH,推荐 |
| 990 | FTPS(隐式) | 加密 FTP |
数据库
| 端口 | 服务 | 备注 |
|---|---|---|
| 3306 | MySQL/MariaDB | 通常只内网 |
| 5432 | PostgreSQL | 只内网 |
| 6379 | Redis | 请勿公网直开 |
| 27017 | MongoDB | 请勿公网直开 |
开发与调试
| 端口 | 服务 | 备注 |
|---|---|---|
| 3000 | Node/Vite dev | 本地绑定可 |
| 3300 | 常用开发服务 | 本地用 |
| 5000/8000 | Flask/通用 | 本机绑定 |
| 53 | DNS | UDP,服务私有 |
邮件与更多
| 端口 | 服务 | 备注 |
|---|---|---|
| 25 / 587 | SMTP / 提交 | 25 常被云封禁 |
| 110 / 143 | POP3 / IMAP | 明文,推荐加密 |
| 993 / 995 | IMAPS / POP3S | 加密推荐 |
| 443/993 | Web/加密邮件 |
源端口 vs 目标端口(一句话)
- 目标端口=客户端要连的『服务门牌』;
- 源端口=客户端发起时临时随机挑的高位端口,服务端回包据此送达。
出站连接源端口随机,一般无需固定放开;入站才关心『要对外放哪个目标端口』。
服务如何被发现(端口扫描)
端口与不同服务之间的关系不是魔法:服务在自己监听的端口上应答,所以可以用端口探测看某 IP 上是否真有服务在响应。这也是「安全自查」与攻击者侦察共用的一招——区别在于你查自己、对方查你。因此最小化开放 + 只对外放必需端口,是降低被扫描面最直接的手段。
安全基线清单
- [ ] 入站只放:80/443 + 所需应用端口,其余
deny; - [ ] SSH:改非默认端口 / 密钥登录 / 限来源 IP(至少一项);
- [ ] 数据库、Redis、Docker、调试口:只绑内网或本机,不对外开放;
- [ ] 用云安全组/主机防火墙落实规则,不用『全放行再补救』;
- [ ] 定期对公网 IP 自作一次端口扫描,确无遗漏的管理口。
自查
拿一台你管理的服务器,用在线端口/IP 查询工具列一下它当前对外开放的端口,再对照上面的基线砍一砍:问自己一句——『这个端口真的需要被公网访问吗?』 很多时候答案是否定的,砍掉一个端口,就少一个攻击面。