FreeBSD Jail 与 Ruby 多个 Web 部署

FreeBSD Jail 与 Ruby 多个 Web 部署

我希望为 ruby​​ web 应用程序提供免费的部署系统(基于 rack 而不是 ruby​​ on rails),因此本质上我将允许用户使用他们的应用程序上传文件,然后该应用程序将显示在http://用户.域名.com

当我尝试解析作为应用程序上传的内容时,确保不会造成任何损害的唯一方法是隔离。我计划使用 FreeBSD jail 来实现这一点。

第一个问题是我们将拥有单个 IP。我不确定这两种方法是否适用于所有需要在端口 80 上运行的多个应用程序:

http://blog.burghardt.pl/2009/01/multiple-freebsd-jails-sharing-one-ip-address/ http://www.bsdtips.org/index.php/Giving_a_jail_multiple_IPs_with_pf_and_NAT

使用标准 ruby​​ 安装的模板可以使用 http://erdgeist.org/arts/software/ezjail/

问题是这种设置是否合适或者我是否需要 nginx 反向代理设置?

在监狱中运行的 ruby​​ 应用程序是否可以保证不会对其他用户/服务器造成任何损害?

使用 FreeBSD+jail 实现此多托管环境的推荐设置是什么?

答案1

如果您只有单个公共 IP,并且想要将应用程序关在监狱中,则需要 nginx 充当反向代理。但是,这样做的结果是,从监狱的角度来看,所有访问都将来自主机,因此如果用户应用程序以任何方式依赖该主机,则它们可能会获得不准确的信息。您可以proxy_set_header在 Nginx 中使用它来设置标准代理标头(如 X-Forwarded-For),并确保您的用户知道正确的信息位于那里。

Linux 支持透明代理,它允许应用程序在数据包通过主机时伪造其源 IP。FreeBSD 对此提供了基本支持,但只有 root 用户可以使用,因为没有添加访问控制来允许用户控制此功能。可以修补内核以允许任何用户伪造数据包,但这存在安全风险,因此您需要考虑哪种方式最适合您的环境。

在监狱中运行的 ruby​​ 应用程序是否可以保证不会对其他用户/服务器造成任何损害?

Jails 是一种相当安全的方法,可以减轻主机服务器上运行的服务的风险。过去曾发生过“越狱”事件,但我认为最近没有发生过。配置错误也可能导致越狱。不过,ezjail 已经很成熟,应该可以为您设置一个安全的环境。

但是请考虑监狱内有可能会发生损害,您需要思考如何才能准确地检测到违反使用条款的行为。

相关内容