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
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 realeDRY_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 oralast_12h: IP degli ultimi 12 oreolder_1h: IP più vecchi di 1 oraolder_12h: IP più vecchi di 12 oreolder_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
Database Server (Recommended)
# 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
- Pulizie Orarie: Più frequenti ma meno impattanti
- Monitoring: Log separati per diverse tipologie di pulizia
- Rollback: Sempre testare con dry-run prima della produzione
- Carico DB: Distribuire pulizie per evitare sovraccarichi
Best Practices
- Inizia con dry-run: Sempre testare prima
- Gradualità: Implementare pulizie orarie gradualmente
- Monitoring: Monitorare performance del database
- 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! 🚀