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