在创建传入的 TCP/IP 或 UDP 连接时,我们需要打开防火墙端口或获取指定端口的权限。
为什么不适用于传出的 TCP/IP 连接?
答案1
实际上传出的 TCP 连接确实需要防火墙也可以打开。可以设置防火墙,使其同时阻止传入和传出连接。请查看上面有关防火墙的文章。
防火墙有默认规则。大多数安全配置都有默认规则来阻止所有内容,但需要打开的几个端口除外。对于传出连接,默认规则可以是“允许所有内容”,除非有特殊的安全设置或您不信任计算机上(或防火墙“内部”)运行的程序 - 在这种情况下,默认规则将是放弃所有内容并仅允许连接到允许的端口或地址。并且您还必须为传出连接打开防火墙。
因此,这一切只是防火墙配置和默认防火墙规则的问题。
答案2
20 世纪 90 年代的一些老式或过于简单的防火墙可能只能单独将规则应用于单个数据包,但所有现代防火墙都是我们所谓的状态数据包检测 (SPI) 防火墙。SPI 防火墙会记住流量的状态(例如,记住它们看到了发起 TCP 会话的传出 TCP 同步),并将该状态信息应用于未来的允许/拒绝决策(例如,允许该 TCP 会话中的其他数据包以任一方向流动,因为它是“从内部”发起的)。
许多家庭网关路由器产品甚至没有功能齐全的防火墙,而是依赖于 NAT(特别是“NAPT”,又名“PAT”)充当一种“穷人的 SPI 防火墙”这一事实。NAT 网关需要端口映射,因为否则,当从外部发起的传入连接尝试到达 NAT 网关的外部 IP 地址时,它将不知道将其转发到哪个私有端客户端,因为它没有任何状态记录。所以它必须放弃它。端口映射允许 NAT 知道将某些类型的传入请求转发到哪个客户端。
至于获取在主机上给定端口上放置侦听器的权限,某些操作系统会限制将侦听器放置在 1024 以下的“知名”端口上,甚至放置在 49152 以下的“已注册”端口上,但大多数操作系统允许任何普通用户将侦听器放置在 49152 以上的“临时”端口上。如果您因没有权限在端口 80(“知名”端口范围内)或 8080(已注册)上启动自己的 Web 服务器进程而感到沮丧,请尝试在 60080(临时)上启动它。
传出的 TCP 和 UDP 连接会被自动分配一个来自临时范围的端口(一些操作系统甚至可能使用“已注册”范围的部分作为临时端口)。