iptables: regras avançadas de firewall Linux
iptables é o firewall de baixo nível do kernel Linux — UFW é apenas uma interface simplificada sobre ele. Para casos que o UFW não cobre (port forwarding, NAT, regras por interface específica, proteção anti-DDoS avançada), iptables direto é a ferramenta certa. Entender iptables também é essencial para depurar problemas de rede em servidores com Docker.
Conceitos: tables, chains e targets
Entender a estrutura do iptables antes de escrever regras:
# Estrutura do iptables:
# TABLES (tabelas) → CHAINS (correntes) → RULES (regras) → TARGET (ação)
# Tables principais:
# filter → filtragem de pacotes (INPUT, OUTPUT, FORWARD)
# nat → tradução de endereços (PREROUTING, POSTROUTING, OUTPUT)
# mangle → modificação de pacotes
# raw → controle de rastreamento de conexões
# Chains da tabela filter (mais usada):
# INPUT → pacotes destinados ao próprio host
# OUTPUT → pacotes originados no próprio host
# FORWARD → pacotes roteados pelo host (ex: VPN, bridge)
# Targets comuns:
# ACCEPT → permitir o pacote
# DROP → descartar silenciosamente
# REJECT → descartar e notificar o remetente
# LOG → registrar em syslog e continuar
# RETURN → retornar à chain anterior
# Ver regras atuais:
sudo iptables -L -n -v --line-numbers # tabela filter
sudo iptables -t nat -L -n -v --line-numbers # tabela nat
sudo iptables -t mangle -L -n -v # tabela mangle
# Contar regras:
sudo iptables -L INPUT -n -v | wc -lConfiguração base de segurança
Criar script de firewall com regras de produção:
#!/bin/bash
# /etc/iptables/setup.sh — script de configuração do firewall
# Limpar todas as regras existentes:
iptables -F && iptables -X && iptables -Z
iptables -t nat -F && iptables -t nat -X
iptables -t mangle -F && iptables -t mangle -X
# Política padrão: DROP tudo, liberar explicitamente:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Permitir loopback:
iptables -A INPUT -i lo -j ACCEPT
# Permitir conexões estabelecidas e relacionadas (estado de conexão):
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Permitir ICMP (ping) com rate limit:
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 3 -j ACCEPT
# SSH (ajuste a porta):
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --set --name SSH
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j DROP
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# HTTP e HTTPS:
iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
# Logar e descartar o restante:
iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables-DROP: " --log-level 7
iptables -A INPUT -j DROP
# Salvar regras (persistência):
sudo apt install iptables-persistent
sudo netfilter-persistent saveProteção anti-DDoS e flood
Regras para mitigar ataques de volume e flood:
# Proteção contra SYN flood (TCP):
iptables -A INPUT -p tcp --syn -m limit --limit 100/s --limit-burst 200 -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP
# Proteção contra UDP flood:
iptables -A INPUT -p udp -m limit --limit 100/s --limit-burst 200 -j ACCEPT
iptables -A INPUT -p udp -j DROP
# Bloquear pacotes fragmentados (usado em ataques):
iptables -A INPUT -f -j DROP
# Bloquear pacotes XMAS (todos flags setados):
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
# Bloquear pacotes NULL (nenhum flag setado):
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
# Proteção contra port scanning (furtivo):
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s --limit-burst 2 -j ACCEPT
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j DROP
# Limitar novas conexões por IP (anti-DDoS por IP):
iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW -m recent --set --name HTTPS
iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 20 --name HTTPS -j DROP
iptables -A INPUT -p tcp --dport 443 -j ACCEPTPort forwarding e NAT
Redirecionar portas com a tabela nat do iptables:
# Habilitar IP forwarding no kernel:
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
# Redirecionar porta 80 → 8080 localmente (sem Nginx):
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-port 8080
# Redirecionar para outro servidor (gateway/proxy):
# Pacotes chegando na porta 80 → reencaminhar para 192.168.1.100:80
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80
iptables -A FORWARD -p tcp -d 192.168.1.100 --dport 80 -j ACCEPT
# Masquerade (NAT de saída — para VPN/containers):
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
# Verificar regras NAT:
sudo iptables -t nat -L -n -v --line-numbers
# DOCKER-USER chain (para corrigir bypass do UFW pelo Docker):
# Bloquear acesso externo à porta 8080 do container (deixar apenas Nginx):
iptables -I DOCKER-USER -p tcp --dport 8080 ! -s 127.0.0.1 -j DROPPersistência e monitoramento das regras
Garantir que as regras sobrevivam ao reboot e monitorar tráfego bloqueado:
# Instalar iptables-persistent para salvar automaticamente:
sudo apt install iptables-persistent
# Salvar regras atuais:
sudo netfilter-persistent save
# Salvo em:
# /etc/iptables/rules.v4 → IPv4
# /etc/iptables/rules.v6 → IPv6
# Restaurar manualmente se necessário:
sudo iptables-restore < /etc/iptables/rules.v4
# Verificar serviço de persistência:
sudo systemctl status netfilter-persistent
# Monitorar tráfego bloqueado em tempo real:
sudo dmesg | grep "iptables-DROP" | tail -20
sudo journalctl -k | grep "iptables-DROP" | tail -20
# Estatísticas de tráfego por regra (bytes/pacotes):
sudo iptables -L -n -v | sort -k 2 -n -r | head -20
# Resetar contadores de estatísticas:
sudo iptables -Z
# Script de monitoramento de IPs bloqueados:
sudo journalctl -k --since "1 hour ago" | grep "iptables-DROP" | grep -oP 'SRC=K[^ ]+' | sort | uniq -c | sort -rn | head -10$ runstack deploy --plan starter
Não quer configurar manualmente?
Não quer configurar manualmente? Implante o VPS Linux em menos de 3 minutos com a Runstack. Infraestrutura da OPEN DATACENTER, com servidores no Brasil.
Perguntas frequentes
Conteúdos relacionados