2016-07-15 25 views
0

在AWS中,我们的用户(系统管理员)可以使用SSH隧道访问内部区域数据库服务器,而不受任何本地限制。 如您所知,要访问内部节点,用户必须先通过公共区域网关服务器。 因为网关实际上是一个通道,所以我希望控制来自网关服务器上隧道用户的流量。 例如,要获取所有客户端的当前连接的IP地址,要标识内部路径(例如DB服务器IP),用户访问的用户还要控制未授权用户的连接。在AWS中,通过ssh代理+ sshd访问控制

为了我的梦想成真,我觉得下面的想法真的很理想。 1)将sshd端口更改为22以外的其他端口。重新启动sshd守护进程。 2)在sshd之前找到ssh代理(nginx,haproxy或其他),并让代理从客户端获取所有ssh流量。 3)ssh代理将流量路由到sshd 4)然后我可以通过分析ssh代理日志来查看所有用户的活动。而已。

梦可能吗?

回答

0

聪明,但有一个严重的缺陷:你不会获得任何新的信息。

为什么? SSH中的第一个S:“安全”。

您设想的“ssh代理”将无法告诉您有关SSH连接内部发生了什么情况,这是隧道协商的地方。当然,连接是加密的,SSH的一个重要特点是它不能被嗅探。 ssh代理在同一台机器上的事实并没有什么不同。如果它可以被嗅探,它将不安全。

您的所有SSH代理都可以告诉您,入站连接是由客户端计算机创建的,syslog已经告诉您这一点。

真正意义上,它根本不是一个“ssh代理” - 它只是入站连接上一个天真的TCP连接代理。

所以你不能用这种方法学习任何新的信息。

这听起来像你需要的是你的ssh守护进程,大概openssh,记录由连接用户建立的隧道连接。

This blog post(你会,讽刺的是,需要以查看绕过无效SSL证书)提到at Server Fault,显示这似乎是一个简单的修改OpenSSH的源代码来登录你想要的信息:谁定建立一个隧道,并在哪里。

enable some debug-level logging on sshd

所以,对我来说,看起来额外的TCP代理是多余的 - 你只需要进程在做实际的隧道(sshd)来记录它正在做什么或被请求做什么。