Entendendo o Firewall Linux: Estrutura e Fluxo de Dados
O iptables é uma ferrramenta poderosa para gerenciar firewalls em sistemas Linux. Ele opera com base em quatro tabelas principais e cinco cadeias de regras, cada uma com um propósito específico:
Tabelas de Regras:
- Tabela
filter: Responsável pelo filtragem básica de pacotes. Contém as cadeiasINPUT,FORWARDeOUTPUT. - Tabela
nat: Utilizada para modificar os endereços IP e portas dos pacotes. Inclui as cadeiasPREROUTING,POSTROUTINGeOUTPUT. - Tabela
mangle: Permite a modificação de campos de cabeçalho dos pacotes, como TOS (Type of Service) e TTL (Time To Live), além de marcações para roteamento avançado. Possui as cadeiasPREROUTING,POSTROUTING,INPUT,OUTPUTeFORWARD. - Tabela
raw: Usada para determinar se um pacote deve ter seu estado rastreado. Contém as cadeiasOUTPUTePREROUTING.
Cadeias de Regras:
INPUT: Aplica regras a pacotes destinados ao próprio host do firewall.OUTPUT: Aplica regras a pacotes originados do próprio host do firewall.FORWARD: Aplica regras a pacotes que transitam pelo firewall, sendo roteados para outros destinos.PREROUTING: As regras são aplicadas antes da decisão de roteamento do pacote.POSTROUTING: As regras são aplicadas após a decisão de roteamento do pacote.
Fluxo de Processamento de Pacotes:
Quando um pacote chega ao firewall, ele passa por um processo estruturado:
- Ordem das Tabelas: As tabelas são processadas na seguinte ordem:
raw,mangle,nate, por último,filter. - Ordem das Cadeias e Roteamento:
- Tráfego de Entrada (
INPUT): Pacotes chegam, são processados pelaPREROUTING, sofrem decisão de roteamento. Se o destino for o próprio host, seguem para aINPUTe, em seguida, para as aplicações do sistema. - Tráfego de Encaminhamento (
FORWARD): Pacotes chegam, são processados pelaPREROUTING, sofrem decisão de roteamento. Se o destino for outro host, seguem para aFORWARDe, finalmente, para aPOSTROUTING. - Tráfego de Saída (
OUTPUT): Pacotes originados do host passam pelaOUTPUT, sofrem decisão de roteamento e, em seguida, pelaPOSTROUTING.
- Tráfego de Entrada (
- Ordem das Regras dentro de uma Cadeia: As regras dentro de uma cadeia são avaliadas sequencialmente. Uma vez que uma regra corresponde ao pacote, sua ação (
ACCEPT,DROP,REJECT, etc.) é executada e, dependendo da ação, o processamento na cadeia atual pode parar, continuar para a próxima cadeia ou ser interrompido completamente. Se nenhuma regra corresponder, a política padrão da cadeia é aplicada.
Execução e Ações do iptables
O iptables executa as regras de forma sequencial dentro de cada tabela e cadeia. As ações comuns incluem:
ACCEPT: Permite que o pacote passe. O processamento na cadeia atual é interrompido e pode continuar em outra cadeia se necessário (ex:natparaPOSTROUTING).REJECT: Bloqueia o pacote e envia uma mensagem de erro ao remetente (ex: ICMP port-unreachable). O processamento é interrompido.DROP: Descarta o pacote silenciosamente, sem notificar o remetente. O processamento é interrompido.REDIRECT: Redireciona o pacote para outra porta no mesmo host (usado para NAT ou proxy transparente). O processamento continua na mesma cadeia.LOG: Registra informações sobre o pacote. O processamento continua com a próxima regra na mesma cadeia.
Gerenciando Regras do iptables
Adicionando uma Regra
Para adicionar uma nova regra, utiliza-se os parâmetros -A (adicionar ao final) ou -I (inserir no início ou em uma posição específica). Opções comuns incluem:
-i: Interface de entrada.-o: Interface de saída.-p: Protocolo (tcp, udp, icmp, all).-s: Endereço IP ou rede de origem. Use!para negar.-d: Endereço IP ou rede de destino. Use!para negar.-j: Ação a ser tomada (ACCEPT,DROP,REJECT,LOG,REDIRECT, etc.).
Exemplo para adicionar uma regra que aceita tráfego SSH:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Removendo uma Regra
Use o parâmetro -D seguido do nome da cadeia e o número da linha da regra. Para visualizar as regras com seus números, utilize:
iptables -nL --line-numbers
Exemplo para remover a regra número 5 da cadeia INPUT:
iptables -D INPUT 5
Visualizando Regras
Para listar as regras existentes:
-L: Lista as regras.-n: Exibe endereços e portas em formato numérico.-v: Exibe informações detalhadas (verbose).--line-numbers: Mostra os números das linhas das regras.
Combinações comuns:
iptables -vnL
iptables -vvnxL --line-numbers
Comandos Comuns e Exemplos Práticos
Bloquear um Endereço IP Específico
iptables -A INPUT -s 192.168.1.100 -j DROP
Controlar Múltiplas Portas com multiport
iptables -A INPUT -p tcp -m multiport --dports 80,443,8080 -j ACCEPT
Permitir Tráfego para um Intervalo de IPs
iptables -A OUTPUT -p tcp -d 10.0.0.0/8 --dport 443 -j ACCEPT
Configurar Redirecionamento de Portas (Port Forwarding)
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
Este comando redireciona todo o tráfego que chega à porta 80 da interface eth0 para a porta 8080.
Limitar Conexões para um Serviço (Ex: HTTP)
iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT
Limita a 100 novas conexões por minuto, com um burst inicial de 200.
Desabilitar Respostas a PING (ICMP Echo Request)
iptables -A INPUT -p icmp -i eth0 -j DROP
Permitir Tráfego na Interface de Loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
Restringir Conexões Simultâneas
iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT
Rejeita novas conexões se o cliente já tiver mais de 3 conexões estabelecidas para a porta 22.
Limpar Todas as Regras
iptables -F
Para limpar regras de uma tabela específica:
iptables -t nat -F
Descartar Pacotes Inválidos
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
Bloquear Tráfego de E-mail de Saída (Portas Padrão)
iptables -A OUTPUT -p tcp -m multiport --dports 25,465,587 -j REJECT
Bloquear Acesso a uma Interface Específica a partir de um IP
iptables -A INPUT -i eth1 -s 192.168.1.50 -j DROP
Restringir Acesso de um IP a uma Porta Específica
iptables -I INPUT -s 192.168.2.0/24 -p tcp --dport 3306 -j ACCEPT
Salvar e Restaurar Regras
Após configurar as regras, é crucial salvá-las para que persistam após a reinicialização:
service iptables save
service iptables restart
Em alguns sistemas, os arquivos de configuração estão localizados em /etc/sysconfig/iptables.