带授权的 SSH 端口隧道
SSH Port Tunneling With Authorization
如果用户在特定的 Active Directory 组中,是否可以仅允许通过 SSH 端口隧道使用端口?
我有一台客户端计算机、一个 Windows Web 服务器和一个带有数据库的 Linux 服务器。我希望客户端能够使用 SSH 连接到数据库,但前提是它们在特定的 AD 组中。
有什么方法可以实现吗?
基本上:没有。任何具有 shell 访问权限的用户都可以使用自己的转发器并获得对端口的访问权限。因此,如果您在 Linux 机器上有用户 root
、bob
和 dbtunnel
,则所有三个用户都可以 "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 执行连接启用用户,那么他们就可以搭载它了。
如果用户在特定的 Active Directory 组中,是否可以仅允许通过 SSH 端口隧道使用端口?
我有一台客户端计算机、一个 Windows Web 服务器和一个带有数据库的 Linux 服务器。我希望客户端能够使用 SSH 连接到数据库,但前提是它们在特定的 AD 组中。
有什么方法可以实现吗?
基本上:没有。任何具有 shell 访问权限的用户都可以使用自己的转发器并获得对端口的访问权限。因此,如果您在 Linux 机器上有用户 root
、bob
和 dbtunnel
,则所有三个用户都可以 "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 执行连接启用用户,那么他们就可以搭载它了。