从我的 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 的错误还是我误解了什么?
当 Nmap 在该端口上收到对 SYN 探测的 SYN/ACK 响应时,或者(在 TCP 连接模式下,
-sT
)与该端口的 TCP 连接成功时,Nmap 会报告打开的 TCP 端口。有几种情况下 netstat/ss 和 Nmap 的输出可能不同:--reason
选项并查找来自已知良好端口与可疑端口的响应数据包的 TTL 差异。您还可以比较数据包捕获中的响应,因为响应的其他部分可能不同(主要是 TCP 选项)。--reason
上面建议的选项和其他比较可以检测到这一点。另一种方法是使用qscan
NSE 脚本来比较回复的时间,以确定某些端口是否由于额外的路由而出现延迟。这也可以像数字 1 一样检测干扰。masscan
,它使用数据包捕获来检查入站流量和原始套接字来生成回复。netstat
,ss
或者内核模块可能正在拦截系统调用并过滤返回值以隐藏端口。在 8080 这样的公共端口上发现这种情况是非常不寻常的。Nmap 通常用于检测这种干扰,因为它报告目标的实际行为,而不是 rootkit 伪造的内部记帐。不过,您必须确保没有其他东西干扰扫描。