Eu tenho um servidor com dois contêineres docker em execução. Um deles é o frontend de um pequeno aplicativo, servido com http-server
. Este aplicativo usava a API de busca de Javascript para buscar dados de um banco de dados realmente simples baseado no módulo json-server 'do Node.js, que está sendo executado no outro contêiner.
Acontece que json-server
disponibiliza a porta 3000 para usuários externos, ou seja, se alguém apontar um navegador para http://example.com:3000
, meus dados estarão disponíveis sem a filtragem e a apresentação fornecidas pelo frontend. Não é isso que eu quero.
Eu gostaria de bloquear a porta 3000 para o mundo externo, enquanto permitia que meu outro contêiner do Docker buscasse dados normalmente. Eu acho que isso pode ser feito em uma base de IP, mas eu não sei como fazer isso.
Esta é minha configuração atual do Iptables, criada principalmente pelo próprio Docker como padrão.
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy DROP)
target prot opt source destination
DOCKER-USER all -- anywhere anywhere
DOCKER-ISOLATION-STAGE-1 all -- anywhere anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
DOCKER all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain DOCKER (1 references)
target prot opt source destination
ACCEPT tcp -- anywhere 172.17.0.2 tcp dpt:http-alt
ACCEPT tcp -- anywhere 172.17.0.3 tcp dpt:3000
Chain DOCKER-ISOLATION-STAGE-1 (1 references)
target prot opt source destination
DOCKER-ISOLATION-STAGE-2 all -- anywhere anywhere
RETURN all -- anywhere anywhere
Chain DOCKER-ISOLATION-STAGE-2 (1 references)
target prot opt source destination
DROP all -- anywhere anywhere
RETURN all -- anywhere anywhere
Chain DOCKER-USER (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
Na configuração acima, o IP 172.17.0.2 é meu aplicativo de front-end, enquanto o 172.17.0.3 é o IP do meu contêiner de banco de dados.
O contêiner frontend está sendo iniciado com
docker run -p 80:8080 --name=frontend -d mtr/frontend
e o segundo com
docker run -p 3000:3000 --name=database -d mtr/database
Eu também considerei a possibilidade de ter alguma maneira do Docker para restringir este acesso, mas depois de muita pesquisa eu não consegui encontrar nada.
Alguma sugestão sobre como posso fazer isso acontecer?