Iptables reglas contra fuerza bruta, escaneos

Hacked

Para evitar o paliar que evadan, esquiven nuestras medidas de seguridad, podemos añadir determinadas reglas contra servicios abiertos a todo el mundo, que eviten por ejemplo ataques de fuerza bruta. A pesar de contar con firewall, siempre puede existir alguna manera de evadirlo (técnicas como firewalk, polluting de peticiones, enmascaramientos o falsificaciones)

En nuestro caso, el servicio que limitamos el número de intentos fallidos, es contra ssh, pero combinando estas reglas con determinadas cadenas de texto como vimos en el siguiente artículo , podríamos limitar el número de intentos de acceso a un determinado formulario php de login de wordpress:

#Anti-Bruteforce for SSH
iptables -N SSHSCAN
iptables -A INPUT -p tcp –dport 22 -m state –state NEW -j SSHSCAN
iptables -A SSHSCAN -m recent –set –name SSH
iptables -A SSHSCAN -m recent –update –seconds 3600 –hitcount 5 –name SSH -j DROP
iptables -A SSHSCAN -m recent –update –seconds 3600 –hitcount 5 –name SSH -j LOG –log-level info –log-prefix “Anti SSH-Bruteforce: ”

Otras variantes que protegen contra fuerza bruta y escaneo de un servicio podrían ser las siguientes:
iptables -N SCAN
iptables -A SCAN -p tcp –dport 25 -m recent –set –name SMTP
iptables -A SCAN -p tcp –dport 22 -m recent –set –name SSH
iptables -A SCAN -p tcp –dport 21 -m recent –set –name FTP
iptables -A SCAN -m recent –update –seconds 300 –hitcount 5 –name SMTP -j DROP
iptables -A SCAN -m recent –update –seconds 300 –hitcount 5 –name SSH -j DROP
iptables -A SCAN -m recent –update –seconds 300 –hitcount 5 –name FTP -j DROP

Otra manera de implementar dicha protección sin tener que crear una cadena nueva y añadirla a las de entradas:
iptables -A INPUT -p tcp –dport 22 –syn -m limit –limit 1/m –limit-burst 3 -j ACCEPT
iptables -A INPUT -p tcp –dport 22 –syn -j DROP

En estas webs, encontramos una combinación de límite para el servicio dns para intentar detener los últimos ataques de amplificación dns:
http://server-support.co/blog/sysadmin/block-recursive-dns-queries-with-iptables-rate-limiting-rules/
http://www.junkemailfilter.com/blog/2013/03/03/how-to-block-dns-amplification-attack-isc-org-any-attack/

iptables -v -A INPUT -p udp –dport 53 -m recent –set –name dnsanyquery
iptables -v -A INPUT -p udp –dport 53 -m recent –name dnsanyquery –rcheck –seconds 1 –hitcount 10 -j DROP

Por último, vamos a intentar paliar los escaneos que pueden hacer sobre nuestros servidores mediante herramientas como nmap (y sus scripts NSE) o nc, aunque en artículos leídos en blogs, había un intenso debate sobre si realmente se puede evitar que te escaneen un puerto (aunque más adelante trataremos qué otras medidas adicionales podemos tomar para proteger los servicios como poner ports honeypots, port-knocking para determinados servicios, o otro tipo de medidas).

Antes de ponernos de lleno con las reglas, hemos de saber que con nmap y otras herramientas se pueden hacer determinados tipos de scaneos, como podemos ver de la propia entrada de nmap:
nmap_logo_vx
-sS/sT/sA/sW/sM: TCP SYN/Connect()/ACK/Window/Maimon scans
-sU: UDP Scan
-sN/sF/sX: TCP Null, FIN, and Xmas scans
–scanflags : Customize TCP scan flags
-sI : Idle scan
-sY/sZ: SCTP INIT/COOKIE-ECHO scans
-sO: IP protocol scan
-b : FTP bounce scan

No entramos en detalle en cómo funciona cada tipo de escaneo, sino en que simplemente en función de las pruebas realizadas por el programa que escanea, y la respuesta que tiene, puede saber si un puerto está ofreciendo un servicio aunque esté enmascarado, redireccionado, o que utilice otras técnicas para proteger su servicio. Dicho esto, hay conjuntos de reglas que pueden ayudar a prevenir
escaneos, bien sea de un robot o de un humano en un proceso de gathering de nuestro sistema:

A) Escaneo Syn, Ack, Fin, o Rst:
iptables -A port-scan -p tcp –tcp-flags SYN,ACK,FIN,RST RST -m limit –limit 1/s -j RETURN
iptables -A port-scan -j DROP

B) Xmas, banner scan y otros:
iptables -A INPUT -p tcp –tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp –tcp-flags ALL FIN,URG,PSH -j DROP
iptables -A INPUT -p tcp –tcp-flags SYN,RST SYN,RST -j DROP
iptables -A INPUT -p tcp –tcp-flags SYN,FIN SYN,FIN -j DROP
iptables -A INPUT -p tcp –tcp-flags ALL FIN -j DROP

C) Antifragmentos: iptables -A INPUT -f -j DROP

D) Descartar paquetes nulos: iptables -A INPUT -p tcp –tcp-flags ALL NONE -j DROP

No he trabajado con netcat, así que este espectro de reglas sólo te pueden servir contra procesos de escaneo o gathering de nmap o aplicaciones que utilicen dichos métodos de detección de servicios. En caso de uso de otras herramientas, es posible que a pesar de tener estos paquetes, puedan existir maneras de conseguir saber si determinado puerto está abierto, filtrado o cerrado con herramientas como netcat.

Las referencias de estas reglas, muchas las podréis encontrar
http://volc-hara.blogspot.com.es/2008/03/iptables-anti-scan-tricks.html
http://www.techrepublic.com/blog/10things/10-iptables-rules-to-help-secure-your-linux-box/539
http://petermolnar.eu/linux-tech-coding/hardening-iptables-config-with-the-goodie-of-limit-rates/
http://support.novell.com/techcenter/articles/nc2001_03.html

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