Configuração de Rede e Roteamento
📚 Índice
ip route - Roteamento
O que é ip route?
ip route é uma ferramenta para gerenciar a tabela de roteamento do Linux. Ela diz ao sistema operacional por onde enviar pacotes destinados a diferentes redes.
Pense como um GPS para pacotes de rede - indicam o caminho até o destino.
Estrutura Básica
ip route [COMANDO] [DESTINO] [GATEWAY]
│ │ │
│ │ └─ Por qual roteador enviar
│ └─ Para qual rede/IP enviar
└─ Operação (add, del, replace, show)
Principais Comandos
1. Visualizar Rotas Existentes
# Ver todas as rotas
ip route
# Ver rotas específicas
ip route show
ip route list
Exemplo de saída:
default via 10.4.0.1 dev eth0
10.4.0.0/24 dev eth0 proto kernel scope link src 10.4.0.11
Decodificando:
- default via 10.4.0.1 = Tráfego desconhecido vai para 10.4.0.1
- 10.4.0.0/24 dev eth0 = Rede 10.4.0.0/24 está conectada em eth0
- proto kernel = Rota criada automaticamente pelo kernel
2. Adicionar uma Rota
ip route add DESTINO via GATEWAY
Exemplos:
# Adicionar rota padrão
ip route add default via 10.4.0.1
# Adicionar rota específica para rede
ip route add 10.1.0.0/24 via 10.2.0.2
# Adicionar rota para um IP específico
ip route add 192.168.1.100 via 10.2.0.2
Casos de uso:
- default = Qualquer tráfego desconhecido
- 10.1.0.0/24 = Tráfego para toda a rede 10.1.0.0 a 10.1.0.255
- 10.1.0.20 = Tráfego para um IP específico (32 bits)
3. Deletar uma Rota
ip route del DESTINO [via GATEWAY]
Exemplos:
# Deletar rota padrão
ip route del default
# Deletar rota específica
ip route del 10.1.0.0/24 via 10.2.0.2
# Deletar todas as rotas para um destino
ip route del 192.168.1.0/24
4. Substituir uma Rota
ip route replace DESTINO via NOVO_GATEWAY
Útil para: Mudar o gateway de uma rota existente sem deletar/re-adicionar.
# Mudar gateway padrão
ip route replace default via 10.7.0.2
📊 Tabela de Formatos de Destino
| Formato | Significado | Exemplo | Hosts |
|---|---|---|---|
default |
Qualquer destino desconhecido | default via 10.4.0.1 |
Infinitos |
/24 |
Rede inteira (máscara /24) | 10.1.0.0/24 |
256 |
/25 |
Meia rede | 10.1.0.0/25 |
128 |
/32 |
Um IP específico | 192.168.1.100 |
1 |
/8 |
Rede enorme | 10.0.0.0/8 |
16M |
🔍 Entendendo Máscaras (/24, /25, /32)
O número após a barra indica quantos bits são endereço de rede.
/24 = 24 bits de rede + 8 bits de hosts = 2^8 = 256 endereços
/25 = 25 bits de rede + 7 bits de hosts = 2^7 = 128 endereços
/32 = 32 bits de rede + 0 bits de hosts = 2^0 = 1 endereço (um IP!)
📋 Exemplos Práticos com ip route
Exemplo 1: Configurar Gateway Padrão
# Um computador em filial precisa alcançar matriz
# Filial: 10.4.0.0/24
# Gateway da filial: 10.4.0.1
# Matriz: 10.1.0.0/24
docker exec pc1_br1 ip route add default via 10.4.0.1
# Agora qualquer tráfego para destinos desconhecidos vai para 10.4.0.1
Exemplo 2: Rota Específica para Uma Rede
# R1_HQ precisa alcançar Filial 1 via R2
# R1_HQ: 10.1.0.1 (não está na filial)
# Filial 1: 10.4.0.0/24
# R2: tem interface em 10.2.0.2
docker exec r1_hq ip route add 10.4.0.0/24 via 10.2.0.2
# Agora qualquer pacote para 10.4.0.x vai via R2
Exemplo 3: Rota para um IP Único
# Acessar servidor específico via host específico
docker exec admin_pc ip route add 203.0.113.100 via 10.1.0.1
# Pacotes para 203.0.113.100 vão sempre via 10.1.0.1
# Mas pacotes para 203.0.113.101 usariam outra rota
⚠️ Ordem de Prioridade de Rotas
O Linux escolhe a rota mais específica primeiro:
# Se você tem essas rotas:
ip route add default via 10.4.0.1 # Menos específica
ip route add 10.1.0.0/24 via 10.2.0.1 # Mais específica
ip route add 10.1.0.20 via 10.3.0.1 # Muito específica!
# Pacote para 10.1.0.20:
# ❌ Não usa "default via 10.4.0.1"
# ❌ Não usa "10.1.0.0/24 via 10.2.0.1"
# ✅ Usa "10.1.0.20 via 10.3.0.1" (mais específica!)
# Pacote para 10.1.0.50:
# ❌ Não usa "default via 10.4.0.1"
# ✅ Usa "10.1.0.0/24 via 10.2.0.1" (mais específica que default)
# Pacote para 203.0.113.50:
# ✅ Usa "default via 10.4.0.1" (nenhuma rota específica)
iptables - Firewall
O que é iptables?
iptables é um firewall de camada 3/4 (IP/TCP/UDP) do Linux. Controla quais pacotes podem passar (ACCEPT), devem ser descartados (DROP) ou rejeitados (REJECT).
Pense como um guarda de segurança que inspeciona cada pacote e decide se deixa passar.
Estrutura Básica
iptables [OPÇÃO] [CADEIA] [CRITÉRIO] -j AÇÃO
│ │ │ │
│ │ │ └─ Ação (ACCEPT, DROP, REJECT)
│ │ └─ Condições (source, destination, port, etc)
│ └─ Cadeia (FORWARD, INPUT, OUTPUT)
└─ Operação (-A add, -D delete, -L list, -F flush)
Cadeias (Chains)
iptables tem 3 cadeias principais:
| Cadeia | Significado | Uso |
|---|---|---|
INPUT |
Tráfego chegando neste host | Bloquear conexões de entrada |
OUTPUT |
Tráfego saindo deste host | Bloquear conexões de saída |
FORWARD |
Tráfego passando através (roteado) | Bloquear entre redes (firewalls) |
Observação: Usamos FORWARD em um roteador, visto que não um host simples.
Estrutura de Tabelas
iptables usa tabelas para diferentes tipos de processamento:
| Tabela | Função | Comum |
|---|---|---|
filter |
Filtrar pacotes (ACCEPT/DROP/REJECT) | ✅ Mais usada |
nat |
Tradução de endereços (MASQUERADE) | ✅ Para NAT |
mangle |
Modificar propriedades do pacote | ⚠️ Avançado |
raw |
Processamento de baixo nível | ⚠️ Muito avançado |
Padrão: Se não especificar -t, usa filter.
Principais Operações
1. Listar Regras
# Ver todas as regras (tabela filter)
iptables -L
# Ver com números de linha
iptables -L -n --line-numbers
# Ver na tabela NAT
iptables -t nat -L
# Ver com verbosidade
iptables -L -v
Exemplo de saída:
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num target prot opt source destination
1 DROP all -- 10.4.0.0/24 10.5.0.0/24
2 DROP all -- 10.5.0.0/24 10.4.0.0/24
2. Adicionar Regra
iptables -A CADEIA -s SOURCE -d DESTINATION [OPÇÕES] -j AÇÃO
│ │ │ │ │ │ │
│ │ │ │ │ └─ Destino IP └─ Ação final
│ │ │ └─ Source IP
│ └─ Cadeia (INPUT/OUTPUT/FORWARD)
└─ Append (adiciona ao final)
Exemplos:
# Bloquear tráfego de uma rede para outra
iptables -A FORWARD -s 10.4.0.0/24 -d 10.5.0.0/24 -j DROP
# Permitir tráfego específico
iptables -A FORWARD -s 10.1.0.0/24 -d 10.6.0.0/24 -j ACCEPT
# Usar porta
iptables -A FORWARD -p tcp --dport 80 -j ACCEPT
# Usar protocolo
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
3. Deletar Regra
# Deletar por número (ver com -L --line-numbers)
iptables -D CADEIA NÚMERO
# Deletar a regra inteira
iptables -D CADEIA -s SOURCE -d DESTINATION -j AÇÃO
Exemplos:
# Deletar regra 1 da cadeia FORWARD
iptables -D FORWARD 1
# Deletar uma regra específica
iptables -D FORWARD -s 10.4.0.0/24 -d 10.5.0.0/24 -j DROP
4. Limpar Todas as Regras
# Limpar uma cadeia
iptables -F FORWARD
# Limpar tudo (INPUT, OUTPUT, FORWARD)
iptables -F
# Limpar tabela NAT
iptables -t nat -F
⚠️ CUIDADO: Pode bloquear seu acesso se não souber o que está fazendo!
📊 Critérios Comuns
| Critério | Flag | Significado | Exemplo |
|---|---|---|---|
| Source IP | -s |
De qual IP/rede | -s 10.4.0.0/24 |
| Destination IP | -d |
Para qual IP/rede | -d 10.1.0.20 |
| Protocolo | -p |
TCP/UDP/ICMP | -p tcp |
| Porta Origem | --sport |
De qual porta | --sport 5000 |
| Porta Destino | --dport |
Para qual porta | --dport 80 |
| Interface | -i (INPUT/FORWARD) |
Interface de entrada | -i eth0 |
| Interface Saída | -o (OUTPUT/FORWARD) |
Interface de saída | -o eth1 |
| Estado | -m state --state |
Estado da conexão | --state NEW |
Ações (Targets)
| Ação | Significado |
|---|---|
ACCEPT |
Permite o pacote passar |
DROP |
Descarta silenciosamente (sem responder) |
REJECT |
Rejeita e envia mensagem de erro |
MASQUERADE |
Traduz endereço origem (NAT) |
DNAT |
Traduz endereço destino |
SNAT |
Traduz endereço origem |
📋 Exemplos Práticos com iptables
Exemplo 1: Bloquear Tráfego entre Filiais
# Bloquear Filial 1 → Filial 2
iptables -A FORWARD -s 10.4.0.0/24 -d 10.5.0.0/24 -j DROP
# Bloquear Filial 2 → Filial 1
iptables -A FORWARD -s 10.5.0.0/24 -d 10.4.0.0/24 -j DROP
# Verificar
iptables -L -n | grep DROP
Exemplo 2: Proteger Banco de Dados
# Bloquear Filial 1 acessando BD
iptables -A FORWARD -s 10.4.0.0/24 -d 10.1.0.20 -j DROP
# Bloquear Filial 2 acessando BD
iptables -A FORWARD -s 10.5.0.0/24 -d 10.1.0.20 -j DROP
# Permitir Admin acessar BD (exemplo - se tivessem regra de bloqueio)
# iptables -A FORWARD -s 10.6.0.10 -d 10.1.0.20 -j ACCEPT
Exemplo 3: Permitir HTTP/HTTPS
# Permitir HTTP (porta 80)
iptables -A FORWARD -p tcp --dport 80 -j ACCEPT
# Permitir HTTPS (porta 443)
iptables -A FORWARD -p tcp --dport 443 -j ACCEPT
# Bloquear todo o resto
iptables -A FORWARD -j DROP
Exemplo 4: Stateful Firewall (Proteção contra Ataques)
# Bloquear novas conexões vindo da Internet
iptables -A FORWARD -s 203.0.113.0/24 -d 10.0.0.0/8 -m state --state NEW -j DROP
# O que isso faz:
# ❌ Internet iniciando conexão = BLOQUEADO (NEW)
# ✅ Internet respondendo = PERMITIDO (ESTABLISHED)
🔒 Diferença entre DROP e REJECT
# DROP - Descarta silenciosamente
iptables -A FORWARD -s 10.4.0.0/24 -d 10.5.0.0/24 -j DROP
# Resultado: Pacote desaparece, sem resposta
# Quem enviou acha que está muito lento
# REJECT - Rejeita e responde
iptables -A FORWARD -s 10.4.0.0/24 -d 10.5.0.0/24 -j REJECT
# Resultado: Pacote é descartado + "Destino inacessível"
# Quem enviou sabe imediatamente que foi bloqueado
Qual usar?
- DROP = Mais seguro (hacker não sabe se foi bloqueado)
- REJECT = Mais rápido (feedback imediato)
🧬 NAT (Network Address Translation)
NAT traduz endereços privados em públicos (ou vice-versa).
MASQUERADE (NAT de Saída)
# Em tabela NAT, cadeia POSTROUTING
iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -j MASQUERADE
# Significado:
# Qualquer pacote da rede interna (10.0.0.0/8)
# sai disfarçado como se fosse de R4
Como funciona:
PC1 (10.4.0.10) → Servidor Internet (203.0.113.10)
Pacote original:
Source: 10.4.0.10
Destination: 203.0.113.10
Depois de MASQUERADE em R4:
Source: 203.0.113.1 (IP de R4)
Destination: 203.0.113.10
Resposta:
Source: 203.0.113.10
Destination: 203.0.113.1 (R4)
R4 traduz de volta:
Source: 203.0.113.10
Destination: 10.4.0.10 (PC1)
PC1 recebe resposta ✅
Resumo Rápido
ip route - Roteamento
# Ver rotas
ip route
# Adicionar rota padrão
ip route add default via GATEWAY
# Adicionar rota específica
ip route add REDE/MÁSCARA via GATEWAY
# Deletar rota
ip route del DESTINO
iptables - Firewall
# Ver regras
iptables -L
# Bloquear tráfego
iptables -A FORWARD -s SOURCE -d DESTINATION -j DROP
# Permitir tráfego
iptables -A FORWARD -s SOURCE -d DESTINATION -j ACCEPT
# NAT (disfarçar)
iptables -t nat -A POSTROUTING -s SOURCE -j MASQUERADE
Próximos Passos
- Praticar: Use esses comandos no laboratório
- Experimentar: Mude rotas e regras, veja o que quebra
- Debugar: Use
ip routeeiptables -Lpara entender
Recursos Adicionais
# Manual completo
man ip-route
man iptables
# Ver opções
ip route help
iptables --help