
Estou tentando configurar algumas regras para bloquear todas as portas exceto 21 e 22 no TCP (SSH e FTP). Mas quando tento executar esse script, minha instância fica bloqueada e não consigo acessá-la. Este é o roteiro:
# Flush the FW Rules
iptables -F
iptables -X
# Block all traffic
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
# Allow SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT
# Allow FTP
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 21 -j ACCEPT
# Allow ICMP (ping)
iptables -A INPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT
No script, ele configura solicitações de entrada e saída para SSH e FTP, mas por que não consigo acessá-lo?
Responder1
- Para regras na
OUTPUT
cadeia você deve especificar a correspondência da porta de origem (--sport
), não a porta de destino (--dport
). - De qualquer forma,
DROP
a política naOUTPUT
cadeia não é uma prática comum. - Leia o tutorial do iptables e exemplos de conjuntos de regras.
- Para evitar perda de conexão, melhor uso
iptables-save
eiptables-apply
ferramentas.
Responder2
Você deve configurar o rastreamento de estado e perder as -A OUTPUT ... -j ACCEPT
linhas.
IPTABLES -I INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
IPTABLES -I FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
IPTABLES -I OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
É bom ver que você está usando filtragem de saída explícita, mas é mais trabalhoso implementar.