Ciberseguridad al arranque: informes y alertas automáticas
Introducción
En este post explicamos cómo configurar tu sistema Linux para que, al arrancar, se ejecute un script que analiza el estado de ciberseguridad del equipo. El resultado se guarda en un archivo diario en formato Org y HTML, se generan alertas clasificadas (CRÍTICO, ALTO, MODERADO) y se actualiza automáticamente un index.html con un historial completo.
Este enfoque es ideal para:
- Profesionales que monitorizan seguridad de sistemas.
- Usuarios de Emacs que desean informes legibles en Org Mode.
- Automatización de auditorías de seguridad en entornos personales o laborales.
Paso 1: Crear la carpeta para informes
Todos los informes se guardarán en ~/cyberreports.
mkdir -p ~/cyberreports
Paso 2: Script principal de análisis de seguridad
Guarda el siguiente script como ~/cybercheck_alerts.sh y dale permisos de ejecución:
#!/bin/bash
DATE=$(date +%F)
BASE_DIR=~/cyberreports
mkdir -p "$BASE_DIR"
OUTPUT="$BASE_DIR/cyberreport-${DATE}.org"
HTML_OUTPUT="${OUTPUT%.org}.html"
INDEX_HTML="$BASE_DIR/index.html"
ALERTS=()
echo "* 🔐 Informe de Seguridad del Sistema" > "$OUTPUT"
echo "Fecha: $DATE" >> "$OUTPUT"
echo "Host: $(hostname)" >> "$OUTPUT"
echo "" >> "$OUTPUT"
# Ejemplo: Verificar actualizaciones de seguridad pendientes
echo "** 🔄 Actualizaciones de seguridad" >> "$OUTPUT"
if command -v apt >/dev/null; then
UPDATES=$(apt list --upgradable 2>/dev/null | grep -c security)
echo "- Hay $UPDATES actualizaciones de seguridad." >> "$OUTPUT"
[ "$UPDATES" -gt 0 ] && ALERTS+=("updates: $UPDATES pendientes")
fi
# (Añadir aquí más chequeos si se desea, como rootkits, puertos abiertos...)
# === HTML con alertas ===
cat <<EOF > "$HTML_OUTPUT"
<html>
<head><meta charset="utf-8">
<title>Informe de Seguridad - $DATE</title>
<style>
body { font-family: monospace; background: #111; color: #eee; padding: 1em; }
.critico { color: red; } .alto { color: orange; } .moderado { color: yellow; }
</style></head><body>
<h1>🚨 Informe de Seguridad de $(hostname)</h1>
<h2>Fecha: $DATE</h2>
EOF
for alert in "${ALERTS[@]}"; do
echo "<p class='critico'>🚨 $alert</p>" >> "$HTML_OUTPUT"
done
echo "<pre>" >> "$HTML_OUTPUT"
cat "$OUTPUT" >> "$HTML_OUTPUT"
echo "</pre></body></html>" >> "$HTML_OUTPUT"
# === Generar índice HTML ===
REPORT_FILES=($(ls -1t "$BASE_DIR"/cyberreport-*.html))
cat <<EOF > "$INDEX_HTML"
<html><head><meta charset='utf-8'><title>Historial</title>
<style>body { font-family: sans-serif; padding: 2em; }
.critico { color: red; } .alto { color: orange; } .moderado { color: #cc0; }
</style></head><body>
<h1>Historial de Informes de Seguridad</h1><ul>
EOF
for report in "${REPORT_FILES[@]}"; do
filename=$(basename "$report")
fecha=$(echo "$filename" | sed -E 's/^cyberreport-([0-9]{4}-[0-9]{2}-[0-9]{2})\.html/\1/')
crit=$(grep -c "🚨" "$report")
echo "<li><b>$fecha:</b> <a href='$filename'>Ver</a> — <span class='critico'>🚨 $crit alertas</span></li>" >> "$INDEX_HTML"
done
echo "</ul></body></html>" >> "$INDEX_HTML"
Paso 3: Hacer ejecutable el script
chmod +x ~/cybercheck_alerts.sh
Paso 4: Ejecutarlo al inicio del sistema
Puedes añadirlo a tu crontab para que se ejecute automáticamente al arrancar:
crontab -e
Y añade la línea:
@reboot ~/cybercheck_alerts.sh
Paso 5: Visualización desde Emacs
Puedes crear una función para abrir los informes fácilmente:
(defun my/open-latest-cyberreport ()
(interactive)
(let* ((dir "~/cyberreports/")
(latest (car (last (directory-files dir t "cyberreport-.*\\.org")))))
(if latest
(find-file latest)
(message "No hay informes disponibles."))))
También puedes navegar por todos los informes con Dired:
(defun my/browse-cyberreports ()
(interactive)
(dired "~/cyberreports"))
Resultados esperados
Cada día, al arrancar el sistema:
- Se genera un archivo
cyberreport-YYYY-MM-DD.orgy su versión HTML. - Las alertas se clasifican visualmente.
- El historial completo queda disponible en
~/cyberreports/index.html. - Desde Emacs puedes revisar, comparar o compartir.
Futuras mejoras (opcional)
- Exportación a PDF o RSS.
- Envío por correo de alertas críticas.
- Integración con notificaciones de escritorio.
- Reportes centralizados en red para múltiples equipos.
Conclusión
Este sistema proporciona una base sólida y automatizada para monitorizar la ciberseguridad de tu equipo Linux. Gracias a la estructura en Org Mode y la generación de HTML, es ideal para usuarios técnicos y bloggers que usan Emacs.
¿Tienes ideas para integrarlo con tu blog o alertas en Telegram? Escríbelo en los comentarios o forkéalo en GitHub.