Skip to content

Instantly share code, notes, and snippets.

@danilogco
Created December 8, 2025 03:21
Show Gist options
  • Select an option

  • Save danilogco/cca6c48978e138af200a3e9e1db742c5 to your computer and use it in GitHub Desktop.

Select an option

Save danilogco/cca6c48978e138af200a3e9e1db742c5 to your computer and use it in GitHub Desktop.
sudo nano /etc/docker/daemon.json
```json
{
"iptables": false
}
```
---
# 1. Verifique se o Docker parou de mexer no iptables
Execute:
```
sudo iptables -L -n
```
O que **não deve aparecer**:
* `Chain DOCKER`
* `Chain DOCKER-USER`
* `Chain DOCKER-ISOLATION-STAGE-1`
* Regras do tipo `ACCEPT all -- anywhere docker0`
Se ainda aparecerem, então:
* o Docker não recarregou direito
ou
* há regras antigas salvas no sistema que precisam ser apagadas.
---
# 2. Se ainda existirem chains DOCKER → limpe tudo
Execute:
```
sudo iptables -F
sudo iptables -X
sudo systemctl restart docker
```
Depois rode novamente:
```
sudo iptables -L -n
```
Agora não deve existir chain DOCKER.
---
# ⚠3. IMPORTANTE — após `"iptables": false`, o Docker **não cria NAT**
Ou seja:
* containers não terão internet
* `-p 8080:80` só funciona se **o UFW permitir**
* UFW precisa controlar tudo
Então você precisa criar manualmente uma regra NAT no UFW.
---
# 4. Criar regra de NAT no UFW (essencial)
Edite:
```
sudo nano /etc/ufw/before.rules
```
Acima do bloco `*filter`, coloque:
```
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 172.17.0.0/16 -o eth0 -j MASQUERADE
COMMIT
```
Altere `172.17.0.0/16` conforme sua rede Docker:
```
docker network inspect bridge | grep Subnet
```
Recarregue:
```
sudo ufw reload
```
---
# 5. Permitir as portas que seus containers precisam
Exemplo:
```
sudo ufw allow 8080/tcp
```
Sem isso, nenhum container exposto com `-p` funcionará — o UFW segura tudo.
---
# 6. Verifique se o FORWARD do UFW está liberado**
Rode:
```
sudo ufw status verbose
```
Você deve ver:
```
Default: deny (incoming), allow (outgoing), allow (routed)
```
Se aparecer **deny (routed)**, rode:
```
sudo ufw default allow routed
sudo ufw reload
```
---
# 7. Habilitar MASQUERADE (NAT) no UFW — obrigatório**
Edite:
```
sudo nano /etc/ufw/before.rules
```
Adicione **antes do bloco *filter**:
```
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 172.17.0.0/16 -o eth0 -j MASQUERADE
COMMIT
```
Se o seu Docker usa outra rede, veja assim:
```
docker network inspect bridge | grep Subnet
```
---
# 8. Recarregue o UFW**
```
sudo ufw reload
```
---
# 9. Reinicie o Docker**
```
sudo systemctl restart docker
```
---
# 10. Teste DNS dentro de um container**
Execute:
```
docker run --rm alpine ping -c 2 8.8.8.8
```
Se isso funcionar, mas páginas não resolvem DNS:
```
docker run --rm alpine ping -c 2 google.com
```
Se falhar, pode ser que o UFW esteja bloqueando FORWARD:
```
sudo iptables -S | grep FORWARD
```
Você deve ter:
```
-A FORWARD -i docker0 -j ACCEPT
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
```
Se não tiver, adicionamos manualmente.
---
# 11. Adicione regras de FORWARD no UFW**
Edite:
```
sudo nano /etc/ufw/before.rules
```
Após as regras existentes, adicione:
```
-A ufw-before-forward -i docker0 -j ACCEPT
-A ufw-before-forward -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
```
E recarregue:
```
sudo ufw reload
```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment