前言:因此,在我真正提出问题之前,我想指出,我对发布此信息有些担心,因为即使在我输入此信息时,感觉就像我在要求某人告诉我我需要的交换机配置,但事实并非如此。我已经完成了主交换机配置并准备返回给客户端,但他们要求我验证他们将实际应用于交换机的/整个/配置,而不仅仅是特定于应用程序的内容,因此有以下问题。无论如何,现在结束了,让我们开始讨论实际问题。
我一直在为客户开发一个应用程序,该应用程序将在运行 Debian 7.5 的一组负载平衡的 AWS 服务器上运行,该服务器只能从所有地址通过端口 80 访问应用程序本身,而仅从我们的办公室和客户外包 AWS 管理团队的办公室通过端口 22 访问 SSH。
由于服务器将包含敏感的业务数据,因此客户端的安全策略必须严格限制,因此需要尽可能锁定来自所有服务器的传入和传出连接的网络配置。我已经概述了这部分的要求,并且我和 AWS 团队已经达成一致。但是,他们要求我验证他们将要应用的最终配置,其中包括以下几行:
Source Destination Protocol Ports Service Action Description
0.0.0.0/0 192.168.0.0/16 TCP 1024-65535 Ephemeral Ports Allow Allows inbound return traffic from the Internet
192.168.0.0/16 0.0.0.0/0 TCP 32768-65535 Ephemeral Ports Allow Allows outbound responses to clients on the Internet (for example, serving web pages to people visiting the web servers in the subnet)
不幸的是,网络层是 OSI 模型中我了解甚少的一个方面。我隐约知道,在建立了对服务的知名端口的初始请求后,某些服务会使用临时端口进行实际的工作连接,但我不确定哪些服务实际上需要在服务器的公共接口上打开这些端口才能使这些服务器正常运行。评论暗示 32768-65535 是 Web 服务器正常运行所必需的,但我过去曾收到过他们的权威回复,后来被证明是错误的,所以我想确认这一说法。
nginx 或 sshd 是否需要打开临时端口才能正确执行其功能,或者所有活动是否始终只在配置的端口上进行(例如,分别为 80 和 443,以及 22)?关闭临时端口是否会阻止 apt 等服务正常运行(我认为它通常使用端口 80 上的 HTTP 与其源进行交互)?
此外,他们还在配置中添加了以下两行有关 DNS 查询的内容:
Source Destination Protocol Ports Service Action Description
0.0.0.0/0 192.168.0.0/16 TCP/UDP 53 DNS Allow Allows inbound DNS query from anywhere
192.168.0.0/16 0.0.0.0/0 TCP/UDP 53 DNS Allow Allows outbound DNS queries to anywhere
现在,我们没有在这些服务器上运行 DNS 守护程序,因此我非常确定我们可以完全忽略第一行,但是关闭 53 的传入或传出流量是否会阻止服务器正确解析主机名?我不得不承认,我从来没有真正深入研究过 DNS 的实际工作方式,因为我从来不需要这样做。:s 假设现在是开始的好时机!
但是是的,tl;dr 总结:
关闭端口 1024-65535 的所有入站和出站流量是否会阻止 nginx、sshd、DNS 查询或任何核心操作系统实用程序在 Debian 服务器上正常运行?
答案1
定义插座对:
通信的本地和远程套接字称为套接字对。每个套接字对由一个唯一的 4 元组描述,该 4 元组由源和目标 IP 地址以及端口号组成,即本地和远程套接字地址。[3][4] 在 TCP 情况下,每个唯一的套接字对 4 元组都分配有一个套接字号,而在 UDP 情况下,每个唯一的本地套接字地址都分配有一个套接字号。
在服务器端,端口通常由所使用的协议/应用程序固定。例如,SSH 22 和 DNS 53。
在客户端,即发起与服务器连接的一方,它必须选择一个源端口来履行其 4 元组中唯一标识连接所需的部分。客户端通常会在 1025-65535 范围内随机选择一个端口。我相信这就是他们所说的临时端口?
某些协议(例如 RPC 端口映射)将让服务器侦听固定端口,客户端将连接并请求特定服务,侦听器将提供客户端应连接的端口(通常是随机的,在一定范围内)并在该端口上生成服务。这只是服务器端口更复杂的安排的一个示例,但它绝不要求使用客户端的特定源端口。它们应该是随机的。
在源端口上进行过滤有点尴尬。您发布的列表并未显示他们是否在过滤源端口或目标端口。如果您真的想强化防火墙,请默认使用 block=all 策略并仅允许必要的端口进入。我不会限制可以使用哪些源端口,除非您正在寻找麻烦(例如客户端无法连接)或额外的工作(即复杂的防火墙规则)。
似乎在第一个列表中,他们指定了客户端可以使用的随机端口。他们为什么要关心这个?