fbpx iptables no Linux: Configurar Firewall com Regras Práticas | Certificação Linux

iptables no Linux: Configurar Firewall com Regras Práticas

📅 21/05/2026 ⏱ 7 min ✍️ Uira Ribeiro
iptables no Linux: Configurar Firewall com Regras Práticas

O iptables é o firewall padrão do kernel Linux. Presente em praticamente todas as distribuições, ele inspeciona e filtra cada pacote de rede que entra, sai ou passa pelo sistema. Entender o iptables é fundamental para proteger servidores em produção, configurar redes e passar em certificações como LPIC-2 e CompTIA Linux+.

Neste guia você vai aprender a sintaxe, as principais regras e os casos de uso mais comuns — com exemplos prontos para usar.

Como o iptables funciona: tabelas e chains

O iptables organiza as regras em tabelas, cada uma com um propósito diferente:

<tr>
TabelaUso
filterFiltragem de pacotes (padrão — usada na maioria das regras)
natTradução de endereços (NAT, masquerade, port forwarding)
mangleModificação de cabeçalhos de pacotes (QoS, TTL)
rawControle de rastreamento de conexão (conntrack)

Cada tabela tem chains (cadeias) que determinam quando as regras são avaliadas:

ChainQuando é avaliada
INPUTPacotes destinados ao próprio servidor
OUTPUTPacotes gerados pelo próprio servidor
FORWARDPacotes que passam pelo servidor (roteamento)
PREROUTINGAntes do roteamento (nat/mangle)
POSTROUTINGApós o roteamento (nat/mangle)

Comandos básicos do iptables

# Listar regras com detalhes (números de linha, contadores)
iptables -L -n -v --line-numbers

# Listar regras de uma tabela específica
iptables -t nat -L -n -v

# Adicionar regra no final da chain (-A = append)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# Inserir regra em posição específica (-I = insert)
iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT

# Deletar regra pelo número da linha
iptables -D INPUT 3

# Deletar regra pela especificação
iptables -D INPUT -p tcp --dport 80 -j ACCEPT

# Limpar todas as regras de uma chain (-F = flush)
iptables -F INPUT

# Limpar todas as regras de todas as chains
iptables -F

# Definir política padrão de uma chain
iptables -P INPUT DROP

Alvos (targets) mais comuns

TargetComportamento
ACCEPTAceita o pacote
DROPDescarta silenciosamente (sem resposta)
REJECTDescarta e envia mensagem de erro ao remetente
LOGRegistra o pacote no syslog e continua
RETURNVolta para a chain que chamou esta
MASQUERADENAT dinâmico (tabela nat)
DNATRedireciona para outro IP/porta (tabela nat)

Exemplos práticos

1. Configuração básica de servidor: política DROP + exceções

A abordagem mais segura: bloqueia tudo por padrão e libera apenas o necessário.

# Salva as regras atuais antes de começar
iptables-save > /tmp/iptables_backup.rules

# Define política padrão: DROP em INPUT e FORWARD, ACCEPT em OUTPUT
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# Permite tráfego loopback (necessário para o sistema funcionar)
iptables -A INPUT -i lo -j ACCEPT

# Permite conexões já estabelecidas e relacionadas
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Libera SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# Libera HTTP e HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

2. Liberar porta para IP específico apenas

# Permite SSH apenas do escritório (192.168.1.100)
iptables -A INPUT -p tcp --dport 22 -s 192.168.1.100 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

# Libera acesso ao banco de dados apenas do servidor de aplicação
iptables -A INPUT -p tcp --dport 3306 -s 10.0.1.50 -j ACCEPT
iptables -A INPUT -p tcp --dport 3306 -j DROP

3. Bloquear IP ou faixa de IPs

# Bloquear IP específico
iptables -A INPUT -s 203.0.113.99 -j DROP

# Bloquear faixa de IPs (CIDR)
iptables -A INPUT -s 203.0.113.0/24 -j DROP

# Bloquear e registrar tentativas antes de dropar
iptables -A INPUT -s 203.0.113.0/24 -j LOG --log-prefix "BLOCKED: "
iptables -A INPUT -s 203.0.113.0/24 -j DROP

4. Proteger contra ataques comuns

# Bloquear pacotes inválidos
iptables -A INPUT -m state --state INVALID -j DROP

# Limitar tentativas de conexão SSH (anti-brute force)
iptables -A INPUT -p tcp --dport 22 -m state --state NEW \
  -m recent --set --name SSH_BRUTE
iptables -A INPUT -p tcp --dport 22 -m state --state NEW \
  -m recent --update --seconds 60 --hitcount 4 --name SSH_BRUTE -j DROP

# Limitar ping (ICMP) para evitar flood
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

# Bloquear pacotes SYN suspeitos (SYN flood)
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

5. NAT e compartilhamento de internet (Masquerade)

Para que máquinas na rede interna acessem a internet através do servidor Linux:

# Habilitar IP forwarding no kernel
echo 1 > /proc/sys/net/ipv4/ip_forward
# Para tornar permanente, adicione no /etc/sysctl.conf:
# net.ipv4.ip_forward = 1

# Masquerade: toda saída pela interface eth0 usa o IP do servidor
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# Permite o tráfego entre as interfaces
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT

6. Port forwarding (redirecionamento de porta)

# Redirecionar porta 80 pública para porta 8080 interna
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

# Redirecionar para outro servidor interno
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:80
iptables -A FORWARD -p tcp -d 192.168.1.10 --dport 80 -j ACCEPT

7. Registrar pacotes para debug

# Registrar e depois aceitar
iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "SSH-ENTRADA: " --log-level 4
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# Ver logs em tempo real
tail -f /var/log/syslog | grep "SSH-ENTRADA"
# ou
journalctl -f | grep "SSH-ENTRADA"

Salvar e restaurar regras

As regras do iptables são perdidas na reinicialização. Para torná-las persistentes:

# Salvar regras atuais
iptables-save > /etc/iptables/rules.v4    # Debian/Ubuntu
iptables-save > /etc/sysconfig/iptables   # CentOS/RHEL

# Restaurar manualmente
iptables-restore < /etc/iptables/rules.v4

# No Ubuntu/Debian: instalar o pacote que restaura automaticamente no boot
apt install iptables-persistent
netfilter-persistent save

# No CentOS/RHEL: usar o serviço
systemctl enable iptables
systemctl start iptables

Verificar regras e diagnóstico

# Listar tudo com contadores (quantos pacotes cada regra processou)
iptables -L -v -n

# Listar com números de linha (útil para deletar por posição)
iptables -L INPUT --line-numbers

# Zerar contadores sem apagar regras
iptables -Z

# Ver regras da tabela NAT
iptables -t nat -L -n -v

iptables vs nftables

O nftables é o substituto moderno do iptables, disponível desde o kernel 3.13. Em distros mais recentes (Debian 10+, Ubuntu 20.04+, RHEL 8+) ele já é o padrão por baixo, com o comando iptables sendo um wrapper sobre o nftables.

# Ver se você está usando iptables-legacy ou nftables
iptables --version
# iptables v1.8.7 (nf_tables) ← já usa nftables por baixo
# iptables v1.8.2 (legacy)    ← iptables clássico

# Equivalente nftables de uma regra iptables:
# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
nft add rule inet filter input tcp dport 22 accept

Para fins de certificação LPIC-2, o conteúdo cobrado ainda é o iptables clássico. Para novas instalações, considere aprender nftables.

Referência rápida

# Ver regras
iptables -L -n -v --line-numbers

# Regra básica de servidor seguro
iptables -P INPUT DROP && iptables -P FORWARD DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# Anti-brute force SSH
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP

# NAT simples
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# Salvar (Debian/Ubuntu)
iptables-save > /etc/iptables/rules.v4
Uira Ribeiro

Prof. Uirá Ribeiro

Chair do Board do Linux Professional Institute

Especialista Linux com mais de 20 anos de experiência.
Autor de 5 livros e mentor de mais de 14.000 alunos certificados.
20 certificações de alto nível, incluindo LPIC-3, CKA, RHCE e AWS Solutions Architect.

WhatsApp