# 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): ```bash template(name="MikroTikRawFormat" type="string" string="%msg%\n") ``` Salvava solo: `forward: in: ...` **ADESSO** (✅ corretto): ```bash template(name="MikroTikRawFormat" type="string" string="%TIMESTAMP% %HOSTNAME% %msg%\n") ``` Salva: `Nov 22 08:15:30 FIBRA forward: in: ...` ### 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: 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: 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 ```bash 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 ```bash ./push-gitlab.sh ``` **Messaggio commit**: "Fix rsyslog template - Add timestamp to logs" ### STEP 3: Aggiornamento sul Server AlmaLinux ```bash 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 ```bash 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 ```bash tail -5 /var/log/mikrotik/raw.log ``` **Output atteso** (con timestamp!): ``` Nov 22 08:15:30 FIBRA forward: in: 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 ```bash 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 ```bash 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: ```bash # Ping per generare log UDP /ping 8.8.8.8 count=5 ``` #### 5.2 Verifica Arrivo Log ```bash # 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: ```bash # 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**: ```bash 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**: ```bash # 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**: ```bash # 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`