从我的 Mac OSX 执行以下命令时:
nmap -PN server.com
报告内容如下:
Starting Nmap 7.70 ( https://nmap.org ) at 2019-04-18 16:14 EDT
Nmap scan report for server.com (9.9.9.9)
Host is up (0.020s latency).
Not shown: 997 filtered ports
PORT STATE SERVICE
80/tcp open http
443/tcp open https
8080/tcp open http-proxy
http 和 https 都很好,但我对 感到困惑http-proxy
。我们在此服务器的端口 8080 上没有运行任何程序:
# sudo ss -lnp | grep :8080
#
netstat 输出:
# netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 12378/mysqld
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2441/nginx: master
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 2441/nginx: master
tcp6 0 0 :::80 :::* LISTEN 2441/nginx: master
tcp6 0 0 :::443 :::* LISTEN 2441/nginx: master
这是一台 Nginx 服务器,没有代理回任何其他东西,它只是 Nginx。我们可以做些什么来“关闭”这个非开放端口。这是 Nmap 的一个错误还是我误解了什么?
答案1
管理员经常使用的工具之一是netstat
。但是,该netstat
命令已被弃用,取而代之的是速度更快、更人性化的ss
命令。 该ss
命令是一种用于转储套接字统计信息的工具,其显示信息的方式与 类似(尽管更简单、更快速)netstat
。
答案2
当 Nmap 收到该端口上 SYN 探测的 SYN/ACK 响应时,或者-sT
当 TCP 连接成功时(在 TCP 连接模式下),Nmap 报告 TCP 端口开放。在以下几种情况下,netstat/ss 和 Nmap 的输出可能不同:
- 某些东西正在拦截端口流量并伪造目标的回复。住宅 ISP 对端口 25、137、139 和 445 执行此操作以避免蠕虫和垃圾邮件。透明代理对 80 和 443 执行此操作以拦截网络流量。有时您可以使用 Nmap 检测此情况,方法是使用选项
--reason
并查找已知良好端口和可疑端口的响应数据包的 TTL 差异。您还可以比较数据包捕获中的响应,因为回复的其他部分可能不同(主要是 TCP 选项)。 - 防火墙正在将端口转发到同一系统上的另一个端口。您无法从外部知道这种情况正在发生,但您可以检查防火墙设置来检测它。
- 端口正在转发到不同的系统,例如作为 NAT 设备上的端口转发。在大多数情况下,
--reason
上面建议的选项和其他比较将起作用以检测这种情况。另一种方法是使用qscan
NSE 脚本比较回复的时间,以确定某些端口是否因额外的路由而出现延迟。这也可以检测到像 1 中的干扰。 - 目标上的某些东西响应得好像端口 8080 已打开,而无需使用操作系统来管理连接。这可能是像我们这样的用户空间 TCP 堆栈
masscan
,它使用数据包捕获来检查入站流量并使用原始套接字来生成回复。 - 操作系统中的某些东西阻止普通工具显示开放端口。通常称为“rootkit”,这是各种远程访问恶意软件的一种功能,旨在隐藏感染。
netstat
和ss
二进制文件可能已被覆盖,或者内核模块可能正在拦截系统调用并过滤返回值以隐藏端口。在 8080 等常见端口上发现这种情况非常罕见。Nmap 通常用于检测这种干扰,因为它报告的是目标的实际行为,而不是 rootkit 伪造的内部会计。不过,您必须确保没有其他任何东西干扰扫描。