setup/
generate-test-logs.py # Script 1: genera logs de ATAQUE (R8.5)
generate-normal-logs.py # Script 2: genera logs LEGÍTIMOS (R8.2)
orchestrate-logs.py # Script 3: orquestador que coordina ambos
Genera logs de ataque simulado para probar las reglas de detección del SIEM.
| Argumento | Ataque | Fuente de log | Regla que dispara |
|---|---|---|---|
brute_force |
Fuerza bruta SSH | auth.log |
SIEM - Brute Force SSH Detectado |
404_flood |
Enumeración web (404 flood) | nginx/access.log |
SIEM - Flood de Errores HTTP 404 |
sqli |
Inyección SQL + rutas sensibles | nginx/access.log |
SIEM - Acceso a Rutas Web Sensibles |
port_scan |
Escaneo nmap (SYN scan) | syslog |
SIEM - Escaneo de Puertos Detectado |
all_attacks |
Todos los anteriores | -- | Todas las reglas |
# Todos los ataques (por defecto)
python setup/generate-test-logs.py
# Solo brute force SSH con 50 intentos
python setup/generate-test-logs.py --attack brute_force --count 50
# Solo escaneo nmap
python setup/generate-test-logs.py --attack port_scanGenera logs legítimos (sin actividad maliciosa) para las 4 fuentes del pipeline.
| Argumento | Fuente | Contenido |
|---|---|---|
syslog |
Sistema | systemd, cron, kernel, NetworkManager, rsyslog, ntpd |
auth |
Autenticación | SSH Accepted, session open/close, sudo commands |
nginx |
Web | Tráfico HTTP normal (200, 301, 304) |
k8s |
Kubernetes | Logs de pods frontend, backend, redis, postgres |
all |
Todas las anteriores | Mix de las 4 fuentes |
# Todas las fuentes (por defecto)
python setup/generate-normal-logs.py
# Solo syslog con 50 líneas
python setup/generate-normal-logs.py --source syslog --count 50
# Solo logs de nginx
python setup/generate-normal-logs.py --source nginx --count 30Orquestador que coordina los dos scripts anteriores. Proporciona 3 modos de operación.
| Modo | Descripción | Función |
|---|---|---|
random |
Mix aleatorio de logs normales y ataques | generate_random_mix() |
attacks |
Solo logs de ataque (llama Script 1) | generate_attacks() |
normal |
Solo logs legítimos (llama Script 2) | generate_normal() |
# Mix aleatorio de logs normales + ataques
python setup/orchestrate-logs.py --mode random
# Solo ataques (todos los escenarios)
python setup/orchestrate-logs.py --mode attacks
# Solo logs normales (las 4 fuentes)
python setup/orchestrate-logs.py --mode normalpython setup/generate-normal-logs.py --source all --count 30Verificar en Kibana -> Discover que los índices logs-syslog-*, logs-auth-*,
logs-nginx-* y logs-k8s-* tienen documentos.
python setup/verify-parse-rate.pySi ejecutas el verificador desde el host y no existe ./setup/certs/ca/ca.crt,
el script desactiva la verificación TLS automáticamente. Si prefieres forzarla,
pasa --cacert <ruta-real> o --insecure.
Debe reportar > 95%.
# Opción A: orquestador modo ataques
python setup/orchestrate-logs.py --mode attacks
# Opción B: script individual
python setup/generate-test-logs.py --attack all_attacksEsperar ~30-60s y verificar en Kibana -> Security -> Alerts:
SIEM - Brute Force SSH DetectadoSIEM - Escaneo de Puertos DetectadoSIEM - Flood de Errores HTTP 404SIEM - Login SSH Exitoso Fuera de Horario LaboralSIEM - Acceso a Rutas Web Sensibles
python setup/orchestrate-logs.py --mode randomEsto genera una mezcla realista de tráfico normal y ataques, simulando un entorno de producción real.
Los logs no aparecen en Kibana:
# Verificar que Filebeat está corriendo
docker ps | grep filebeat
# Verificar que los archivos existen
ls -la logs/
# Verificar conexión Logstash
curl -s http://localhost:9600/ | python3 -m json.toolLa tasa de parseo es baja:
# Revisar logs de Logstash
docker logs siem-logstash --tail 50
# Verificar contenido del índice de errores
curl -sk https://localhost:9200/logs-errors-*/_search?pretty \
-u elastic:${ELASTIC_PASSWORD}