Você precisaria do nginx agindo como um proxy reverso se você tivesse apenas o único IP público, e você quer ter os aplicativos presos. No entanto, o efeito disso é que todo o acesso a partir da perspectiva dos jails será do host, de modo que os aplicativos do usuário possam ter informações imprecisas se dependerem disso de alguma forma. Você pode usar proxy_set_header
no Nginx para definir um cabeçalho proxy padrão como o X-Forwarded-For e garantir que seus usuários saibam que as informações corretas estão localizadas lá.
O Linux tem suporte para algo conhecido como proxy transparente, que permite que um aplicativo falsifique o IP de origem em um pacote quando ele passa por um host. Há suporte básico para isso no FreeBSD, mas está disponível apenas para root, já que nenhum controle de acesso foi adicionado para permitir que um usuário controle isso. O kernel pode ser corrigido para permitir que qualquer usuário falsifique pacotes, mas isso é um risco de segurança, então você precisa considerar o que funciona melhor para o seu ambiente.
Will the ruby app running in a jail be guaranteed not to create any damage for other users/the server ?
Os jails são uma maneira bastante segura de reduzir o risco para o servidor host dos serviços executados nele. Houve "quebras de prisão" no passado, mas não acredito que tenha havido recentemente. Há também erros de configuração que podem ser cometidos que poderiam fazer uma quebra de cadeia possível. No entanto, o ezjail é maduro e deve configurá-lo com um ambiente seguro.
Considere, porém, que há potencial para que danos sejam feitos dentro da cadeia, e você precisa pensar em como exatamente você pode detectar que algo contra seus termos de uso está sendo feito.