# 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)?
