# 🔒 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 ```bash # Lynis (herramienta de auditoría) sudo apt install lynis # Python 3.x sudo apt install python3 python3-pip python3-venv ``` ### Dependencias Python ```bash # 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)** ```bash sudo apt install wkhtmltopdf ``` **Opción 2: WeasyPrint (Alternativa Python con buen soporte CSS)** ```bash pip install weasyprint ``` **Opción 3: Chromium Headless (Alternativa con motor de navegador)** ```bash 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: ```python # 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 ```bash # 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 ```bash # Activar entorno virtual source venv/bin/activate # Ejecutar el script python3 lynis_report.py ``` ### Ejecución Automática (Cron) Para ejecutar el reporte semanalmente: ```bash # 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:** ```css /* Fondo principal */ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); /* Tarjetas */ background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%); ``` **Ajustar columnas del resumen:** ```css .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 ```bash # 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 ```bash # 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 ```bash # 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) ```bash # Asegurar permisos chmod 600 config.py chmod 700 lynis_report.py ``` ## 🤝 Contribución Para contribuir al proyecto: 1. Haz fork del repositorio 2. Crea una rama para tu feature (`git checkout -b feature/AmazingFeature`) 3. Commit tus cambios (`git commit -m 'Add some AmazingFeature'`) 4. Push a la rama (`git push origin feature/AmazingFeature`) 5. Abre un Pull Request ## 📄 Licencia Este proyecto está bajo tu propia licencia. Lynis es software libre bajo GPLv3. ## 🔗 Enlaces Útiles - [Lynis Official](https://cisofy.com/lynis/) - [Lynis GitHub](https://github.com/CISOfy/lynis) - [Jinja2 Documentation](https://jinja.palletsprojects.com/) - [wkhtmltopdf](https://wkhtmltopdf.org/) - [WeasyPrint](https://weasyprint.org/) ## 👤 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.