Linux 端口完全指南
在 Linux 网络管理中,端口 是通信的入口与出口,是服务与外界交互的“门牌号”。无论是 Web 服务器、数据库还是 SSH 远程登录,都离不开端口的正确配置。本文将系统讲解 Linux 端口的概念、查看方法、防火墙管理及常见故障排查。
1. 端口基础
什么是端口?
端口是一个 16 位整数(0~65535),用于标识主机上不同的网络服务或进程。IP 地址定位主机,端口定位主机上的具体应用。例如:
192.168.1.100:22→ SSH 服务192.168.1.100:80→ HTTP 服务
端口分类
| 范围 | 类型 | 说明 |
|---|---|---|
| 0 – 1023 | 知名端口(Well-known) | 系统预留,通常需要 root 权限才能绑定。例如 22 (SSH), 80 (HTTP), 443 (HTTPS) |
| 1024 – 49151 | 注册端口(Registered) | 用户进程或非系统服务常用,如 3306 (MySQL), 8080 (Tomcat) |
| 49152 – 65535 | 动态/私有端口(Dynamic/Private) | 客户端临时分配,用于短期通信 |
TCP vs UDP
- TCP:面向连接、可靠传输(如 HTTP、FTP、SSH)
- UDP:无连接、高效但可能丢包(如 DNS、NTP、SNMP)
2. 查看端口使用情况
2.1 使用 ss(推荐)
ss 是新一代 socket 统计工具,速度远快于 netstat。
# 查看所有监听端口(TCP + UDP)
ss -tuln
# 查看所有 TCP 连接(包括已建立、监听等)
ss -tan
# 查看特定端口(例如 80)的进程
ss -tlnp | grep :80
参数说明:
-tTCP-uUDP-l仅显示监听状态-n数字显示(不解析服务名)-p显示进程 PID 和名称(需 root)
2.2 使用 netstat(传统)
# 查看所有监听端口
netstat -tuln
# 查看端口与进程(需 root)
netstat -tulnp
# 查看指定端口占用
netstat -anp | grep 3306
2.3 使用 lsof
lsof 可列出打开的文件,网络连接也是文件的一种。
# 查看所有监听端口
lsof -i -P -n | grep LISTEN
# 查看特定端口(如 22)
lsof -i :22
# 查看某进程占用的端口
lsof -i -a -p <PID>
2.4 查看 /proc 文件系统
cat /proc/net/tcp | awk '{print $2}' # 显示本地地址与端口(十六进制)
一般不常用,ss 更友好。
3. 防火墙与端口管理
Linux 主流防火墙工具:firewalld(RHEL/CentOS 7+)、iptables(旧版)、ufw(Ubuntu/Debian)。
3.1 firewalld(动态防火墙)
# 查看防火墙状态
firewall-cmd --state
# 查看当前开放端口
firewall-cmd --list-ports
# 永久开放 TCP 8080 端口
firewall-cmd --permanent --add-port=8080/tcp
# 开放服务(例如 http)
firewall-cmd --permanent --add-service=http
# 重新加载配置
firewall-cmd --reload
# 关闭端口(移除规则)
firewall-cmd --permanent --remove-port=8080/tcp
3.2 iptables(底层工具)
# 查看当前规则(带端口)
iptables -L -n -v
# 开放 TCP 8080(入站)
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
# 保存规则(不同发行版命令不同)
service iptables save # CentOS 6
3.3 ufw(Ubuntu 简易防火墙)
# 启用/禁用
ufw enable
ufw disable
# 允许 22/tcp(SSH)
ufw allow 22/tcp
# 允许 8080 端口
ufw allow 8080
# 允许特定 IP 访问 3306
ufw allow from 192.168.1.10 to any port 3306
# 删除规则
ufw delete allow 8080
# 查看状态
ufw status verbose
3.4 临时关闭防火墙(调试用)
# systemd 系统
systemctl stop firewalld # firewalld
systemctl stop ufw # ufw
# 注意:生产环境不建议永久关闭
4. 端口转发(重定向)
将到达某端口的流量转发到另一个端口或主机。
4.1 使用 iptables 实现本地端口转发
# 将访问 80 的流量转发到 8080
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
4.2 使用 socat 工具
# 监听 8080,转发到本机 22
socat TCP-LISTEN:8080,fork TCP:localhost:22
4.3 使用 ssh 隧道(远程转发)
ssh -L 8080:localhost:80 user@remote_host
# 将本机 8080 映射到 remote_host 的 80 端口
5. 常见端口列表(速查)
| 端口 | 协议 | 服务 |
|---|---|---|
| 20,21 | TCP | FTP |
| 22 | TCP | SSH |
| 23 | TCP | Telnet |
| 25 | TCP | SMTP |
| 53 | TCP/UDP | DNS |
| 67,68 | UDP | DHCP |
| 80 | TCP | HTTP |
| 110 | TCP | POP3 |
| 123 | UDP | NTP |
| 143 | TCP | IMAP |
| 161 | UDP | SNMP |
| 443 | TCP | HTTPS |
| 3306 | TCP | MySQL |
| 3389 | TCP | RDP |
| 5432 | TCP | PostgreSQL |
| 6379 | TCP | Redis |
| 8080 | TCP | HTTP 代理 / 备用 Web |
| 27017 | TCP | MongoDB |
6. 故障排查指南
6.1 端口被占用(Address already in use)
# 查找占用进程
ss -tlnp | grep <端口>
# 或
lsof -i :<端口>
# 杀死进程
kill -9 <PID>
6.2 连接被拒绝(Connection refused)
原因可能有:
- 服务未启动
- 防火墙阻止
- 服务只监听
127.0.0.1(localhost),而非0.0.0.0(所有接口)
检查监听地址:
ss -tlnp | grep <端口>
# 如果显示 127.0.0.1:端口,则外部无法访问
修改服务配置文件(如 /etc/ssh/sshd_config 中的 ListenAddress),重启服务。
6.3 端口可达性测试
# 本地测试
telnet localhost 22
# 远程测试(需安装 nc/nmap)
nc -zv 192.168.1.100 22
# 使用 nmap 扫描
nmap -p 22 192.168.1.100
6.4 查看端口历史连接(统计)
ss -s # 汇总统计
netstat -s # 详细统计
7. 安全性建议
- 最小开放原则:仅开放业务必需的端口。
- 修改默认端口:例如将 SSH 22 改为高位端口,降低暴力破解风险。
- 使用防火墙白名单:限制允许访问的 IP 范围。
- 定期审查开放端口:
ss -tuln | grep -v "127.0.0.1" # 查看对外监听的端口 - 配合 fail2ban 动态拦截恶意 IP。
8. 总结
端口是 Linux 网络服务的基石,掌握端口的查看、开放、转发和排错是运维与开发的基本功。建议熟记常用命令:
ss -tulnp快速查看所有服务端口firewall-cmd或ufw管理防火墙规则lsof -i :port精准定位进程
理解端口范围、协议类型和监听地址,能让你更从容地配置服务、排查网络问题。在实际工作中,请始终遵循安全准则,保障系统与数据安全。