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

392 lines
11 KiB
Markdown

# 🗄️ 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! 🚀