ids.alfacom.it/extracted_idf/DATABASE_CLEANUP_GUIDE.md
marco370 0bfe3258b5 Saved progress at the end of the loop
Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 7a657272-55ba-4a79-9a2e-f1ed9bc7a528
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: 1c71ce6e-1a3e-4f53-bb5d-77cdd22b8ea3
2025-11-11 09:15:10 +00:00

11 KiB

🗄️ GUIDA PULIZIA AUTOMATICA IP - DATABASE SERVER (CON PULIZIE ORARIE)

📋 PANORAMICA

Sistema completo per la pulizia automatica degli IP bloccati direttamente nel database MySQL/MariaDB. Include stored procedure, eventi automatici e script per cron.

NOVITÀ: Supporto pulizie rapide orarie (1h, 12h, 24h)!

🚀 INSTALLAZIONE RAPIDA

1. Installazione nel Database

# Copia il file SQL sul server database
scp db_cleanup_ips.sql root@server_db:/tmp/

# Connettiti al database e esegui lo script
mysql -u root -p LOG_MIKROTIK < /tmp/db_cleanup_ips.sql

2. Installazione Script Cron

# Copia lo script bash sul server database  
scp db_cleanup_cron.sh root@server_db:/usr/local/bin/
chmod +x /usr/local/bin/db_cleanup_cron.sh

# Test funzionamento
/usr/local/bin/db_cleanup_cron.sh test

3. Configurazione Cron Database

# Aggiungi al crontab del server database
crontab -e

# Aggiungi questa riga per pulizia quotidiana alle 02:30
30 2 * * * /usr/local/bin/db_cleanup_cron.sh auto >> /var/log/cron_ddos_db.log 2>&1

🔧 COMPONENTI DEL SISTEMA

1. Stored Procedure cleanup_ddos_ips (Giorni)

Procedura principale per la pulizia degli IP basata su giorni:

CALL cleanup_ddos_ips(retention_days, list_name, dry_run);

2. 🆕 Stored Procedure cleanup_ddos_ips_hours (Ore)

NUOVA! Procedura per pulizie rapide basate su ore:

CALL cleanup_ddos_ips_hours(retention_hours, list_name, dry_run);

Parametri:

  • retention_hours: Ore di ritenzione (default: 24)
  • list_name: Nome lista da pulire (default: 'ddos_detect_v03')
  • dry_run: Modalità simulazione (default: FALSE)

Esempi:

-- Simulazione pulizia 1 ora
CALL cleanup_ddos_ips_hours(1, 'ddos_detect_v03', TRUE);

-- Pulizia reale 12 ore
CALL cleanup_ddos_ips_hours(12, 'ddos_detect_v03', FALSE);

-- Pulizia 24 ore altra lista
CALL cleanup_ddos_ips_hours(24, 'ddos_ia', FALSE);

3. Eventi Automatici MySQL

Pulizia Giornaliera (02:00)

-- Evento che pulisce automaticamente tutte le liste
CREATE EVENT daily_ddos_cleanup
ON SCHEDULE EVERY 1 DAY
STARTS TIMESTAMP(CURDATE() + INTERVAL 1 DAY, '02:00:00')

Pulizia Log Settimanale (Domenica 03:00)

-- Rimuove log di pulizia più vecchi di 30 giorni
CREATE EVENT weekly_log_cleanup
ON SCHEDULE EVERY 1 WEEK

4. Tabella Log ip_cleanup_log (Aggiornata)

Traccia tutte le operazioni di pulizia, incluse quelle orarie:

SELECT * FROM ip_cleanup_log ORDER BY operation_time DESC LIMIT 10;

Nuovi Tipi di Operazione:

  • CLEANUP_HOURS: Pulizia oraria reale
  • DRY_RUN_HOURS: Simulazione pulizia oraria

5. Viste di Monitoraggio (Aggiornate)

Sommario IP per Lista con Dettagli Orari

SELECT * FROM ip_list_summary;

Nuovi Campi:

  • last_1h: IP degli ultimi 1 ora
  • last_12h: IP degli ultimi 12 ore
  • older_1h: IP più vecchi di 1 ora
  • older_12h: IP più vecchi di 12 ore
  • older_24h: IP più vecchi di 24 ore

Statistiche Avanzate per Lista

SELECT get_ip_stats('ddos_detect_v03') as stats;

Output esempio:

Lista: ddos_detect_v03 | Totale: 1250 | >1h: 890 | >12h: 456 | >24h: 123 | >7gg: 12 | Range: 2024-01-15 - 2024-01-22

📊 CONFIGURAZIONI STANDARD

Politiche di Ritenzione per Lista

Lista Ritenzione Descrizione
ddos_detect_v03 7 giorni Sistema principale
ddos_ia 10 giorni Sistema IA legacy
ddos2-attackers 15 giorni Attackers v2
ddos3-attackers 20 giorni Attackers v3

🆕 Pulizie Rapide Orarie

Comando Ritenzione Uso Consigliato
1h 1 ora Pulizia molto aggressiva
12h 12 ore Pulizia giornaliera rapida
24h 24 ore Pulizia standard quotidiana

Scheduling Automatico

Operazione Frequenza Orario Descrizione
Pulizia IP Giornaliera 02:00 Tutte le liste
Pulizia Log Settimanale Dom 03:00 Log > 30 giorni
Pulizia Rapida Configurabile Varia Via comandi orari

🖥️ USO SCRIPT BASH (AGGIORNATO)

Comandi Principali

# Test connessione database
./db_cleanup_cron.sh test

# Statistiche complete con dettagli orari
./db_cleanup_cron.sh stats

🆕 Pulizie Rapide Predefinite

# Pulizia IP più vecchi di 1 ora
./db_cleanup_cron.sh 1h

# Pulizia IP più vecchi di 12 ore  
./db_cleanup_cron.sh 12h

# Pulizia IP più vecchi di 24 ore
./db_cleanup_cron.sh 24h

🆕 Simulazioni Pulizie Rapide

# Simula pulizia 1 ora
./db_cleanup_cron.sh 1h-dry

# Simula pulizia 12 ore
./db_cleanup_cron.sh 12h-dry

# Simula pulizia 24 ore
./db_cleanup_cron.sh 24h-dry

Pulizie Orarie Personalizzate

# Simulazione pulizia oraria personalizzata
./db_cleanup_cron.sh dry-run-hours 6 ddos_detect_v03

# Pulizia oraria personalizzata
./db_cleanup_cron.sh cleanup-hours 6 ddos_detect_v03

Pulizie Standard (Giorni)

# Simulazione pulizia standard
./db_cleanup_cron.sh dry-run 7 ddos_detect_v03

# Pulizia standard
./db_cleanup_cron.sh cleanup 7 ddos_detect_v03

# Pulizia automatica completa
./db_cleanup_cron.sh auto

📅 CONFIGURAZIONI CRON AVANZATE

# Pulizia quotidiana automatica
30 2 * * * /usr/local/bin/db_cleanup_cron.sh auto >> /var/log/ddos_db_cleanup.log 2>&1

# 🆕 Pulizia rapida IP > 1 ora ogni 2 ore
0 */2 * * * /usr/local/bin/db_cleanup_cron.sh 1h >> /var/log/ddos_1h.log 2>&1

# 🆕 Pulizia IP > 12 ore ogni 6 ore  
0 */6 * * * /usr/local/bin/db_cleanup_cron.sh 12h >> /var/log/ddos_12h.log 2>&1

# 🆕 Pulizia IP > 24 ore quotidiana alle 01:00
0 1 * * * /usr/local/bin/db_cleanup_cron.sh 24h >> /var/log/ddos_24h.log 2>&1

# Statistiche settimanali  
0 8 * * 1 /usr/local/bin/db_cleanup_cron.sh stats >> /var/log/ddos_stats.log 2>&1

Configurazioni Specializzate

# Pulizia aggressiva ogni ora (solo IP > 1h)
0 * * * * /usr/local/bin/db_cleanup_cron.sh 1h ddos_detect_v03 >> /var/log/ddos_aggressive.log 2>&1

# Pulizia moderata ogni 4 ore (IP > 12h)
0 */4 * * * /usr/local/bin/db_cleanup_cron.sh 12h ddos_detect_v03 >> /var/log/ddos_moderate.log 2>&1

# Pulizia personalizzata ogni 3 ore (IP > 6h)
0 */3 * * * /usr/local/bin/db_cleanup_cron.sh cleanup-hours 6 ddos_detect_v03 >> /var/log/ddos_custom.log 2>&1

🔍 MONITORAGGIO E DEBUG

Query di Verifica Aggiornate

-- Stato generale IP con dettagli orari
SELECT 
    list_name, 
    COUNT(*) as total,
    COUNT(CASE WHEN retrieved_at >= DATE_SUB(NOW(), INTERVAL 1 HOUR) THEN 1 END) as last_1h,
    COUNT(CASE WHEN retrieved_at >= DATE_SUB(NOW(), INTERVAL 12 HOUR) THEN 1 END) as last_12h,
    COUNT(CASE WHEN retrieved_at >= DATE_SUB(NOW(), INTERVAL 1 DAY) THEN 1 END) as last_24h,
    MIN(retrieved_at) as oldest, 
    MAX(retrieved_at) as newest
FROM ip_list GROUP BY list_name;

-- IP da pulire per diverse finestre temporali
SELECT 
    list_name,
    COUNT(CASE WHEN retrieved_at < DATE_SUB(NOW(), INTERVAL 1 HOUR) THEN 1 END) as older_1h,
    COUNT(CASE WHEN retrieved_at < DATE_SUB(NOW(), INTERVAL 12 HOUR) THEN 1 END) as older_12h,
    COUNT(CASE WHEN retrieved_at < DATE_SUB(NOW(), INTERVAL 1 DAY) THEN 1 END) as older_24h,
    COUNT(CASE WHEN retrieved_at < DATE_SUB(NOW(), INTERVAL 7 DAY) THEN 1 END) as older_7d
FROM ip_list 
GROUP BY list_name;

-- Log operazioni orarie recenti
SELECT operation_time, operation_type, list_name, records_removed, status, message
FROM ip_cleanup_log 
WHERE operation_type IN ('CLEANUP_HOURS', 'DRY_RUN_HOURS')
AND operation_time >= DATE_SUB(NOW(), INTERVAL 24 HOUR)
ORDER BY operation_time DESC;

-- Statistiche avanzate con dettagli orari
SELECT get_ip_stats('ddos_detect_v03') as stats;

Test Manuali Nuove Funzionalità

# Test pulizie rapide (dry run)
./db_cleanup_cron.sh 1h-dry
./db_cleanup_cron.sh 12h-dry  
./db_cleanup_cron.sh 24h-dry

# Test pulizie orarie personalizzate
./db_cleanup_cron.sh dry-run-hours 2 ddos_detect_v03
./db_cleanup_cron.sh dry-run-hours 6 ddos_ia

# Statistiche dettagliate
./db_cleanup_cron.sh stats

# Test stored procedure dirette
mysql -u root -p -e "CALL cleanup_ddos_ips_hours(1, 'ddos_detect_v03', TRUE);" LOG_MIKROTIK

🎯 SCENARI DI USO DELLE PULIZIE ORARIE

1. 📍 Pulizia Aggressiva (1 ora)

# Ogni 2 ore rimuovi IP più vecchi di 1 ora
0 */2 * * * /usr/local/bin/db_cleanup_cron.sh 1h

# Caso d'uso: Attacchi intensi, necessità di liberare rapidamente IP

2. ⚖️ Pulizia Bilanciata (12 ore)

# Ogni 6 ore rimuovi IP più vecchi di 12 ore  
0 */6 * * * /usr/local/bin/db_cleanup_cron.sh 12h

# Caso d'uso: Gestione normale con pulizie frequenti

3. 🛡️ Pulizia Standard (24 ore)

# Quotidiana alle 01:00, rimuovi IP più vecchi di 24 ore
0 1 * * * /usr/local/bin/db_cleanup_cron.sh 24h

# Caso d'uso: Complemento alla pulizia settimanale standard

4. 🔧 Pulizia Personalizzata

# Ogni 4 ore rimuovi IP più vecchi di 8 ore
0 */4 * * * /usr/local/bin/db_cleanup_cron.sh cleanup-hours 8

# Caso d'uso: Configurazione specifica per ambiente

⚠️ NOTE IMPORTANTI AGGIORNATE

Performance e Sicurezza

  1. Pulizie Orarie: Più frequenti ma meno impattanti
  2. Monitoring: Log separati per diverse tipologie di pulizia
  3. Rollback: Sempre testare con dry-run prima della produzione
  4. Carico DB: Distribuire pulizie per evitare sovraccarichi

Best Practices

  1. Inizia con dry-run: Sempre testare prima
  2. Gradualità: Implementare pulizie orarie gradualmente
  3. Monitoring: Monitorare performance del database
  4. Backup: Backup prima di implementare nuove pulizie

🎉 VANTAGGI DELLE PULIZIE ORARIE

Reattività: Risposta rapida a situazioni critiche
Granularità: Controllo fine della ritenzione
Flessibilità: Adattamento a diverse necessità operative
Performance: Operazioni più piccole e distribuite
Monitoraggio: Tracciamento dettagliato per finestre temporali
Automazione: Gestione completa senza intervento manuale

📚 ESEMPI PRATICI COMPLETI

Scenario 1: Sistema Ad Alta Frequenza

# Crontab per sistema con molti attacchi
*/30 * * * * /usr/local/bin/db_cleanup_cron.sh 1h >> /var/log/ddos_frequent.log 2>&1
0 */4 * * * /usr/local/bin/db_cleanup_cron.sh 12h >> /var/log/ddos_moderate.log 2>&1
0 2 * * * /usr/local/bin/db_cleanup_cron.sh auto >> /var/log/ddos_daily.log 2>&1

Scenario 2: Sistema Bilanciato

# Crontab per sistema standard
0 */6 * * * /usr/local/bin/db_cleanup_cron.sh 12h >> /var/log/ddos_12h.log 2>&1
0 1 * * * /usr/local/bin/db_cleanup_cron.sh 24h >> /var/log/ddos_24h.log 2>&1
30 2 * * * /usr/local/bin/db_cleanup_cron.sh auto >> /var/log/ddos_weekly.log 2>&1

Scenario 3: Sistema Conservativo

# Crontab per sistema con ritenzione lunga
0 12 * * * /usr/local/bin/db_cleanup_cron.sh 24h >> /var/log/ddos_daily.log 2>&1
30 2 * * * /usr/local/bin/db_cleanup_cron.sh auto >> /var/log/ddos_weekly.log 2>&1

Con queste nuove funzionalità hai un controllo completo e granulare della pulizia IP! 🚀