Segurança em Containers Docker: Guia de Boas Práticas

Neste tutorial, abordaremos as boas práticas de segurança de rede em containers DockerCriando e gerenciando containers Docker: guia básicoCriando e gerenciando containers Docker: guia básicoAprenda a criar e gerenciar contêineres Docker com comandos essenciais, boas práticas e dicas de segurança, garantindo aplicações isoladas e escaláveis., passando por conceitos fundamentais de isolamento e proteção de tráfego, além de recomendações para que os serviços em contêineres fiquem menos expostos a ataques externos. O público-alvo principal são Desenvolvedores, DevOps, administradores de sistemas e entusiastas interessados em contêineres DockerCriando e gerenciando containers Docker: guia básicoCriando e gerenciando containers Docker: guia básicoAprenda a criar e gerenciar contêineres Docker com comandos essenciais, boas práticas e dicas de segurança, garantindo aplicações isoladas e escaláveis. e orquestração que desejam garantir um nível maior de segurança em seus ambientes.

Introdução🔗

Quando se fala em containers, é comum pensar em leveza, portabilidade e velocidade na entrega de aplicações. Porém, a segurança de rede costuma ser deixada em segundo plano, o que pode expor seu ambienteConfiguração de aplicações multi-container com Docker ComposeConfiguração de aplicações multi-container com Docker ComposeConfigure múltiplos contêineres com Docker Compose e otimize a comunicação entre serviços, volumes e redes para aplicações escaláveis e seguras. a riscos. A vantagem dos containers está na capacidade de isolar processos em namespaces separados, mas isso não isenta o sistema de vulnerabilidades caso boas práticas não sejam seguidas.

Ao longo deste tutorial, veremos como controlar a exposição de portas, configurar redesConfiguração de aplicações multi-container com Docker ComposeConfiguração de aplicações multi-container com Docker ComposeConfigure múltiplos contêineres com Docker Compose e otimize a comunicação entre serviços, volumes e redes para aplicações escaláveis e seguras. de forma segura, aplicar firewalls e outras medidas para garantir que os containers se mantenham protegidos. O objetivo é mostrar que com apenas alguns ajustes e configurações cuidadosas é possível reduzir consideravelmente a superfície de ataque, dificultando eventuais acessos indevidos.

Conceitos Fundamentais🔗

Ter clareza sobre como o DockerDocker vs Máquinas Virtuais: principais diferenças e casos de usoDocker vs Máquinas Virtuais: principais diferenças e casos de usoDescubra neste tutorial as principais diferenças entre Docker e Máquinas Virtuais, explorando desempenho, arquitetura e casos de uso práticos. lida com redes é essencial para entender as boas práticas de segurança:

1. Network NamespaceConceitos fundamentais de networking em DockerConceitos fundamentais de networking em DockerExplore como o Docker gerencia o networking entre contêineres, utilizando drivers, isolamento e mapeamento de portas para conexões seguras.

Cada container DockerCriando e gerenciando containers Docker: guia básicoCriando e gerenciando containers Docker: guia básicoAprenda a criar e gerenciar contêineres Docker com comandos essenciais, boas práticas e dicas de segurança, garantindo aplicações isoladas e escaláveis. roda em seu próprio network namespaceConceitos fundamentais de networking em DockerConceitos fundamentais de networking em DockerExplore como o Docker gerencia o networking entre contêineres, utilizando drivers, isolamento e mapeamento de portas para conexões seguras., o que significa que possui uma pilha de rede isolada. Esse isolamentoCriando redes personalizadas em Docker: passo a passoCriando redes personalizadas em Docker: passo a passoAprenda como criar e gerenciar redes Docker personalizadas para isolar containers, controlar endereços IP e otimizar a comunicação em sua aplicação. ajuda a separar o tráfego dos contêineres do tráfego do host.

2. Driver de RedeConfiguração de aplicações multi-container com Docker ComposeConfiguração de aplicações multi-container com Docker ComposeConfigure múltiplos contêineres com Docker Compose e otimize a comunicação entre serviços, volumes e redes para aplicações escaláveis e seguras. (Network Driver)

O DockerDocker vs Máquinas Virtuais: principais diferenças e casos de usoDocker vs Máquinas Virtuais: principais diferenças e casos de usoDescubra neste tutorial as principais diferenças entre Docker e Máquinas Virtuais, explorando desempenho, arquitetura e casos de uso práticos. suporta diversos drivers para redes, como bridgeIsolamento de rede: bridge, host e overlay networksIsolamento de rede: bridge, host e overlay networksExplore os diferentes drivers de rede do Docker: bridge, host e overlay, e saiba como conseguir isolamento, escalabilidade e segurança para containers., host, e overlayIsolamento de rede: bridge, host e overlay networksIsolamento de rede: bridge, host e overlay networksExplore os diferentes drivers de rede do Docker: bridge, host e overlay, e saiba como conseguir isolamento, escalabilidade e segurança para containers.. Cada driver possui um nível diferenciado de isolamentoCriando redes personalizadas em Docker: passo a passoCriando redes personalizadas em Docker: passo a passoAprenda como criar e gerenciar redes Docker personalizadas para isolar containers, controlar endereços IP e otimizar a comunicação em sua aplicação. e controle.

3. Bridge NetworkIsolamento de rede: bridge, host e overlay networksIsolamento de rede: bridge, host e overlay networksExplore os diferentes drivers de rede do Docker: bridge, host e overlay, e saiba como conseguir isolamento, escalabilidade e segurança para containers.

É a forma padrão de rede quando se cria um container. Nesse modo, o DockerDocker vs Máquinas Virtuais: principais diferenças e casos de usoDocker vs Máquinas Virtuais: principais diferenças e casos de usoDescubra neste tutorial as principais diferenças entre Docker e Máquinas Virtuais, explorando desempenho, arquitetura e casos de uso práticos. cria uma interface virtual que conecta o container a uma rede interna. O bridgeIsolamento de rede: bridge, host e overlay networksIsolamento de rede: bridge, host e overlay networksExplore os diferentes drivers de rede do Docker: bridge, host e overlay, e saiba como conseguir isolamento, escalabilidade e segurança para containers. driver permite que contêineres na mesma redeConfiguração de aplicações multi-container com Docker ComposeConfiguração de aplicações multi-container com Docker ComposeConfigure múltiplos contêineres com Docker Compose e otimize a comunicação entre serviços, volumes e redes para aplicações escaláveis e seguras. se comuniquem livremente, sendo necessários cuidados para filtrar tráfego indesejado.

4. Host Network

Neste modo, o container compartilha a pilha de rede do host, e não há isolamento de portas ou interfaces. Em muitos cenários, esse modo é evitado por reduzir o encapsulamento e a segurança, mas pode ser útil em situações específicas de desempenhoDocker vs Máquinas Virtuais: principais diferenças e casos de usoDocker vs Máquinas Virtuais: principais diferenças e casos de usoDescubra neste tutorial as principais diferenças entre Docker e Máquinas Virtuais, explorando desempenho, arquitetura e casos de uso práticos..

5. Overlay NetworkIsolamento de rede: bridge, host e overlay networksIsolamento de rede: bridge, host e overlay networksExplore os diferentes drivers de rede do Docker: bridge, host e overlay, e saiba como conseguir isolamento, escalabilidade e segurança para containers.

Usada para conectar contêineres distribuídos em diferentes hosts, costumam ser usadas por soluções de orquestração. Oferece um nível de abstração maior para a comunicação entre serviçosConfiguração de aplicações multi-container com Docker ComposeConfiguração de aplicações multi-container com Docker ComposeConfigure múltiplos contêineres com Docker Compose e otimize a comunicação entre serviços, volumes e redes para aplicações escaláveis e seguras. em múltiplos nós.

Em termos práticos, saber escolher o driver de rede correto e entender suas diferenças é o primeiro passo para proteger o ambienteConfiguração de aplicações multi-container com Docker ComposeConfiguração de aplicações multi-container com Docker ComposeConfigure múltiplos contêineres com Docker Compose e otimize a comunicação entre serviços, volumes e redes para aplicações escaláveis e seguras..

Boas Práticas de Segurança de Rede🔗

Nesta seção, listamos algumas práticas indispensáveis para manter um ambienteConfiguração de aplicações multi-container com Docker ComposeConfiguração de aplicações multi-container com Docker ComposeConfigure múltiplos contêineres com Docker Compose e otimize a comunicação entre serviços, volumes e redes para aplicações escaláveis e seguras. seguro e performático.

Mantenha a Exposição de Portas no Mínimo

Resumo: Exponha apenas o que for absolutamente necessário.

Uma das grandes vantagens do DockerDocker vs Máquinas Virtuais: principais diferenças e casos de usoDocker vs Máquinas Virtuais: principais diferenças e casos de usoDescubra neste tutorial as principais diferenças entre Docker e Máquinas Virtuais, explorando desempenho, arquitetura e casos de uso práticos. é a capacidade de “publicar” apenas as portas que você realmente quer tornar acessíveis. A simples adoção do paradigma “poucas portas abertas” já diminui a superfície de ataque.

  • Publicar portas explicitamente

Use a opção -p (ou --publish) para mapeamento de portas somente quando necessário.

Exemplo:

docker run -d -p 8080:80 --name meu_container nginx
  • Evitar usar --network host

Embora possa simplificar a configuração de rede, o compartilhamento da redeConfiguração de aplicações multi-container com Docker ComposeConfiguração de aplicações multi-container com Docker ComposeConfigure múltiplos contêineres com Docker Compose e otimize a comunicação entre serviços, volumes e redes para aplicações escaláveis e seguras. do host expõe o container a mais vetores de ataque.

Crie networksConfiguração de aplicações multi-container com Docker ComposeConfiguração de aplicações multi-container com Docker ComposeConfigure múltiplos contêineres com Docker Compose e otimize a comunicação entre serviços, volumes e redes para aplicações escaláveis e seguras. específicas e publique apenas para containers que realmente precisam se comunicar.

Use Firewalls e Regras de Iptables

Resumo: Controlar e monitorar trânsito de dados evita conexões inesperadas.

Mesmo que os containers tenham sua própria segmentação de redeConfiguração de aplicações multi-container com Docker ComposeConfiguração de aplicações multi-container com Docker ComposeConfigure múltiplos contêineres com Docker Compose e otimize a comunicação entre serviços, volumes e redes para aplicações escaláveis e seguras., um firewall (como ufw ou diretamente iptables) no host pode reforçar a segurança:

  • Limitar origem de pacotes

Você pode restringir o acesso a determinadas portas para IPs ou conjuntos de IPs confiáveis, bloqueando acessos desconhecidos.

  • Bloquear portas não utilizadas

Se alguns serviçosConfiguração de aplicações multi-container com Docker ComposeConfiguração de aplicações multi-container com Docker ComposeConfigure múltiplos contêineres com Docker Compose e otimize a comunicação entre serviços, volumes e redes para aplicações escaláveis e seguras. rodam em portas específicas para processos internos, mantenha essas portas bloqueadas para requisições externas.

  • Registro de logs de firewall

Manter logs de acesso é essencial para auditoria e investigação de possíveis tentativas de intrusão.

Crie Redes Customizadas e Segmentadas

Resumo: Cada serviço em sua rede segmentada traz isolamentoCriando redes personalizadas em Docker: passo a passoCriando redes personalizadas em Docker: passo a passoAprenda como criar e gerenciar redes Docker personalizadas para isolar containers, controlar endereços IP e otimizar a comunicação em sua aplicação..

Em vez de utilizar a redeConfiguração de aplicações multi-container com Docker ComposeConfiguração de aplicações multi-container com Docker ComposeConfigure múltiplos contêineres com Docker Compose e otimize a comunicação entre serviços, volumes e redes para aplicações escaláveis e seguras. padrão bridgeIsolamento de rede: bridge, host e overlay networksIsolamento de rede: bridge, host e overlay networksExplore os diferentes drivers de rede do Docker: bridge, host e overlay, e saiba como conseguir isolamento, escalabilidade e segurança para containers., uma prática recomendada é criar redes customizadasCriando redes personalizadas em Docker: passo a passoCriando redes personalizadas em Docker: passo a passoAprenda como criar e gerenciar redes Docker personalizadas para isolar containers, controlar endereços IP e otimizar a comunicação em sua aplicação. segmentadas:

docker network create --driver bridge rede_app_interna
docker run -d --network rede_app_interna --name app_interno meu_app_interno
  • Comunicação limitada: apenas contêineres adicionados à rede_app_interna conseguem se comunicar diretamente.
  • Tráfego externo controlado: portas só são expostas se explicitamente configuradas no container ou em uma camada de proxy reverso.

Exemplo de Diagrama

Abaixo, um diagrama simples em Mermaid ilustrando dois containers em redesConfiguração de aplicações multi-container com Docker ComposeConfiguração de aplicações multi-container com Docker ComposeConfigure múltiplos contêineres com Docker Compose e otimize a comunicação entre serviços, volumes e redes para aplicações escaláveis e seguras. diferentes, cada qual com acesso restrito:

flowchart LR A(Host) -->|Interface bridge1| C(Container 1) A -->|Interface bridge2| D(Container 2) C -. conexão interna .-> C D -. conexão interna .-> D A -. firewall .-> A

Nesse diagrama, cada container está em uma redeConfiguração de aplicações multi-container com Docker ComposeConfiguração de aplicações multi-container com Docker ComposeConfigure múltiplos contêineres com Docker Compose e otimize a comunicação entre serviços, volumes e redes para aplicações escaláveis e seguras. isolada, com firewall em nível do host restringindo tráfego externo.

Habilite Políticas de Segurança nas Redes

Resumo: Definir regras de acesso nas redes DockerDocker vs Máquinas Virtuais: principais diferenças e casos de usoDocker vs Máquinas Virtuais: principais diferenças e casos de usoDescubra neste tutorial as principais diferenças entre Docker e Máquinas Virtuais, explorando desempenho, arquitetura e casos de uso práticos. reforça as defesas.

Em ambientes de orquestração ou com Docker ComposeIntrodução ao Docker Compose: conceitos e benefíciosIntrodução ao Docker Compose: conceitos e benefíciosAprenda a orquestrar contêineres com Docker Compose, obtendo configurações unificadas e execução simplificada para ambientes de produção., é possível aplicar políticas de redeConfiguração de aplicações multi-container com Docker ComposeConfiguração de aplicações multi-container com Docker ComposeConfigure múltiplos contêineres com Docker Compose e otimize a comunicação entre serviços, volumes e redes para aplicações escaláveis e seguras. que segmentam ainda mais o tráfego:

  • Network policies

Em certas plataformas (como KubernetesOrquestração de containers: Docker Compose vs KubernetesOrquestração de containers: Docker Compose vs KubernetesNeste tutorial completo sobre orquestração de contêineres, descubra como Docker Compose e Kubernetes gerenciam aplicações com escalabilidade e resiliência.), é possível definir regras de entrada e saída para cada pod ou serviço. Já no Docker, as configurações de firewall e de redes personalizadasCriando redes personalizadas em Docker: passo a passoCriando redes personalizadas em Docker: passo a passoAprenda como criar e gerenciar redes Docker personalizadas para isolar containers, controlar endereços IP e otimizar a comunicação em sua aplicação. suprem boa parte das necessidades.

  • Criptografia de tráfego

Em redes que trafegam dados sensíveisGerenciando configurações e segredos em aplicações distribuídasGerenciando configurações e segredos em aplicações distribuídasAprenda a proteger dados sensíveis em contêineres com Docker, usando variáveis de ambiente e Docker Secrets. Garanta segurança para sua aplicação., vale a pena configurar tunelamento ou usar em conjunto com soluções que ofereçam TLS entre contêineres quando for necessário.

Mantenha os Containers e o Host Atualizados

Resumo: Vulnerabilidades conhecidas podem ser exploradas em sistemas desatualizados.

Não adianta configurar a rede perfeitamente se o ambienteConfiguração de aplicações multi-container com Docker ComposeConfiguração de aplicações multi-container com Docker ComposeConfigure múltiplos contêineres com Docker Compose e otimize a comunicação entre serviços, volumes e redes para aplicações escaláveis e seguras. está com falhas conhecidas:

  • Sistema operacional do host

Atualizações de kernel e pacotes de redeConfiguração de aplicações multi-container com Docker ComposeConfiguração de aplicações multi-container com Docker ComposeConfigure múltiplos contêineres com Docker Compose e otimize a comunicação entre serviços, volumes e redes para aplicações escaláveis e seguras. podem corrigir brechas e reforçar protocolos de segurança.

Novas versões contêm melhorias de segurança, portanto mantenha o DockerDocker vs Máquinas Virtuais: principais diferenças e casos de usoDocker vs Máquinas Virtuais: principais diferenças e casos de usoDescubra neste tutorial as principais diferenças entre Docker e Máquinas Virtuais, explorando desempenho, arquitetura e casos de uso práticos. sempre atualizado.

  • Libraries internas nos containers

Se a aplicação depende de bibliotecas conhecidas (ex. OpenSSL, libssl), atualize-as para evitar falhas já identificadas.

Ajuste Capacidades e Permissões

Resumo: Restringir permissões faz parte da postura de segurança.

  • Reduza capacidades (capabilities)

Por padrão, containers DockerCriando e gerenciando containers Docker: guia básicoCriando e gerenciando containers Docker: guia básicoAprenda a criar e gerenciar contêineres Docker com comandos essenciais, boas práticas e dicas de segurança, garantindo aplicações isoladas e escaláveis. têm um conjunto de capabilities que sua aplicação pode não precisar. Remova permissões desnecessárias para reduzir superfície de ataque.

Por exemplo, remover a capacidade de modificar configurações de redeConfiguração de aplicações multi-container com Docker ComposeConfiguração de aplicações multi-container com Docker ComposeConfigure múltiplos contêineres com Docker Compose e otimize a comunicação entre serviços, volumes e redes para aplicações escaláveis e seguras.:

docker run \
  --cap-drop=NET_ADMIN \
  --cap-drop=NET_RAW \
l>
  • p 8080:80 \
  • --name meu_app_seguro \ nginx
    • Evite rodar como root

    Dentro do container, prefira um usuário não privilegiado. Isso impede que um comprometimento no container dê acesso direto às permissões de superusuário.

    Use Médias de Observabilidade e Alertas

    Resumo: Saiba o que está acontecendo em sua redeConfiguração de aplicações multi-container com Docker ComposeConfiguração de aplicações multi-container com Docker ComposeConfigure múltiplos contêineres com Docker Compose e otimize a comunicação entre serviços, volumes e redes para aplicações escaláveis e seguras. e responda rapidamente a incidentes.

    Ferramentas de monitoramento e logs podem ajudar a identificar comportamentos anômalos:

    • Logs de acesso no container

    Acompanhe logs de aplicações e do próprio sistema (via dockerDocker vs Máquinas Virtuais: principais diferenças e casos de usoDocker vs Máquinas Virtuais: principais diferenças e casos de usoDescubra neste tutorial as principais diferenças entre Docker e Máquinas Virtuais, explorando desempenho, arquitetura e casos de uso práticos. logs ou integrando com plataformas de logging).

    Se possível, monitore métricas de tráfego e consumo de redeConfiguração de aplicações multi-container com Docker ComposeConfiguração de aplicações multi-container com Docker ComposeConfigure múltiplos contêineres com Docker Compose e otimize a comunicação entre serviços, volumes e redes para aplicações escaláveis e seguras. para identificar picos ou tentativas de invasão.

    Tabela de Boas Práticas e Benefícios🔗

    A tabela abaixo resume algumas das recomendações vistas:

    Boa PráticaBenefício
    Expor poucas portas e de forma explícitaReduz a superfície de ataque
    Criar redes customizadas isoladasAumenta o isolamento entre serviços
    Configurar firewall/iptables no hostFiltra tráfego e bloqueia acessos não autorizados
    Remover capacidades desnecessáriasMinimiza privilégios e consequências de uma possível invasão
    Manter sistemas atualizadosProtege contra vulnerabilidades já conhecidas
    Utilizar criptografia para dados sensíveisGarante a privacidade e integridade das informações trafegadas

    Conclusão🔗

    A segurança de rede em containers DockerCriando e gerenciando containers Docker: guia básicoCriando e gerenciando containers Docker: guia básicoAprenda a criar e gerenciar contêineres Docker com comandos essenciais, boas práticas e dicas de segurança, garantindo aplicações isoladas e escaláveis. demanda atenção a detalhes de configuração e segmentação, mas adotar boas práticas não é uma tarefa complexa. Medidas relativamente simples, como limitar a exposição de portas, configurar redes customizadasCriando redes personalizadas em Docker: passo a passoCriando redes personalizadas em Docker: passo a passoAprenda como criar e gerenciar redes Docker personalizadas para isolar containers, controlar endereços IP e otimizar a comunicação em sua aplicação., ajustar permissões e manter sistemas atualizados, já fortalecem consideravelmente a proteção do ambiente.

    Lembre-se de que a segurança não é um estado final e estático: ela deve evoluir junto com suas aplicações. Revisitar periodicamente as configurações de rede, os logs e as políticas de firewalls mantém o ecossistema de containers protegido contra novas vulnerabilidades e ameaças. Assim, seus serviçosConfiguração de aplicações multi-container com Docker ComposeConfiguração de aplicações multi-container com Docker ComposeConfigure múltiplos contêineres com Docker Compose e otimize a comunicação entre serviços, volumes e redes para aplicações escaláveis e seguras. terão maior disponibilidade, confiabilidade e estarão prontos para crescer de forma sustentável.

    Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.

    Referências🔗

    Compartilhar artigo

    Artigos Relacionados