Endurecimiento del núcleo de Linux a través de sysctl.conf. Protección contra ataques de inundación SYN y ajuste de TCP.
Introducción
En este tutorial, endurecerás el kernel de Linux usando sysctl.conf, protegerás tu servidor contra ataques de inundación SYN y optimizarás el comportamiento de la pila TCP. La afinación a nivel de kernel mejora la resiliencia contra ataques de denegación de servicio (DoS) basados en la red y mejora el rendimiento general de TCP. También simularás un ataque de inundación SYN en un entorno controlado y verificarás que tus mecanismos de protección funcionen correctamente.
Requisitos Previos
Público Objetivo: Administradores de sistemas intermedios
Tiempo Estimado: 45–60 minutos
Requisitos del Sistema
- Sistema Operativo: Ubuntu 24.04 LTS (probado); compatible con Debian 12/13 y otras distribuciones modernas de Linux
- Versión del Kernel: 5.x o posterior
- Mínimo 1 GB de RAM
- Privilegios de root o sudo
- Acceso a la red entre máquinas de prueba
Herramientas Requeridas
Instala las siguientes utilidades:
sudo apt update
sudo apt install -y hping3 net-tools procps iproute2
Verifica la instalación: hping3 --version
Salida esperada: información de la versión que confirma la instalación exitosa.
Realiza la simulación de inundación SYN solo en un entorno de laboratorio controlado. Nunca pruebes contra sistemas que no poseas o no tengas permiso para probar.
Paso 1: Realizar Copia de Seguridad de la Configuración Actual de sysctl
Antes de hacer cambios, crea una copia de seguridad.
sudo cp /etc/sysctl.conf /etc/sysctl.conf.backup
Resultado: Se crea un archivo de copia de seguridad /etc/sysctl.conf.backup.
Paso 2: Configurar Parámetros del Kernel para Protección contra Inundación SYN
Abre el archivo de configuración:
sudo nano /etc/sysctl.conf
Agrega o modifica los siguientes parámetros.
Habilitar Cookies SYN
net.ipv4.tcp_syncookies = 1
Propósito: Habilita las cookies SYN cuando la cola de espera SYN se desborda.
Valores:
- 0 – Deshabilitado
- 1 – Habilitado cuando ocurre desbordamiento de la cola de espera SYN (recomendado)
- 2 – Siempre habilitado (raramente usado)
Por qué: Las cookies SYN previenen el agotamiento de memoria al evitar la asignación de recursos hasta la finalización del handshake.
En distribuciones modernas esta opción está habilitada por defecto. Puedes verificarlo con el siguiente comando: sysctl -a | grep net.ipv4.tcp_syncookies
Aumentar la Cola de Espera SYN
net.ipv4.tcp_max_syn_backlog = 4096
Propósito: Número máximo de solicitudes de conexión en cola esperando reconocimiento.
Por qué: Una cola de espera más grande permite más conexiones a medio abrir antes de que el kernel comience a descartarlas.
Reducir Retransmisiones SYN-ACK
net.ipv4.tcp_synack_retries = 3
Propósito: Número de retransmisiones para paquetes SYN-ACK.
Por qué: Reducir esto disminuye el tiempo de espera en conexiones a medio abrir maliciosas.
Habilitar Reutilización de TCP Time-Wait
net.ipv4.tcp_tw_reuse = 1
Propósito: Permite la reutilización de sockets TIME-WAIT para nuevas conexiones salientes.
Valores:
- 0 – Deshabilitado
- 1 – Habilitado
Por qué: Reduce el agotamiento de sockets bajo carga pesada.
Reducir el Tiempo de Espera FIN
net.ipv4.tcp_fin_timeout = 15
Propósito: Tiempo que un socket permanece en estado FIN-WAIT-2.
Por qué: Reduce el uso de recursos de conexiones obsoletas.
Habilitar Filtrado de Ruta Inversa
net.ipv4.conf.all.rp_filter = 1
Propósito: Valida direcciones IP de origen contra la tabla de enrutamiento.
Valores:
- 0 – Deshabilitado
- 1 – Modo estricto
- 2 – Modo laxo
Por qué: Ayuda a mitigar ataques de suplantación de IP.
Aumentar el Máximo de Archivos Abiertos
fs.file-max = 2097152
Propósito: Número máximo de manejadores de archivos en todo el sistema.
Por qué: Previene el agotamiento de descriptores de archivos durante una carga alta de conexiones.
Paso 3: Aplicar Cambios de sysctl
Aplica los cambios sin reiniciar:
sudo sysctl -p
Salida esperada: cada parámetro mostrado con su nuevo valor.
Verifica un parámetro específico: sysctl net.ipv4.tcp_syncookies
Salida esperada: net.ipv4.tcp_syncookies = 1
Resultado: Los parámetros del kernel están activos.
Paso 4: Simular un Ataque de Inundación SYN
Importante: Realiza esto solo en un entorno de laboratorio.
Desde una máquina de prueba separada, ejecuta:
sudo hping3 -S --flood -V <TU_IP_DEL_SERVIDOR> -p 80
Explicación:
-Senvía paquetes SYN--floodenvía paquetes lo más rápido posible-p 80apunta al puerto HTTP
Resultado: Gran volumen de paquetes SYN enviados al servidor.
Paso 5: Monitorear el Servidor Durante el Ataque
En el servidor objetivo, monitorea las conexiones:
netstat -ant | grep SYN_RECV | wc -l
Resultado: Muestra el número de conexiones a medio abrir.
Verifica el contador de cookies SYN:
nstat -az | grep Syncookies
Deberías observar contadores crecientes como TcpExtSyncookiesSent. Esto confirma que se están utilizando cookies SYN.
Paso 6: Comparar Comportamiento Antes y Después del Endurecimiento
Si pruebas sin endurecimiento:
- El conteo de SYN_RECV crece rápidamente
- El servidor puede volverse no responsivo
- La cola de conexiones se desborda
Después del endurecimiento:
- Las cookies SYN se activan
- Menos conexiones caídas
- El servidor permanece responsivo
Instala un servidor web en el servidor objetivo:
sudo apt install nginx
Para probar la capacidad de respuesta:
curl http://localhost
Resultado: El servidor responde normalmente incluso durante el ataque simulado.
Paso 7: Afinación del Rendimiento TCP (Optimización Avanzada Opcional)
Agrega parámetros de afinación adicionales al archivo de configuración de sysctl. Ejecuta nano /etc/sysctl.conf y agrega:
net.core.somaxconn = 8192
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_max_tw_buckets = 2000000
Explicación:
net.core.somaxconn– longitud máxima de la cola de escucha para aplicaciones.net.core.netdev_max_backlog– máximo de paquetes en cola en el lado de entrada antes de ser procesados.net.ipv4.tcp_max_tw_buckets– máximo de sockets TIME-WAIT. Esta opción es relevante para servidores con alta carga y suficiente RAM.
Estos mejoran el rendimiento bajo tráfico pesado.
Aplica los cambios:
sudo sysctl -p
Lista de Verificación de Verificación
sysctl -pse ejecuta sin errorestcp_syncookieses igual a 1- El contador
SyncookiesSentaumenta durante el ataque - El servidor permanece responsivo
- No hay advertencias del kernel en los registros:
dmesg | grep -i syn
Revertir Cambios
Restaura la configuración original:
sudo cp /etc/sysctl.conf.backup /etc/sysctl.conf
sudo sysctl -p
Resultado: El sistema vuelve a los parámetros originales del kernel.
Opcionalmente elimina las herramientas de prueba:
sudo apt remove hping3 -y
Solución de Problemas
Syncookies No Aumentan
Verifica: sysctl net.ipv4.tcp_syncookies
Si el valor es 0, vuelve a aplicar la configuración.
El Servidor Aún Deja Caer Conexiones
Aumenta la cola de espera: net.ipv4.tcp_max_syn_backlog = 8192
Luego aplica los cambios:
sudo sysctl -p
Conclusión
Endureciste el kernel de Linux usando sysctl.conf, habilitaste mecanismos de protección contra inundaciones SYN, optimizaste el comportamiento de la pila TCP y verificaste las protecciones a través de una simulación de ataque controlada. Estos cambios mejoran la resiliencia contra ataques de inundación SYN y aumentan la estabilidad general de la red.
Próximos Pasos
- Combina con limitación de tasa de firewall (iptables o nftables)
- Implementa límites de seguimiento de conexiones
- Despliega sistemas de detección de intrusos (IDS)
- Monitorea métricas usando Prometheus y Grafana