Posso bloquear o acesso a uma porta TCP no Linux

0

Estou tentando proteger uma máquina Elasticsearch de nó único. Basicamente, eu quero colocar o Elasticsearch atrás de um proxy reverso (nginx) e ter certeza de que a única maneira que qualquer usuário ou processo possa se comunicar com o Elasticsearch é através do proxy.

Se o Elaticsearch suportasse escutar em um soquete unix, isso seria trivial. Eu poderia apenas definir as permissões apropriadas no arquivo de soquete e pronto. Mas, desde que não , eu fiquei escutando em uma porta TCP.

Eu li um pouco sobre namespaces de rede e Parece que eles poderiam trabalhar, mas eu não tenho experiência com eles.

Existe uma maneira fácil e segura de garantir que o único processo / usuário na máquina que pode se comunicar com o Elasticsearch seja o nginx?

    
por Dominic P 08.11.2018 / 06:01

1 resposta

2

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.

    
por 08.11.2018 / 09:04