15%

全场主机优惠15%

测试技能,享折扣

使用代码:

Skills
开始使用
25.12.2024

在Linux中使用Netstat和SS检查开放和监听端口

在Linux系统上监控开放和监听端口是维护服务器安全、诊断网络问题和有效管理基础设施的最基本做法之一。无论您运行的是生产Web服务器、VPS Hosting环境还是Dedicated Server,准确了解哪些端口是开放的——以及哪些服务绑定到它们——可以让您获得防止未授权访问、检测配置错误和消除不必要攻击面所需的可见性。

在本综合指南中,我们将介绍如何使用netstatss命令来检查任何Linux系统上的开放和监听端口,比较它们的优势,并介绍lsofnmap等其他工具进行更深入的网络分析。

为什么监控开放端口很重要

服务器上的每个开放端口都代表一个潜在的入口点。配置错误、过时或被遗忘的服务可能会使您的系统面临被利用的风险。定期审计您的监听端口可以让您:

  • 识别在意外端口上运行的未授权服务
  • 检测入侵尝试或受损进程
  • 验证防火墙规则是否按预期工作
  • 确认新部署的应用程序绑定到正确的接口
  • 关闭未使用的端口以减少攻击面

这对于管理Shared Web Hosting环境或多租户服务器(其中同时运行多个服务)的管理员尤为关键。

理解端口及其类型

在深入了解这些工具之前,重要的是要理解您在命令输出中会遇到的术语。

术语描述
开放端口应用程序主动监听传入连接的端口
监听端口绑定到等待网络流量的服务的端口
TCP(传输控制协议)面向连接、可靠,由HTTP、SSH、FTP等使用
UDP(用户数据报协议)无连接、更快但不太可靠,由DNS、NTP等使用

使用netstat检查端口

什么是netstat

netstat(网络统计)是一个经典的命令行实用程序,提供有关网络连接、路由表、接口统计和监听端口的详细信息。虽然在现代发行版中已正式弃用,取而代之以ss,但它仍然被广泛使用,并且仍然存在于许多旧系统中。

安装netstat

netstat命令是net-tools包的一部分,该包在现代Linux发行版上可能默认未安装。

Debian / Ubuntu:

sudo apt install net-tools

CentOS / RHEL / AlmaLinux / Rocky Linux:

sudo yum install net-tools

使用netstat检查开放和监听端口

要显示系统上所有监听的TCP和UDP端口,请运行以下命令:

sudo netstat -tuln

标志分解:

标志描述
-t显示TCP端口
-u显示UDP端口
-l仅显示监听端口
-n显示数字地址而不是解析主机名

示例输出

Proto  Recv-Q  Send-Q  Local Address     Foreign Address   State
tcp         0       0  0.0.0.0:22        0.0.0.0:*         LISTEN
tcp         0       0  0.0.0.0:80        0.0.0.0:*         LISTEN
tcp6        0       0  :::443            :::*              LISTEN
udp         0       0  0.0.0.0:53        0.0.0.0:*

理解输出列

  • 本地地址 — 服务监听的IP地址和端口号。0.0.0.0表示服务在所有可用接口上监听。
  • 远程地址 — 活动连接的远程IP和端口。星号(*)表示尚未建立连接。
  • 状态 — 连接状态。LISTEN表示端口是开放的并等待传入连接。

使用netstat过滤特定端口

您可以通过grep管道输出以隔离特定端口或服务。例如,要检查是否有任何内容在端口80(HTTP)上监听:

sudo netstat -tuln | grep ":80"

要检查端口443(HTTPS),这对于安装了SSL Certificates的服务器至关重要:

sudo netstat -tuln | grep ":443"

要同时显示负责每个连接的进程名称和PID,请添加-p标志:

sudo netstat -tulnp

使用ss检查端口

什么是ss

ss(套接字统计)是netstat的现代替代品。它更快、更高效,并提供更丰富的输出——特别是在具有大量并发连接的系统上。ss命令在几乎所有现代Linux发行版上都默认包含,无需额外安装。

使用ss检查开放和监听端口

ss的语法与netstat的语法非常相似,使过渡变得简单:

ss -tuln

标志分解:

标志描述
-t显示TCP套接字
-u显示UDP套接字
-l仅显示监听套接字
-n显示数字地址

示例输出

Netid  State   Recv-Q  Send-Q  Local Address:Port   Peer Address:Port
tcp    LISTEN  0       128     0.0.0.0:22            0.0.0.0:*
tcp    LISTEN  0       511     0.0.0.0:80            0.0.0.0:*
tcp    LISTEN  0       511        [::]:443             [::]:*
udp    UNCONN  0       0       0.0.0.0:53            0.0.0.0:*

ss的高级用法

ss命令提供了一系列高级过滤和显示选项,远超netstat的功能。

仅显示监听TCP端口

ss -tl

仅显示监听UDP端口

ss -ul

显示进程名称和PID

要识别确切哪个进程正在使用特定端口,请使用-p标志:

ss -tulnp

这是最有用的故障排除命令之一——它在每个监听套接字旁边显示进程名称和PID,使得立即清楚哪个应用程序拥有哪个端口。

-p标志的示例输出

Netid  State   Local Address:Port   Process
tcp    LISTEN  0.0.0.0:80           users:(("nginx",pid=1234,fd=6))
tcp    LISTEN  0.0.0.0:22           users:(("sshd",pid=987,fd=3))
tcp    LISTEN  0.0.0.0:3306         users:(("mysqld",pid=2345,fd=21))

按特定端口过滤

要检查哪个进程在端口8080上监听:

ss -tulnp | grep ":8080"

显示所有已建立的TCP连接

ss -tn state established

显示摘要统计

ss -s

这提供了按类型和状态分类的套接字总数的快速摘要——对于发现异常连接量很有用。

netstatss:直接比较

功能`netstat``ss`
性能在繁忙系统上较慢显著更快
默认可用性需要net-tools在现代发行版上预装
过滤选项基本(需要grep高级内置过滤器
进程信息可通过-p获得可通过-p获得
输出详细程度标准更详细的套接字信息
推荐用于旧系统、熟悉度现代Linux环境

何时使用netstat

  • ss不可用的旧Linux系统上
  • 使用围绕netstat语法编写的脚本或文档时
  • 在已安装net-tools的系统上进行快速检查

何时使用ss

  • 在任何现代Linux发行版上(Ubuntu 20.04+、CentOS 8+、Debian 10+等)
  • 当您需要在高流量服务器上获得更快的输出时
  • 进行高级过滤和详细的套接字分析

端口审计的其他工具

除了netstatss,还有几个其他实用程序对于彻底的端口审计很有价值。

使用lsof

lsof(列出开放文件)将网络套接字视为文件,使其成为识别哪个进程正在使用给定端口的另一种强大方式。

要检查哪个进程绑定到端口80:

sudo lsof -i :80

要检查所有监听端口:

sudo lsof -i -P -n | grep LISTEN

示例输出:

COMMAND   PID     USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
nginx    1234     root   6u  IPv4   23456      0t0  TCP *:80 (LISTEN)
sshd      987     root   3u  IPv4   12345      0t0  TCP *:22 (LISTEN)

使用nmap

nmap是一个强大的网络扫描工具,可以在本地和远程主机上检测开放端口。它对于从外部角度验证防火墙配置特别有用。

如果nmap尚未安装,请安装它:

sudo apt install nmap       # Debian/Ubuntu
sudo yum install nmap       # CentOS/RHEL

扫描本地机器上的所有TCP端口:

sudo nmap -sT localhost

扫描特定IP地址上的开放端口:

sudo nmap -sV 192.168.1.100

-sV标志还尝试检测在每个开放端口上运行的服务版本,这对于识别过时或易受攻击的软件非常有价值。

> 安全提示:仅对您拥有或有明确权限扫描的系统运行nmap扫描。

实际安全工作流:审计您的服务器端口

以下是审计Linux服务器上开放端口的推荐分步工作流:

  1. 列出所有带进程信息的监听端口:
   ss -tulnp
  1. 将每个端口与预期服务进行交叉参考。如果您在意外端口上看到未知进程,请立即调查。
  1. 检查在所有接口(0.0.0.0)上监听的服务,这些服务应仅在本地访问。例如,数据库服务器(端口3306)通常应绑定到127.0.0.1,而不是0.0.0.0
  1. 使用iptables -L -nufw status verbose验证您的防
15%

全场主机优惠15%

测试技能,享折扣

使用代码:

Skills
开始使用