通常,您可以通过指定端口号和协议(TCP 或 UDP)来打开端口。但是,Windows 允许我通过指定可执行文件来添加例外。它是如何工作的?当我选择“mygame.exe”时,后台会发生什么?
我在想它在操作系统中是如何实现的。Windows 必须跟踪声明它们在特定端口 X 上侦听的程序。然后,当数据包到达时,它会检查其目标端口,接下来检查例外列表中是否有任何程序在该端口上侦听,如果 mygame.exe 在那里,它会将数据包转发到 mygame.exe。如果例外列表中没有匹配的程序,则它会检查开放端口列表。如果目标端口不在该列表中,则数据包将被忽略。
就是这样吗?
答案1
是的,它就是这样的。微软建议实际上可以这样做:
当您将某个程序添加到防火墙的允许程序列表中,或者打开防火墙端口时,您就允许特定程序通过防火墙向您的计算机发送信息或从您的计算机发送信息。允许某个程序通过防火墙进行通信(有时称为解除阻止)就像在防火墙上打一个洞一样。
每次打开端口或允许程序通过防火墙进行通信时,您的计算机的安全性都会降低一些。防火墙允许的程序或打开的端口越多,黑客或恶意软件利用这些开口传播蠕虫、访问您的文件或使用您的计算机向他人传播恶意软件的机会就越多。
通常,将程序添加到允许程序列表中比打开端口更安全。如果您打开一个端口,无论是否有程序正在使用它,它都会保持打开状态,直到您将其关闭。如果您将某个程序添加到允许的程序列表中,则“漏洞”仅在特定通信需要时才会打开。
答案2
我在想它在操作系统中是如何实现的。Windows 必须跟踪声明它们在特定端口 X 上侦听的程序。然后,当数据包到达时,它会检查其目标端口,接下来检查例外列表中是否有任何程序在该端口上侦听,如果 mygame.exe 在那里,它会将数据包转发到 mygame.exe。如果例外列表中没有匹配的程序,则它会检查开放端口列表。如果目标端口不在该列表中,则数据包将被忽略。
就是这样吗?
不,这不是它的工作原理。它实际上比这更简单:
- 防火墙不负责将数据包转发给程序 - Winsock 负责
- 只有一套规则
- 规则检查没有“顺序”
Windows 防火墙的工作原理在此有详细描述Microsoft Technet 文章。
当传入数据包到达您的计算机时,Windows 防火墙将检查该数据包并确定它是否符合 Windows 防火墙例外列表(NAT 映射表和 Windows 防火墙规则存储的组合)中指定的条件。如果数据包与列表中的条目匹配,Windows 防火墙会将该数据包传递给 TCP/IP 协议以进行进一步处理。如果数据包与列表中的条目不匹配,Windows 防火墙将默认丢弃该数据包并在 Windows 防火墙日志文件中创建一个条目(如果在 Windows 防火墙的“日志设置”对话框中启用了日志文件)。例外列表中的条目可以由程序名称、系统服务名称、TCP 端口和 UDP 端口组成。无法根据 IP 标头中的 IP 协议字段在例外列表中创建条目。
基本上,在默认模式下,防火墙只关心拒绝数据包。如果数据包与规则不匹配,防火墙就会丢弃它。否则,防火墙什么也不做,让 Winsock 将其转发给相关程序。