带授权的 SSH 端口隧道

Posted

技术标签:

【中文标题】带授权的 SSH 端口隧道【英文标题】:SSH Port Tunneling With Authorization 【发布时间】:2017-02-23 19:44:47 【问题描述】:

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

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

有什么方法可以实现吗?

【问题讨论】:

【参考方案1】:

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

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

可以使用 SSH 执行的操作是禁用端口转发 shell,但该组除外。 sshd_config allowgroups supports LDAP。您将严格限制 Linux 机器上的所有(或大多数)用户。

某些数据库,例如mysql offer native encryption,与“天生”的解决方案相比可能性能不高。 MySQL 还具有压缩的客户端/服务器协议(在使用第三方加密连接时最好禁用)。

您可以设置 *** 并只允许从 *** 接口访问端口 3306。

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

一个奇特的解决方案,即使它对安全性影响不大,是在 Linux 机器上完全没有 SSHd,而是在 Windows 机器上安装它。然后Linux 机器可以连接autossh 客户端并将其本地 3306 端口转发到远程。 Windows 机器上的任何人仍然可以连接到数据库。并且隧道用户甚至不需要在 Linux 机器上存在。然后,出于管理目的,您可以禁用对除bob 之外的所有用户的 SSH 访问。要使用 auto-SSH 从 Linux 到 Windows 打开隧道,您需要一些 SSH server 或 other for Windows。

***、iptables 和反向隧道几乎没有区别的原因是,攻击者如何“进入”Windows 机器?他可能会利用 Web 服务器。但此时,无论 Web 服务器和数据库之间存在何种连接,攻击者无论如何都将拥有完全访问权限。他只会捎带现有的连接。

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

花哨的解决方案(在本例中是 MySQL 和端口 3306;也可以是 PostgreSQL 和端口 5432)

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

...你就完成了。

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

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

(*) 如果端口转发受 LDAP 限制,任何其他用户也可以这样做——他们只需要等到启用 LDAP 的用户执行连接,然后他们就可以已经捎带上了它。

【讨论】:

你能扩展这个奇特的解决方案吗?如果用户在特定组中,我只想将连接转发到 Windows 服务器上的数据库

以上是关于带授权的 SSH 端口隧道的主要内容,如果未能解决你的问题,请参考以下文章

通过 ssh 隧道使用套接字进行双向通信

通过 ssh 隧道的 ftp [关闭]

Linux-ssh隧道详解

ssh隧道配置

ssh隧道

具有相同区域的多个 SSH TCP 端口 22 隧道