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:80TCP: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

020cff43-a836-47b6-9b7d-62d1a95898f1.jpeg

结语

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