如何使用 Nmap 扫描开放端口

介绍

网络对于许多新兴系统管理员来说是一个庞大而压倒性的主题,有各种层,协议和界面,还有许多工具和实用工具,必须掌握才能理解它们。

在 TCP/IP 和 UDP 网络中, **port 是逻辑通信的终端。一个 IP 地址可能有许多运行服务,如 Web 服务器、应用程序服务器和文件服务器。

在许多情况下,您使用的软件会为您指定端口,例如,当您连接到 https://digitalocean.com 时,您正在连接到 digitalocean.com 服务器上的端口 443,这是安全网络流量的默认端口。由于这是默认的,您的浏览器会为您添加端口。

在本教程中,您将更详细地探索端口. 您将使用netstat程序来识别开放的端口,然后使用nmap程序获取有关网络上的机器端口状态的信息。

<$>[注] 注: _本教程涵盖IPv4安全性。在Linux中,IPv6安全性与IPv4分开维护。例如,nmap默认地扫描IPv4地址,但如果指定正确选项,也可以扫描IPv6地址(nmap -6)。

如果您的 VPS 已配置为 IPv6,请记住使用相应的工具来保护您的 IPv4 和 IPv6 网络接口。 有关 IPv6 工具的更多信息,请参阅本指南: 如何在 Linux VPS 上配置工具使用 IPv6 _ <$>

了解港口

OSI 网络模型中有许多层。 transport layer 是主要关心不同服务和应用之间的通信的层。

此层是端口所关联的主要层。

需要一些术语知识来理解端口配置. 这里有几个术语,可以帮助您理解接下来的讨论:

  • Port:操作系统内实现的可地址的网络位置,有助于区分针对不同应用程序或服务的流量。
  • Internet Sockets:指定IP地址和相关端口号的文件描述器,以及将用于处理数据的传输协议。
  • Binding:应用程序或服务使用互联网接口来处理其输入和输出数据时发生的过程。

接到请求后,它会通过同一端口与客户端建立连接(适当时),因为所使用的互联网接口与特定客户端 IP 地址相关联,这不会阻止服务器同时聆听和向其他客户端提供请求。

  • ** 端口扫描**:端口扫描是试图连接到多个连续端口的过程,目的是获取有关哪些端口是开放的以及哪些服务和操作系统背后的信息。

识别共同港口

端口被指定为从165535的数字。

  • 1024以下的许多端口都与 Linux 和 Unix 类型操作系统认为对基本网络功能至关重要的服务有关,因此您必须拥有分配服务的根特权。
  • 102449151 之间的端口被认为是注册的。

由于可用的大量端口,您永远不必担心大多数服务倾向于连接到特定端口。

然而,有一些港口是值得知道的,因为它们的普遍性. 以下只是一个非常不完整的列表:

  • 20*:FTP数据 21*:FTP控制端口 22*:SSH 23*:Telnet(不安全,不建议用于大多数用途) 25*:SMTP 43*:WHOIS协议 53*:DNS服务 113*:DHCP服务器端口
  • 68:DHCP客户端
  • 80:HTTP - 未加密网络流量
  • 110*:POP3邮件端口 113*:IRC网络身份验证服务
  • 143*

这些只是通常与端口相关联的服务的一些,您应该能够在各自的文档中找到您正在尝试配置的应用程序的适当端口。

大多数服务可以配置为使用非默认端口,但您必须确保客户端和服务器都配置为使用非默认端口。

您可以通过查看 /etc/services 文件来获取一些常见端口的列表:

1less /etc/services

它将为您提供常见端口和相关服务的列表:

 1[secondary_label Output]
 2. . .
 3tcpmux 1/tcp                           # TCP port service multiplexer
 4echo 7/tcp
 5echo 7/udp
 6discard 9/tcp sink null
 7discard 9/udp sink null
 8systat 11/tcp users
 9daytime 13/tcp
10daytime 13/udp
11netstat 15/tcp
12qotd 17/tcp quote
13msp 18/tcp                          # message send protocol
14. . .

根据您的系统,这将显示多个页面. 按SPACE键查看下一页的条目或按Q返回您的提示。

这不是一个完整的列表,你很快就会看到。

检查开放的港口

您可以使用的一些工具来扫描打开的端口. 在大多数Linux发行版上默认安装的工具是netstat

您可以通过发出下列参数的命令快速发现正在运行哪些服务:

1sudo netstat -plunt

您将看到如下结果:

1[secondary_label Output]
2Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
3tcp 0 0 0.0.0.0:22 0.0.0.0:*               LISTEN 785/sshd        
4tcp6 0 0 :::22                   :::*                    LISTEN 785/sshd

这显示了与服务相关的端口和收听接口,并列出了UDP和TCP协议。

nmap工具是您可以用来识别端口的另一种方法。

使用Nmap

网络安全的一部分涉及进行漏洞测试,这意味着试图以攻击者可能的方式渗透到您的网络并发现弱点。

在所有可用的工具中,‘nmap’也许是最常见和最强大的。

您可以在 Ubuntu 或 Debian 机器上安装 `nmap' 通过输入:

1sudo apt-get update
2sudo apt-get install nmap

安装此软件的一个副好处是改进的端口映射文件. 您可以通过查看此文件来看到端口和服务之间的更广泛的关联:

1less /usr/share/nmap/nmap-services

你会看到这样的输出:

 1[secondary_label Output]
 2. . .
 3tcpmux 1/tcp 0.001995        # TCP Port Service Multiplexer [rfc-1078]
 4tcpmux 1/udp 0.001236        # TCP Port Service Multiplexer
 5compressnet 2/tcp 0.000013        # Management Utility
 6compressnet 2/udp 0.001845        # Management Utility
 7compressnet 3/tcp 0.001242        # Compression Process
 8compressnet 3/udp 0.001532        # Compression Process
 9unknown 4/tcp 0.000477
10rje 5/udp 0.000593        # Remote Job Entry
11unknown 6/tcp 0.000502
12echo 7/tcp 0.004855
13echo 7/udp 0.024679
14echo 7/sctp 0.000000
15. . .

除了拥有近2万行之外,该文件还包含其他字段,例如第三列,列出该端口的开放频率,如在互联网上的研究扫描中发现。

使用 nmap 扫描端口

Nmap 可以揭示很多关于主机的信息,还可以让目标系统的系统管理员认为有人有恶意意,因此,只在您所拥有的服务器上测试它,或者在您已通知所有者的情况下。

nmap创建者提供位于scanme.nmap.org的测试服务器。

这个或你自己的服务器是练习nmap的好目标。

以下是可以使用 nmap 执行的一些常见操作,我们将使用 sudo 特权运行它们,以避免在某些查询中返回部分结果。

对主机操作系统进行扫描:

1sudo nmap -O scanme.nmap.org

跳过网络发现部分并假设主机处于在线状态. 如果您在其他测试中收到注意:主机似乎下降的答案,这很有用。

1sudo nmap -PN scanme.nmap.org

在指定的 IP 地址上进行反向 DNS 搜索而不进行扫描,这应该在大多数情况下加速您的结果:

1sudo nmap -n scanme.nmap.org

扫描特定端口,而不是所有常见端口:

1sudo nmap -p 80 scanme.nmap.org

若要扫描 TCP 连接,nmap 可以用目标端口执行三向握手(如下所述)。

1sudo nmap -sT scanme.nmap.org

要扫描 UDP 连接,键入:

1sudo nmap -sU scanme.nmap.org

对每个开放的 TCP 和 UDP 端口进行扫描:

1sudo nmap -n -PN -sT -sU -p- scanme.nmap.org

TCPSYN扫描利用TCP建立连接的方式。

要启动TCP连接,请求端将同步请求包发送到服务器,然后服务器将同步确认包发送回服务器,然后原来的发送者将确认包发送回服务器,并建立了连接。

然而,SYN扫描在从服务器返回第一个数据包时会丢弃连接,这被称为半开扫描,并被推广为隐私地扫描端口的方式,因为与该端口相关的应用程序不会接收流量,因为连接从未完成。

这不再被认为是隐藏的,随着更先进的防火墙的采用和许多配置中不完整的SYN请求的标记。

要执行 SYN 扫描,请执行:

1sudo nmap -sS scanme.nmap.org

一个更隐藏的方法是发送无效的TCP标题,如果主机符合TCP规格,如果该端口关闭,则应该发送一个包。

您可以使用-sF,-sX-sN旗帜,它们都将产生我们正在寻找的答案:

1sudo nmap -PN -p 80 -sN scanme.nmap.org

要查看服务在主机上运行的版本,可以尝试此命令. 它试图通过测试服务器的不同响应来确定服务和版本:

1sudo nmap -PN -p 80 -sV scanme.nmap.org

最后,您可以使用 nmap 扫描多个机器。

若要指定一系列-/24的 IP 地址,以便同时扫描多个主机,请使用以下命令:

1sudo nmap -PN xxx.xxx.xxx.xxx-yyy

或者用这样的命令扫描网络范围以获取可用的服务:

1sudo nmap -sP xxx.xxx.xxx.xxx-yyy

您可以使用许多其他命令组合,但这应该让您开始探索网络漏洞。

结论

了解端口配置以及如何发现攻击向量在您的服务器上只是保护您的信息和VPS的一步。

发现哪些端口是开放的,以及从接受这些端口连接的服务中获取哪些信息,可以为您提供您锁定服务器所需的信息。从您的机器中泄露的任何外部信息都可以被恶意用户用来试图利用已知的漏洞或开发新的漏洞。

Published At
Categories with 技术
comments powered by Disqus