SSH:仅允许已知 IP

SSH:仅允许已知 IP

我想仅允许已知 IP 地址块通过 SSH 进入我们的服务器。我有 Windows Server 2012、R2、CentOS 7 和 Ubuntu 12 和 14。

每个操作系统实现此目的的最佳实践是什么?

答案1

有多种方法可以实现这一点,但我会告诉您我为客户做了什么。

根据您想要实现此目的的方式(我使用 VLAN/子网、ACL 和安全组),我通常会创建一个网络安全组(通常在我正在使用的防火墙/交换机/路由器上),该组由 IP 范围、服务器组或我允许访问的网络对象组成,然后我使用 ACL 来限制流量。

例如,假设您允许上述这些服务器通过 SSH(TCP 端口 22)以内部/外部方式连接到您的服务器;这意味着您上述的服务器是外部的,或者在您的 LAN 之外,而您允许它们通过 SSH 连接到的服务器位于您的 LAN 上。您将在防火墙上创建一个对象组并将其命名为外部 SSH 客户端,并将这些服务器的所有外部/公共 IP 放入此组中。然后,您将在防火墙上为位于内部 LAN 上的服务器创建另一个组,这些服务器可以访问该组,并将其命名为“允许内部服务器 SSH”。接下来,您将创建一个 ACL,允许从外部客户端到内部服务器的流量。例如,您的 ACL 看起来应该像这样:

来源:外部 SSH 客户端

目标:允许内部服务器 SSH

协议/端口:SSH/22

允许/拒绝:允许

如果这是防火墙或类似的设备,您会将此规则放在隐式拒绝规则(除非明确允许,否则隐式拒绝所有流量的规则)上方的某个位置,这通常是 ACL 的最后一条规则,以便它在任何拒绝之前生效。

此场景仅考虑通过 SSH 从网络外部的一组公共 IP 或客户端访问本地网络上的内部服务器组。还有许多其他方法可以实现此目的,还有其他场景;也许您想知道如何在所有服务器都在本地或 LAN 上的内部执行此操作,在这种情况下,其实没什么不同。我只是试图给你一个如何实现这一点的基本思路。如果有什么不合理的地方,请告诉我,我可以更详细地解释。

答案2

我编辑了我的 /etc/hosts.allow:sshd:198.xxx.xxx.xxx/255.255.255.248 sshd:192.168.x.0/255.255.255.0

和 /etc/hosts.deny: sshd: ALL

并重新启动 SSH。似乎可以正常工作。

相关内容