Levantando iptables para un usuario común

Jens Hardings Perl jhp en ing.puc.cl
Jue Dic 7 16:26:03 CLST 2006


On Thu, 2006-12-07 at 12:06 -0400, Rodolfo Alcazar wrote:
> On Wed, 2006-12-06 at 16:08 -0300, Horst H. von Brand wrote:
> > Amables lectores: Cualquier script de cortafuegos que contenga DROP esta
> > mal. Quemenlo sin mirarlo, leerlo puede meterles ideas extremadamente
> > erradas en la cabeza.
> 
> No lo creo. La mayoría de Firewalls (no solo iptables) usan reglas del
> tipo DROP. DROP tiene propósitos muy importantes. Sirve para:
> 
> a) Minimizar tráfico basura: si respondes, REJECT, generas tráfico.
> Puedes ser víctima de un ataque DOS (Denial Of Service).

En general los ataques DoS se basan en que recibes demasiado tráfico, no
que lo generes. Otra cosa son los llamados amplification attacks, donde
se asume que pocos paquetes logran generar muchos paquetes de
respuestas. No es el caso aquí (requieres 1000 paquetes para generar
1000 paquetes de respuesta, estos últimos de tamaño mínimo).

> c) Minimizar el uso de tu CPU. Generar la respuesta, toma un tiempo de
> proceso. Si es una, no hay problema. Pero en un ataque BRUTE FORCE, te
> consume recursos valiosos. Si el atacante es hábil, te refunde el
> tráfico.

El trabajo de enviar un paquete es mínimo, y no se requieren recursos
(memoria asociada a una conexión en vías de establecerse por ejemplo)
que es lo que aprovechan generalmente los DoS. Piensa que con una CPU
bastante rasca puedes saturar un enlace sin problemas enviando este tipo
de paquetes.

Tanto en este caso como en el anterior, puede valer la pena usar DROP en
situaciones extremas (cuando por ejemplo se sabe que el remitente de un
paquete es falsificado). Son el tipo de situaciones que se configuran a
mano en caso de emergencia, y no están dentro del script de
configuración normal.

> d) Dificultar el diagnóstico de puertos. Despistar al atacante. Retrasar
> los intentos fallidos. Hacer creer al atacante que el puerto no está
> abierto.

Un puerto cerrado genera una respuesta al querer iniciar una conexión:
un paquete TCP con el flag RST seteado. Si se quiere hacer creer que el
puerto está cerrado, habría que enviar algo igual (usando la opción
tcp-reset). En el caso de enviar un paquete UDP a un puerto cerrado, la
respuesta normal es un paquete ICMP port-unreachable, que es justamente
el default de REJECT de iptables.

En resumen: usando DROP están dándole más información al atacante de la
que tenía antes: ahora sabe que hay un firewall bloqueándole esos
puertos específicos.

Saludos,
-- 
Jens.



Más información sobre la lista de distribución Linux