4.6 Parámetros del Kernel (sysctl)
El kernel de Linux no es una caja negra inmutable: expone cientos de parámetros ajustables en tiempo real a través del pseudo-sistema de ficheros /proc/sys. sysctl es la interfaz de comandos que permite leer y modificar esos parámetros sin reiniciar el sistema.
1. El universo de /proc/sys
Sección titulada “1. El universo de /proc/sys"Cada fichero dentro de /proc/sys/ es un parámetro del kernel. Su ruta determina la categoría:
| Ruta | Ámbito |
|---|---|
/proc/sys/kernel/ | Comportamiento del kernel (hostname, coredumps, sysrq) |
/proc/sys/net/ | Pila de red (IP forwarding, syn cookies, buffers) |
/proc/sys/vm/ | Memoria virtual (swappiness, overcommit) |
/proc/sys/fs/ | Límites del sistema de ficheros (file-max, inotify) |
sysctl traduce la ruta del fichero sustituyendo / por .:
/proc/sys/net/ipv4/ip_forward ↔ net.ipv4.ip_forward2. Leer parámetros
Sección titulada “2. Leer parámetros"# Ver todos los parámetros (más de 1.000)sysctl -a
# Ver un parámetro concretosysctl net.ipv4.ip_forwardsysctl vm.swappiness
# Leer directamente del fichero (equivalente)cat /proc/sys/net/ipv4/ip_forward
# Buscar parámetros por patrónsysctl -a | grep "ipv4"sysctl -a | grep "file-max"3. Cambiar parámetros en tiempo real (temporal)
Sección titulada “3. Cambiar parámetros en tiempo real (temporal)"Los cambios con -w son inmediatos pero efímeros: desaparecen al reiniciar.
# Habilitar IP forwarding (necesario para routers/VPN)sudo sysctl -w net.ipv4.ip_forward=1
# Reducir agresividad del swapsudo sysctl -w vm.swappiness=10
# Aumentar el límite de ficheros abiertossudo sysctl -w fs.file-max=200000
# Deshabilitar el "Magic SysRq" (hardening)sudo sysctl -w kernel.sysrq=04. Cambios permanentes (/etc/sysctl.d/)
Sección titulada “4. Cambios permanentes (/etc/sysctl.d/)"La forma correcta de persistir parámetros es crear un fichero en /etc/sysctl.d/ con extensión .conf. El nombre del fichero determina el orden de carga (se aplican alfabéticamente).
# Crear un fichero de configuración propiosudo nano /etc/sysctl.d/99-mi-servidor.confContenido de ejemplo:
# Habilitar enrutamiento IP (necesario si la máquina actúa como router)net.ipv4.ip_forward = 1
# Reducir agresividad del swap (valor de producción recomendado)vm.swappiness = 10
# Protección contra SYN flood (ya activo en Debian, pero explícito)net.ipv4.tcp_syncookies = 1
# Ignorar pings ICMP broadcast (hardening)net.ipv4.icmp_echo_ignore_broadcasts = 1
# Deshabilitar redirecciones ICMP (hardening)net.ipv4.conf.all.accept_redirects = 0net.ipv4.conf.all.send_redirects = 0
# Aumentar límite de ficheros abiertosfs.file-max = 200000Aplicar sin reiniciar:
# Aplicar el fichero específicosudo sysctl -p /etc/sysctl.d/99-mi-servidor.conf
# Aplicar TODOS los ficheros de sysctl.d/sudo sysctl --systemVerificar que el cambio se aplicó:
sysctl net.ipv4.ip_forward# net.ipv4.ip_forward = 15. Parámetros LFCS más relevantes
Sección titulada “5. Parámetros LFCS más relevantes"IP Forwarding (enrutamiento)
Sección titulada “IP Forwarding (enrutamiento)"Imprescindible cuando el servidor actúa como gateway, VPN concentrador o contenedor host:
# Ver estado actualsysctl net.ipv4.ip_forwardsysctl net.ipv6.conf.all.forwarding
# Activar para IPv4sudo sysctl -w net.ipv4.ip_forward=1Ajuste de memoria virtual
Sección titulada “Ajuste de memoria virtual"# vm.swappiness: qué tan agresivamente usa swap el kernel (0-200)# 0 = solo swap si la RAM está completamente llena# 10 = recomendado para servidores de base de datos# 60 = valor por defecto Debian (desktop/server genérico)# 100 = agresivo (sistemas sin estado con mucho swap)sysctl vm.swappiness
# vm.overcommit_memory:# 0 = heurística del kernel (por defecto)# 1 = siempre permite overcommit (Redis lo requiere)# 2 = nunca overcommitsysctl vm.overcommit_memoryLímites de ficheros del kernel
Sección titulada “Límites de ficheros del kernel"# Número máximo de ficheros abiertos en todo el sistemasysctl fs.file-max
# Ver uso actualcat /proc/sys/fs/file-nr# columnas: abiertos liberados máximoParámetros de red (hardening típico LFCS)
Sección titulada “Parámetros de red (hardening típico LFCS)"# Protección SYN floodnet.ipv4.tcp_syncookies = 1
# No aceptar source routingnet.ipv4.conf.all.accept_source_route = 0
# Log de paquetes con IP de origen imposible (martians)net.ipv4.conf.all.log_martians = 1
# No aceptar redirecciones ICMPnet.ipv4.conf.all.accept_redirects = 06. Verificar la configuración activa completa
Sección titulada “6. Verificar la configuración activa completa"# Ver todos los valores actuales y guardar para auditoríasysctl -a 2>/dev/null | sort > /tmp/sysctl_snapshot.txt
# Comparar antes/después de un cambiosysctl -a 2>/dev/null | grep "net.ipv4" | sort