manuais-e-documentacao-itguys/documentacao conteineres/Nivel_2_Redes_e_Firewall_Do...

95 lines
3.2 KiB
Markdown

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