lynis report mail pdf html base
This commit is contained in:
309
lynis/README.md
Normal file
309
lynis/README.md
Normal file
@@ -0,0 +1,309 @@
|
||||
# 🔒 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.
|
||||
Reference in New Issue
Block a user