端口扫描器

约二十个常用端口,每个只做一次 TCP 连接,探测从 sysosx 的服务器发出——给出三种诚实的答案,而不是两种。一个端口可以是开放的(有东西在应答)、关闭的(主机主动拒绝),或是被过滤的(沉默——通常是防火墙在丢弃数据包,并不证明后面什么都没有)。默认目标是 scanme.nmap.org,这是 nmap 项目专门运营、供人们学习扫描的公开主机;对于其他任何主机,请只扫描你自己的服务器或你有权测试的服务器。

想持续监控这个吗?用 myeventwatch 免费监控——到期和宕机提醒,无需绑卡。

扫描测量的是什么

端口扫描常被描述为“检查哪些门是开着的”,这个比喻准确得足够有用——但要修正一点。一扇门可以是开着的、锁着的,或者干脆无人应答:敲门后听不到任何声音,和发现门锁着不是一回事,只报告开放和关闭的扫描器把第三种情况藏了起来。因此,本扫描器把开放、关闭和被过滤报告为三种不同的状态。开放意味着连接成功,所以有服务在监听并接受连接。关闭意味着主机发回了重置——它活着,而且那个端口上什么都没有。被过滤意味着整整一秒的等待在沉默中过去,这正是防火墙丢弃数据包时从外面看起来的样子;那个端口在防火墙后面可能有服务,扫描无法断言并非如此。把被过滤单独列出,正是“结果可用”和“结果悄悄误导你”之间的区别。

这次扫描刻意保持狭窄。它用固定的约二十个端口列表——Web(80、8080、8443、443)、邮件(25、110、143、993、995)、DNS(53)、远程访问(22、23、3389、5900)、文件共享(445)、数据库(3306、5432、27017)以及其他几个——只做普通的 TCP 连接,不做别的。不读取横幅,所以扫描永远不会得知(或泄露)服务版本;不用 UDP,因为它的“被过滤”答案噪声大得多;也无法提供你自己的端口,因为任意端口输入会把一个初步查看工具变成通用映射服务。目标本身只解析一次,每次连接都去往那一个固定的地址,因此扫描中途更改的名称无法把探测重定向到别处。在底层,本页调用 sysosx 服务器上的 GET /api/check/port-scan,它并行运行这二十次连接,并把结果缓存十分钟。

如何阅读结果

先看开放端口——它们是真实的攻击面,是互联网能触及的服务。开放的 22 或 3389 意味着远程访问可以从任何地方到达,这可能是有意的(一台你管理的服务器),也可能是首先要限制到你自己地址的东西。一个面向互联网开放的数据库端口(3306、5432、27017)几乎从来不是有意的,值得立即关注:数据库应该由应用程序访问,而不是由整个互联网访问。开放的 80 和 443 对 Web 服务器来说是正常的;开放的邮件端口对邮件服务器来说是正常的;其他任何开放的端口都应该能解释自己。关闭的端口什么都不用做:主机活着并且在拒绝,这正是大多数服务器上这份列表中大多数端口的预期状态。被过滤的端口只在你预期那里有东西时才值得再看一眼——一个你运行、但扫描看不见的服务,通常是防火墙规则在履行职责,或者服务绑定到了错误的接口,单凭扫描无法区分这两种情况。完全没有开放端口的结果是正常结果,不是错误:它意味着从这台服务器的有利位置看,二十个常用服务没有一个可达,这正是一台加固主机该有的样子。

相关工具:当你知道 443 已开放后,用SSL 评级器检查它的 TLS 设置;想把可达性和记录一起看,用网站健康检查;当问题是一个名字指向哪里、而不是它上面有什么在应答时,用DNS 传播检查器。

延伸阅读:开放端口说明了服务器的什么——如何像运维人员一样阅读一次扫描,哪些开放端口是正常的,哪些是凌晨三点等着发生的寻呼。

常见问题

这和运行 nmap 有什么不同?

Nmap 以各种方式扫描一切:完整的端口范围、UDP、版本检测、操作系统指纹识别。这个工具只从 sysosx 的服务器做一件狭窄的事——对一份固定的约二十个常用端口列表做 TCP 连接,别无其他。不读取横幅、不做版本检测、不用 UDP、不支持自定义端口。这种狭窄正是它的意义所在:它回答“常用端口上在监听什么?”,而不变成一个任何人都能对准任何目标的通用扫描器。

开放、关闭和被过滤到底是什么意思?

开放意味着一次 TCP 连接成功了——有东西在监听并在那个端口上接受连接。关闭意味着主机主动拒绝了连接(一个重置数据包),这是活着的主机在那个端口上什么都没有时的回答方式。被过滤意味着那个端口在一秒内完全没有给出任何答案——通常是防火墙在悄悄丢弃数据包。被过滤不等于关闭:被过滤的端口在防火墙后面可能有服务,唯一诚实的说法是“没有答案”。结果表把这三种状态全部分开保存,正是出于这个原因。

为什么只有二十个端口,为什么我不能添加自己的?

因为带有任意端口输入的端口扫描器是一个用来映射互联网上任何主机的工具,而这个站点不会成为那样的工具。这份列表涵盖了初步查看时重要的端口——Web、邮件、DNS、数据库、远程访问、文件共享——服务器会拒绝列表之外的所有端口。如果你需要对你拥有的主机做完整扫描,请从你自己的机器上运行 nmap,在那里你控制范围和后果。

为什么默认是 scanme.nmap.org?

因为它正是为这个目的而存在的:nmap 项目把它作为任何人都可以扫描的公开目标来运行,让人们学习扫描是如何工作的。它是互联网上唯一一个扫描它不需要讨论许可的主机。对于其他任何主机,规则很简单:扫描你自己的服务器、你有权测试的服务器,或公开测试目标——永远不要扫描陌生人的基础设施。

为什么结果要缓存十分钟,为什么每小时只有五次新扫描?

一次扫描是二十次并行的 TCP 连接,不是一次握手,所以它比其他检查成本更高,也更容易被滥用来做批量探测。十分钟的缓存意味着对同一台主机的重复检查不花任何成本,而更严格的新扫描限制(每位访客每小时五次,最多每分钟两次)让这个工具对检查自己服务器的人保持可用,又不会变成一个探测服务。缓存的结果会如此标注;一台主机的开放端口很少会一分钟一变。