
Estoy intentando configurar algunas reglas para bloquear todos los puertos excepto el 21 y el 22 en TCP (SSH y FTP). Pero cuando intento ejecutar este script, se me bloquea el acceso a mi instancia y no puedo acceder a ella. Este es el guión:
# 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
En el script configura solicitudes entrantes y salientes para SSH y FTP, pero ¿por qué no puedo acceder a él?
Respuesta1
- Para las reglas de la
OUTPUT
cadena, debe especificar la coincidencia del puerto de origen (--sport
), no el puerto de destino (--dport
). - De todos modos
DROP
la política en laOUTPUT
cadena no es una práctica común. - Lea el tutorial de iptables y los conjuntos de reglas de ejemplo.
- Para evitar la pérdida de la conexión, mejor uso
iptables-save
yiptables-apply
herramientas.
Respuesta2
Deberías configurar el seguimiento del estado y perder las -A OUTPUT ... -j ACCEPT
líneas.
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
Es bueno ver que está utilizando un filtrado de salida explícito, pero implementarlo requiere más trabajo.