Iptables antiabuso

Investigando paquetes de reglas para iptables, dí con paquetes específicos que nos protegen contra determinados ataques del cual vamos a hablar hoy. Son ataques que pretenden derribar un servicio nuestro o ajeno, y que pueden formar parte de una botnet, como en la imagen se detalla.

DDoS-network-map

DNS

simpledns

Con las siguientes reglas tendremos más protección en nuestro servicio dns limitando el número de consultas a 20 en 10 segundos al servicio de dns:

iptables -t filter -I INPUT 1 -p udp –dport 53 -i eth0 -m recent –set
iptables -t filter -I INPUT 2 -p udp –dport 53 -i eth0 -m recent –update –seconds 10 –hitcount 20 -j DROP

HTTP

descarga

Con estas reglas, nuestra intención es la de imitar la protección del servicio dns que hemos configurado anteriormente con el servicio http. Podemos probar y utilizar aquella que mejor se ajuste a nuestras necesidades. Son distintas aproximaciones de un mismo fin:

A) iptables -A INPUT -p tcp –dport 80 -m hashlimit –hashlimit-upto 50/min –hashlimit-burst 80 –hashlimit-mode srcip –hashlimit-name http -j ACCEPT
B) iptables -A INPUT -p tcp –dport 80 -m state –state NEW -m limit –limit 50/minute –limit-burst 200 -j ACCEPT
C) iptables -t filter -I INPUT 2 -p tcp –dport 80 -i eth0 -m recent –update –seconds 10 –hitcount 20 -j DROP

Para comprobar si están funcionando, podemos configurarlas en un entorno de desarrollo y realizar con herramientas numerosas peticiones. Existen herramientas de pruebas de rendimiento como ab (apache benchmark) o generarnos nosotros un ataque de denegación de servicio con Low Orbit Ion Cannon, una herramienta pensada para hacer este tipo de ataques.

UDP FLOOD

Las siguientes reglas las configuraremos para prevenir que nuestro servidor no haga ataques de inundación udp (teardrop attack) sobre otros servidores/servicios:

iptables -N udp-flood # Creamos nueva cadena
iptables -A OUTPUT -p udp -j udp-flood # La ponemos en las reglas de salida
iptables -A udp-flood -p udp -m limit –limit 200/s -j RETURN # Limitamos a 200 peticiones de salida por segundo
iptables -A udp-flood -j LOG –log-level 4 –log-prefix ‘UDP-flood attempt: ‘ # Registramos en los logs de iptables intento de udp flooding
iptables -A udp-flood -j DROP # Descartamos el tráfico de udp-flood

Otra alternativa a esas reglas sería la de establecer:
iptables -A INPUT -p UDP -f -j DROP

Por último, procedemos a proteger nuestro servidor de ataques de inundación SYN (SYN flooding):

# SYN-Flood protection in a user defined chain
iptables -N syn-flood # De nuevo creamos una cadena de nombre syn-flood
iptables -A INPUT -p tcp –syn -j syn-flood # Indicamos que la nueva cadena de entrada es de paquetes de entrada de tipo tcp y syn
iptables -A syn-flood -m limit –limit 30/s –limit-burst 60 -j RETURN # Limitamos el límite de paquetes syn de entrada a 60 cada 30 segundos
iptables -A syn-flood -j LOG –log-level 4 –log-prefix ‘SYN-flood attempt: ‘ # Registramos los intentos de flooding syn (para devolver el ataque o reportar a listas negras e informar de infección o equipo que forma parte de una botnet)
iptables -A syn-flood -j DROP # Descartamos el tráfico de inundación.

También podemos implementar reglas contra servicios adicionales como ping limitando la entrada/salida del mismo o denegándolo:
iptables -A INPUT -p icmp -m state –state NEW –icmp-type echo-request -m limit –limit 1/s –limit-burst 1 -j ACCEPT (limitamos tráfico ping de entrada)
iptables -A OUTPUT -p icmp –icmp-type echo-request -j DROP (descartamos tráfico ping de salida)

Las referencias empleadas en este artículo:

http://blog.bodhizazen.net/linux/prevent-dos-with-iptables/
http://www.58bits.com/blog/2012/12/11/a-udp-flood-story/

Nos veremos en próximas actualizaciones de reglas para iptables para finalmente tener un pack y una visión general de tipos de ataques y la produndidad de defensa y alcance que iptables nos brinda.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s