我想从外部机器访问在我办公室防火墙后面的 Web 服务器上运行的 Web 应用程序。
我们有一个运行 sshd 的堡垒主机,可以从互联网访问。
我想知道这个解决方案是否是个坏主意:
- 在堡垒主机上创建一个 shell=/bin/false 且无密码的账户 ('testuser')
- 在外部机器上创建 ssh RSA 密钥
- 将 RSA 公钥添加到 testuser 的 authorized_keys 文件中
- 使用以下命令从外部主机通过 ssh 连接到堡垒主机:ssh -N 8888:targethost:80
- 从外部主机运行我的测试
- 关闭 ssh 隧道
我知道如果我的 RSA 私钥被泄露,那么有人就可以通过 ssh 连接到堡垒主机。但是还有其他原因导致此解决方案不明智吗?
谢谢你!
答案1
我认为这是一个非常安全的设置,我自己也用过。您需要在命令中添加“-L”:
ssh -N -L 8888:targethost:80
只要您不使用“-g”选项,就只有您的客户端机器可以访问端口转发。
我还建议让堡垒主机上的 sshd 监听非标准端口。如果您正在监听标准端口,攻击流量有时会消耗大量 CPU。
另外,为你的 ssh 密钥选择一个好的密码,并只在受信任的机器上输入它。最好是 Linux,在 Linux 上安装键盘记录器不太容易。
答案2
我认为这不一定是个坏主意。将 SSH 放在 22 以外的端口上,这样脚本小子就更难发现它了,如果您从笔记本电脑进行外部测试,我会加密驱动器上的内容,这样如果它被盗/丢失/等,您不必担心数据被泄露。否则,隧道应该有助于防止堡垒主机和公共网络管道上的笔记本电脑之间的内容被拦截。
答案3
隧道可能是一个不错的选择。您不需要在机器上拥有帐户,并且仍然可以使用证书对客户端进行身份验证。
答案4
您提出的解决方案非常安全。针对暴露的主机的额外安全强化步骤:
- 仅允许您知道需要的服务入站(仅允许入站 tcp 22)
- 使用无人值守升级或 yum-cron 启用自动安全更新(更新配置文件,以便这些服务在更新发布时实际应用更新)
- 不要通过电子邮件或 Slack 等不安全的方式传输你的私钥
- 实施 fai2ban,这样扫描整个互联网的机器人就不会再敲门了(或者更好的是,创建一个受信任源 ip 的防火墙白名单)
- 您建议通过将 shell 设置为 /bin/false 或 /sbin/nologin 来仅允许端口转发,这是设置堡垒主机的极好的一般建议,但会使机器的远程管理变得具有挑战性,并且可能对您的用例来说有点过度。