我想在里面运行一个应用程序jail
,以便允许的用户只能连接到被监禁的环境(应用程序),而不能连接到我的盒子上的任何其他东西。
但是他们需要能够通过网络连接到监狱,并且我只有一个公共 IP 被我的盒子使用。
我怎样才能让其他人进入监狱?
答案1
根据您希望人们在监狱中连接的服务,您可以使用防火墙规则将公共端口上的传入公共流量转发到监狱的私有 IP 上的相应端口,或者您可以设置一个代理来为您完成这项工作 - 并且顺便为您的监狱增加一些保护。
我经常对运行 Web 服务器的监狱这样做。监狱使用私有 IP 地址,因此无法访问网络。唯一可以访问它们的方式是使用在监狱服务器上运行的 HTTP 反向代理。您可以使用阿帕奇或者nginx作为反向代理,但我更喜欢“磅“因为它很简单。您可以在 ports 树中找到它港口/www/磅/。
其他服务也可以使用入站代理。 nginx 可以用作 IMAP 代理。如果您希望能够在不关闭 IMAP 的情况下对其进行升级,那么这种方法非常方便。只需将其代理到第二个 jail,升级第一个 jail,然后将服务切换到升级后的 jail,这样您就可以升级备用 jail。由于运行 jail 所需的资源几乎与在服务器上本地运行某些东西相比没有多大差别,因此您可以获得虚拟化的所有好处,而不会影响性能。
如果您需要人们通过 SFTP 连接到您的机器,那么您要么需要使用非标准端口(可能使用防火墙规则和/或 NAT 来转发流量),要么您可以设置 SFTP 帐户,以便它们将 chroot 到它们应该所在的 jail 目录中。这不会运行 SFTP 服务器在监狱,但结果是一样的。
如果您需要通过 SSH 提供对 jail 的 shell 访问,那么我怀疑您只有两个选择。第一种是,与 SFTP 一样,使用非标准端口和防火墙规则。第二种更复杂的选择是使用 jail 服务器上的 shell 帐户,该帐户的.ssh/authorized_keys
文件中具有魔法变量。请查看man sshd
在“AUTHORIZED_KEYS FILE FORMAT”部分下。
简而言之,您可能希望为将连接到您的密钥设置类似的东西command="command"
。缺点是,对于任何将要连接的人,您都需要提前获取他们的公钥。并且您的客户端显然需要设置密钥。但好处是您可以在监狱主机上创建 shell 帐户,这些帐户可以jexec
进入监狱,也可以运行另一个到达那里的 ssh。
答案2
您可以使用不同的端口进行访问或使用内部 IP 让人们使用 ssh/vpn 隧道。