ids.alfacom.it/deployment/MIGRATION_INCOMING_LOGS.md
marco370 495e845a79 Update log format to include timestamps and filter incoming connections
Correct the rsyslog template to include timestamps in logs, ensuring compatibility with the Python parser. This change also refactors the log filtering to capture only incoming connections, significantly reducing log volume.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 7a657272-55ba-4a79-9a2e-f1ed9bc7a528
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: c2f849f9-105f-452a-bdc3-a956d102c54b
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/449cf7c4-c97a-45ae-8234-e5c5b8d6a84f/7a657272-55ba-4a79-9a2e-f1ed9bc7a528/6ZTQSoP
2025-11-22 08:54:21 +00:00

6.1 KiB

Migrazione a Log Solo Connessioni in Ingresso

Panoramica

Il filtro MikroTik è stato modificato per catturare solo connessioni in ingresso, riducendo drasticamente il volume di log e migliorando le prestazioni del sistema IDS.

Modifiche Implementate

1. Configurazione RSyslog Corretta

Il file deployment/rsyslog/99-mikrotik.conf è stato aggiornato per includere timestamp completo nei log salvati:

PRIMA ( problematico):

template(name="MikroTikRawFormat" type="string" string="%msg%\n")

Salvava solo: forward: in:<pppoe-user> ...

ADESSO ( corretto):

template(name="MikroTikRawFormat" type="string" string="%TIMESTAMP% %HOSTNAME% %msg%\n")

Salva: Nov 22 08:15:30 FIBRA forward: in:<pppoe-user> ...

2. Parser Python Compatibile

Il parser python_ml/syslog_parser.py è 100% compatibile con il nuovo formato:

  • Gestisce log "forward" e "detected-ddos forward"
  • Estrae interfacce in/out: in:<pppoe-xxx> out:sfp-xxx
  • Supporta src-mac opzionale
  • Parse TCP flags: (SYN), (ACK,PSH), etc.
  • Gestisce NAT info opzionale

3. Formato Log Supportato

Nov 22 08:00:00 FIBRA forward: in:<pppoe-franco.alfano> out:sfp-sfpplus2_VS_AS, connection-state:new proto TCP (SYN), 10.0.254.77:53783->52.213.60.221:443, len 64
Nov 22 08:00:01 FIBRA detected-ddos forward: in:sfp-sfpplus2_VS_AS out:VLAN53_PPOE_DATACENTER, connection-state:new src-mac 18:fd:74:7c:aa:85, proto TCP (SYN), 172.217.38.146:35055->185.203.24.95:993, len 60
Nov 22 08:00:02 DATACENTER forward: in:VLAN53_PPOE_DATACENTER out:sfp-sfpplus2_VS_AS, connection-state:new src-mac 00:50:56:88:61:c7, proto UDP, 185.203.24.22:27417->8.8.8.8:53, len 79

Procedura di Migrazione sul Server

STEP 1: Backup Configurazione Attuale

sudo cp /etc/rsyslog.d/99-mikrotik.conf /etc/rsyslog.d/99-mikrotik.conf.backup
sudo cp /var/log/mikrotik/raw.log /var/log/mikrotik/raw.log.backup

STEP 2: Push da Replit

./push-gitlab.sh

Messaggio commit: "Fix rsyslog template - Add timestamp to logs"

STEP 3: Aggiornamento sul Server AlmaLinux

cd /opt/ids
sudo ./deployment/update_from_git.sh

Questo eseguirà automaticamente:

  1. Git pull delle modifiche
  2. Riapplicazione configurazione rsyslog corretta (setup_rsyslog.sh)
  3. Restart servizio rsyslog
  4. Restart servizio syslog parser

STEP 4: Verifica Funzionamento

4.1 Verifica Template RSyslog

grep "template.*MikroTikRawFormat" /etc/rsyslog.d/99-mikrotik.conf

Output atteso:

template(name="MikroTikRawFormat" type="string" string="%TIMESTAMP% %HOSTNAME% %msg%\n")

4.2 Verifica Log con Timestamp

tail -5 /var/log/mikrotik/raw.log

Output atteso (con timestamp!):

Nov 22 08:15:30 FIBRA forward: in:<pppoe-user> out:sfp-xxx, ...
Nov 22 08:15:31 FIBRA detected-ddos forward: in:sfp-xxx out:VLAN53, ...

Se vedi log senza timestamp, il template non è stato applicato correttamente!

4.3 Verifica Parser Funzionante

sudo systemctl status ids-syslog-parser
sudo journalctl -u ids-syslog-parser -n 50 --no-pager

Output atteso:

[INFO] Processate N righe, salvate M log

4.4 Verifica Database Popolato

psql $DATABASE_URL -c "SELECT COUNT(*), MIN(timestamp), MAX(timestamp) FROM network_logs WHERE timestamp > NOW() - INTERVAL '5 minutes';"

Output atteso:

 count |           min           |           max           
-------+-------------------------+-------------------------
   150 | 2025-11-22 08:10:00     | 2025-11-22 08:15:00

Se count = 0, il parser NON sta processando i log! Verifica il formato.

STEP 5: Test End-to-End

5.1 Genera Traffico di Test

Dal MikroTik, genera alcune connessioni:

# Ping per generare log UDP
/ping 8.8.8.8 count=5

5.2 Verifica Arrivo Log

# Attendi 10 secondi
sleep 10

# Verifica ultimi log
tail -10 /var/log/mikrotik/raw.log

# Verifica database
psql $DATABASE_URL -c "SELECT COUNT(*) FROM network_logs WHERE timestamp > NOW() - INTERVAL '1 minute';"

Rollback in Caso di Problemi

Se qualcosa va storto, ripristina la configurazione precedente:

# Ripristina rsyslog config
sudo cp /etc/rsyslog.d/99-mikrotik.conf.backup /etc/rsyslog.d/99-mikrotik.conf

# Restart rsyslog
sudo systemctl restart rsyslog

# Restart parser
sudo systemctl restart ids-syslog-parser

Benefici della Migrazione

Prima (tutte le connessioni):

  • ⚠️ 417 MILIONI di log accumulati in poche settimane
  • ⚠️ Database pieno ogni 7 giorni
  • ⚠️ Pulizia giornaliera necessaria

Adesso (solo connessioni in ingresso):

  • Volume ridotto del 50-70% (stima)
  • Retention 7 giorni più che sufficiente
  • Training ML più veloce (meno dati da processare)
  • Database stabile e performante

Troubleshooting

Problema: Log senza timestamp in /var/log/mikrotik/raw.log

Causa: Template rsyslog non applicato Soluzione:

sudo /opt/ids/deployment/setup_rsyslog.sh
sudo systemctl restart rsyslog

Problema: Parser NON salva dati in database

Causa: Parser non riesce a parsare log senza timestamp Soluzione:

# Verifica formato log
head -5 /var/log/mikrotik/raw.log

# Se manca timestamp, applica fix rsyslog (vedi sopra)

# Restart parser dopo fix
sudo systemctl restart ids-syslog-parser

Problema: Database non si popola

Causa: Connessione database fallita o credenziali errate Soluzione:

# Verifica connessione
psql $DATABASE_URL -c "SELECT 1;"

# Verifica errori parser
sudo journalctl -u ids-syslog-parser -n 100 --no-pager | grep ERROR

Note Importanti

  1. NON modificare manualmente /var/log/mikrotik/raw.log - è gestito da rsyslog
  2. Dopo ogni modifica rsyslog, riavvia il servizio: sudo systemctl restart rsyslog
  3. Pulizia automatica dei log vecchi è configurata nel cron (ore 03:00)
  4. Retention 7 giorni è sufficiente per training ML

Riferimenti

  • Configurazione RSyslog: deployment/rsyslog/99-mikrotik.conf
  • Script Setup RSyslog: deployment/setup_rsyslog.sh
  • Parser Python: python_ml/syslog_parser.py
  • Cleanup automatico: deployment/setup_cron_cleanup.sh