如何使用Nmap扫描开放端口
介绍
对于许多初出茅庐的系统管理员来说,网络是一个广泛而压倒性的话题。 有各种层、协议和接口,以及许多必须掌握的工具和实用程序才能理解它们。
在 TCP/IP 和 UDP 网络中, 端口 是逻辑通信的端点。 一个 IP 地址可能运行着许多服务,例如 Web 服务器、应用程序服务器和文件服务器。 为了让这些服务中的每一个进行通信,它们每个都在特定端口上进行侦听和通信。 当您连接到服务器时,您连接到 IP 地址和端口。
在许多情况下,您使用的软件会为您指定端口。 例如,当您连接到 https://digitalocean.com
时,您将连接到端口 443
上的 digitalocean.com
服务器,这是安全 Web 流量的默认端口。 由于它是默认设置,因此您的浏览器会为您添加端口。
在本教程中,您将更详细地探索端口。 您将使用 netstat
程序来识别打开的端口,然后使用 nmap
程序来获取有关网络上机器端口状态的信息。 完成后,您将能够识别常用端口并扫描系统以查找开放端口。
笔记: 本教程涵盖 IPv4 安全性。 在 Linux 中,IPv6 的安全性与 IPv4 分开维护。 例如,“nmap”默认扫描 IPv4 地址,但如果指定了正确的选项 (nmap -6),也可以扫描 IPv6 地址。
如果您的 VPS 配置为 IPv6,请记住使用适当的工具保护您的 IPv4 和 IPv6 网络接口。 有关 IPv6 工具的更多信息,请参阅本指南:如何配置工具以在 Linux VPS 上使用 IPv6
了解端口
OSI网络模型有很多层。 传输层是主要关注不同服务和应用程序之间通信的层。
该层是端口关联的主要层。
了解端口配置需要一些术语知识。 这里有一些术语可以帮助你理解接下来的讨论:
- Port:在操作系统内部实现的可寻址网络位置,有助于区分发往不同应用程序或服务的流量。
- Internet Sockets:一个文件描述符,它指定一个 IP 地址和一个相关的端口号,以及用于处理数据的传输协议。
- Binding:当应用程序或服务使用 Internet 套接字来处理其输入和输出的数据时发生的过程。
- Listening:当服务绑定到端口/协议/IP地址组合以等待来自服务客户端的请求时,该服务被称为“监听”端口。
收到请求后,它会使用它一直在侦听的同一端口与客户端(在适当的时候)建立连接。 因为使用的 Internet 套接字与特定的客户端 IP 地址相关联,所以这不会阻止服务器同时侦听并向其他客户端提供请求。
- 端口扫描:端口扫描是尝试连接到多个连续端口的过程,目的是获取有关哪些是打开的以及它们背后的服务和操作系统的信息。
识别常用端口
端口由 1
到 65535
范围内的数字指定。
1024
以下的许多端口都与 Linux 和类 Unix 操作系统认为对基本网络功能至关重要的服务相关联,因此您必须具有 root 权限才能为它们分配服务。1024
和49151
之间的端口被视为“已注册”。 这意味着可以通过向 IANA(互联网号码分配机构)发出请求,为某些服务“保留”它们(从广义上讲)。 它们没有严格执行,但它们可以提供有关在某个端口上运行的可能服务的线索。49152
和65535
之间的端口不能注册,建议私用。
由于有大量可用端口,您不必担心大多数倾向于绑定到特定端口的服务。
但是,有一些端口由于无处不在而值得了解。 以下只是一个非常不完整的列表:
- 20:FTP数据
- 21:FTP控制端口
- 22:SSH
- 23:Telnet(不安全,不推荐用于大多数用途)
- 25:SMTP
- 43:WHOIS 协议
- 53:DNS 服务
- 67:DHCP 服务器端口
- 68:DHCP客户端端口
- 80:HTTP - 未加密的 Web 流量
- 110:POP3 邮件端口
- 113:IRC 网络上的身份验证服务
- 143:IMAP 邮件端口
- 161:SNMP
- 194:IRC
- 389:LDAP 端口
- 443:HTTPS - 安全网络流量
- 587: SMTP - 邮件提交端口
- 631:CUPS 打印守护进程端口
- 666:DOOM - 这个传统游戏实际上有自己的特殊端口
这些只是一些通常与端口相关的服务。 您应该能够在各自的文档中为您尝试配置的应用程序找到适当的端口。
大多数服务可以配置为使用默认端口以外的端口,但您必须确保客户端和服务器都配置为使用非标准端口。
您可以通过查看 /etc/services
文件来获取一些常用端口的列表:
less /etc/services
它将为您提供常用端口及其相关服务的列表:
Output. . . tcpmux 1/tcp # TCP port service multiplexer echo 7/tcp echo 7/udp discard 9/tcp sink null discard 9/udp sink null systat 11/tcp users daytime 13/tcp daytime 13/udp netstat 15/tcp qotd 17/tcp quote msp 18/tcp # message send protocol . . .
根据您的系统,这将显示多个页面。 按 SPACE
键查看下一页条目或按 Q
返回提示。
这不是一个完整的列表; 你很快就能看到。
检查开放端口
您可以使用许多工具来扫描打开的端口。 大多数 Linux 发行版上默认安装的一个是 netstat
。
您可以通过发出带有以下参数的命令来快速发现正在运行的服务:
sudo netstat -plunt
您将看到如下结果:
OutputProto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 785/sshd tcp6 0 0 :::22 :::* LISTEN 785/sshd
这显示了与服务关联的端口和侦听套接字,并列出了 UDP 和 TCP 协议。
nmap
工具是您可以用来识别端口的另一种方法。
使用 Nmap
保护网络的一部分涉及进行漏洞测试。 这意味着尝试以与攻击者相同的方式渗透您的网络并发现弱点。
在所有可用的工具中,nmap
可能是最常见和最强大的。
您可以通过输入以下命令在 Ubuntu 或 Debian 机器上安装 nmap
:
sudo apt-get update sudo apt-get install nmap
安装此软件的附带好处之一是改进的端口映射文件。 通过查看此文件,您可以看到端口和服务之间更广泛的关联:
less /usr/share/nmap/nmap-services
你会看到这样的输出:
Output. . . tcpmux 1/tcp 0.001995 # TCP Port Service Multiplexer [rfc-1078] tcpmux 1/udp 0.001236 # TCP Port Service Multiplexer compressnet 2/tcp 0.000013 # Management Utility compressnet 2/udp 0.001845 # Management Utility compressnet 3/tcp 0.001242 # Compression Process compressnet 3/udp 0.001532 # Compression Process unknown 4/tcp 0.000477 rje 5/udp 0.000593 # Remote Job Entry unknown 6/tcp 0.000502 echo 7/tcp 0.004855 echo 7/udp 0.024679 echo 7/sctp 0.000000 . . .
除了有近 2 万行之外,该文件还有其他字段,例如第三列,其中列出了在互联网研究扫描期间发现的该端口的打开频率。
使用 nmap 扫描端口
Nmap 可以显示有关主机的大量信息。 它还可以使目标系统的系统管理员认为有人有恶意。 因此,请仅在您拥有的服务器上或在您已通知所有者的情况下对其进行测试。
nmap
创建者提供位于 scanme.nmap.org
的测试服务器。
这或您自己的服务器是练习 nmap 的好目标。
以下是可以使用 nmap 执行的一些常见操作。 我们将使用 sudo 权限运行它们,以避免返回某些查询的部分结果。 有些命令可能需要很长时间才能完成:
扫描主机操作系统:
sudo nmap -O scanme.nmap.org
跳过网络发现部分并假设主机在线。 如果您在其他测试中收到“注意:主机似乎已关闭”的回复,这将很有用。 将此添加到其他选项:
sudo nmap -PN scanme.nmap.org
扫描而不对指定的 IP 地址执行反向 DNS 查找。 在大多数情况下,这应该会加快您的结果:
sudo nmap -n scanme.nmap.org
扫描特定端口而不是所有常见端口:
sudo nmap -p 80 scanme.nmap.org
为了扫描 TCP 连接,nmap 可以使用目标端口执行 3 次握手(如下所述)。 像这样执行它:
sudo nmap -sT scanme.nmap.org
要扫描 UDP 连接,请键入:
sudo nmap -sU scanme.nmap.org
扫描每个 TCP 和 UDP 开放端口:
sudo nmap -n -PN -sT -sU -p- scanme.nmap.org
TCP“SYN”扫描利用了 TCP 建立连接的方式。
为了启动 TCP 连接,请求端向服务器发送“同步请求”数据包。 然后服务器发回一个“同步确认”数据包。 然后,原始发送方将“确认”数据包发回服务器,并建立连接。
然而,当第一个数据包从服务器返回时,“SYN”扫描会断开连接。 这被称为“半开”扫描,过去曾被宣传为秘密扫描端口的一种方式,因为与该端口关联的应用程序不会接收流量,因为连接永远不会完成。
随着采用更先进的防火墙和在许多配置中标记不完整的 SYN 请求,这不再被认为是隐秘的。
要执行 SYN 扫描,请执行:
sudo nmap -sS scanme.nmap.org
一种更隐蔽的方法是发送无效的 TCP 标头,如果主机符合 TCP 规范,则在该端口关闭时应该发回一个数据包。 这将适用于非基于 Windows 的服务器。
您可以使用“-sF”、“-sX”或“-sN”标志。 它们都会产生我们正在寻找的响应:
sudo nmap -PN -p 80 -sN scanme.nmap.org
要查看主机上正在运行的服务版本,您可以尝试使用此命令。 它尝试通过测试来自服务器的不同响应来确定服务和版本:
sudo nmap -PN -p 80 -sV scanme.nmap.org
最后,您可以使用 nmap 扫描多台机器。
要使用“-”或“/24”指定 IP 地址范围以一次扫描多个主机,请使用如下命令:
sudo nmap -PN xxx.xxx.xxx.xxx-yyy
或者使用如下命令扫描网络范围以查找可用服务:
sudo nmap -sP xxx.xxx.xxx.xxx-yyy
您可以使用许多其他命令组合,但这应该可以帮助您开始探索网络漏洞。
结论
了解端口配置以及如何发现服务器上的攻击向量只是保护您的信息和 VPS 的一步。 然而,这是一项基本技能。
发现哪些端口是打开的,以及可以从接受这些端口上的连接的服务中获得哪些信息,可以为您提供锁定服务器所需的信息。 任何从您的机器泄露的无关信息都可能被恶意用户用来尝试利用已知漏洞或开发新漏洞。 他们能弄清楚的越少越好。