Para proteger contra um usuário não raiz local, eu de fato usaria namespaces de rede.
É provavelmente a solução mais simples, porque em geral o material de rede é desacoplado do gerenciamento de usuário / grupo e, embora a mixagem possa ser feita com iptables
, ele adiciona sobrecarga.
Os namespaces de rede confiam apenas no fato de que somente o root pode mover o processo de e para namespaces.
Então você precisa de uma configuração semelhante a (ns = namespace)
main ns ---- nginx ns ---- elasticsearch ns
onde as conexões são implementadas por pares de ethernet virtual (veth) com seu próprio segmento de LAN. Isso significará que cada processo no namespace principal só pode acessar o namespace nginx, e o namespace elasticsearch não pode ser acessado diretamente (a menos que você seja capaz de iniciar processos neste namespace).
Você precisa saber o básico sobre a rede (segmentos da LAN, máscara de rede, rotas versus rotas padrão). ip netns ...
é a ferramenta de linha de comando para criar e gerenciar netspaces e iniciar processos em um namespace. ip link ...
é a ferramenta de linha de comando para criar pares de veth.
Eu recomendo iniciar um xterm
em cada namespace, para que você possa ver e modificar a configuração da rede. Depois que tudo funcionar, basta fazer um script.
Você precisará brincar um pouco, mas não é muito difícil. Não consigo pensar em uma maneira mais fácil de fazer isso.
Editar
Para começar com namespaces, experimente o script em esta resposta , ou veja esta questão .
Não tenho certeza de onde você está preso. namespaces de rede. Pense em cada namespace como um computador virtual em rede, que compartilha o sistema de arquivos e outras coisas com o restante do computador físico. Então, lidar com namespaces é o mesmo que conectar computadores em uma LAN. Uma ferramenta importante é um par de ethernet virtual , que você pode imaginar como um cabo de LAN virtual que conecta dois namespaces de rede.