1. 核心概念
| 术语 |
说明 |
| 端口 |
16 位无符号整数(0–65535),用于标识同一主机上的不同网络进程 |
| TCP/UDP |
传输层协议,端口在不同协议下独立(`TCP:80 ≠ UDP:80`) |
| IANA 分类 |
- 0–1023:系统端口(Well-Known)
- 1024–49151:注册端口(Registered)
- 49152–65535:动态/私有端口
|
2. 常见端口速查表(生产精选)
| 端口 |
协议 |
服务 |
说明 |
| 22 |
TCP |
SSH |
安全远程管理 |
| 80 |
TCP |
HTTP |
明文网页服务 |
| 443 |
TCP |
HTTPS |
TLS 加密网页 |
| 3306 |
TCP |
MySQL |
默认数据库端口 |
| 5432 |
TCP |
PostgreSQL |
默认数据库端口 |
| 6379 |
TCP |
Redis |
内存数据库 |
| 27017 |
TCP |
MongoDB |
默认 NoSQL 端口 |
| 8080 |
TCP |
HTTP 备用 |
开发、反向代理常用 |
| 8443 |
TCP |
HTTPS 备用 |
备用加密端口 |
| 3389 |
TCP |
RDP |
Windows 远程桌面 |
系统端口查询:
- Linux:
cat /etc/services - Windows:
netsh int ipv4 show excludedportrange
3. 查看端口占用
Linux(推荐 ss 替代 netstat)
ss -tuln # 显示所有监听端口(TCP/UDP)
ss -tulnp | grep :80 # 带进程名查看 80 端口
lsof -i:80 # 列出占用 80 端口的进程
fuser -k 80/tcp # 强制终止占用 80 端口的进程
Windows(PowerShell)
Get-NetTCPConnection -State Listen | Select LocalPort, OwningProcess
netstat -ano | findstr :80
taskkill /PID 1234 /F # 替换 PID 强制结束进程
4. 防火墙快速配置
| 系统 |
命令 |
| Ubuntu/Debian |
`sudo ufw allow 22/tcp` |
| CentOS/RHEL |
`sudo firewall-cmd --add-port=80/tcp --permanent && sudo firewall-cmd --reload` |
| Windows |
`New-NetFirewallRule -Name "Allow HTTP" -Direction Inbound -Protocol TCP -LocalPort 80 -Action Allow` |
云平台安全组:
AWS / 阿里云 / 腾讯云 / Azure → 入站规则 → 添加 TCP:80、TCP:443
5. 端口转发(SSH 穿透神器)
# 本地端口转发:访问内网服务
ssh -L 8080:10.0.0.10:80 user@public-server-ip
# 远程端口转发:内网服务暴露到公网
ssh -R 8080:localhost:3000 user@public-server-ip
6. Docker 端口映射
# 容器运行时映射
docker run -d -p 8080:80 --name web nginx
# docker-compose.yml 示例
services:
web:
image: nginx:latest
ports:
- "8080:80"
- "8443:443"
restart: unless-stopped
7. 故障排查清单(8 步法)
1. 服务是否启动? systemctl status nginx
2. 端口是否监听? ss -tuln | grep :80
3. 本地防火墙? ufw status | grep 80
4. 云安全组? 云控制台 → 安全组检查
5. SELinux 阻止? getsebool -a | grep httpd
6. 端口转发配置? iptables -t nat -L -n
7. 网络连通性? telnet 1.2.3.4 80 或 curl -v
8. 容器网络模式? docker inspect <container> | grep Network
8. 安全最佳实践(三条铁律)
| 规则 |
说明 |
| 最小权限原则 |
仅开放业务必需端口 |
| 来源 IP 限制 |
`ufw allow from 192.168.1.0/24 to any port 22` |
| 定期审计 |
每周执行 `ss -tuln > ports_$(date +%F).log` |
9. 一键检测脚本(Linux)
#!/bin/bash
# 文件名: check-ports.sh
echo "端口状态快速检查($(date '+%Y-%m-%d %H:%M:%S'))"
echo "----------------------------------------"
for port in 22 80 443 3306 5432 6379 27017; do
if ss -tuln | grep -q ":$port "; then
echo "OPEN $port"
else
echo "CLOSED $port"
fi
done
使用方法:
chmod +x check-ports.sh && ./check-ports.sh

结语
端口管理终极原则:“没有被需要的端口,就永远不要打开。”