Dicas práticas para configuração do iptables
Pense sempre nesta sequência de raciocínio:
Direção → Protocolo → Porta → Ação
Cada regra no iptables segue uma lógica simples: você define onde o tráfego será analisado, qual protocolo ele usa, se precisa de uma porta específica e qual ação aplicar. Para facilitar, quebramos o comando em 4 blocos:
| Pergunta | Argumento da regra | O que faz | |
|---|---|---|---|
| Direção | O tráfego é de entrada, saída ou encaminhamento? | -A INPUT, -A OUTPUT, -A FORWARD |
Define a cadeia onde a regra será aplicada: INPUT (pacotes chegando), OUTPUT (pacotes saindo), FORWARD (pacotes passando pelo servidor). |
| Protocolo | Qual tipo de tráfego? (TCP, UDP, ICMP…) | -p tcp, -p udp, -p icmp |
Filtra apenas o protocolo especificado. |
| Porta | Qual a porta ou serviço? | --dport 22, --dport 80, etc. (opcional no FORWARD) |
Define a porta de destino para TCP/UDP; não é obrigatório se estiver filtrando apenas por interface. |
| Ação | Permitir ou bloquear? | -j ACCEPT, -j DROP, -j REJECT, -j MASQUERADE |
Define a ação que o iptables aplicará ao tráfego correspondente: aceitar, descartar ou mascarar. |
💡 Combine esses blocos como peças de Lego para montar qualquer regra rapidamente.
-t→ Especifica a tabela em que a regra será aplicada. Ex.:filter(padrão),nat,mangle,raw,security.sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADEUsado em NAT para mascarar o IP de saída.
-A→ Adiciona a regra à cadeia especificada (INPUT,OUTPUT,FORWARD).-s→ Define o endereço IP de origem dos pacotes.-d→ Define o endereço IP de destino dos pacotes.-i→ Interface de entrada (por onde o pacote chega, usada emINPUTeFORWARD).-o→ Interface de saída (por onde o pacote sai, usada emOUTPUTeFORWARD).-p→ Define o protocolo do tráfego (tcp,udp,icmp).--dport→ Porta de destino usada para serviços TCP/UDP. Ex.:--dport 22(SSH),--dport 80(HTTP),--dport 443(HTTPS).-m→ Ativa um módulo de correspondência para filtros avançados.state(ouconntrack): identifica o estado da conexão do pacote.NEW→ Pacote que inicia uma nova conexão.ESTABLISHED→ Pacote que faz parte de uma conexão já existente.RELATED→ Pacote relacionado a uma conexão existente (ex.: FTP, ICMP de erro).INVALID→ Pacote que não pertence a nenhuma conexão válida.
Exemplo prático:
sudo iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPTPermite o tráfego de resposta de conexões já iniciadas — essencial em NAT e VPNs.
-j→ Define a ação que o iptables aplicará.ACCEPT→ Permite o tráfego.DROP→ Bloqueia silenciosamente o tráfego.REJECT→ Bloqueia e envia uma resposta de erro ao remetente.MASQUERADE→ Oculta o IP de origem (usado em NAT).
Exemplo:
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPTPermite conexões SSH que chegam ao servidor.
Exemplos práticos de regras
INPUT – tráfego de entrada (chega ao servidor)
Pacotes chegando ao servidor. A porta é importante e o servidor é o destino final.
- SSH (TCP 22)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPTPermite conexões SSH chegando no servidor
- HTTP (TCP 80)
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPTPermite acesso web ao servidor
- HTTPS (TCP 443)
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPTPermite acesso web seguro ao servidor
- Ping ICMP
sudo iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPTPermite pacotes ICMP de echo request (ping)
- Servidor DNS (UDP 53)
sudo iptables -A INPUT -p udp --dport 53 -j ACCEPTPermite consultas DNS para o servidor
OUTPUT – tráfego de saída (saindo do servidor)
Pacotes saindo do servidor. Porta é importante e o servidor é a origem.
- Atualizações do sistema (HTTP/HTTPS)
sudo iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT sudo iptables -A OUTPUT -p tcp --dport 443 -j ACCEPTPermite que o servidor faça downloads de pacotes e atualizações
- Ping ICMP
sudo iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPTPermite envio de ping para outros hosts
- Consultas DNS (UDP 53)
sudo iptables -A OUTPUT -p udp --dport 53 -j ACCEPTPermite que o servidor consulte DNS externos
- Envio de e-mails SMTP (TCP 25/587)
sudo iptables -A OUTPUT -p tcp --dport 25 -j ACCEPTPermite envio de e-mails do servidor
FORWARD – tráfego roteado (passa pelo servidor)
Pacotes passando pelo servidor. O servidor não é destino nem origem.
O servidor apenas encaminha pacotes entre redes. Foque em interfaces de entrada (-i) e saída (-o). Use --dport apenas se filtrar serviços específicos. Combine com NAT para acesso à internet.
- VPN (OpenVPN UDP 1194, túnel → internet)
sudo iptables -A FORWARD -i tun0 -o eth0 -p udp --dport 1194 -j ACCEPT sudo iptables -A FORWARD -i eth0 -o tun0 -m state --state ESTABLISHED,RELATED -j ACCEPTPermite que pacotes VPN saiam para a internet e recebam respostas
- NAT LAN → WAN
sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT sudo iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADEPermite que a LAN acesse a internet com mascaramento de IP
- Proxy HTTP (Squid TCP 3128)
sudo iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport 3128 -j ACCEPTPermite tráfego HTTP passando pelo proxy
- Roteamento entre sub-redes
sudo iptables -A FORWARD -s 192.168.1.0/24 -d 192.168.2.0/24 -j ACCEPTPermite comunicação entre sub-redes internas
- Pense primeiro no tráfego que deseja permitir antes de aplicar o bloqueio geral (
DROP). - Mantenha uma sessão SSH ativa enquanto testa regras para não se desconectar do servidor.
- Para FORWARD, sempre defina interfaces de entrada e saída e combine com NAT se necessário.
- Use os parâmetros
-A,-s,-d,-i,-o,-p,--dport,-m,-jpara regras mais granulares. - Este método funciona para qualquer serviço: HTTP, HTTPS, DNS, ping ICMP, SMTP, VPN, NAT, etc.
