Gerenciamento Avançado de Rede no Linux: Firewalls e Monitoramento de Tráfego

Quando um servidor Linux começa a hospedar serviços críticos como bases de dados ou servidores Web, ferramentas básicas como ping deixam de ser suficientes. Situações como consumo inesperado de banda, portas bloqueadas ou ataques de força bruta exigem um domínio sobre firewalls e ferramentas de análise em tempo real. Este guia explora o uso de iptables e nftables para controle de fluxo, além de utilitários como iftop, nload e ss para diagnóstico de rede.

1. Controle de Fluxo com Firewalls: iptables e nftables

O subsistema de rede do Linux permite filtrar e transformar pacotes. Enquanto o iptables é o padrão histórico, o nftables é o sucessor moderno, oferecendo melhor performance e uma sintaxe mais limpa. O segredo reside em entender dois conceitos: Filtragem de Portas e NAT (Network Address Translation).

Comparativo: Qual ferramenta utilizar?

Recurso iptables nftables (Recomendado)
Estrutura Tabelas fixas (filter, nat, mangle) Tabelas e cadeias totalmente configuráveis
Sintaxe Verborrágica e baseada em flags Similar a linguagens de programação
Performance Menor em regras complexas Alta (avaliação de regras otimizada)

Exemplo Prático: Filtragem de Portas com iptables

Abaixo, configuramos uma política de "permissão mínima", bloqueando tudo e liberando apenas o essencial (Web e SSH restrito).

# 1. Resetar regras para um estado limpo
sudo iptables -F
sudo iptables -X

# 2. Definir políticas padrão (Drop para entrada e encaminhamento)
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT

# 3. Permitir tráfego na interface de loopback (essencial para serviços locais)
sudo iptables -A INPUT -i lo -j ACCEPT

# 4. Manter conexões já estabelecidas (evita queda de conexões ativas)
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# 5. Abrir portas Web (80 e 443)
sudo iptables -A INPUT -p tcp --match multiport --dports 80,443 -j ACCEPT

# 6. SSH (Porta 22) permitido apenas para uma sub-rede administrativa específica
sudo iptables -A INPUT -p tcp -s 10.0.5.0/24 --dport 22 -j ACCEPT

Exemplo Prático: Filtragem com nftables

O nftables permite agrupar regras de forma mais eficiente:

# Criar tabela e cadeias base
sudo nft add table inet firewall_filter
sudo nft add chain inet firewall_filter input { type filter hook input priority 0 \; policy drop \; }

# Permitir loopback e conexões existentes
sudo nft add rule inet firewall_filter input iif lo accept
sudo nft add rule inet firewall_filter input ct state established,related accept

# Permitir HTTP, HTTPS e SSH de IP específico
sudo nft add rule inet firewall_filter input tcp dport { 80, 443 } accept
sudo nft add rule inet firewall_filter input ip saddr 10.0.5.0/24 tcp dport 22 accept

2. Monitoramento de Rede: Identificando Gargalos

Quando a rede apresenta lentidão, é preciso identificar se o problema é o volume total de tráfego, um IP específico ou um processo consumindo recursos indevidamente.

Visualizando Consumo por Host com iftop

O iftop exibe uma tabela de conexões ativas e quanta banda cada uma está consumindo.

# Instalação (Debian/Ubuntu)
sudo apt install iftop
# Execução na interface principal
sudo iftop -i eth0 -n -P
  • -n: Impede a resolução de DNS, tornando a exibição imediata.
  • -P: Exibe as portas, ajudando a identificar o serviço (ex: porta 3306 para MySQL).

Monitorando Interface com nload

Diferente do iftop, o nload foca no tráfego agregado da interface, fornecendo gráficos ASCII de entrada e saída.

sudo nload eth0

Verificando Portas e Processos com ss

O comando ss substitui o antigo netstat com maior velocidade para listar sockets.

# Listar todos os processos ouvindo em portas TCP
sudo ss -tlnp

3. Resolução de Problemas em Cenários Reais

Cenário 1: Redirecionamento de Porta (DNAT)

Você tem um serviço rodando na porta 9000 internamente, mas precisa que ele responda na porta 80 para conexões externas no IP 203.0.113.50.

# Habilitar o encaminhamento no kernel
sudo sysctl -w net.ipv4.ip_forward=1

# Aplicar a regra de DNAT
sudo iptables -t nat -A PREROUTING -d 203.0.113.50 -p tcp --dport 80 -j DNAT --to-destination 172.16.0.10:9000

Cenário 2: Servidor com Banda Esgotada

Se o iftop endicar que o IP 185.10.20.30 está consumindo 90% da sua banda de saída de forma suspeita:

  1. Verifique os logs do servidor Web: tail -f /var/log/nginx/access.log | grep 185.10.20.30
  2. Se for um ataque ou crawler agressivo, bloqueie imediatamente:
sudo iptables -I INPUT -s 185.10.20.30 -j DROP

Cenário 3: Erro "Address already in use"

Se um serviço (como o Apache) falha ao iniciar porque a porta 80 está ocupada:

# Localizar o culpado
sudo lsof -i :80

# Exemplo de saída: nginx  PID: 1234
# Se necessário, encerre o processo para liberar a porta
sudo kill -15 1234

4. Analisando Pacotes com tcpdump

Para problemas complexos onde os pacotes parecem "sumir", o tcpdump é a ferramenta definitiva para captura de tráfego bruto.

# Capturar os primeiros 100 pacotes na porta 443 e salvar em arquivo
sudo tcpdump -i eth0 port 443 -c 100 -w analise.pcap

O arquivo .pcap pode ser baixado e analisado visualmente no Wireshark para entender se há erros de handshake ou pacotes malformados.

Considerações de Boas Práticas

  • Persistência: Lembre-se que regras de iptables aplicadas via linha de comando desaparecem após o reboot. Utilize pacotes como iptables-persistent ou salve as regras em arquivos de configuração específicos da sua distribuição.
  • Ordem das Regras: O firewall processa regras de cima para baixo. Coloque regras de bloqueio genérico sempre ao final e exceções específicas no topo.
  • Conflitos: Evite rodar firewalld, ufw e nftables simultaneamente. Escolha uma ferramenta de gerenciamento e desative as demais para evitar comportamentos imprevisíveis na pilha de rede.

Tags: Linux Networking iptables nftables SysAdmin

Publicado em 7-11 17:03