介绍
对于许多初出茅庐的系统管理员来说,网络是一个广泛而压倒一切的话题。有各种层、协议和接口,以及必须掌握许多工具和实用程序才能理解它们。
在 TCP/IP 和 UDP 网络中,端口是逻辑通信的端点。单个 IP 地址可能运行多个服务,例如 Web 服务器、应用程序服务器和文件服务器。为了使这些服务中的每一个进行通信,它们都在特定端口上进行侦听和通信。当您连接到服务器时,您将连接到 IP 地址和端口。
在许多情况下,您使用的软件会为您指定端口。例如,当您连接到 时https://digitalocean.com
,您是digitalocean.com
通过端口连接到服务器443
,该端口是安全 Web 流量的默认端口。由于它是默认设置,您的浏览器会为您添加端口。
在本教程中,您将更详细地探索端口。您将使用该netstat
程序识别开放端口,然后使用该nmap
程序获取有关网络上机器端口状态的信息。完成后,您将能够识别常见端口并扫描系统中的开放端口。
注意: 本教程涵盖 IPv4 安全性。在 Linux 中,IPv6 安全性与 IPv4 分开维护。例如,“nmap”默认扫描 IPv4 地址,但如果指定了适当的选项 (nmap -6),也可以扫描 IPv6 地址。
如果您的 VPS 配置为 IPv6,请记住使用适当的工具保护您的 IPv4 和 IPv6 网络接口。有关 IPv6 工具的更多信息,请参阅本指南:如何配置工具以在 Linux VPS 上使用 IPv6
了解端口
OSI 网络模型中有很多层。在传输层主要关注的是不同的服务和应用程序之间的通信层。
该层是端口关联的主要层。
理解端口配置需要一些术语知识。以下是一些术语,可以帮助您理解接下来的讨论:
-
端口:在操作系统内部实现的可寻址网络位置,有助于区分发往不同应用程序或服务的流量。
-
Internet 套接字:一个文件描述符,它指定一个 IP 地址和一个相关的端口号,以及将用于处理数据的传输协议。
-
绑定:当应用程序或服务使用 Internet 套接字来处理它输入和输出的数据时发生的过程。
-
侦听:当服务绑定到端口/协议/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 – 未加密的网络流量
- 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
可能是最常见和最强大的。
您可以nmap
通过输入以下命令在 Ubuntu 或 Debian 机器上安装:
- 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 万行之外,该文件还有其他字段,例如第三列,其中列出了在 Internet 研究扫描期间发现的该端口的开放频率。
使用 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 的一个步骤。然而,这是一项基本技能。
发现哪些端口是开放的以及可以从接受这些端口上的连接的服务中获取哪些信息,为您提供了锁定服务器所需的信息。从您的机器泄露的任何无关信息都可能被恶意用户用来尝试利用已知漏洞或开发新漏洞。他们能弄清楚的越少越好。