8.0 KiB
🔒 Lynis Security Report Generator
Sistema automatizado para generar y enviar reportes de seguridad de Lynis en múltiples formatos con diseño moderno y profesional.
📋 Descripción
Este proyecto automatiza la ejecución de auditorías de seguridad con Lynis y genera reportes en tres formatos:
- TXT: Salida original sin formato (referencia técnica completa)
- HTML: Reporte web con diseño moderno, compacto y en columnas paralelas
- PDF: Versión imprimible del reporte HTML (soporta múltiples métodos de generación)
Los reportes se envían automáticamente por correo electrónico con todos los formatos adjuntos.
✨ Características
Diseño HTML Moderno
- 🎨 Interfaz elegante con gradientes profesionales
- 📊 Visualización clara de métricas de seguridad en 3 columnas paralelas
- 🎯 Código de colores según nivel de riesgo
- 📱 Diseño responsive y optimizado para impresión
- ⚡ Efectos visuales y animaciones sutiles
- 📏 Diseño compacto y centrado para mejor aprovechamiento del espacio
Componentes del Reporte
- Hardening Index: Índice de endurecimiento del sistema (0-100)
- Test Results: Resumen de tests realizados, warnings y sugerencias
- Security Components: Estado de firewall, IDS/IPS y antimalware
- Warnings: Problemas críticos que requieren atención inmediata
- Suggestions: Recomendaciones para mejorar la seguridad
- Full Report: Salida completa de Lynis en formato raw
🚀 Instalación
Requisitos del Sistema
# Lynis (herramienta de auditoría)
sudo apt install lynis
# Python 3.x
sudo apt install python3 python3-pip python3-venv
Dependencias Python
# Crear entorno virtual (recomendado)
python3 -m venv venv
source venv/bin/activate
# Instalar dependencias
pip install -r requirements.txt
Herramientas para Generación de PDF
El script intenta varios métodos automáticamente (en orden de prioridad). Instala al menos uno:
Opción 1: wkhtmltopdf (Recomendado - Mejor calidad y soporte CSS)
sudo apt install wkhtmltopdf
Opción 2: WeasyPrint (Alternativa Python con buen soporte CSS)
pip install weasyprint
Opción 3: Chromium Headless (Alternativa con motor de navegador)
sudo apt install chromium-browser
# O en sistemas basados en Debian/Ubuntu
sudo apt install chromium
El script intentará usar wkhtmltopdf primero, luego weasyprint, y finalmente chromium/chrome headless. Todas estas opciones generan PDFs con formato visual completo (no texto plano).
⚙️ Configuración
Edita el archivo config.py con tus parámetros:
# Comando Lynis
LYNIS_CMD = ["/usr/bin/lynis", "audit", "system", "--no-colors"]
# Directorio de salida
BASE_DIR = "/opt/lynis-report"
# Configuración SMTP
SMTP_HOST = "smtp.example.com"
SMTP_PORT = 587
SMTP_USER = "tu-usuario"
# La contraseña se lee desde variable de entorno
SMTP_PASS = os.environ.get("SENDGRID_API_KEY", "")
# Configuración de correo
FROM_ADDR = "security-reports@example.com"
TO_ADDRS = [
"admin@example.com",
]
SUBJECT_PREFIX = "[SECURITY] Lynis report"
Variables de Entorno
# Configura la API key/password del SMTP
export SENDGRID_API_KEY="tu-api-key-aqui"
# O si usas Gmail/otro proveedor
export SMTP_PASSWORD="tu-password-aqui"
📖 Uso
Ejecución Manual
# Activar entorno virtual
source venv/bin/activate
# Ejecutar el script
python3 lynis_report.py
Ejecución Automática (Cron)
Para ejecutar el reporte semanalmente:
# Editar crontab
crontab -e
# Añadir línea (ejemplo: cada lunes a las 2 AM)
0 2 * * 1 /home/usuario/Security-Reports/lynis/venv/bin/python3 /home/usuario/Security-Reports/lynis/lynis_report.py
📁 Estructura del Proyecto
lynis/
├── config.py # Configuración del sistema
├── lynis_report.py # Script principal
├── requirements.txt # Dependencias Python
├── templates/
│ └── report.html.j2 # Plantilla HTML del reporte
├── venv/ # Entorno virtual (opcional)
└── README.md # Este archivo
📊 Archivos Temporales
Los archivos se generan temporalmente en el directorio configurado (BASE_DIR) durante la ejecución:
/opt/lynis-report/
├── lynis-hostname-20251204-0200.txt # Salida original (temporal)
├── lynis-hostname-20251204-0200.html # Reporte HTML (temporal)
└── lynis-hostname-20251204-0200.pdf # Reporte PDF (temporal)
Nota: Todos los archivos se eliminan automáticamente después de enviar el correo electrónico. Los reportes solo se conservan en los adjuntos del email.
📧 Correo Electrónico
El email incluye:
- Cuerpo HTML: Versión completa del reporte con diseño elegante
- Adjunto TXT: Salida original de Lynis
- Adjunto PDF: Reporte formateado para impresión/distribución
🎨 Personalización
Modificar Diseño
Edita templates/report.html.j2:
Cambiar colores:
/* Fondo principal */
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
/* Tarjetas */
background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
Ajustar columnas del resumen:
.summary-grid {
grid-template-columns: repeat(3, 1fr); /* 3 columnas iguales */
gap: 20px;
}
Añadir Secciones
Modifica la plantilla Jinja2 en templates/report.html.j2 y actualiza la función generate_html() en lynis_report.py.
🔧 Solución de Problemas
PDF no se genera
# Verifica qué herramientas están instaladas
which wkhtmltopdf
python3 -c "import weasyprint" 2>/dev/null && echo "weasyprint: installed"
which chromium || which chromium-browser || which google-chrome
# Instala al menos una opción (que genere PDFs con formato visual)
sudo apt install wkhtmltopdf # Opción 1 (mejor)
pip install weasyprint # Opción 2
sudo apt install chromium-browser # Opción 3
El script intentará las 3 opciones automáticamente. Todas generan PDFs visuales renderizados.
Error de permisos con Lynis
# Lynis requiere permisos de root/sudo
sudo python3 lynis_report.py
# O configura permisos específicos
sudo visudo
# Añade: usuario ALL=(ALL) NOPASSWD: /usr/bin/lynis
Error de SMTP
# Verifica la variable de entorno
echo $SENDGRID_API_KEY
# Prueba conexión SMTP
telnet smtp.example.com 587
📝 Ejemplo de Salida
Hardening Index
76/100 (Medium)
Componentes de Seguridad
🔥 Firewall: ✅
🛡️ IDS/IPS: ✅
🦠 Malware Scanner: ⚠️
Tests
260 Tests realizados
1 Warning
31 Suggestions
🔐 Seguridad
- Credenciales: Nunca incluyas contraseñas en
config.py, usa variables de entorno - Permisos: Protege los archivos de configuración con permisos restrictivos
- Logs: Revisa regularmente
/var/log/lynis.log - SMTP: Usa conexiones cifradas (STARTTLS/SSL)
# Asegurar permisos
chmod 600 config.py
chmod 700 lynis_report.py
🤝 Contribución
Para contribuir al proyecto:
- Haz fork del repositorio
- Crea una rama para tu feature (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add some AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request
📄 Licencia
Este proyecto está bajo tu propia licencia. Lynis es software libre bajo GPLv3.
🔗 Enlaces Útiles
👤 Autor
Eduardo - Sistema de Reportes de Seguridad
📞 Soporte
Para problemas o preguntas:
- Revisa la sección de solución de problemas
- Consulta los logs en
/var/log/lynis.log - Verifica la configuración SMTP y las credenciales
Nota: Este script debe ejecutarse con privilegios suficientes para que Lynis pueda auditar el sistema completamente.