Capítulo 9.3 - Firewall
Objetivos de Aprendizagem
Ao final deste capítulo, você será capaz de:
- Compreender os firewalls Linux
- Configurar iptables
- Utilizar firewalld (Red Hat/CentOS)
- Utilizar ufw (Ubuntu/Debian)
- Entender as regras de filtragem
- Proteger os serviços
Tipos de Firewall
iptables
Firewall de baixo nível, controle direto do kernel:
Características:
- Muito poderoso
- Complexo
- Kernel direto
- Disponível em todos os lugares
firewalld
Firewall de alto nível, interface simplificada:
- Zonas (public, internal, etc.)
- Serviços predefinidos
- Mais simples que iptables
- Red Hat/CentOS/Fedora
ufw
Uncomplicated Firewall, muito simples:
- Interface simples
- Ubuntu/Debian
- Baseado em iptables
- Fácil de usar
iptables - Base
Tabelas
# Tabelas principais
# - filter: Filtragem (padrão)
# - nat: Tradução de endereços
# - mangle: Modificação de pacotes
# Ver regras
sudo iptables -L -n -v
# Por tabela
sudo iptables -t filter -L
sudo iptables -t nat -L
Chains
Tabela FILTER:
- INPUT: Pacotes de entrada
- OUTPUT: Pacotes de saída
- FORWARD: Pacotes roteados
Visualizar as Regras
# Lista simples
sudo iptables -L
# Com números
sudo iptables -L --line-numbers
# Numérico (sem resolução DNS)
sudo iptables -L -n
# Verbose (detalhes)
sudo iptables -L -v
# Todas as tabelas
sudo iptables -t nat -L -n -v
Regras do iptables
Adicionar uma Regra
# Formato: iptables -A CHAIN -j ACTION
# Permitir SSH (porta 22)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Permitir HTTP (porta 80)
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# Permitir HTTPS (porta 443)
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# Bloquear todo o resto
sudo iptables -A INPUT -j DROP
Inserir uma Regra
# Inserir no início (prioridade)
sudo iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT
# Inserir em posição específica
sudo iptables -I INPUT 3 -p tcp --dport 80 -j ACCEPT
Remover uma Regra
# Por número
sudo iptables -D INPUT 1
# Por correspondência
sudo iptables -D INPUT -p tcp --dport 22 -j ACCEPT
Política Padrão
# Política padrão (se nenhuma regra corresponder)
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT ACCEPT
sudo iptables -P FORWARD DROP
Exemplos de iptables
Configuração Básica
#!/bin/bash
# Configuração básica de firewall
# Limpar regras existentes
sudo iptables -F
sudo iptables -X
sudo iptables -t nat -F
sudo iptables -t nat -X
# Política padrão
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
# Permitir loopback
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT
# Permitir conexões estabelecidas
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Permitir SSH
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Permitir HTTP/HTTPS
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# ICMP (ping)
sudo iptables -A INPUT -p icmp -j ACCEPT
Salvar/Restaurar
# Salvar
sudo iptables-save > /etc/iptables/rules.v4
# Restaurar
sudo iptables-restore < /etc/iptables/rules.v4
# Automático na inicialização (Ubuntu/Debian)
sudo apt install iptables-persistent
sudo netfilter-persistent save
firewalld
Conceitos
Zonas:
- public: Zona pública (padrão)
- internal: Rede interna
- trusted: Confiável
- work: Trabalho
- home: Casa
Comandos Básicos
# Status
sudo firewall-cmd --state
sudo firewall-cmd --list-all
# Zonas
sudo firewall-cmd --get-zones
sudo firewall-cmd --get-default-zone
sudo firewall-cmd --set-default-zone public
# Serviços
sudo firewall-cmd --get-services
sudo firewall-cmd --list-services
Adicionar Serviços
# Adicionar serviço (temporário)
sudo firewall-cmd --add-service=http
# Adicionar serviço (permanente)
sudo firewall-cmd --add-service=http --permanent
# Recarregar
sudo firewall-cmd --reload
# Verificar
sudo firewall-cmd --list-services
Portas
# Adicionar porta
sudo firewall-cmd --add-port=8080/tcp
# Permanente
sudo firewall-cmd --add-port=8080/tcp --permanent
# Remover
sudo firewall-cmd --remove-port=8080/tcp --permanent
ufw (Ubuntu/Debian)
Ativação
# Ver status
sudo ufw status
# Ativar
sudo ufw enable
# Desativar
sudo ufw disable
Regras Básicas
# Permitir SSH
sudo ufw allow 22/tcp
sudo ufw allow ssh
# Permitir HTTP/HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# Permitir de IP específico
sudo ufw allow from 192.168.1.0/24
# Bloquear
sudo ufw deny 3306/tcp # MySQL
# Remover regra
sudo ufw delete allow 80/tcp
Visualizar as Regras
# Lista numerada
sudo ufw status numbered
# Detalhes
sudo ufw status verbose
Resetar
# Resetar todas as regras
sudo ufw reset
Boas Práticas
Segurança
# 1. Sempre permitir SSH antes de ativar
sudo ufw allow ssh
sudo ufw enable
# 2. Política padrão restritiva
# DROP para INPUT, ACCEPT para OUTPUT
# 3. Permitir apenas o necessário
# Não usar regras muito amplas
# 4. Testar antes de salvar
# Verificar conectividade
# 5. Registrar rejeições
sudo iptables -A INPUT -j LOG --log-prefix "IPTABLES-DROP: "
Manutenção
# Verificar regras regularmente
sudo iptables -L -n -v
sudo firewall-cmd --list-all
sudo ufw status verbose
# Salvar configuração
sudo iptables-save > backup-$(date +%Y%m%d).rules
Resumo
Neste capítulo, você aprendeu:
Tipos: iptables (baixo nível), firewalld (zonas), ufw (simples)
iptables: Tabelas, chains, regras, políticas
firewalld: Zonas, serviços, portas, permanente
ufw: Ativação, regras, status, reset
Segurança: Política restritiva, permitir apenas o necessário
Prática: Configuração básica, backup, teste
Próximos Passos
Capítulo 9.4: Auditoria e Monitoramento de Segurança
Módulo 10: Gerenciamento de Pacotes
Capítulo criado em: Dezembro 2024