Executando verificação de segurança...
1

Cuidado, você pode sem querer estar vazando o acesso aos seus containers Docker

Apenas um aviso de segurança para quem usa Docker

Vocês sabiam que ao configurar o bind de portas de um container Docker, caso você não declare a interface do host no qual você quer fazer bind, o comportamento do docker é realizar bind na interface 0.0.0.0 que significa todas a interfaces?

Exemplo sem declarar a interface explicitamente

docker-compose.yaml
# docker-compose.yaml
services:
  whoami:
      image: "traefik/whoami"
      container_name: whoami
      ports:
      # mapeia a porta 80 do container para a porta 8080 do host, 
      # e como não explicita a interface do host,
      # o docker faz bind para a interface 0.0.0.0, que significa todas as interfaces
        - "8080:80"
Acessando o endereço localhost pelo navegador do host com sucesso

Print do navegador acessando localhost:8080 e mostrando a resposta do serviço de whoiam

Acessando o endereço LAN do servidor pelo celular com sucesso

Print do celular acessando o endereço lan do servidor 10.42.0.1:8080 e mostrando a resposta do serviço de whoiam

Exemplo declarando a interface explicitamente

docker-compose.yaml
# docker-compose.yaml
services:
  whoami:
      image: "traefik/whoami"
      container_name: whoami
      ports:
      # mapeia a porta 80 do container para a porta 8080 do host, 
      # e faz bind explicitamente para a interface 127.0.0.1 (localhost)
        - "127.0.0.1:8080:80"
Acessando o endereço localhost pelo navegador do host com sucesso

Print do navegador acessando localhost:8080 e mostrando a resposta do serviço de whoiam

Acessando o endereço LAN do servidor pelo celular com erro

Print do celular acessando o endereço lan do servidor 10.42.0.1:8080 e mostrando erro

Isso é realmente um problema ?

Pessoalmente acredito que esse comportamento padrão é inseguro, sou crente da ideia de que o "padrão" deve ser o mais seguro possível, e o usuário deve explicitamente optar/configurar o inseguro.

Acredito que muitos de vocês devem executar o Portainer no computador de vocês. Vocês realmente querem que ele esteja exposto na LAN?

A propósito, descobrir esse comportamento do docker ao descobrir que meu Portainer, e vários outros containers de serviços locais estavam sendo expostos na LAN.

Carregando publicação patrocinada...
1

Pessoalmente acredito que esse comportamento padrão é inseguro

Em um servidor de produção o firewall tem que ser configurado para que ninguem consiga acessar o container diretamente, anulando a insegurança.

Vocês realmente querem que ele esteja exposto na LAN?

Containers locais servem apenas para desenvolvimento. Não tem problema estarem abertos, não causará impacto nenhum de segurança na minha aplicação de produção.

1

Em um servidor de produção o firewall tem que ser configurado para que ninguem consiga acessar o container diretamente, anulando a insegurança.

Concordo plenamente

Containers locais servem apenas para desenvolvimento. Não tem problema estarem abertos, não causará impacto nenhum de segurança na minha aplicação de produção.

Discordo sobre containers locais servirem apenas para desenvolvimento. A cada dia vejo mais ferramentas e programas que usam docker como um forma de gerenciador de pacotes, e muitas delas oferecem webs UIs que a maioria não gostaria que fossem expostos externamente, como por exemplo o Portainer que citei.

1

Segurança nunca é demais. Se alguém conseguir de alguma forma burlar as regras de firewall ou utilizar alguma técnica que permita acesso, essa alteração do container seria bastante bem-vinda