我有一个运行 linux 的 AWS 服务器。当我netstat -lntp
从机器本身执行操作时,它显示了一些打开的端口(如预期的那样),但没有显示 445 或 139。这是有道理的,因为我从未在这台机器上设置过 samba。此外,当我列出正在运行的进程并 grep for smb
orsamba
时,它没有显示任何运行。
查看服务器的防火墙规则,我发现它只允许端口 80 和 22 上的入站流量。它允许所有端口上的出站流量到所有目的地,但我认为这无关紧要。
问题是当我nmap
从网络外部执行时,它显示端口 139 和 445 已关闭。这是为什么?我的理解是“关闭”意味着防火墙让数据包通过服务器,但端口上没有任何监听。为什么防火墙允许流量通过?
“关闭”意味着 nmap 收到了一个 TCP RST 数据包,这确实是当端口上没有任何东西在监听时 IP 主机应该如何响应的。
但是,nmap 不知道该 Reset 数据包是否来自实际主机,或者它是否被沿途的防火墙欺骗。(许多防火墙确实被配置为明确拒绝连接尝试,而不是悄悄地忽略它们;这避免了客户端的长时间超时。)
可能是您的服务器的防火墙使用
reject with tcp-reset
或类似的。也可能是您正在扫描的网络被配置为阻止所有出站 SMB 连接作为安全措施(例如,防止工作站将 NTLM 与恶意服务器通信),并且它正在生成“RST”。
甚至可能是您正在扫描的ISP(或您的服务器所在的 ISP)正在阻止 SMB 跨其 WAN 的连接,以防止恶意软件的可能传播(如旧的 Conficker 蠕虫)。
如果您使用 tcpdump 查看数据包,中间盒欺骗的 RST 对服务器当然是不可见的(因为服务器没有发送它),并且此类数据包可能具有与服务器生成的真实响应不同的 TTL。
用于
nmap --reason
查看它为何显示特定状态。请注意,尽管 nmap 认为 TCP RST 表示“关闭”(因为主机不接受连接),但其他一些工具实际上将其称为“打开”(认为防火墙允许数据包通过)。