Tutoriales y Manuales
Entradas Mensuales
-
►
2024
(Total:
1019
)
- ► septiembre (Total: 50 )
-
►
2023
(Total:
710
)
- ► septiembre (Total: 65 )
-
▼
2022
(Total:
967
)
-
▼
septiembre
(Total:
72
)
- Disponible Parrot 5.1 con Linux 5.18 y AnonSurf 4.0
- Guía de de compra cable HDMI
- Vulnerabilidades de alta gravedad en servidor nomb...
- Actualización de seguridad crítica para WhatsApp e...
- Roban 160 millones de dólares de la agencia de cri...
- La policía de Londres detiene a Arion, joven autis...
- Rusia amenaza con ciberataques a infraestructuras ...
- Proton Drive, la nueva nube privada de Proton
- Grupo Guacamaya filtra 366 GB de correos electróni...
- Google Fotos estropea fotos antiguas almacenadas e...
- Putin otorga la ciudadanía rusa a Edward Snowden
- Rusia cambia Windows por Linux en todas las admini...
- "Empleado" enfadado filtra el cifrador del ransomw...
- Hackean el sistema de soporte al cliente de empres...
- Policía Nacional España usará el software israelí ...
- Estudio demuestra que el botón 'No me gusta' de Yo...
- nVidia presenta oficialmente las nuevas gráficas G...
- Multa de 35M$ para Morgan Stanley por subastar dis...
- Una pareja de Vietnam acabó hackeando una de las m...
- Alertan de nuevos ataques PsExec usando SMB en el ...
- Navegadores Chrome y Edge envían a la nube lo que ...
- La empresa de tecnología financiera Revolut tambié...
- Hackean RockStar y roban el código fuente de GTA V...
- Grave vulnerabilidad en el complemento premium WPG...
- Ladybird, un nuevo navegador web de código abierto...
- Adobe compra la empresa de software de diseño Figm...
- Mozilla, DuckDuckGo, Proton o Brave respaldan AICO...
- Adiós al minado de Ethereum con GPU's de tarjetas ...
- DDoS: Mitigando denegación de servicio con IPtables
- HP pagará hasta 96€ si tienes una de estas impreso...
- Uber es hackeada por un joven de 18 años por diver...
- La Policía Española desarticula una banda de phish...
- Se confirma que los SSD ya son más fiables que los...
- Ataques de ransomware utilizan como vector de ataq...
- Grupos de ransomware de Irán utilizan el cifrado B...
- Europa confirma la multa histórica a Google de 4.1...
- Diferentes técnicas de cifrado de archivos utiliza...
- Alerta de ataques Phishing contra cuentas Steam us...
- Utilizan una Raspberry Pi 4 para detectar la activ...
- Siguen aprovechando el permiso de accesibilidad pa...
- Apple publica de nuevo actualizaciones de emergenc...
- Un malware para Linux secuestra dispositivos IoT p...
- nmap, el escáner de puertos más popular, cumple 25...
- Comprometidos 200 mil usuarios de TheNorthFace que...
- El jefe de una empresa china de gaming es un robot...
- Albania expulsa a diplomáticos iraníes tras el cib...
- Venden documentos clasificados de la OTAN robados ...
- Estados Unidos incauta 30 millones dólares en crip...
- El sistema de vigilancia a gran escala de la UE po...
- Routers D-Link afectados por una variante de la Mi...
- Nueva nomenclatura de AMD para portátiles con CPU ...
- Grave vulnerabilidad en varios modelos NAS de Zyxel
- Apple presenta oficialmente el iPhone 14 y los nue...
- La cadena de hoteles InterContinental víctima de u...
- Ucranianos usaron perfiles falsos de mujeres para ...
- Los videojuegos más utilizados para infectar con m...
- Detectada nueva campaña de ransomware DeadBolt en ...
- El Canon Digital aumentará el precio de los teléfo...
- Actualizaciones de emergencia de Apple para modelo...
- Navegadores para Android que respetan la privacidad
- Multa de 405 millones € a Instagram por violación ...
- Unión Europea quiere 5 años de actualizaciones And...
- Hackean TikTok - WeChat y roban los datos de más d...
- Samsung fue hackeada en julio y robaron datos pers...
- Un comando equivocado liquidó una compañía de crip...
- Anonymous provoca un atasco masivo de taxis en Moscú
- Chile víctima de un ataque de un grupo de ransomware
- USB 4 promete velocidades de hasta 80 Gbps
- Se compra un casa por un error de Crypto.com: le d...
- La Policía de Chicago alerta por robo de coches Hy...
- Google pagará dinero por encontrar vulnerabilidade...
- Japón se prepara para abandonar el uso del disquet...
-
▼
septiembre
(Total:
72
)
-
►
2021
(Total:
730
)
- ► septiembre (Total: 56 )
-
►
2020
(Total:
212
)
- ► septiembre (Total: 21 )
-
►
2019
(Total:
102
)
- ► septiembre (Total: 14 )
-
►
2017
(Total:
231
)
- ► septiembre (Total: 16 )
-
►
2016
(Total:
266
)
- ► septiembre (Total: 38 )
-
►
2015
(Total:
445
)
- ► septiembre (Total: 47 )
-
►
2014
(Total:
185
)
- ► septiembre (Total: 18 )
-
►
2013
(Total:
100
)
- ► septiembre (Total: 3 )
-
►
2011
(Total:
7
)
- ► septiembre (Total: 1 )
Blogroll
Etiquetas
Entradas populares
-
Después de ver qué es una vCPU y la diferencia entre núcleos (cores) e hilos en los procesadores, pasamos a explicar toda la nomenclatura d...
-
En el panorama en constante evolución de la seguridad de redes, OpnSense se ha convertido en una formidable solución de firewall. Nacido de...
-
Pese a que Gemini ofrece multitudes de opciones, recientemente, se ha dado a conocer una situación fuera de lo común. Hace unos días, un es...
DDoS: Mitigando denegación de servicio con IPtables
En esta ocasión veremos algunos consejos y técnicas para mitigar o reducir el efecto de los ataques de denegación de servicio distribuidos, o DDoS por sus siglas en inglés, utilizando el firewall iptables en un sistema GNU/Linux.
Este artículo explica algunos métodos que pueden llegar a ser útiles para protección de ataques DDoS en un servidor/firewall, pero cabe aclarar que los ataques de denegación de servicio, y más los grandes, resultan casi imposible de mitigar, incluso para firewalls por hardware especializados. No obstante, con iptables se pueden hacer muchas cosas útiles
En la guía se analizarán algunos puntos importantes:
- Utilizar las cadenas y tablas de iptables para bloquear ataques DDoS.
- Tunear algunas configuraciones del kernel para mitigar los ataques DDoS.
- Usar iptables para bloquear los ataques DDoS basados en TCP.
- Usar iptables para bloquear los floods o inundación de paquetes SYN mediante SYNPROXY.
Sin entrar demasiado en detalles, iptables representa la utilidad de nivel de usuario para administrar y configurar el filtrado de paquetes del kernel Linux, y representa la herramienta por defecto de prácticamente cualquier distribución de este sistema operativo.
Si bien generalmente se usa para bloquear puertos o direcciones IP, también brinda una gran cantidad de opciones de configuración que permiten, entre otras cosas, bloquear, o al menos limitar los efectos de ataques de denegación de servicio y denegación de servicio distribuido.
Configuración del kernel
Antes que nada es importante traer algunas configuraciones del kernel Linux que permiten mejorar el rendimiento y mitigar mejor los ataques de DDoS.
Casi todas las distros actuales, o mejor, desde el kernel Linux v3.12, iptables incorpora un módulo denominado SYNPROXY. SYNPROXY es un módulo de netfilter, en el núcleo Linux, y está optimizado para gestionar millones de paquetes por segundo utilizando toda la CPU disponible sin tener problemas de bloqueos de concurrencia entre conexiones.
Volviendo al objetivo del apartado, configuraciones del núcleo, aquí pondré algunas interesantes (fuente)
kernel.printk = 4 4 1 7
kernel.panic = 10
kernel.sysrq = 0
kernel.shmmax = 4294967296
kernel.shmall = 4194304
kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
vm.swappiness = 20
vm.dirty_ratio = 80
vm.dirty_background_ratio = 5
fs.file-max = 2097152
net.core.netdev_max_backlog = 262144
net.core.rmem_default = 31457280
net.core.rmem_max = 67108864
net.core.wmem_default = 31457280
net.core.wmem_max = 67108864
net.core.somaxconn = 65535
net.core.optmem_max = 25165824
net.ipv4.neigh.default.gc_thresh1 = 4096
net.ipv4.neigh.default.gc_thresh2 = 8192
net.ipv4.neigh.default.gc_thresh3 = 16384
net.ipv4.neigh.default.gc_interval = 5
net.ipv4.neigh.default.gc_stale_time = 120
net.netfilter.nf_conntrack_max = 10000000
net.netfilter.nf_conntrack_tcp_loose = 0
net.netfilter.nf_conntrack_tcp_timeout_established = 1800
net.netfilter.nf_conntrack_tcp_timeout_close = 10
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 10
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 20
net.netfilter.nf_conntrack_tcp_timeout_last_ack = 20
net.netfilter.nf_conntrack_tcp_timeout_syn_recv = 20
net.netfilter.nf_conntrack_tcp_timeout_syn_sent = 20
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 10
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.ip_no_pmtu_disc = 1
net.ipv4.route.flush = 1
net.ipv4.route.max_size = 8048576
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.tcp_congestion_control = htcp
net.ipv4.tcp_mem = 65536 131072 262144
net.ipv4.udp_mem = 65536 131072 262144
net.ipv4.tcp_rmem = 4096 87380 33554432
net.ipv4.udp_rmem_min = 16384
net.ipv4.tcp_wmem = 4096 87380 33554432
net.ipv4.udp_wmem_min = 16384
net.ipv4.tcp_max_tw_buckets = 1440000
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_orphans = 400000
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rfc1337 = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_sack = 1
net.ipv4.tcp_fack = 1
net.ipv4.tcp_ecn = 2
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 60
net.ipv4.tcp_keepalive_probes = 10
net.ipv4.tcp_no_metrics_save = 1
net.ipv4.ip_forward = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.all.rp_filter = 1
Mitigando ataques de DDoS con IPtables
Ahora veremos algunos ejemplos de reglas que nos pueden servir para bloquear o mitigar muchos de los ataques de DDoS.
Cabe aclarar que los tipos de ataques de DDoS son muchos, e intentar bloquearlos a todos ellos resulta casi imposible. Afortunadamente disponemos del módulo del kernel denominado nf_conntrack, que puede ayudar a mitigar muchos ataques basados en TCP que no usan paquetes con flag SYN.
Esto incluye los ataques de ACK o SYN-ACK y ataques basados en los flags falsos o erróneos de TCP.
Bloquear paquetes inválidos
Lo primero es bloquear todos los paquetes inválidos, es decir, aquellos que no sean paquetes SYN (de establecimiento de conexión) y que tampoco pertenezcan a ninguna conexión activa:
iptables -t mangle -A PREROUTING -m conntrack --ctstate INVALID -j DROP
Bloquear paquetes nuevos que no son SYN
Ahora a bloquear todos los paquetes que no pertenecen a ninguna conexión establecida, y además no usan el flag SYN. Similar a la anterior, pero captura algunos paquetes que no filtra la regla anterior:
iptables -t mangle -A PREROUTING -p tcp ! --syn -m conntrack --ctstate NEW -j DROP
Bloquear valores anoramales de MSS
Vamos a bloquear ahora paquetes nuevos, es decir, aquellos que contengan el flag SYN activado, pero que además tengan un valor de MSS (Maximum Segment Size) fuera de lo normal, ya que los paquetes SYN suelen ser pequeños, y paquetes SYN grandes podrían indicar inundación de SYN (SYN flood):
iptables -t mangle -A PREROUTING -p tcp -m conntrack --ctstate NEW -m tcpmss ! --mss 536:65535 -j DROP
Bloquear paquetes con flags erróneos
Ahora algunas reglas para filtrar paquetes con flags erróneos, aquellos flags o combinaciones de los mismos que un paquete normal no utilizaría.
Bloquear paquetes de subredes privadas
Esto es importante para evitar el spoofing o inundación de tráfico por parte de atacantes. Estas reglas bloquean tráfico que proviene de direcciones IP’s privadas, ya que usualmente en la interfaz WAN no se recibe tráfico privado, sino aquel proveniente de direcciones IP’s públicas.
iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,ACK FIN -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,URG URG -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,FIN FIN -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,PSH PSH -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL ALL -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL NONE -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL SYN,FIN,PSH,URG -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
Se asume que el equipo utiliza como dirección de loopback una del rango 127.0.0.0/8.
Bloquear tráfico ICMP
Bloqueamos todo el tráfico ICMP entrante. Si bien algunos tipos de mensajes ICMP pueden llegar a ser útiles en caso de congestión de red o fragmentación, en general no suelen haber inconvenientes con bloquear todo el tráfico ICMP entrante con una regla similar a esta:
iptables -t mangle -A PREROUTING -p icmp -j DROP
Esta regla, además de bloquear el ping, también bloquea los paquetes de inundación icmp, icmp de fragmentación, y por supuesto, el ping flood, o «Ping de la muerte» (Ping of Death).
Bloquear tráfico por cantidad de conexiones
Otra regla interesante es la que permite bloquear a equipos que superan un umbral determinado de cantidad de conexiones establecidas. Por ejemplo, si un host en Internet establece 85 conexiones contra el puerto 80 de nuestro servidor web, seguramente sea un tipo de ataque, y podemos bloquearlo con algo como esto:
iptables -A INPUT -p tcp -m connlimit --connlimit-above 85 -j REJECT --reject-with tcp-reset
Bloquear tráfico por cantidad de conexiones por unidad de tiempo
Otro punto importante es el de limitar la cantidad de conexiones por unidad de tiempo, y por ráfaga, desde una misma dirección IP. Esto es interesante ya que muchas veces un atacante intentará inundar de tráfico nuestros servidores intentando establecer muchas conexiones. Así, por ejemplo, si quisiéramos limitar a que una máquina remota pueda establecer como máximo 50 conexiones por segundo, con una ráfaga de 18 conexiones entre segundos, podríamos crear dos reglas en este orden:
iptables -A INPUT -p tcp -m conntrack --ctstate NEW -m limit --limit 50/s --limit-burst 18 -j ACCEPT
iptables -A INPUT -p tcp -m conntrack --ctstate NEW -j DROP
Bloquear paquetes fragmentados
Adicionalmente, una buena técnica es la de bloquear también los paquetes fragmentados. Normalmente no es necesario, pero a veces la inundación de paquetes UDP fragmentados pueden consumir mucho ancho de banda y producir una denegación de servicio. Para mitigar esto podemos descartar todo el tráfico fragmentado con algo así:
iptables -t mangle -A PREROUTING -f -j DROP
Bloquear tráfico TCP RST
Por otro lado, una buena idea puede ser limitar también los floods de paquetes taggeados con el flag de reset RST en TCP, aunque acá podría necesitarse un análisis más profundo:
iptables -A INPUT -p tcp --tcp-flags RST RST -m limit --limit 4/s --limit-burst 4 -j ACCEPT
iptables -A INPUT -p tcp --tcp-flags RST RST -j DROP
Usando SYNPROXY para mitigar los SYN Floods
Como se mencionó arriba, SYNPROXY es un nuevo target de iptables desde la v3.12 del kernel Linux (iptables v1.4.21) en la mayoría de las distros.
Su objetivo principal es el de verificar si el equipo remoto terminó de establecer la conexión (handshake) de TCP luego de enviar el primer segmento SYN. Si luego de este primer segmento no hubo ningún otro envío, SYNPROXY descarta el mensaje.
Las reglas anteriores ya bloquean la mayoría de los ataques de DDoS basados en mensajes TCP, pero la inundación SYN es un poco más complicada de mitigar, y aquí es que entra en acción SYNPROXY.
Siempre, esto como aclaración, el rendimiento de iptables será mayor si pueden encontrarse reglas que permitan, mediante una selección de patrones, bloquear tráfico específico, sin embargo a veces esto es difícil de lograr sin una herramienta como SYNPROXY.
Veamos un ejemplo simple brevemente explicado… SYNPROXY da para un artículo entero (o más :P):
iptables -t raw -A PREROUTING -p tcp -m tcp --syn -j CT --notrack
iptables -A INPUT -p tcp -m tcp -m conntrack --ctstate INVALID,UNTRACKED -j SYNPROXY --sack-perm --timestamp --wscale 7 --mss 1460
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
La primer regla permite configurar algunos parámetros asociados a conexiones. En este caso, desactiva el tracking de conexiones para los paquetes SYN que llegan al firewall. El target CT únicamente está disponible en la tabla raw.
La segunda regla matchea con todo el tráfico tcp cuyo estado de conexión es INVALID o UNTRACKED (como los paquetes SYN que pasan por la regla 1). Esta regla ejecuta el target SYNPROXY y le manda a SYNPROXY el paquete SYN del cliente. SYNPROXY intenta establecer el handshake respondiendo con el SYN+ACK al cliente. El cliente «legal» responderá con su ACK. Si esto ocurre, es decir, SYNPROXY verifica que el cliente intentó establecer una conexión legal, SYNPROXY establece el handshake contra el servidor real, y una vez resuelto, deja al cliente interactuando contra el server.
Estas reglas sirven para todos los puertos, pero pueden restringirse a puertos específicos con los parámetros de selección que ya conocemos.
En el caso de que SYNPROXY no pueda establecer la conexión, descarta el tráfico del cliente y el servidor real nunca recibe ni siquiera el mensaje SYN (espero se entienda eso… sí, ya estoy pensando en un nuevo artículo de SYNPROXY detallado :)).
Conclusiones
Para terminar, un par de reglas que pueden servir para mitigar los escaneos de puertos, y con ello, mejorar la seguridad en los servidores, aunque no tenga que ver específicamente con DDoS, quizás si un atacante no ve (o le resulta difícil ver) los puertos abiertos, va a tener que sortear un escollo más a la hora de establecer un ataque de DDoS.
iptables -N port-scan
iptables -A port-scan -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s --limit-burst 3 -j RETURN
iptables -A port-scan -j DROP
0 comentarios :
Publicar un comentario
Los comentarios pueden ser revisados en cualquier momento por los moderadores.
Serán publicados aquellos que cumplan las siguientes condiciones:
- Comentario acorde al contenido del post.
- Prohibido mensajes de tipo SPAM.
- Evite incluir links innecesarios en su comentario.
- Contenidos ofensivos, amenazas e insultos no serán permitidos.
Debe saber que los comentarios de los lectores no reflejan necesariamente la opinión del STAFF.