作为一名新手系统管理员,我接管了一堆服务器,其中包括一个前端 Web 服务器和几个后端服务器,这些服务器保存着包含 Web 服务用户私人信息的数据库。
首先,我禁用了 SSH 密码验证。我想知道在登录验证方面我还应该注意什么,以便以合理的强度保护服务器(第一要务),并简化未来管理问题的任务(第二要务)。
问题 1:是否建议设置一个“垫脚石”服务器,如下图(2)所示,它将是唯一一个开放 22 端口的服务器?这是否会使后端服务器更安全?
(1)扁平状——无踏脚石(现行设置)
[dev machine] - pub key auth - [Frontend]*
private key A public key A
[dev machine] - pub key auth - [Backend]*
private key A public key A
(2)星型--带踏脚石
[dev machine] - pub key auth - [S- stone] - ? - [Frontend/Backend]*
private key A public key A
Question 2: In case of this setup, which authentication method is recommended for internal login?
(a) use another key pair: priv key B - pub key B
(b) use ssh-agent
(c) reuse key pair A: put priv key A to the s- stone
(c) use password auth
注意:问题标题中的“身份验证图”是一个虚构的词。我很高兴知道是否有一个术语来描述这种问题——允许从哪个服务器登录哪个服务器。
答案1
我不认为堡垒主机会带来任何好处。如果你以进入后端的相同方式登录堡垒主机,那么就没有任何好处(如果攻击者打开堡垒主机,那么他就完全进入了),如果你需要以不同的方式登录堡垒主机,那么管理起来会非常麻烦,迟早你会想办法提高工作效率,而你的安全性就此消失。
另一方面,把所有东西都放在互联网上,任谁都可以浏览是有点不必要的风险。我过去部署的解决方案包括:
- 限制源 IP:理论上很棒,直到您的 ISP 重新编号您的家庭连接或您在旅途中急需进入服务器。
- 端口敲门:理论上很可爱,但对于保持你的身份验证日志干净来说比提供任何真实的安全性。如果你忘记了端口敲门顺序,那也会很尴尬。
- VPN:安全性好,特别是如果您必须时不时地使用未加密的协议来访问后端服务器(该死的 IPMI),并且如果您使用 PKI(万岁 openvpn!),则可以提供良好、强大的身份验证。缺点是您的客户端配置变得更加复杂。
没有“最佳”解决方案。我喜欢 VPN,但 YMMV。
答案2
网关盒(“垫脚石”、“堡垒主机”等)是一个好主意,因为它可以限制攻击配置文件:您只需拥有一个,而不是暴露许多机器的 SSH 守护程序。
话虽如此,正如 womble 指出的那样,如果您使用相同的凭据登录“垫脚石”及其背后的所有服务器,那么您的安全性就不会得到真正的提升 - 一个密钥/密码/等等被泄露,他们可以去任何他们想要去的地方。
您至少应该实现离散身份验证凭据(“垫脚石”盒与其背后的内容使用单独的密钥),并且应该考虑 womble 提到的其他技术(特别是源 IP 限制和/或端口敲击)作为额外的安全层。
请注意,如果您采用 VPN 方法,您通常会依赖 VPN 作为安全提供商(代替“垫脚石”主机)。