在AWS中,通过ssh proxy + sshd进行访问控制

In AWS, access control by ssh proxy + sshd

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

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

是否可以做梦?

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

为什么? SSH中第一个S:"secure."

您设想的 "ssh proxy" 将无法告诉您有关 SSH 连接内部发生的事情的任何信息,这是协商隧道的地方。连接是加密的,当然,SSH 的一个重要点是它不能被嗅探。 ssh 代理在同一台机器上这一事实没有区别。如果它可以被嗅探到,那就不安全了。

您的 SSH 代理只能告诉您入站连接是从客户端计算机建立的,系统日志已经告诉您了。

在真正意义上,它根本不是 "ssh proxy" -- 它只是入站连接上的简单 TCP 连接代理。

所以你将无法通过这种方法学习任何新信息。

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

This blog post (which you will, ironically, need to bypass an invalid SSL certificate in order to view) was mentioned at Server Fault 并显示了对 openssh 源代码的简单修改,以记录您想要的信息:谁设置了隧道,以及到哪里。

或者,enable some debug-level logging on sshd.

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