Created
December 8, 2025 03:21
-
-
Save danilogco/cca6c48978e138af200a3e9e1db742c5 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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