# 🗄️ 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 ```bash # 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 ```bash # 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 ```bash # 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: ```sql 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: ```sql 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:** ```sql -- 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) ```sql -- 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) ```sql -- 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: ```sql 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 ```sql 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 ```sql 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 ```bash # Test connessione database ./db_cleanup_cron.sh test # Statistiche complete con dettagli orari ./db_cleanup_cron.sh stats ``` ### 🆕 Pulizie Rapide Predefinite ```bash # 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 ```bash # 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 ```bash # 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) ```bash # 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 ### Database Server (Recommended) ```bash # 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 ```bash # 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 ```sql -- 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à ```bash # 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) ```bash # 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) ```bash # 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) ```bash # 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 ```bash # 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 ```bash # 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 ```bash # 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 ```bash # 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! 🚀