我为我的创业公司设置了两个Ubuntu虚拟专用服务器。 “公共”服务器(我们称之为www.example.com
)应包含公开开放的公司网站和受限但相对较不敏感的服务,如LDAP和邮件服务器。 “dev”服务器( dev.example.com
)将是该公司的Fort Knox持有公司的源代码(GIT),工件(Artifactory)和开发者工具(Atlassian)。 访问www.example.com
应该对所有人开放,而开发服务器应该是非常安全的,只有非常有限数量的授权开发人员才能访问,其他公众理想情况下甚至不应该猜测服务器是否存在。 这两个服务器将托pipe在一个托pipe公司(我们有完全的根访问权限)。
我打算使用相同的域名和虚拟主机来设置Web访问。 example.com
将指向“公共”服务器。 安装在“公共”服务器上的nginx
将具有www.example.com
虚拟主机(正常服务)和dev.example.com
虚拟主机, dev.example.com
主机的所有请求都将被代理到运行另一个nginx
的“dev”服务器。 “dev”服务器上的防火墙将被设置为拒绝来自“公共”服务器的HTTPS
和SSH
呼叫以外的所有传入stream量。 因此,不仅可以直接连接到在“开发”服务器上运行开发人员工具的nginx
服务器,而且还需要先login到公用服务器,以便能够通过SSH进入“开发”服务器。 因此,一个潜在的黑客无法直接访问“开发”服务器,而无需首先进入公共服务器。
如果重要的话,服务器可能会运行Ubuntu 16.04(我们可以select14.04,16.04,18.04和其他Linux版本,但Ubuntu 16.04对我来说听起来OK)。 我既不是安全专家,也不是系统pipe理员。
我有两个问题。
1)这听起来像是一个安全的设置,确认是“最好的实践”,还是有更好(更简单或更安全)的方法来实现相同的目标?
2) [主要问题] 。 如何限制HTTPS访问,以便只有开发人员才能访问dev.example.com,而其他用户即使猜对了URL也不会看到这个虚拟主机? 到目前为止,我有两个想法。
需要SSH隧道。 nginx
中的“公共”服务器上的dev.example.com虚拟主机将被设置为只接受来自“公共”服务器的IP地址本身的请求,因此开发人员将不得不build立到“公共”服务器以访问dev.example.com
。 使用像MyEnTunnel(Window)这样的工具,可以很容易地设置SSH隧道,以便在启动时自动build立。 然而,我所看到的一个很大的缺点是,每个开发者都必须定义"dev.example.com"
是指主机文件中的localhost
(或者还有其他方法吗?)
客户端证书。 在“公共”服务器上的nginx
基本上需要客户端证书才能访问dev.example.com
。 每个开发者除了拥有通常的login名和密码之外,还将拥有自己的客户端证书来访问dev.example.com,以便访问开发人员工具。 但是我对客户端证书不太熟悉,不了解所有的影响。 我看到的一个缺点是,当未经授权的人尝试访问dev.example.com
他/她可能会得到一个“客户端证书”错误,这将显示开发服务器在那里,而第一种方法,他们将无法连接。
你会推荐我什么? 这个想法是保持简单,便宜,同时尽可能安全,直到公司发展到能承担系统pipe理员和自己的数据中心的程度。
第1部分:
通过login到不太安全的公共服务器来访问高度安全的服务器,会让我感觉有点不舒服,就像在过山车上传递顶部一样。
如果你想有一个安全的开发服务器,保护它。 仅安装必需/有用的东西。 安全性仅限于您所控制的内容 – 您的托pipe服务提供商无论如何都可以访问 – 他们有实际访问权限。
如果你想隐藏你的开发服务器,隐藏它。 删除任何传入的networkingstream量。 也许你想用敲门来打开你的私人门。 但请注意,您的提供商可以看到这一切。
第2部分:
是的,让你的开发服务器只在本地主机上监听的所有服务是一个简单,毫不费力的方式来隐藏和保护你的服务器在同一时间。
要求用户使用ssh隧道是好的。 它的工作原理是在几分钟内完成的,可以用任何ssh二进制文件来完成。 好主意在我看来。
如果closures所有其他的门,那么你就可以看到外面的世界可见的ssh门。 你可以把它移到后院,从22端口变成像32109这样的随机数。
客户证书完成这种types的安全性 – 在我看来 – 已经足够了。 如果还需要更多的东西,而不是自己的物理堡垒,那么你的服务器被安全防范未经授权的物理访问将是非常荒谬的。
没有人会build立他的SSH隧道之前得到“客户端证书”的错误,所以不要担心这一点。
不,您的开发人员不会定义,dev.mydomain.com是指本地主机,否则他们将无法SSH。 他们可以通过本地主机或主机条目“127.0.0.1 mydev”或任何内部命名的方式安全地访问您的开发服务器。 这不需要公开访问的名称。
在你的Ubuntu 18.04 – 你提前waaay ;-)如果你想使用Ubuntu,使用16.04。 它会忍受你的公司的启动阶段。 不过,其他的味道也是一样的。 确保至less有几年的更新可用,例如04/2021适用于Ubuntu-16.04
顺便说一句:如果你想隐藏你的开发服务器,不要给它一个像dev.myserver.com名称服务条目; 你不需要它,别人会需要它。 只要把它放在你的开发者的主机文件。
玩的开心!
TomTomTom