# Auto-Blocking Setup - IDS MikroTik ## 📋 Panoramica Sistema di auto-blocking automatico che rileva e blocca IP con **risk_score >= 80** ogni 5 minuti. **Componenti**: 1. `python_ml/auto_block.py` - Script Python che chiama API ML 2. `deployment/systemd/ids-auto-block.service` - Systemd service 3. `deployment/systemd/ids-auto-block.timer` - Timer esecuzione ogni 5 minuti --- ## 🚀 Installazione su AlmaLinux ### 1️⃣ Prerequisiti Verifica che questi servizi siano attivi: ```bash sudo systemctl status ids-ml-backend # ML Backend FastAPI sudo systemctl status postgresql-16 # Database PostgreSQL ``` ### 2️⃣ Copia File Systemd ```bash # Service file sudo cp /opt/ids/deployment/systemd/ids-auto-block.service /etc/systemd/system/ # Timer file sudo cp /opt/ids/deployment/systemd/ids-auto-block.timer /etc/systemd/system/ # Verifica permessi sudo chown root:root /etc/systemd/system/ids-auto-block.* sudo chmod 644 /etc/systemd/system/ids-auto-block.* ``` ### 3️⃣ Rendi Eseguibile Script Python ```bash chmod +x /opt/ids/python_ml/auto_block.py ``` ### 4️⃣ Installa Dipendenza Python (requests) ```bash # Attiva virtual environment cd /opt/ids/python_ml source venv/bin/activate # Installa requests pip install requests # Esci da venv deactivate ``` ### 5️⃣ Crea Directory Log ```bash sudo mkdir -p /var/log/ids sudo chown ids:ids /var/log/ids ``` ### 6️⃣ Ricarica Systemd e Avvia Timer ```bash # Ricarica systemd sudo systemctl daemon-reload # Abilita timer (autostart al boot) sudo systemctl enable ids-auto-block.timer # Avvia timer sudo systemctl start ids-auto-block.timer ``` --- ## ✅ Verifica Funzionamento ### Test Manuale (esegui subito) ```bash # Esegui auto-blocking adesso (non aspettare 5 min) sudo systemctl start ids-auto-block.service # Controlla log output journalctl -u ids-auto-block -n 30 ``` **Output atteso**: ``` [2024-11-25 12:00:00] 🔍 Starting auto-block detection... ✓ Detection completata: 14 anomalie rilevate, 14 IP bloccati ``` ### Verifica Timer Attivo ```bash # Status timer systemctl status ids-auto-block.timer # Prossime esecuzioni systemctl list-timers ids-auto-block.timer # Ultima esecuzione journalctl -u ids-auto-block.service -n 1 ``` ### Verifica IP Bloccati **Database**: ```sql SELECT COUNT(*) FROM detections WHERE blocked = true; ``` **MikroTik Router**: ``` /ip firewall address-list print where list=blocked_ips ``` --- ## 📊 Monitoring ### Log in Tempo Reale ```bash # Log auto-blocking tail -f /var/log/ids/auto_block.log # O via journalctl journalctl -u ids-auto-block -f ``` ### Statistiche Blocchi ```bash # Conta esecuzioni ultimo giorno journalctl -u ids-auto-block --since "1 day ago" | grep "Detection completata" | wc -l # Totale IP bloccati oggi journalctl -u ids-auto-block --since today | grep "IP bloccati" ``` --- ## ⚙️ Configurazione ### Modifica Frequenza Esecuzione Edita `/etc/systemd/system/ids-auto-block.timer`: ```ini [Timer] # Cambia 5min con frequenza desiderata (es: 10min, 1h, 30s) OnUnitActiveSec=10min # Esegui ogni 10 minuti ``` Poi ricarica: ```bash sudo systemctl daemon-reload sudo systemctl restart ids-auto-block.timer ``` ### Modifica Threshold Risk Score Edita `python_ml/auto_block.py`: ```python "risk_threshold": 80.0, # Cambia soglia (80, 90, 100, etc) ``` Poi riavvia timer: ```bash sudo systemctl restart ids-auto-block.timer ``` --- ## 🛠️ Troubleshooting ### Problema: Nessun IP bloccato **Verifica ML Backend attivo**: ```bash systemctl status ids-ml-backend curl http://localhost:8000/health ``` **Verifica router configurati**: ```sql SELECT * FROM routers WHERE enabled = true; ``` Deve esserci almeno 1 router! ### Problema: Errore "Connection refused" ML Backend non risponde su porta 8000: ```bash # Riavvia ML backend sudo systemctl restart ids-ml-backend # Verifica porta listening netstat -tlnp | grep 8000 ``` ### Problema: Script non eseguito **Verifica timer attivo**: ```bash systemctl status ids-auto-block.timer ``` **Forza esecuzione manuale**: ```bash sudo systemctl start ids-auto-block.service journalctl -u ids-auto-block -n 50 ``` --- ## 🔄 Disinstallazione ```bash # Stop e disabilita timer sudo systemctl stop ids-auto-block.timer sudo systemctl disable ids-auto-block.timer # Rimuovi file systemd sudo rm /etc/systemd/system/ids-auto-block.* # Ricarica systemd sudo systemctl daemon-reload ``` --- ## 📝 Note - **Frequenza**: 5 minuti (configurabile) - **Risk Threshold**: 80 (solo IP critici) - **Timeout**: 180 secondi (3 minuti max per detection) - **Logs**: `/var/log/ids/auto_block.log` + journalctl - **Dipendenze**: ids-ml-backend.service, postgresql-16.service --- ## ✅ Checklist Post-Installazione - [ ] File copiati in `/etc/systemd/system/` - [ ] Script `auto_block.py` eseguibile - [ ] Dipendenza `requests` installata in venv - [ ] Directory log creata (`/var/log/ids`) - [ ] Timer abilitato e avviato - [ ] Test manuale eseguito con successo - [ ] IP bloccati su MikroTik verificati - [ ] Monitoring attivo (journalctl -f)