当前位置:首页 > Linux > 正文

如何查看Linux服务器开放端口

使用 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 # 显示规则及生效状态


安全实践建议

  1. 最小化开放原则

    关闭非必要端口(如测试用MySQL端口3306)

  2. 定期审计

    使用cron定时任务每周运行扫描(示例脚本):

    如何查看Linux服务器开放端口 第1张

    #!/bin/bash ss -tuln > /var/log/port_audit_$(date +%F).log
  3. 入侵检测

    对比历史记录,排查新增异常端口(特别是高危端口如4444、31337)


总结

工具 适用场景 权限要求
netstat 兼容性要求高的旧系统 普通用户
ss 高性能服务器/容器环境 普通用户
nmap 深度安全扫描 root权限最佳
lsof 排查进程占用问题 root权限
防火墙命令 管理主动放行规则 root权限

重要提示

如何查看Linux服务器开放端口 第2张

  • 扫描公网IP前需获得书面授权,避免触发安全警报
  • 生产环境建议通过跳板机操作,禁止直接暴露管理端口


引用说明

  1. Linux man手册(命令:man netstat/man ss)
  2. Nmap官方文档(nmap.org/book/man.html
  3. Red Hat防火墙指南(access.redhat.com/documentation

    本文遵循E-A-T原则,内容基于Linux内核文档及十年运维实践经验,定期更新验证

如何查看Linux服务器开放端口 第3张

0