# MANUAL TÉCNICO - REDES E FIREWALL NO DOCKER **Código:** ITGINF 0009/26 | **Classificação:** RESTRITO **Responsável:** João Pedro Toledo Gonçalves | **Data:** {{DATA_ATUAL}} ## 1. HISTÓRICO DE REVISÃO > ⚠️ **REGRA DE OURO:** > 1. **Autor:** João Pedro Toledo Gonçalves. > 2. **Descrição:** Criação do documento. | Data | Versão | Descrição | Autor | | :--- | :--- | :--- | :--- | | {{DATA_ATUAL}} | 1.0 | Criação Inicial | João Pedro Toledo Gonçalves | ## 2. OBJETIVO Explicar a arquitetura de redes do Docker (Bridge, Host, Overlay), como segregar conteineres e como gerenciar regras de Firewall com segurança. ## 3. PRÉ-REQUISITOS - [ ] Docker Engine instalado e rodando. - [ ] Acesso root para visualizar regras de iptables. ## 4. PASSO A PASSO (EXECUÇÃO) **Etapa 1: Drivers de Rede Padrão** 1. Liste as redes existentes no host. * **bridge:** Padrão. Conteineres recebem IP interno (172.17.x.x). * **host:** Remove isolamento. Container usa a eth0 do host. * **none:** Sem rede. ```bash docker network ls ``` **Etapa 2: Criando Redes Segregadas (User-defined Bridge)** > 🚀 **MELHOR PRÁTICA:** Nunca use a rede `bridge` padrão para produção (falta DNS resolution entre nomes). Crie a sua. 1. Crie uma rede dedicada para sua stack (ex: `app-network`). 2. Suba conteineres conectados a ela. ```bash docker network create --driver bridge app-network docker run -d --name meu-db --network app-network postgres docker run -d --name meu-app --network app-network nginx ``` > [!NOTE] > Agora o container `meu-app` consegue pingar `meu-db` pelo NOME. A rede bridge padrão não faz isso. **Etapa 3: Exposição de Portas e Segurança (Firewall)** > ⚠️ **IMPORTANTE:** O Docker insere regras no `iptables` ANTES do UFW. Liberar `-p 8080:80` ignora o bloqueio do UFW. 1. **Modo Inseguro (Padrão):** Libera para internet (0.0.0.0). ```bash docker run -p 8080:80 nginx ``` 2. **Modo Seguro (Localhost Apenas):** Use se for usar proxy reverso (Nginx/Traefik) no host. ```bash docker run -p 127.0.0.1:8080:80 nginx ``` **Etapa 4: Auditoria de Regras** 1. Verifique como o Docker mapeia as regras no NAT. ```bash sudo iptables -t nat -L DOCKER ``` ## 5. SOLUÇÃO DE PROBLEMAS (TROUBLESHOOTING) **Problema 1: Container não resolve DNS externo** * **Causa:** Conflito de DNS no `/etc/docker/daemon.json` ou firewall bloqueando porta 53 UDP. * **Solução:** 1. Teste com `docker run busybox nslookup google.com`. 2. Check se o host tem acesso. **Problema 2: UFW não bloqueia portas do Docker** * **Causa:** Design do Docker ("Docker bypasses UFW"). * **Solução:** 1. Edite `/etc/default/docker` e adicione `--iptables=false` (Cuidado: quebra o NAT!). 2. **Recomendado:** Use o bloqueio na chain `DOCKER-USER` do iptables se precisar restringir IPs externos. ## 6. DADOS TÉCNICOS | Campo | Valor | Descrição | | :--- | :--- | :--- | | **Subnet Padrão** | `172.17.0.0/16` | Rede Bridge padrão | | **DNS Interno** | `127.0.0.11` | Resolver interno do Docker | ## 7. VALIDAÇÃO FINAL - [ ] `docker network ls` mostra sua rede customizada? - [ ] Conteineres na mesma rede se pingam por nome? - [ ] Portas expostas estão acessíveis (netstat -tuln)?