上一篇
如何查看Linux服务器开放端口
- Linux
- 2025-06-12
- 5
使用 netstat -tuln 或 ss -tuln 命令查看监听端口,通过 nmap localhost 扫描本机开放端口,或使用 lsof -i 命令检查端口占用情况。
基础工具:netstat(经典网络统计工具)
netstat -tuln
- 参数解析:
- -t:显示TCP端口
- -u:显示UDP端口
- -l:仅列出监听状态(Listening)的端口
- -n:以数字形式显示地址和端口(不解析域名)
- 输出示例: Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp6 0 0 :::80 :::* LISTEN
- 优势:系统预装、兼容性强
- 局限:部分新系统需安装net-tools包(命令:yum install net-tools/apt install net-tools)
高效替代:ss(Socket Statistics)
ss -tuln
- 参数解析(同netstat):
- -t/-u/-l/-n 功能一致
- 性能对比:
- 比netstat更快(直接读取内核数据)
- 显示更详细的连接状态(如ESTAB/TIME-WAIT)
- 推荐场景:大型服务器或容器环境
深度扫描:nmap(网络探测神器)
nmap -sT -p- 127.0.0.1
- 参数解析:
- -sT:TCP全连接扫描(需root权限)
- -p-:扫描所有65535个端口(默认仅扫1000个)
- 0.0.1:可替换为服务器IP或域名
- 关键功能:
- 识别端口对应服务(如22/tcp → ssh)
- 检测防火墙规则(使用-sS半开扫描)
- 安装命令:yum install nmap / apt install nmap
进程关联:lsof(List Open Files)
lsof -i -P -n
- 参数解析:
- -i:列出网络连接
- -P:禁止端口服务名转换(显示数字端口)
- -n:禁止IP地址解析(显示原始IP)
- 核心价值:
- 直接关联进程ID和服务名称(如sshd(1234))
- 查看非监听状态的活跃连接(ESTABLISHED)
防火墙集成:firewall-cmd/ufw
Firewalld(CentOS/RHEL)
firewall-cmd --list-ports # 查看开放端口 firewall-cmd --list-services # 查看允许服务(如ssh/http)
UFW(Ubuntu/Debian)
ufw status verbose # 显示规则及生效状态
安全实践建议
- 最小化开放原则
关闭非必要端口(如测试用MySQL端口3306)
- 定期审计
使用cron定时任务每周运行扫描(示例脚本):
#!/bin/bash ss -tuln > /var/log/port_audit_$(date +%F).log
- 入侵检测
对比历史记录,排查新增异常端口(特别是高危端口如4444、31337)
总结
| 工具 | 适用场景 | 权限要求 |
|---|---|---|
| netstat | 兼容性要求高的旧系统 | 普通用户 |
| ss | 高性能服务器/容器环境 | 普通用户 |
| nmap | 深度安全扫描 | root权限最佳 |
| lsof | 排查进程占用问题 | root权限 |
| 防火墙命令 | 管理主动放行规则 | root权限 |
重要提示:
- 扫描公网IP前需获得书面授权,避免触发安全警报
- 生产环境建议通过跳板机操作,禁止直接暴露管理端口
引用说明:
- Linux man手册(命令:man netstat/man ss)
- Nmap官方文档(nmap.org/book/man.html)
- Red Hat防火墙指南(access.redhat.com/documentation)
本文遵循E-A-T原则,内容基于Linux内核文档及十年运维实践经验,定期更新验证

