我正在为我的初创公司设置两个 Ubuntu 虚拟专用服务器。“公共”服务器(我们称之为www.example.com
)应包含公开的公司网站和受限制但(相对不太敏感)的服务,例如 LDAP 和邮件服务器。“开发”服务器(dev.example.com
)将是公司的 Fort Knox,用于保存公司的源代码(GIT)、工件(Artifactory)和开发人员工具(Atlassian)。访问www.example.com
应该对所有人开放,而开发服务器应该非常安全,只有极少数授权开发人员可以访问,其他公众最好甚至无法猜测该服务器的存在。两台服务器都将托管在托管公司(我们拥有完全的根访问权限)。
我计划使用相同的域名和虚拟主机设置 Web 访问。example.com
将指向“公共”服务器。nginx
安装在“公共”服务器上的将具有www.example.com
虚拟主机(正常提供服务)和dev.example.com
虚拟主机,对该主机的所有请求都将代理到运行另一个的“开发”服务器nginx
。将设置“开发”服务器上的防火墙以拒绝除来自“公共”服务器的调用之外的所有传入流量HTTPS
。SSH
因此,不仅无法直接连接到
nginx
运行“开发”服务器上的开发人员工具的服务器,而且我们还必须先登录公共服务器,然后才能通过 SSH 进入“开发”服务器。因此,潜在的黑客如果不先闯入公共服务器,就无法直接访问“开发”服务器。
如果重要的话,服务器可能会运行 Ubuntu 16.04(我们可以在 14.04、16.04、18.04 和其他 Linux 版本之间进行选择,但 Ubuntu 16.04 对我来说听起来不错)。我既不是安全专家也不是系统管理员。
我有两个问题。
1)这听起来像是一个符合“最佳实践”的良好安全设置,还是有更好的(更简单或更安全)的方法来实现相同的目标?
2) [主要问题]。如何限制 HTTPS 访问,以便只有开发人员可以访问 dev.example.com,而其他用户根本看不到此虚拟主机,即使他们猜出了 URL?到目前为止,我有两个想法。
需要 SSH 隧道。“公共”服务器上的 dev.example.com 虚拟主机
nginx
将设置为仅接受来自“公共”服务器 IP 地址本身的请求,因此开发人员必须设置到“公共”服务器的 SSH 隧道才能访问dev.example.com
。使用 MyEnTunnel (Window) 等工具,可以轻松设置 SSH 隧道,以便在启动时自动建立。然而,我看到的最大缺点是每个开发人员都必须在其主机文件中定义引用"dev.example.com"
(localhost
或者还有其他方法吗?)客户端证书。
nginx
在“公共”服务器上,基本上需要客户端证书才能访问dev.example.com
。除了用于访问开发人员工具的常用登录名和密码外,每个开发人员都将拥有自己的客户端证书来访问 dev.example.com。但是,我对客户端证书不太熟悉,也不了解所有含义。我看到的一个缺点是,当未经授权的人尝试访问时,dev.example.com
他/她可能会收到“客户端证书”错误,这将表明开发服务器在那里,而使用第一种方法,他们将无法连接。
你会给我什么建议?我们的想法是保持简单、便宜,同时尽可能安全,直到公司发展到可以负担得起系统管理员和自己的数据中心的程度。
答案1
第1部分:
通过登录一个公共的不太安全的服务器来访问一个高度安全的服务器让我感觉有点不舒服,就像坐过山车经过顶部一样。
如果您想拥有一个安全的开发服务器,请保护它。仅安装必需/有用的东西。安全性仅限于您控制的范围 - 您的托管服务提供商无论如何都可以访问 - 他们有物理访问权限。
如果您想隐藏您的开发服务器,那就隐藏它。丢弃任何传入的网络流量。也许您想使用端口敲击来打开您的私人门户。但请注意,您的提供商可以看到这一切。
第2部分:
是的,让您的开发服务器的所有服务仅在本地主机上监听是一种简单且轻松的方法,可以同时隐藏和保护您的服务器。
要求用户使用 ssh 隧道是可以的。它很有效,只需几分钟即可设置完毕,并且可以使用任何 ssh 二进制文件完成。在我看来,这是一个好主意。
如果你关闭了所有其他门,你只剩下 ssh 门,它对外界是可见的。不过你可以把它移到后院,从端口 22 改为随机端口,比如 32109。
在我看来,客户端证书足以完成这种类型的安全保护。如果还需要更多,那么没有自己的物理堡垒来保护您的服务器免受未经授权的物理访问将是非常疏忽的。
在建立 ssh 隧道之前,没有人会收到“客户端证书”错误,所以不必担心这一点。
不,您的开发人员不会定义 dev.mydomain.com 指的是 localhost,否则他们将无法通过 ssh 访问它。他们可以通过 localhost 或主机条目“127.0.0.1 mydev”或您内部命名的任何名称安全地访问您的开发服务器。这不需要可公开访问的名称。
在您的 Ubuntu 18.04 上 - 您已经领先了 ;-) 如果您想使用 Ubuntu,请使用 16.04。它将经受住您公司的启动阶段。不过,其他版本也同样可以。确保至少几年内都有可用的更新,例如 2021 年 4 月为您的 Ubuntu-16.04 提供更新
顺便说一句:如果你想隐藏你的开发服务器,不要给它一个像 dev.myserver.com 这样的名称服务条目;你不需要它,其他人也不需要它。只需将它放在你的开发人员的主机文件中即可。
玩得开心!
汤姆汤姆汤姆