云服务器

首页 > Linux服务器管理 > 5 种检查 Linux 系统已开放端口的方法

5 种检查 Linux 系统已开放端口的方法

端口就像门一样,允许 Linux 系统上的应用程序和程序发送和接收数据。如果您想查看哪些端口正在使用、哪些端口处于开放状态。

什么是端口?

在深入了解命令之前,我们先花点时间了解一下什么是端口:

  • 端口号是用于标识计算机上运行的特定程序或应用的编号。例如:
    • Web 服务器端口通常使用端口 80(HTTP)或端口 443(HTTPS)。
    • 通过 SSH 进行远程登录通常使用端口 22
  • 每个端口都有一个介于0 到 65535之间的数字,这些数字分为三个主要组:
    • 0–1023:保留给 HTTP 和 FTP 等常用协议。
    • 1024–49151:用于您安装的应用程序。
    • 49152–65535:应用程序连接到服务时使用的临时端口。

解决了这个问题之后,我们来如何检查端口的运行状况。

如何在Linux中检查端口

Linux 提供了许多工具来帮助您检查开放或监听的端口。下面,我们将介绍五种常用方法,并解释每种方法的作用。

1. 使用 netstat

netstat 命令可以详细显示网络连接和端口使用情况。

打开终端并输入:

netstat -tuln

以下是每个选项的含义:

  • -t:显示 TCP(传输控制协议)端口。
  • -u:显示UDP(用户数据报协议)端口。
  • -l:仅显示正在监听的端口。
  • -n:跳过将程序名称(例如“ssh”)转换为端口号,这样速度会更快。

您将看到:

Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
udp        0      0 0.0.0.0:68              0.0.0.0:*

以下是阅读本文的方法:

  • Proto:显示是 TCP 还是 UDP。
  • 本地地址:您机器的 IP 地址和正在使用的端口。
  • 国外地址:另一台机器的 IP 地址和端口(如果对所有人开放,则用 * 表示)。
  • 状态:对于 TCP 而言,LISTEN 表示它正在等待连接。

简要说明: netstat 是 net-tools 软件包的一部分,而较新的 Linux 版本可能未预装该软件包。请使用以下命令安装:

sudo apt install net-tools  # On Debian/Ubuntu  
sudo yum install net-tools  # On RHEL/CentOS 

2. 使用 ss

ss是 netstat 的一个更新、更快的替代方案。它提供的信息类似,但在现代系统上运行得更好。

运行以下命令:

ss -tuln

这些选项与 netstat 相同,所以你应该能够立即上手。

您将看到:

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:*         
udp     UNCONN     0      0      0.0.0.0:68                  0.0.0.0:*

该输出与 netstat 类似,但ss 的速度往往更快,尤其是在处理大量连接时。

3. 使用 lsof

lsof(列出打开的文件)是一个方便的工具,可以查看哪些文件或网络连接正在被进程使用。

要查看哪些端口已打开以及哪些程序正在使用这些端口,请运行:

sudo lsof -i -P -n
  • -i:网络相关文件的过滤器。
  • -P:显示原始端口号而不是服务名称。
  • -n:为了提高速度,跳过将 IP 地址转换为主机名的步骤。

您将看到:

COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd      1234 root   3u  IPv4  12345      0t0  TCP *:22 (LISTEN)
dhclient  5678 root   6u  IPv4  54321      0t0  UDP *:68
  • 命令:使用该端口的程序。
  • PID:进程 ID。
  • 名称:端口和协议(例如,端口 22 上的 TCP)。

它的优势:

如果您正在进行故障排除,需要找出哪个进程正在使用特定端口,lsof就是您的首选工具。

4. 使用 nmap

nmap(网络映射器)非常适合扫描网络并检查哪些端口是开放的。

要扫描所有端口,请运行:

sudo nmap -sT -p- localhost
  • -sT:执行 TCP 连接扫描。
  • -p-:扫描所有 65,535 个端口。

您将看到:

PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
443/tcp  open  https
  • 端口:端口号和协议(TCP 或 UDP)。
  • 状态:告诉你端口是打开的、关闭的还是被过滤的(被防火墙阻止的)。
  • 服务:使用该端口的服务的通用名称。

nmap 的用途:

如果你想全面了解系统上所有开放的端口,或者需要扫描另一台机器,nmap是个不错的选择。

5. 使用 nc(Netcat)

Netcat是一个简单但功能强大的工具,用于检查特定端口是否打开。

要检查端口 22 是否开放,请键入:

nc -zv localhost 22
  • -z:仅扫描开放端口,不发送数据。
  • -v:显示详细输出。

您将看到:

Connection to localhost 22 port [tcp/ssh] succeeded!

它的优势:

如果你只需要快速检查某个特定端口是否打开,nc可以轻松完成这项工作。

解读结果

检查端口时,结果通常意味着以下几点:

  • 监听/开放端口:这些端口已准备好接受连接。例如,Web 服务器会监听 80 端口或 443 端口。
  • 关闭的端口:这些端口未使用,因此不会接受连接。
  • 已过滤端口:这些端口被防火墙或安全规则阻止,因此它们看起来是不可见的。

常见场景

检查端口时,您可能会遇到以下情况:

  • 如果您发现某个端口处于打开状态,而您并未预料到,这可能意味着某个您不需要或不认识的程序正在运行。最好进一步调查一下。
  • 您需要的端口已关闭:程序可能未运行,或者防火墙可能阻止了它。

保护您的系统

检查端口只是第一步。以下是一些整理端口的方法:

停止不必要的程序:
如果某个程序正在你不需要的端口上运行,请将其关闭:

sudo systemctl stop <program_name>
sudo systemctl disable <program_name>

使用防火墙:
使用像 ufw(简易防火墙)这样的工具限制对端口的访问:

sudo ufw allow 22     # Allow SSH  
sudo ufw deny 80      # Block HTTP

定期监控端口:
养成定期检查开放端口的习惯,尤其是在运行服务器时。

在 Linux 系统中检查端口并不复杂。无论你使用 netstat、ss、lsof、nmap 还是 nc,每个工具都能提供略有不同的信息。选择最适合你需求的工具,并大胆探索。熟能生巧!

图片描述

发表回复