Pular para o conteúdo principal

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