上一篇
如何查看Linux服务器开放端口
- Linux
- 2025-06-12
- 4599
使用 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)
- 直接关联进程ID和服务名称(如
防火墙集成: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内核文档及十年运维实践经验,定期更新验证