Lynis es una herramienta de auditoría de seguridad de código abierto desarrollada por CISOfy. Se ejecuta en el propio servidor, revisa cientos de puntos (SSH, kernel, usuarios, paquetes, firewall, registros) y devuelve una lista priorizada de avisos y sugerencias junto con un índice de endurecimiento de 0 a 100. En este tutorial instalarás Lynis en Ubuntu 24.04 desde el repositorio oficial, ejecutarás una auditoría completa, aprenderás a leer el informe, corregirás algunos hallazgos habituales y dejarás un escaneo semanal programado con systemd.

Lynis no es un escáner de red ni un antivirus: no ataca el servidor ni busca CVE concretas en cada paquete. Su función es detectar configuraciones débiles y darte una ruta clara para endurecer el sistema.

Requisitos previos

  • Un servidor con Ubuntu 24.04 LTS, por ejemplo un VPS de CubePath. Los comandos sirven también en Debian 12.
  • Un usuario no root con privilegios sudo.
  • Acceso SSH al servidor y una sesión abierta de respaldo antes de cambiar la configuración de SSH.

Paso 1: Instalar Lynis desde el repositorio de CISOfy

Ubuntu incluye un paquete lynis en sus repositorios, pero suele ir varias versiones por detrás, y Lynis se actualiza con frecuencia para añadir pruebas nuevas. Por eso es preferible usar el repositorio oficial de CISOfy.

Instala las herramientas necesarias para descargar la clave del repositorio:

sudo apt update
sudo apt install ca-certificates curl gnupg

Descarga la clave pública de CISOfy y guárdala en /etc/apt/keyrings:

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://packages.cisofy.com/keys/cisofy-software-public.key | sudo gpg --dearmor -o /etc/apt/keyrings/cisofy-lynis.gpg

Añade el repositorio indicando esa clave con signed-by:

echo "deb [signed-by=/etc/apt/keyrings/cisofy-lynis.gpg] https://packages.cisofy.com/community/lynis/deb/ stable main" | sudo tee /etc/apt/sources.list.d/cisofy-lynis.list

Actualiza el índice de paquetes e instala Lynis:

sudo apt update
sudo apt install lynis

Comprueba que apt ha tomado el paquete del repositorio de CISOfy y no del de Ubuntu:

apt policy lynis

La versión instalada debe aparecer asociada a packages.cisofy.com:

lynis:
  Installed: 3.1.x
  Candidate: 3.1.x
  Version table:
 *** 3.1.x 500
        500 https://packages.cisofy.com/community/lynis/deb stable/main amd64 Packages

Verifica también la versión y si hay alguna más reciente publicada:

lynis show version
sudo lynis update info

Paso 2: Ejecutar la primera auditoría

La auditoría completa del sistema se lanza con audit system. Ejecútala con sudo: sin privilegios de root Lynis no puede leer archivos como /etc/shadow o la configuración de sudo y se salta muchas pruebas.

sudo lynis audit system

El escaneo tarda entre uno y tres minutos. Lynis muestra cada grupo de pruebas en pantalla con un resultado entre corchetes (OK, FOUND, NOT FOUND, WARNING, SUGGESTION...). Al final verás un resumen parecido a este:

  Lynis security scan details:

  Hardening index : 62 [############        ]
  Tests performed : 262
  Plugins enabled : 1

  Components:
  - Firewall               [V]
  - Malware scanner        [X]

  Files:
  - Test and debug information      : /var/log/lynis.log
  - Report data                     : /var/log/lynis-report.dat

Si solo quieres el resumen, sin pausas ni colores, añade --quick (no espera a que pulses Intro entre secciones) o --quiet (solo muestra avisos):

sudo lynis audit system --quick

Paso 3: Interpretar el informe

Lynis deja dos archivos en /var/log:

ArchivoContenido
/var/log/lynis.logRegistro detallado de cada prueba: qué comprobó y por qué dio ese resultado.
/var/log/lynis-report.datDatos del informe en formato clave=valor, fácil de filtrar con grep.

Ambos se sobrescriben en cada ejecución.

Avisos y sugerencias

Los avisos (warning[]) son problemas que conviene corregir cuanto antes. Las sugerencias (suggestion[]) son mejoras de endurecimiento. Filtra cada tipo desde el informe:

sudo grep '^warning\[\]' /var/log/lynis-report.dat
sudo grep '^suggestion\[\]' /var/log/lynis-report.dat

Cada línea incluye el identificador de la prueba, la descripción y, a veces, un detalle adicional:

suggestion[]=SSH-7408|Consider hardening SSH configuration|MaxAuthTries (6 --> 3)|-|
suggestion[]=KRNL-6000|One or more sysctl values differ from the scan profile and could be tweaked|-|-|
suggestion[]=PKGS-7346|Purge old/removed packages (4 found) with aptitude purge or dpkg --purge command. This will cleanup old configuration files, cron jobs and startup scripts.|-|-|

Para entender una prueba concreta, pide a Lynis su explicación y el fragmento de registro asociado:

sudo lynis show details SSH-7408

Índice de endurecimiento

El índice de endurecimiento resume el estado general. Extráelo del informe:

sudo grep '^hardening_index=' /var/log/lynis-report.dat
hardening_index=62

Una instalación limpia de Ubuntu suele rondar los 55-65 puntos. No persigas el 100: algunas sugerencias no tienen sentido para tu caso (por ejemplo, particiones separadas en un VPS). Úsalo para comparar tu servidor consigo mismo a lo largo del tiempo.

Paso 4: Corregir hallazgos habituales

Trabaja primero los avisos y después las sugerencias que afecten a servicios expuestos. Estos son algunos ejemplos frecuentes en Ubuntu 24.04.

Endurecer SSH (SSH-7408)

Lynis compara la configuración efectiva de sshd con un perfil más estricto. Crea un archivo de configuración adicional; en Ubuntu 24.04 los archivos de /etc/ssh/sshd_config.d/ se leen antes que el resto de sshd_config y el primer valor encontrado es el que se aplica:

sudo nano /etc/ssh/sshd_config.d/10-hardening.conf
PermitRootLogin no
MaxAuthTries 3
X11Forwarding no
AllowTcpForwarding no
ClientAliveCountMax 2

Valida la sintaxis y recarga el servicio sin cerrar tu sesión actual:

sudo sshd -t
sudo systemctl reload ssh

Si sshd -t no muestra nada, la configuración es válida. Abre una segunda sesión SSH para comprobar que sigues pudiendo entrar antes de cerrar la primera.

Instalar paquetes de apoyo recomendados

Lynis suele sugerir herramientas que ayudan a mantener el sistema: libpam-tmpdir (directorios temporales por usuario), debsums (verificación de archivos de paquetes), apt-show-versions (versiones instaladas) y needrestart (servicios que necesitan reinicio tras actualizar). Instálalas si Lynis las propone:

sudo apt install libpam-tmpdir debsums apt-show-versions needrestart

Purgar paquetes eliminados (PKGS-7346)

Los paquetes eliminados con apt remove dejan su configuración en el sistema. Lista los que están en estado rc y, si la lista no está vacía, púrgalos:

dpkg -l | awk '/^rc/ {print $2}'
sudo apt purge $(dpkg -l | awk '/^rc/ {print $2}')

Ajustar parámetros del kernel (KRNL-6000)

Revisa en /var/log/lynis.log qué valores de sysctl difieren del perfil:

sudo grep 'has a different value than expected' /var/log/lynis.log

Aplica solo los que entiendas en un archivo propio, por ejemplo /etc/sysctl.d/99-hardening.conf, y cárgalos con sudo sysctl --system. La guía de lista de verificación de auditoría de seguridad de esta misma sección incluye un bloque recomendado.

Volver a medir

Tras cada tanda de cambios, repite la auditoría y compara el índice:

sudo lynis audit system --quick > /dev/null
sudo grep '^hardening_index=' /var/log/lynis-report.dat
hardening_index=71

Paso 5: Excluir pruebas que no aplican

Algunas pruebas generarán sugerencias que has decidido no seguir. En lugar de ignorarlas cada vez, exclúyelas en un perfil personalizado. Lynis carga automáticamente /etc/lynis/custom.prf si existe, y no se sobrescribe al actualizar el paquete:

sudo nano /etc/lynis/custom.prf
# Particiones separadas no aplican en este VPS
skip-test=FILE-6310
# Sin escáner de malware en este servidor, decisión documentada
skip-test=HRDN-7230

Escribe un comentario con el motivo de cada exclusión para que quien revise la auditoría después sepa por qué se omitió. Comprueba que el perfil se carga:

sudo lynis show profiles

La salida debe incluir /etc/lynis/custom.prf además de /etc/lynis/default.prf.

También puedes ejecutar solo un grupo de pruebas, útil para verificar un cambio concreto sin repetir toda la auditoría. Lista los grupos disponibles y lanza uno:

lynis show groups
sudo lynis audit system --tests-from-group ssh

Paso 6: Programar auditorías semanales con systemd

Una auditoría puntual pierde valor en pocas semanas. Programa Lynis para que se ejecute cada semana y guarde una copia fechada del informe, de modo que puedas comparar resultados.

Crea el directorio donde se guardarán los informes:

sudo install -d -m 0700 /var/log/lynis-reports

Crea un script pequeño que ejecute la auditoría y copie el informe:

sudo nano /usr/local/sbin/lynis-weekly
#!/usr/bin/env bash
set -euo pipefail

report_dir="/var/log/lynis-reports"
stamp="$(date +%F)"

/usr/sbin/lynis audit system --cronjob > /dev/null

cp /var/log/lynis-report.dat "${report_dir}/lynis-report-${stamp}.dat"
grep '^hardening_index=' "${report_dir}/lynis-report-${stamp}.dat"

# Conservar solo las últimas 12 semanas
find "${report_dir}" -name 'lynis-report-*.dat' -mtime +84 -delete

La opción --cronjob desactiva colores y pausas para ejecuciones desatendidas. Haz el script ejecutable:

sudo chmod 0750 /usr/local/sbin/lynis-weekly

Crea la unidad de servicio:

sudo nano /etc/systemd/system/lynis-weekly.service
[Unit]
Description=Auditoría semanal de seguridad con Lynis

[Service]
Type=oneshot
ExecStart=/usr/local/sbin/lynis-weekly

Y el temporizador que la lanza cada lunes a las 04:00:

sudo nano /etc/systemd/system/lynis-weekly.timer
[Unit]
Description=Ejecuta la auditoría de Lynis cada semana

[Timer]
OnCalendar=Mon *-*-* 04:00:00
RandomizedDelaySec=30min
Persistent=true

[Install]
WantedBy=timers.target

Recarga systemd, activa el temporizador y lanza una ejecución manual para probarlo:

sudo systemctl daemon-reload
sudo systemctl enable --now lynis-weekly.timer
sudo systemctl start lynis-weekly.service

Comprueba el resultado en el diario y la próxima ejecución programada:

sudo journalctl -u lynis-weekly.service -n 5 --no-pager
systemctl list-timers lynis-weekly.timer
lynis-weekly[2104]: hardening_index=71

Para comparar dos semanas, basta con un diff de las sugerencias:

sudo diff <(grep '^suggestion' /var/log/lynis-reports/lynis-report-2026-09-14.dat) <(grep '^suggestion' /var/log/lynis-reports/lynis-report-2026-09-21.dat)

Sustituye las fechas por las de tus informes.

Solución de problemas

Muchas pruebas aparecen como omitidas. Ejecutaste Lynis sin sudo. Vuelve a lanzarlo como root para que pueda leer la configuración protegida.

apt update devuelve NO_PUBKEY para packages.cisofy.com. La clave no se descargó bien o la ruta de signed-by no coincide. Repite la descarga de la clave del paso 1 y comprueba que el archivo /etc/apt/keyrings/cisofy-lynis.gpg existe y no está vacío.

Una sugerencia sigue apareciendo después de corregirla. Lynis evalúa la configuración efectiva. En el caso de SSH, comprueba el valor real con sudo sshd -T | grep -i maxauthtries; si otro archivo de /etc/ssh/sshd_config.d/ define el mismo parámetro antes que el tuyo, gana ese.

Conclusión

Has instalado Lynis desde el repositorio oficial, ejecutado una auditoría completa, interpretado avisos, sugerencias e índice de endurecimiento, corregido hallazgos habituales y programado auditorías semanales con informes fechados. Lo importante no es la cifra absoluta, sino que el índice suba y que cada sugerencia descartada tenga un motivo documentado.

Como siguientes pasos puedes:

  • Revisar manualmente el resto de áreas con una lista de verificación de auditoría de seguridad.
  • Reforzar el acceso con claves SSH y autenticación de dos factores.
  • Instalar un sistema de detección de intrusiones como AIDE para vigilar cambios en archivos críticos.