我正在尝试了解在具有活动的内置 Windows 防火墙的计算机上扫描端口时得到的结果。我的测试环境有两台运行 Hyper-V VM 的 Windows 7 计算机,它们直接通过内部虚拟交换机连接,并且位于同一子网中,它们之间没有其他防火墙。
机器 A - Windows 防火墙已关闭并运行 Nmap 7.60
机器 B - 正在扫描的机器
当机器 B 上的 Windows 防火墙关闭时,所有端口都显示为打开或关闭 - 预期。
当在计算机 B 上使用默认规则打开 Windows 防火墙时,一些端口显示为打开(预期),其余端口显示为已过滤。
当我创建入站规则以允许在没有侦听器的特定端口上的连接时,我希望该端口被扫描为关闭,但是它仍然显示为已过滤,原因是无响应。
有人能解释一下为什么在扫描一个端口时没有响应吗?该端口有一个活动的入站规则允许连接,但没有拒绝规则。我正在使用 SYN 扫描。
答案1
防火墙会过滤 TCP SYN,这样 TCP 就永远不会收到它,而 TCP 也无法发送所需的 RST。从RFC 793,传输控制协议:
复位生成
作为一般规则,当收到明显不适用于当前连接的段时,必须发送重置 (RST)。如果不清楚情况是否如此,则不得发送重置。
有三组状态:
如果连接不存在(已关闭),则将发送重置以响应除另一个重置之外的任何传入段。特别是,通过这种方式,发送到不存在连接的 SYN 将被拒绝。
如果传入段具有 ACK 字段,则重置将从段的 ACK 字段中获取其序列号,否则重置的序列号为零,并且 ACK 字段设置为传入段的序列号和段长度的总和。连接保持为 CLOSED 状态。
如果连接处于任何非同步状态(LISTEN、SYN-SENT、SYN-RECEIVED),并且传入段确认尚未发送的内容(该段携带不可接受的 ACK),或者传入段的安全级别或隔离区与连接请求的级别和隔离区不完全匹配,则会发送重置。
如果我们的 SYN 尚未得到确认,并且传入段的优先级高于请求的优先级,则要么提高本地优先级(如果用户和系统允许)要么发送重置;或者,如果传入段的优先级低于请求的优先级,则继续,就好像优先级完全匹配一样(如果远程 TCP 无法将优先级提高到与我们的优先级匹配,则会在其发送的下一个段中检测到这种情况,然后终止连接)。如果我们的 SYN 已被确认(可能在此传入段中),传入段的优先级必须与本地优先级完全匹配,如果不匹配,则必须发送重置。
如果传入段具有 ACK 字段,则重置将从段的 ACK 字段中获取其序列号,否则重置的序列号为零,并且 ACK 字段设置为传入段的序列号和段长度的总和。连接保持相同状态。
如果连接处于同步状态(ESTABLISHED、FIN-WAIT-1、FIN-WAIT-2、CLOSE-WAIT、CLOSING、LAST-ACK、TIME-WAIT),则任何不可接受的段(超出窗口序列号或不可接受的确认号)必须仅引发一个空的确认段,该确认段包含当前发送序列号和指示预期接收的下一个序列号的确认,并且连接保持在相同状态。
如果传入段的安全级别、隔离区或优先级与连接所请求的级别、隔离区和优先级不完全匹配,则会发送重置,连接将进入 CLOSED 状态。重置将从传入段的 ACK 字段中获取其序列号。
答案2
当我创建入站规则以允许特定端口上的连接时没有听众
如果为没有 LISTENER 的端口创建防火墙规则,那么没有响应是完全正常的,因为该端口上没有任何响应。
引自那里
如果返回的是 LISTENING 以外的内容,那么某个端口可能被阻塞了。如果端口显示为已被过滤,那么防火墙或 VLAN 可能正在阻止该端口;如果端口返回“未监听”,那么我们到达了该机器,但该机器并未监听该端口号。
答案3
找到答案了。
即使存在入站规则,端口也会显示为已过滤,原因在于“隐身模式”功能,该功能“当没有应用程序侦听该端口时,会阻止端口的传出 ICMP 不可达和 TCP 重置消息”。
https://technet.microsoft.com/en-us/library/dd448557(v=ws.10).aspx