Mejorando la seguridad y rendimiento del Kernel en Rocky Linux 9

Actualizada:

Aviso desde el principio. Es un artículo bastante técnico. Te pongo en situación. Montas un nuevo servidor en Rocky Linux o Alma Linux porque te has tenido que cambiar desde CentOS. Después de montar todo el servidor para tus páginas web, tienes que configurar correctamente los parámetros del archivo /etc/sysctl.conf del Kernel de Linux (Rocky Linux 9, en concreto) para mejorar su seguridad y rendimiento.

Y te surge la duda: ¿Qué parámetros hay que cambiar? ¿Cuáles son imprescindibles? ¿Volverá a arrancar mi servidor con los cambios? Te cuento mi experiencia. Estos parámetros del Kernel van a tener una influencia enorme en cómo se comporta tu sistema, en cómo interactúa con el hardware y con el software.

¡Ojo! Ten en cuenta que estos cambios pueden ser buenos para mí, pero no para ti. Vete cambiándolos poco a poco, comprueba el rendimiento de tu sistema. Consulta tus estadísticas y vuelve a tunearlos. Haz un backup de tu archivo y de tu servidor.

Para que te pongas en situación. He tuneado (más bien sigo haciéndolo) estos parámetros del Kernel para un servidor con Rocky Linux 9.4, 16 GB de RAM y 6 núcleos en el procesador. ¿Kernel? Linux 5.14.0-427.16.1. El servidor tiene 8 TB de transferencia y una entrada y salida de red de 40/6 Gbps. Discos SSD. En el servidor hay un sistema LAMP con Opcache y Memcached instalados para que funcionen varias instalaciones de WordPress. Te cuento todo esto, porque es importante saber para qué se están cambiando los parámetros de rendimiento del Kernel. El tunning del Kernel es un proceso de ensayo y error que tiene que ir cambiando con el tiempo.

¿Comandos útiles y terminología que deberías de conocer?

sysctl -a
Ajustes Kernel Rocky Linux con sysctl - a

Este comando muestra todos los parámetros disponibles en el sistema. Es decir, tu punto de partida. Te van a salir muchos, divididos principalmente en:

  • Memoria (vm): Configuraciones relacionadas con la gestión de la memoria virtual, como vm.swappiness, vm.dirty_ratio, etc.
  • Red (net): Parámetros que afectan el comportamiento de la red, como net.ipv4.tcp_syncookies, net.ipv4.ip_forward, etc.
  • Seguridad: Configuraciones de seguridad, como kernel.dmesg_restrict, fs.protected_symlinks, etc.
  • Sistema de archivos (fs): Parámetros relacionados con la gestión del sistema de archivos, como fs.file-max, fs.inotify.max_user_watches, etc.
/etc/sysctl.conf

El archivo donde vas a tener que escribir los valores de estos parámetros si quieres que se queden de manera persistente entre reinicios del servidor. Accedes al archivo mediante vi y lo editas.

¿Solo quieres cambiar un parámetro de manera temporal?

sudo sysctl -w vm.swappiness=10

Esto está bien para hacer pruebas si no quieres arriesgar mucho. Pero en general, es mejor dejarlo todo bien configurado en el archivo sysctl.conf.

sysctl -p

Después de cambiar los ajustes del Kernel, tienes que ejecutar comando, que lee y aplica los parámetros de configuración del archivo /etc/sysctl.conf a tu sistema. No hace falta reiniciar el servidor para que veas si funcionan o no. Al ejecutarlo, puedes ver si hay algún error o no, por ejemplo, si hay algún ajuste que tu versión del Kernel no soporta.

Ejemplo de /etc/sysctl.conf para mejorar el rendimiento y la seguridad de un servidor Linux

Te lo vuelvo a recordar. Estos parámetros pueden funcionar en mi sistema pero no en el tuyo. Tienes que ir probando tú mismo y leer mucho para ajustar los que más te interesen. Es posible que en unos meses yo mismo los haya cambiado por otros o haya añadido nuevos valores. Ya voy por la sexta versión de este archivo.

¡Ojo! El proceso es el siguiente: vas cambiando o añadiendo pocos parámetros cada vez. Revisas estadísticas del servidor. Vuelves a cambiarlos. El proceso te puede llevar desde semanas a meses. Lees toda la documentación posible y haces backups de tu sistema. Hazlo todo con cuidado.

¡Ojo! Antes de comenzar a cambiar cosas, ejecuta en la Terminal sysctl -a para saber de qué valores partes y tenerlo en cuenta para tus cambios.

Vas a la terminal de tu servidor mediante SSH y pones lo siguiente:

sudo vi /etc/sysctl.conf
Configuracion de sysctl.conf para mejorar rendimiento y seguridad Kernel.

Vas cambiando los valores poco a poco y haciendo pruebas de rendimiento.

# ------------------------------
# Sección: Configuración de printk
# ------------------------------
kernel.printk = 3 4 1 3

# ------------------------------
# Sección: Seguridad y Optimización de Red
# ------------------------------
net.ipv4.ip_forward = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0

# ------------------------------
# Sección: Protección contra Ataques
# ------------------------------
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_synack_retries = 3

# ------------------------------
# Sección: Optimización de la Memoria
# ------------------------------
vm.swappiness = 10
fs.file-max = 1000000
kernel.pid_max = 65536
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5
vm.dirty_expire_centisecs = 4000
vm.dirty_writeback_centisecs = 100
vm.overcommit_memory = 1
vm.overcommit_ratio = 50
vm.vfs_cache_pressure = 50
vm.min_free_kbytes = 491520

# ------------------------------
# Sección: Ajustes Generales de Red
# ------------------------------
net.core.somaxconn = 4096
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_timestamps = 1
net.core.netdev_max_backlog = 100000
net.core.optmem_max = 25165824

# ------------------------------
# Sección: Ajustes de Memoria TCP/UDP
# ------------------------------
net.ipv4.tcp_mem = 786432 1048576 26777216
net.ipv4.udp_mem = 65536 131072 262144
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.udp_rmem_min = 16384
net.ipv4.tcp_wmem = 4096 87380 67108864
net.ipv4.udp_wmem_min = 16384

# ------------------------------
# Sección: Optimización de Conexiones TCP
# ------------------------------
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_keepalive_time = 900
net.ipv4.tcp_keepalive_intvl = 60
net.ipv4.tcp_keepalive_probes = 5

Cuando terminas de editar, ejecutas el siguiente comando para aplicar los cambios de manera inmediata:

sudo sysctl -p

Compruebas si hay errores y vuelves a corregir. Te aparecerán en pantalla. ¿Hay más cosas que se pueden ajustar? Claro. Pero ya resulta complicado solo con estas. Vamos poco a poco, ¿no?

Uno de los valores que se suelen modificar de manera más sencilla es vm.swappiness, que básicamente controla cuando se mandan procesos a la memoria SWAP. Si prefieres usar memoria RAM, lo mejor es que este valor este bajo. Pero si andas escaso de memoria RAM, utilizar la memoria SWAP te puede salvar la vida, sobre todo si tu servidor tiene un buen disco SSD. Por ejemplo, se recomienda un valor bajo para cargas de trabajo con bases de datos:

  • vm.swappiness = 0 # El intercambio está desactivado.
  • vm.swappiness = 1 # Cantidad mínima de intercambio sin desactivarlo por completo.
  • vm.swappiness = 10 # Este valor se recomienda para mejorar el rendimiento cuando existe suficiente memoria.
  • vm.swappiness = 60 # El valor predeterminado.
  • vm.swappiness = 100 # Se incrementa de forma agresiva.

Dicho esto, antes de meterte a tunear este parámetro, a lo mejor debes tunear el comportamiento de MariaDB (en my.cnf), Apache (httpd.conf) y PHP-FPM (en mi caso en php-fpm.conf). También deberías de ajustar los parámetros de Opcache y Memcached (archivos .ini).

Te puede interesar: Cómo configurar la memoria SWAP en un servidor Rocky Linux 9 o Cómo configurar diferentes versiones de PHP en Rocky Linux.

Comprobando como está recibiendo tu servidor los cambios en sysctl

Ahora puedes dejar estos cambios durante unas cuantas horas o incluso días y comprobar que tal le han sentado a tu servidor. ¿Cómo puedes hacer esto? Pues verificando el uso de CPU, memoria RAM, conexiones TCP y UDP de entrada y salida y demás parámetros del servidor.

Puedes hacerlo con los comandos adecuados de Linux. En mi caso, tengo este script para que guarde el resultado de todos estos comandos en un archivo ejecutable y así ir revisando el rendimiento del servidor.

Comandos para hacer un seguimiento del rendimiento de tu servidor Linux.

Creas un archivo:

sudo vi system_stats.sh 

Pones todo lo siguiente:

#!/bin/bash

# Nombre del archivo de salida
output_file="system_stats_$(date +'%Y%m%d_%H%M%S').txt"

# Función para ejecutar y guardar la salida de un comando
run_and_save() {
    local cmd=$1
    echo "Running $cmd..." | tee -a "$output_file"
    echo "===== $cmd =====" >> "$output_file"
    if eval "$cmd" >> "$output_file" 2>&1; then
        echo "El comando '$cmd' se ha ejecutado con exito." >> "$output_file"
    else
        echo "El comando '$cmd' ha fallado." >> "$output_file"
    fi
    echo -e "\n" >> "$output_file"
}

# Lista de comandos a ejecutar
commands=(
    "top -b -n 1"
    "free -h -t"
    "mpstat -P ALL 1 5"
    "sar -u 1 5"
    "vmstat 1 5"
    "iostat -xz 1 5"
    "netstat -s"
    "df -h"
    "df -i"
    "df -hT"
    "ss -s"
    "ifconfig"
    "ip addr show"
    "ss -tuln"
    "ip -s link"
    "ps aux --sort=-%mem | head -n 20"
    "ps aux --sort=-%cpu | head -n 20"
    "systemctl list-units --type=service --state=running"
    "swapon --show"
	)

# Ejecución de los comandos
for cmd in "${commands[@]}"; do
    run_and_save "$cmd"
done

echo "Todos los comandos ejecutados. Salida guardada en $output_file."

Le das permisos de ejecución:

sudo chmod +x system_stats.sh 

Ejecutas el archivo:

./system_stats.sh 

En menos de un minuto te ha guardado todas las estadísticas del sistema que tienes que ir comprobando para ver el rendimiento de tu servidor. Solo tienes que visualizar el archivo con fecha que ha sido guardado (por ejemplo):

cat system_stats_20240520_111940.txt

Las revisas y ajustas los parámetros de sysctl.conf. Vuelves a dejar el sistema funcionando unos días. Repites. Ajustas. Repites. Ajustas.

  • ¡Truco! ¿Sabes quién te puede ayudar mucho a ajustar tus parámetros en función de estas estadísticas? Nuestra inteligencia artificial favorita: ChatGPT.

Otro paso importante a verificar es si el disco de tu servidor es SSD. Puedes hacerlo con este comando, que crea un archivo de prueba de aproximadamente 1 GB en /tmp y mide el rendimiento de escritura del disco:

dd if=/dev/zero of=/tmp/test bs=64k count=16k conv=fdatasync

En mi caso he obtenido esta salida:

16384+0 records in
16384+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 1.21714 s, 882 MB/s

Lo que indica que tengo un disco SSD, algo bueno para mejorar el rendimiento de la memoria SWAP y para tener en cuenta si aplico o no determinados cambios en sysctl.

¿Más cosas que puedes hacer para ver si tienes problemas en el servidor?

Compruebas si han aparecido errores de memoria y se han terminado procesos (Out of Memory, OOM). Esto lo tienes registrado en los logs. En el caso de Rocky Linux podemos usar estos dos comandos:

grep -r -i "out of memory" /var/log/
grep -r -i "oom-killer" /var/log/

Si ves que han aparecido muchos errores después de tunear los parámetros de sysctl, es que no le han sentado muy bien a tu servidor y tienes que volver a cambiarlos. Si quieres puedes incorporar estos dos comandos al script anterior.

Te justifico un poco porque he hecho estos cambios

Configuración de printk

kernel.printk = 3 4 1 3

  • Descripción: Controla los niveles de mensajes del kernel que se envían a la consola.
  • Justificación: Limita la cantidad de mensajes para evitar el llenado excesivo del buffer de mensajes del kernel. Si usas una consola desde la página de proveedor de hosting, te puedes encontrar que no puedes usarla por la cantidad de mensajes que aparecen en pantalla. Tienes que ajustar a estos valores.

Seguridad y optimización de Red

net.ipv4.ip_forward = 0

  • Descripción: Desactiva el reenvío de paquetes IPv4.
  • Justificación: Mejora la seguridad evitando que el servidor actúe como un router. Tenemos un servidor ¿no?

net.ipv4.conf.all.accept_source_route = 0 y net.ipv4.conf.default.accept_source_route = 0

  • Descripción: Desactiva la aceptación de rutas fuente.
  • Justificación: Evita que los atacantes puedan definir rutas específicas para los paquetes.

net.ipv4.conf.all.accept_redirects = 0 y net.ipv4.conf.default.accept_redirects = 0

  • Descripción: Desactiva la aceptación de redirecciones ICMP.
  • Justificación: Protege contra ataques de redireccionamiento maliciosos. El Ping a tu servidor sigue funcionando, no te preocupes.

net.ipv4.conf.all.secure_redirects = 0 y net.ipv4.conf.default.secure_redirects = 0

  • Descripción: Desactiva la aceptación de redirecciones seguras.
  • Justificación: Mejora la seguridad al rechazar redirecciones no necesarias.

net.ipv4.icmp_echo_ignore_broadcasts = 1

  • Descripción: Ignora los pings de difusión.
  • Justificación: Protege contra ataques de denegación de servicio basados en ICMP. El Ping a tu servidor sigue funcionando, no te preocupes.

net.ipv4.conf.all.log_martians = 1

  • Descripción: Activa el registro de paquetes sospechosos (martians).
  • Justificación: Facilita la detección de paquetes mal formados o maliciosos. Viene bien para detectar ataques a los puertos de tu servidor en los logs del sistema.

net.ipv4.conf.all.rp_filter = 1 y net.ipv4.conf.default.rp_filter = 1

  • Descripción: Activa el filtrado de rutas inversas.
  • Justificación: Ayuda a prevenir ataques de suplantación de direcciones IP.

net.ipv4.conf.all.send_redirects = 0 y net.ipv4.conf.default.send_redirects = 0

  • Descripción: Desactiva el envío de redirecciones ICMP.
  • Justificación: Mejora la seguridad evitando la manipulación de rutas por parte del servidor.

Protección contra ataques

net.ipv4.tcp_syncookies = 1

  • Descripción: Activa las cookies SYN para proteger contra ataques SYN flood.
  • Justificación: Mitiga ataques de denegación de servicio (DoS) basados en SYN flood.

net.ipv4.tcp_synack_retries = 3

  • Descripción: Reduce el número de reintentos SYN/ACK.
  • Justificación: Libera recursos más rápidamente al reducir el tiempo de espera para confirmar conexiones.

Optimización de la memoria

vm.swappiness = 10

  • Descripción: Ajusta la propensión del kernel a usar swap.
  • Justificación: Prefiere usar más RAM antes de recurrir a swap, mejorando el rendimiento. Si ves que tus procesos acceden mucho a la memoria virtual, pon este valor a 10 o algo menos. Suele estar a 60, por lo menos en Rocky Linux y RHEL. Un valor bajo evita intercambiar procesos fuera de la memoria, lo que generalmente disminuye la latencia a costa del rendimiento de E/S.
    • Valor bajo (p.ej., 10): Menor tendencia a usar swap.
    • Valor alto (p.ej., 60): Mayor tendencia a usar swap.

fs.file-max = 1000000

  • Descripción: Establece el número máximo de descriptores de archivo que el sistema puede asignar.
  • Justificación: Aumenta la capacidad para manejar un gran número de archivos abiertos simultáneamente. Si tienes muchos WordPress instalados en el servidor te viene bien cuando tengas mucho tráfico.

kernel.pid_max = 65536

  • Descripción: Define el número máximo de PIDs (Process IDs) que se pueden asignar.
  • Justificación: Permite una mayor cantidad de procesos simultáneos. Y sigue siendo un valor alto. Comprueba los procesos que tienes en tu servidor y ajusta a tu gusto. El valor por defecto es muy elevado.

vm.dirty_ratio = 10

  • Descripción: Establece el porcentaje máximo de memoria que puede estar “sucia” antes de que se escriba en el disco.
  • Justificación: Balancea el uso de la memoria y la frecuencia de escrituras en el disco. Lo ajustas junto a vm.swappiness. El valor predeterminado es el 20 por ciento. Si tienes instalaciones de WordPress con MariaDB y PHP-FPM, una configuración de vm.dirty_ratio=10 puede ser buena, ya que WordPress genera una gran cantidad de datos modificados. Este valor puede ayudar a evitar picos de I/O repentinos y mantener un rendimiento más constante. Tienes que tener un disco SSD rápido para no crear cuellos de botella (es de lo único que te tienes que asegurar).

vm.dirty_background_ratio = 5

  • Descripción: Establece el porcentaje de memoria sucia en segundo plano antes de que el sistema empiece a escribirla en el disco.
  • Justificación: Mantiene el rendimiento del sistema al evitar que se acumule demasiada memoria sucia. Lo ajustas junto a vm.swappiness. El valor predeterminado es el 10 por ciento.

vm.dirty_expire_centisecs = 4000

  • Descripción: Determina el tiempo (en centisegundos) antes de que los datos sucios sean escritos en el disco.
  • Justificación: Controla la latencia de escritura de datos sucios. Lo ajustas junto a vm.swappiness. El valor por defecto es de 3000.

vm.dirty_writeback_centisecs = 100

  • Descripción: Intervalo de tiempo (en centisegundos) para escribir datos sucios en el disco.
  • Justificación: Asegura que los datos sucios se escriban regularmente en el disco. Lo ajustas junto a vm.swappiness. El valor por defecto es de 500.

vm.overcommit_memory = 1

  • Descripción: Configura la estrategia de sobre asignación de memoria.
  • Justificación: Permite al sistema sobre asignar memoria, útil para aplicaciones que utilizan mucha memoria virtual. El valor por defecto es 0. Cuando este parámetro se establece en 1, aumenta la posibilidad de sobrecarga de memoria, pero mejora el rendimiento de las tareas que requieren mucha memoria. Para sistemas con aplicaciones que requieren gran cantidad de memoria, mejor poner 1.

vm.overcommit_ratio = 50

  • Descripción: Establece el porcentaje de memoria adicional que el sistema puede sobre asignar.
  • Justificación: Complementa wm.overcommit_memory permitiendo una sobre asignación controlada.

vm.vfs_cache_pressure = 50

  • Descripción: Ajusta la presión del sistema para liberar cachés de sistema de archivos.
  • Justificación: Reduce la frecuencia de liberación de cachés de VFS para mejorar el rendimiento. El valor predeterminado de vfs_cache_pressure es 100. Ajustar vm.vfs_cache_pressure a 50 te puede ayudar a reducir el uso de swap al mantener más datos de caché de inodos y dentries en la memoria.

vm.min_free_kbytes = 491520

  • Descripción: Garantiza una cantidad mínima de memoria libre.
  • Justificación: Previene problemas de rendimiento al asegurar que siempre haya memoria libre disponible. Depende mucho de tu memoria RAM. Suele ponerse al 3-5 % de la misma en servidores. Vete ajustando poco a poco, porque puede hacer que aumente el uso de memoria SWAP. Tanto los valores demasiado bajos como los demasiado altos pueden ser perjudiciales para tu sistema. La he dejado en el 3 % de 16 GB (491520 kB). En Red Hat no recomiendan ponerla por encima de 5 % a riesgo de sufrir los famosos out-of-memory. Pero si lo pones muy bajo, tienes riesgo de que aparezcan OOM en el sistema (procesos que se han terminado repentinamente).

Ajustes Generales de Red

net.core.somaxconn = 4096

  • Descripción: Establece el tamaño máximo de la cola de conexiones pendientes.
  • Justificación: Aumenta la capacidad de manejo de nuevas conexiones simultáneas. Depende mucho de la cantidad de usuarios en tu servidor.
    • Servidor de baja carga: 256 – 512. Para servidores con pocas conexiones simultáneas.
    • Servidor de carga media: 1024 – 2048. Para servidores con un número moderado de conexiones simultáneas.
    • Servidor de alta carga: 4096 – 8192. Para servidores que manejan muchas conexiones simultáneas.
    • Servidor de carga muy alta o especializado: 16384 – 32768. Para servidores que manejan una cantidad extremadamente alta de conexiones, como proxies o balanceadores de carga.

net.ipv4.tcp_max_syn_backlog = 8192

  • Descripción: Define el número máximo de solicitudes de conexión entrantes sin confirmar.
  • Justificación: Permite manejar un mayor número de conexiones TCP simultáneas. Lo mismo.

net.ipv4.tcp_window_scaling = 1

  • Descripción: Habilita la escalabilidad de la ventana TCP.
  • Justificación: Mejora el rendimiento en conexiones de alta latencia.

net.ipv4.tcp_timestamps = 1

  • Descripción: Habilita las marcas de tiempo TCP.
  • Justificación: Evita problemas de rendimiento debido a la envoltura de secuencia TCP.

net.core.netdev_max_backlog = 100000

  • Descripción: Establece el tamaño máximo de la cola de paquetes de red en espera.
  • Justificación: Permite manejar picos de tráfico de red sin perder paquetes. Depende mucho de la cantidad de usuarios en tu servidor.

net.core.optmem_max = 25165824

  • Descripción: Define la cantidad máxima de memoria opcional para los sockets.
  • Justificación: Permite que los sockets utilicen más memoria si es necesario.

Ajustes de memoria TCP/UDP

net.ipv4.tcp_mem = 786432 1048576 26777216

  • Descripción: Configura el uso de memoria para TCP.
  • Justificación: Ajusta la memoria TCP para manejar una gran cantidad de conexiones y tráfico.

net.ipv4.udp_mem = 65536 131072 262144

  • Descripción: Configura el uso de memoria para UDP.
  • Justificación: Ajusta la memoria UDP para manejar un tráfico de paquetes elevado.

net.ipv4.tcp_rmem = 4096 87380 67108864

  • Descripción: Establece los tamaños de los buffers de recepción para TCP.
  • Justificación: Mejora el rendimiento en conexiones de alta latencia y ancho de banda.

net.ipv4.tcp_wmem = 4096 87380 67108864

  • Descripción: Establece los tamaños de los buffers de envío para TCP.
  • Justificación: Mejora el rendimiento en conexiones de alta latencia y ancho de banda.

net.ipv4.udp_rmem_min = 16384

  • Descripción: Define el tamaño mínimo del buffer de recepción para UDP.
  • Justificación: Asegura que las aplicaciones UDP tengan suficiente buffer para recibir datos.

net.ipv4.udp_wmem_min = 16384

  • Descripción: Define el tamaño mínimo del buffer de envío para UDP.
  • Justificación: Asegura que las aplicaciones UDP tengan suficiente buffer para enviar datos.

Optimización de Conexiones TCP

net.ipv4.tcp_fin_timeout = 30

  • Descripción: Reduce el tiempo de espera para cerrar las conexiones TCP.
  • Justificación: Libera recursos más rápidamente al reducir el tiempo de espera de las conexiones cerradas. Tampoco hay que bajarlo mucho o vas a tener problemas. Suele estar en 60.

net.ipv4.tcp_tw_reuse = 1

  • Descripción: Permite la reutilización de sockets en estado TIME-WAIT para nuevas conexiones.
  • Justificación: Mejora la reutilización de recursos de red y optimiza el manejo de conexiones. Antes la gente usaba net.ipv4.tcp_tw_recycle, pero daba muchos problemas y ha sido deprecada.

net.ipv4.tcp_keepalive_time = 900

  • Descripción: Configura el tiempo de espera antes de enviar mensajes keepalive en conexiones inactivas.
  • Justificación: Mantiene las conexiones activas verificando su estado periódicamente. Tanto este valor como los dos siguientes los tuneas juntos. Suele encontrarse entre 600 y 7200 segundos. Suele estar en 7200.

net.ipv4.tcp_keepalive_intvl = 60

  • Descripción: Establece el intervalo entre mensajes keepalive cuando no se recibe respuesta.
  • Justificación: Permite detectar más rápidamente conexiones inactivas o caídas. Suele estar entre 30 y 120 segundos. Por defecto en 75.

net.ipv4.tcp_keepalive_probes = 5

  • Descripción: Define el número de intentos de mensajes keepalive antes de cerrar la conexión.
  • Justificación: Proporciona un balance entre la detección rápida de caídas y la tolerancia a fallos transitorios. Suele estar entre 3 y 10. Por defecto en 9.

Conclusión

Ya sabes. Ensayo y error. Cada sistema es diferente, y estos parámetros del Kernel (sobre todo los de rendimiento) pueden funcionar para mí, pero no para ti. Es cuestión de ir probando. Con calma. Poco a poco. Aprendiendo en el camino.

A modo de resumen, te comento en esta tabla los valores de sysctl que más afectan en mi instalación, y que ayudan a mejorar el rendimiento de WordPress:

ParámetroDescripciónRecomendación
vm.dirty_ratioPorcentaje de memoria sucia antes de activar la escritura.10
vm.dirty_background_ratioPorcentaje de memoria sucia antes de que los procesos de escritura se activen en segundo plano.5
vm.swappinessControla la tendencia a mover procesos de RAM al swap.10
vm.vfs_cache_pressureCantidad de memoria usada para el cache de inodos y dentries.50
net.core.somaxconnNúmero máximo de conexiones pendientes.4096
net.ipv4.tcp_max_syn_backlogTamaño máximo de la cola de solicitudes de conexión entrantes.8192
net.core.netdev_max_backlogNúmero máximo de paquetes en cola en la interfaz de red antes de ser procesados.100000
net.ipv4.tcp_window_scalingPermite el escalado de ventanas TCP para mejorar el rendimiento de la red.1 (habilitado)
net.ipv4.tcp_timestampsAyuda en la recuperación rápida de la red y evita ciertos tipos de ataques.1 (habilitado)

Seguro que tienes muchas preguntas o a lo mejor me quieres dejar alguna recomendación. Vamos a comentarlo juntos. Deja un comentario y lo hablamos.

Referencias: 


Descubre más desde algoentremanos.com

Suscríbete y recibe las últimas entradas en tu correo electrónico.

Foto del autor

Ivan Benito

Apasionado de la lectura y los viajes, experto en tecnología e informática y fan de la privacidad online. Desde el año 2007 me he dedicado al SEO, a escribir y a crear páginas web con WordPress sobre todo tipo de temáticas. Si tienes alguna duda y necesitas ayuda... ¡Pregúntame!

Si tienes preguntas, quieres que hagamos una review de una app, programa o producto, simplemente mándanos un e-mail mediante nuestro formulario de contacto. Te contestaremos en el menor tiempo posible. ¡Muchas gracias y salU2! Algoentremanos realiza reviews de manera profesional y en muchas ocasiones recibimos compensación de las compañías cuyos productos revisamos. Probamos cada producto a fondo y otorgamos altas calificaciones solo a los mejores. La propiedad de Algoentremanos.com es independiente y las opiniones expresadas aquí son solo nuestras. Algunos enlaces del artículo son afiliados: pueden generar un beneficio a algoentremanos.com. Saber más.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.