带授权的 SSH 端口隧道

SSH Port Tunneling With Authorization

如果用户在特定的 Active Directory 组中,是否可以仅允许通过 SSH 端口隧道使用端口?

我有一台客户端计算机、一个 Windows Web 服务器和一个带有数据库的 Linux 服务器。我希望客户端能够使用 SSH 连接到数据库,但前提是它们在特定的 AD 组中。

有什么方法可以实现吗?

基本上:没有。任何具有 shell 访问权限的用户都可以使用自己的转发器并获得对端口的访问权限。因此,如果您在 Linux 机器上有用户 rootbobdbtunnel,则所有三个用户都可以 "export" 访问数据库。

但是您真正想做什么?因为在我看来,您想 加密(可能压缩)Web 服务器和数据库之间的数据库连接 。您完全可以在没有 SSH 的情况下做到这一点。

  • 可以 使用 SSH 做的是完全禁用端口转发 shell 除了对于那一组。 sshd_config allowgroups supports LDAP。您将严格限制 Linux 机器上的所有(或大多数)用户。

  • 某些数据库,例如 MySQL offer native encryption,如果与 "born" 解决方案相比,可能性能不佳。 MySQL 也有压缩的 client/server 协议(当使用第三方加密连接时,最好禁用)。

  • 您可以设置VPN,只允许从VPN接口访问端口3306。

  • 此外,您可以限制来自 Web 服务器的连接(SSH 和 VPN)以减少数据库机器的攻击面。

  • 一个奇特的解决方案,即使它对安全性没有多大作用,也是在Linux机器上安装SSHd,而是把它放在 Windows 机器上。然后 Linux 机器可以连接到 autossh 客户端并将其 local 3306 端口转发到远程。 Windows 机器上的任何人仍然可以连接到数据库。隧道用户甚至不需要 存在 Linux 机器上。然后,出于管理目的,您可以禁用对除 bob 以外的所有用户的 SSH 访问。使用 auto-SSH from Linux to Windows, you'll need some SSH server or other 为 Windows 打开隧道。

之所以 VPN、iptables 和反向隧道差别不大,是因为攻击者如何获得 "into" Windows 机器?他可能会利用 Web 服务器。但在那一点上,无论 Web 服务器和数据库之间存在什么连接,攻击者无论如何都将拥有完全访问权限。他只会利用现有连接。

因此,防火墙 IP 限制和反向隧道解决方案对用户识别没有任何作用,因为它无论如何都没有实际意义,而是消除了 Linux 机器从 Web 服务器外部访问的漏洞非管理员用户。

奇思妙想的解决方案(在此示例中 MySQL 和端口 3306;也可以是 PostgreSQL 和端口 5432)

  • 在 Windows 机器的某个非标准端口上安装 SSHd 服务器。
  • 配置 Windows 防火墙,仅当来自 Linux 机器的 IP 时才允许连接到该端口。
  • 在 Windows 机器上创建一个(受限)用户以允许 Linux 连接。
  • 在 Linux 机器上安装 autossh 脚本(以上)并将其配置为连接到 Windows 服务器,将本地 3306 端口转发到新创建的侦听远程 3306 端口绑定到本地主机(没有-g 选项)。
  • 告诉 Web 服务器在地址 127.0.0.1 端口 3306 有一个 MySQL 服务器。

...大功告成。

现在谁可以连接到数据库?

  • 该Windows 机器 上的任何用户。这应该仅表示 Web 服务器用户 (*)。
  • 在 Linux 机器上具有 SSH 访问权限的任何管理员用户(前提是 对 Linux 机器的 SSH 访问权限。您可以将其打开关闭)。
  • 攻击者成功利用了 Windows Web 服务器:但无论如何他都可以做到这一点,因为 Web 服务器需要 访问数据库。

(*) 如果端口转发受 LDAP 限制,任何其他用户也可以这样做——他们只需要等到 LDAP 执行连接启用用户,那么他们就可以搭载它了。