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
392 lines
11 KiB
Markdown
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! 🚀 |