Implement a systemd timer and Python script to periodically detect and automatically block malicious IP addresses based on risk scores, improving the application's security posture. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 7a657272-55ba-4a79-9a2e-f1ed9bc7a528 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: 05ab2f73-e195-4de9-a183-cd4729713b92 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/449cf7c4-c97a-45ae-8234-e5c5b8d6a84f/7a657272-55ba-4a79-9a2e-f1ed9bc7a528/31VdIyL
5.0 KiB
5.0 KiB
Auto-Blocking Setup - IDS MikroTik
📋 Panoramica
Sistema di auto-blocking automatico che rileva e blocca IP con risk_score >= 80 ogni 5 minuti.
Componenti:
python_ml/auto_block.py- Script Python che chiama API MLdeployment/systemd/ids-auto-block.service- Systemd servicedeployment/systemd/ids-auto-block.timer- Timer esecuzione ogni 5 minuti
🚀 Installazione su AlmaLinux
1️⃣ Prerequisiti
Verifica che questi servizi siano attivi:
sudo systemctl status ids-ml-backend # ML Backend FastAPI
sudo systemctl status postgresql-16 # Database PostgreSQL
2️⃣ Copia File Systemd
# 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
chmod +x /opt/ids/python_ml/auto_block.py
4️⃣ Installa Dipendenza Python (requests)
# 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
sudo mkdir -p /var/log/ids
sudo chown ids:ids /var/log/ids
6️⃣ Ricarica Systemd e Avvia Timer
# 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)
# 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
# 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:
SELECT COUNT(*) FROM detections WHERE blocked = true;
MikroTik Router:
/ip firewall address-list print where list=blocked_ips
📊 Monitoring
Log in Tempo Reale
# Log auto-blocking
tail -f /var/log/ids/auto_block.log
# O via journalctl
journalctl -u ids-auto-block -f
Statistiche Blocchi
# 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:
[Timer]
# Cambia 5min con frequenza desiderata (es: 10min, 1h, 30s)
OnUnitActiveSec=10min # Esegui ogni 10 minuti
Poi ricarica:
sudo systemctl daemon-reload
sudo systemctl restart ids-auto-block.timer
Modifica Threshold Risk Score
Edita python_ml/auto_block.py:
"risk_threshold": 80.0, # Cambia soglia (80, 90, 100, etc)
Poi riavvia timer:
sudo systemctl restart ids-auto-block.timer
🛠️ Troubleshooting
Problema: Nessun IP bloccato
Verifica ML Backend attivo:
systemctl status ids-ml-backend
curl http://localhost:8000/health
Verifica router configurati:
SELECT * FROM routers WHERE enabled = true;
Deve esserci almeno 1 router!
Problema: Errore "Connection refused"
ML Backend non risponde su porta 8000:
# Riavvia ML backend
sudo systemctl restart ids-ml-backend
# Verifica porta listening
netstat -tlnp | grep 8000
Problema: Script non eseguito
Verifica timer attivo:
systemctl status ids-auto-block.timer
Forza esecuzione manuale:
sudo systemctl start ids-auto-block.service
journalctl -u ids-auto-block -n 50
🔄 Disinstallazione
# 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.pyeseguibile - Dipendenza
requestsinstallata 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)