IPTables (Fundamentos)¶
O iptables é o mecanismo clássico de firewall no Linux (baseado em Netfilter). Ele permite criar regras para:
- aceitar (
ACCEPT) tráfego; - bloquear (
DROP/REJECT) tráfego; - registrar (
LOG) tráfego; - fazer NAT (
SNAT,DNAT,MASQUERADE).
1) Estrutura mental: tables, chains e regras¶
No iptables, você trabalha com:
- Tables (contextos):
filter,nat,mangle,raw,security - Chains (pontos do fluxo):
INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING - Rules (condições + ação): se casar, executa um alvo/target
Table -> Chain -> Rule -> Target
2) Fluxo de pacote (ASCII simplificado)¶
Pacote chegando pela interface
|
v
[PREROUTING] (nat/mangle)
|
v
+---------------------+
| Destino é local? |
+---------------------+
| sim | não
v v
[INPUT] (filter) [FORWARD] (filter)
| |
v v
Processo local [POSTROUTING] (nat)
|
v
Sai pela interface
Para tráfego gerado no próprio host:
Processo local -> [OUTPUT] -> [POSTROUTING] -> Interface
3) Chains principais¶
- INPUT: tráfego que chega ao próprio host
- OUTPUT: tráfego que sai do próprio host
- FORWARD: tráfego roteado pelo host (host atuando como roteador)
Exemplo mental:
Servidor web Linux:
- Requisição para porta 80 no servidor -> INPUT
- Resposta do servidor para cliente -> OUTPUT
Roteador Linux entre duas redes:
- Pacote passando de uma rede para outra -> FORWARD
4) Policy padrão e ordem das regras¶
As regras são lidas de cima para baixo dentro da chain. Primeiro match normalmente decide o destino.
[Rule 1] casa? sim -> ação e para
[Rule 2] nem é avaliada
Policy padrão (quando nenhuma regra casa):
ACCEPT(permissivo)DROP(restritivo)
Boa prática em ambiente exposto: default DROP + liberar apenas o necessário.
5) Exemplo de regras essenciais¶
Exemplo didático (ajuste para seu ambiente).
# Política padrão
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Permitir loopback
iptables -A INPUT -i lo -j ACCEPT
# Permitir conexões já estabelecidas
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Permitir SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Permitir HTTP e HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
6) NAT com IPTables (muito comum em roteadores)¶
Caso clássico: rede privada saindo para internet por um único IP público.
LAN privada (192.168.0.0/24) ---> Roteador Linux ---> Internet
Regra típica com MASQUERADE:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
ASCII da ideia:
Antes do NAT: src=192.168.0.10 dst=8.8.8.8
Depois NAT : src=200.10.10.5 dst=8.8.8.8
7) Diferença rápida: DROP vs REJECT¶
- DROP: descarta silenciosamente.
- REJECT: descarta e responde erro (ex:
icmp-port-unreachable).
Cliente -> pacote -> firewall
DROP => cliente fica aguardando timeout
REJECT => cliente recebe negação imediata
8) Comandos de inspeção e troubleshooting¶
iptables -L -n -v
iptables -t nat -L -n -v
iptables-save
Quando algo não funciona:
- Verifique contadores de pacotes (
-v) para saber se a regra está sendo atingida. - Confirme se a chain correta foi usada (
INPUT,FORWARDouOUTPUT). - Revise ordem das regras.
- Verifique roteamento (
ip route) e forwarding (sysctl net.ipv4.ip_forward).
9) IPTables + Routing Tables juntos¶
Resumo de ouro:
Routing Table = escolhe caminho
IPTables = filtra/transforma o tráfego no caminho
Se um pacote "some", normalmente o problema está em um desses dois lugares.