Una auditoría manual es útil. Pero depende de que te acuerdes de hacerla. Y la experiencia dice que siempre hay algo más urgente hasta que aparece un problema que llevas meses sin ver.
La solución obvia es automatizarla. Un script que se ejecute solo, compruebe lo que importa y te avise si encuentra algo. Sin intervención manual, sin que dependa de tu memoria.
La estructura
Dos scripts con roles distintos:
Mensual — comprobación ligera. Se ejecuta el primer día de cada mes. Comprueba reboot pendiente, paquetes de seguridad sin instalar, servicios caídos, disco por encima del 80% e intentos SSH de la última semana. Te manda un mensaje Telegram con el resumen, haya o no problemas.
Trimestral — auditoría completa. Se ejecuta el primer día de enero, abril, julio y octubre. Ejecuta el script de auditoría completo, pasa Lynis, pasa rkhunter y te manda un informe detallado con la puntuación y los ficheros guardados en el servidor.
Antes de empezar
Los scripts están disponibles en jferrep/jaws-audit, junto con el script de auditoría completo de la primera parte de esta serie. Puedes clonar el repo, adaptarlos a tu stack y usarlos tal cual o como punto de partida.
Una advertencia antes de continuar: la automatización no sustituye la revisión. La hace posible. Un script puede decirte que hay un reboot pendiente o que el disco está al 85%, pero leer el fichero completo de la auditoría trimestral — servicios activos, conexiones establecidas, logs recientes — sigue requiriendo un par de minutos de atención humana cada tres meses. La diferencia es que ahora esos minutos están programados en el calendario, no dependen de que te acuerdes.
Instalación
1. Fichero de configuración
sudo nano /etc/jaws-audit.conf# /etc/jaws-audit.conf
# Credenciales sensibles — NO añadir a git
TELEGRAM_TOKEN=""
TELEGRAM_CHAT_ID=""
DISK_THRESHOLD=80
SSH_FAIL_THRESHOLD=500Permisos seguros:
sudo chmod 600 /etc/jaws-audit.conf
sudo chown root:root /etc/jaws-audit.conf2. Scripts
# Script mensual
sudo cp jaws-audit-check.sh /usr/local/bin/
sudo chmod 750 /usr/local/bin/jaws-audit-check.sh
sudo chown root:root /usr/local/bin/jaws-audit-check.sh
# Script trimestral
sudo cp jaws-audit-full.sh /usr/local/bin/
sudo chmod 750 /usr/local/bin/jaws-audit-full.sh
sudo chown root:root /usr/local/bin/jaws-audit-full.sh3. Cron
sudo crontab -eAñade estas dos líneas:
# Auditoría ligera — primer día de cada mes a las 8:00
0 8 1 * * /usr/local/bin/jaws-audit-check.sh
# Auditoría completa — primer día de cada trimestre a las 9:00
0 9 1 1,4,7,10 * /usr/local/bin/jaws-audit-full.sh4. Prueba manual
Antes de esperar al cron, prueba que funciona:
sudo /usr/local/bin/jaws-audit-check.shDeberías recibir un mensaje Telegram en segundos.
Qué recibes por Telegram
Mensaje mensual (sin problemas)
🔍 Auditoría mensual — vps-web
📅 2026-05-01 08:00
✅ Todo OK
Resumen SSH (últimos 7 días):
• Intentos fallidos: 847
• IP más activa: 92 intentos desde 45.148.10.157
• IPs baneadas ahora: 7Mensaje mensual (con problemas)
🔍 Auditoría mensual — vps-web
📅 2026-05-01 08:00
⚠️ 2 issue(s) encontrados
Problemas detectados:
• ⚠️ Reboot pendiente
• ⚠️ 3 paquetes de seguridad sin instalar
Resumen SSH (últimos 7 días):
• Intentos fallidos: 1203
• IP más activa: 412 intentos desde 89.185.81.112
• IPs baneadas ahora: 12Mensaje trimestral
📊 Auditoría trimestral completa — vps-web
📅 2026-07-01 09:00
Lynis:
• Hardening index: 78/100
• Warnings: 1
• Suggestions: 37
rkhunter: ✅ Limpio
SSH (últimos 30 días):
• Intentos fallidos: 3421
Estado general: ✅ Sin problemas críticos
Ficheros guardados:
• Auditoría: /var/log/audits/audit_vps-web_20260701.txt (45K)
• Lynis: /var/log/audits/lynis_vps-web_20260701.txt (28K)Los ficheros guardados
Los resultados de cada auditoría se guardan en /var/log/audits/. El script trimestral mantiene automáticamente los últimos 4 trimestres y borra los más antiguos — no se acumula indefinidamente.
Para revisar una auditoría anterior:
ls /var/log/audits/
less /var/log/audits/audit_vps-web_20260701.txtY para comparar la puntuación de Lynis entre trimestres:
grep "Hardening index" /var/log/audits/lynis_*.txtLo que no automatizo
La revisión del output completo sigue siendo manual. Los scripts detectan las señales de alerta más comunes, pero leer el fichero completo de la auditoría trimestral — servicios activos, conexiones establecidas, logs recientes — sigue requiriendo un par de minutos de atención humana cada tres meses.