Fundamentos de iptables e nftables: Introducao a Filtragem de Pacotes
Qual e a Diferenca Entre iptables e nftables?
O iptables tem sido a ferramenta de firewall padrao do Linux por decadas, mas o nftables e agora o substituto moderno. O Ubuntu 22.04 e posteriores usam nftables por padrao (via uma camada de compatibilidade iptables-nft). A regra pratica e: use iptables para manter servidores existentes, e nftables para novas configuracoes.
| Atributo | iptables | nftables |
|---|---|---|
| Introduzido | 1998 | 2014 (Linux 3.13) |
| Sintaxe | Complexa, verbosa | Unificada, concisa |
| IPv4/IPv6 | Separado (ip6tables) | Unificado (familia inet) |
| Ubuntu 22.04 | Via camada iptables-nft | Nativo |
No Ubuntu 22.04+, executar iptables na verdade roteia internamente pelo nftables. Execute update-alternatives --list iptables para ver qual implementacao esta ativa.
Estrutura do iptables
O iptables organiza regras em uma hierarquia de tres niveis: tabela -> chain -> regra. A maior parte do trabalho de firewall acontece na tabela filter em tres chains.
As tres chains na tabela filter:
- INPUT: Pacotes destinados a esta maquina
- OUTPUT: Pacotes originados desta maquina
- FORWARD: Pacotes sendo roteados (apenas configuracoes de roteador)
Alvos de regras:
- ACCEPT: Permitir a passagem do pacote
- DROP: Descartar silenciosamente (sem notificacao ao remetente)
- REJECT: Descartar e enviar um erro de volta
Comandos Basicos do iptables
Sempre comece revisando as regras existentes. Use -n para pular consultas DNS e -v para contadores de pacotes.
Visualizando Regras
# Listar todas as chains com detalhes iptables -L -n -v # Listar a chain INPUT com numeros de linha iptables -L INPUT -n -v --line-numbers
Adicionando Regras
# Permitir loopback (obrigatorio) iptables -A INPUT -i lo -j ACCEPT # Permitir conexoes estabelecidas (obrigatorio) iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Permitir SSH (porta 22) 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 # Descartar todo o resto iptables -A INPUT -j DROP
Excluindo e Resetando Regras
# Excluir por numero de linha (obtenha numeros com --line-numbers) iptables -D INPUT 3 # Excluir por especificacao de regra (substitua -A por -D) iptables -D INPUT -p tcp --dport 80 -j ACCEPT # Limpar todas as regras em todas as chains iptables -F # Resetar politicas padrao para ACCEPT iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT
Se voce limpar as regras (iptables -F) enquanto a politica padrao e DROP, qualquer sessao SSH aberta sera cortada. Sempre verifique a politica padrao antes de limpar regras em um servidor remoto.
Estrutura do nftables
O nftables usa uma hierarquia de quatro niveis: familia -> tabela -> chain -> regra. Diferente do iptables, voce deve criar explicitamente tabelas e chains antes de adicionar regras. Usar a familia inet permite lidar com IPv4 e IPv6 em um unico conjunto de regras.
# Mostrar o conjunto de regras ativo inteiro nft list ruleset # Mostrar todas as tabelas nft list tables # Mostrar uma tabela especifica nft list table inet filter
Comandos Basicos do nftables
Crie uma tabela e chain primeiro, depois adicione regras. A declaracao type filter hook input priority 0 e o padrao para uma chain de filtro de entrada.
Criando Tabelas e Chains
# Criar uma tabela
nft add table inet filter
# Criar chain INPUT com politica drop
nft add chain inet filter input '{ type filter hook input priority 0 ; policy drop ; }'
# Criar chain OUTPUT com politica accept
nft add chain inet filter output '{ type filter hook output priority 0 ; policy accept ; }'Adicionando Regras
# Permitir loopback
nft add rule inet filter input iif lo accept
# Permitir conexoes estabelecidas
nft add rule inet filter input ct state established,related accept
# Permitir SSH
nft add rule inet filter input tcp dport 22 accept
# Permitir HTTP e HTTPS (multiplas portas em uma regra)
nft add rule inet filter input tcp dport '{ 80, 443 }' acceptExcluindo Regras
# Listar regras com numeros de handle nft list ruleset -a # Excluir uma regra pelo numero de handle nft delete rule inet filter input handle 5
Resetando Todas as Regras
# Limpar o conjunto de regras inteiro nft flush ruleset # Ou excluir uma tabela especifica nft delete table inet filter
nft flush ruleset remove todas as regras instantaneamente. Se alguma chain tiver policy drop, todo o trafego sera bloqueado. Verifique a politica antes de executar isso em um servidor remoto.
Persistindo Regras Entre Reinicializacoes
Tanto as regras do iptables quanto do nftables sao perdidas na reinicializacao por padrao. A persistencia requer salvar a configuracao.
Persistindo iptables (Ubuntu)
# Instalar iptables-persistent apt install iptables-persistent # Salvar regras atuais netfilter-persistent save # Ou salvar manualmente iptables-save > /etc/iptables/rules.v4 ip6tables-save > /etc/iptables/rules.v6
Persistindo nftables (Ubuntu)
# Habilitar servico nftables systemctl enable nftables # Salvar conjunto de regras atual no arquivo de configuracao nft list ruleset > /etc/nftables.conf # Reiniciar servico para verificar systemctl restart nftables systemctl status nftables
Template basico de /etc/nftables.conf:
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
iif lo accept
ct state established,related accept
tcp dport 22 accept
tcp dport { 80, 443 } accept
}
chain output {
type filter hook output priority 0; policy accept;
}
}No Ubuntu 22.04, o nftables.service esta incluido por padrao. Edite /etc/nftables.conf e execute systemctl restart nftables para aplicar as mudancas.
Relacao com firewalld e ufw
No RHEL / CentOS / Fedora, o firewalld atua como frontend para o nftables. No Ubuntu, o ufw (Uncomplicated Firewall) fornece uma interface mais simples para nftables/iptables e e recomendado para uso cotidiano.
# Basico do ufw (Ubuntu) ufw status verbose ufw allow 22/tcp ufw allow 80/tcp ufw allow 443/tcp ufw enable ufw status numbered
Para gerenciamento de firewall no dia a dia no Ubuntu, ufw e a opcao mais simples. Use iptables ou nftables diretamente quando precisar de controle refinado ou estiver construindo regras de filtragem complexas.