# 📡 Configurazione Router MikroTik per IDS

Questa guida spiega come configurare i router MikroTik per inviare i log al server IDS.

## 🎯 Obiettivo

Configurare i router MikroTik per:
1. Generare log delle connessioni di rete (firewall)
2. Inviare i log tramite Syslog al server AlmaLinux
3. Popolare automaticamente il database PostgreSQL

## 🔧 Configurazione Passo-Passo

### Step 1: Connettiti al Router MikroTik

Via SSH o Winbox, connettiti al router MikroTik con utente amministratore.

### Step 2: Crea Azione Syslog

Configura il router per inviare log al server IDS:

```mikrotik
/system logging action
add name=ids-server target=remote remote=192.168.1.100 remote-port=514
```

**IMPORTANTE**: Sostituisci `192.168.1.100` con l'**IP reale del tuo server AlmaLinux**.

### Step 3: Abilita Logging Firewall

Configura quali log inviare al server IDS:

```mikrotik
/system logging
add action=ids-server topics=firewall,info
add action=ids-server topics=account,info  
add action=ids-server topics=system,error
```

Questo invia:
- **firewall,info**: Log di connessioni firewall (accept/drop/reject)
- **account,info**: Log di autenticazione
- **system,error**: Errori di sistema

### Step 4: Abilita Logging Connessioni Firewall

Aggiungi regole firewall per loggare le connessioni:

```mikrotik
# Log connessioni accettate (per analisi traffico normale)
/ip firewall filter
add chain=forward action=accept log=yes log-prefix="ACCEPT: " comment="Log accepted connections"

# Log connessioni droppate (potenziali attacchi)
add chain=forward action=drop log=yes log-prefix="DROP: " comment="Log dropped connections"

# Log connessioni da internet (input chain)
add chain=input action=accept log=yes log-prefix="INPUT-ACCEPT: " in-interface=ether1 comment="Log input from WAN"
```

**NOTA**: Modifica `ether1` con il nome della tua interfaccia WAN.

### Step 5: (Opzionale) Abilita Connection Tracking

Per statistiche dettagliate sulle connessioni:

```mikrotik
/ip firewall connection tracking
set enabled=yes

/system logging
add action=ids-server topics=firewall,connection
```

## 📊 Verifica Configurazione

### Sul Router MikroTik

Verifica che i log vengano generati:

```mikrotik
/log print where topics~"firewall"
```

Dovresti vedere log delle connessioni.

### Sul Server AlmaLinux

Verifica ricezione log:

```bash
# Controlla log syslog
tail -f /var/log/mikrotik/raw.log

# Verifica porta 514 in ascolto
netstat -ulnp | grep 514

# Controlla database
psql -U ids_user -d ids_database -c "SELECT COUNT(*) FROM network_logs;"
```

## 🔍 Esempio Log MikroTik

Log firewall tipico che arriva al server:

```
Jan 15 10:30:45 router1 firewall,info: DROP: in:ether1 out:bridge, src-mac 00:11:22:33:44:55, proto TCP, 203.0.113.45:54321->192.168.1.10:80, len 60
```

Questo viene parsato e salvato nel database come:

```json
{
  "timestamp": "2025-01-15 10:30:45",
  "router_name": "router1",
  "source_ip": "203.0.113.45",
  "source_port": 54321,
  "destination_ip": "192.168.1.10",
  "destination_port": 80,
  "protocol": "tcp",
  "packet_length": 60,
  "action": "drop"
}
```

## ⚙️ Configurazione Avanzata

### Filtrare Solo Traffico Esterno

Per loggare solo traffico da internet (non LAN):

```mikrotik
/ip firewall filter
add chain=forward action=accept log=yes log-prefix="WAN-TRAFFIC: " \
    in-interface=ether1 comment="Log only WAN traffic"
```

### Rate Limiting Log

Per evitare troppi log e sovraccarico:

```mikrotik
/ip firewall filter
add chain=forward action=accept log=yes log-prefix="ACCEPT: " \
    limit=100/1s,5:packet comment="Rate limited logging"
```

Questo limita a max 100 log/secondo.

## 🚀 Automazione Multi-Router

Per configurare automaticamente più router, crea uno script:

```bash
#!/bin/bash
# configure_all_routers.sh

ROUTERS=(
    "192.168.1.1:admin:password"
    "192.168.2.1:admin:password"
    "192.168.3.1:admin:password"
)

IDS_SERVER="192.168.100.50"  # IP server AlmaLinux

for router in "${ROUTERS[@]}"; do
    IFS=':' read -r ip user pass <<< "$router"
    
    echo "Configurando router $ip..."
    
    sshpass -p "$pass" ssh "$user@$ip" "/system logging action add name=ids-server target=remote remote=$IDS_SERVER remote-port=514"
    sshpass -p "$pass" ssh "$user@$ip" "/system logging add action=ids-server topics=firewall,info"
    
    echo "Router $ip configurato!"
done
```

## 📝 Note Importanti

### Prestazioni
- Ogni router invia ~100-1000 log/minuto in base al traffico
- Il server può gestire facilmente 10+ router
- I log vengono processati in tempo reale dal syslog_parser.py

### Sicurezza
- Syslog usa UDP porta 514 (non criptato)
- Configura firewall per accettare solo da IP router fidati:
  ```bash
  firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.0.0/16" port port="514" protocol="udp" accept'
  ```

### Risoluzione Problemi

**Log non arrivano al server:**
1. Verifica connettività: `ping <IP_SERVER>` dal router
2. Controlla firewall server: `firewall-cmd --list-all`
3. Verifica rsyslog: `systemctl status rsyslog`

**Database non si popola:**
1. Verifica syslog_parser in esecuzione: `ps aux | grep syslog_parser`
2. Controlla log parser: `tail -f /var/log/ids/syslog_parser.log`
3. Verifica permessi file: `ls -la /var/log/mikrotik/raw.log`

## ✅ Checklist Finale

- [ ] Server rsyslog configurato e in ascolto su porta 514
- [ ] Firewall server aperto per UDP 514
- [ ] Router configurati per inviare log a server IDS
- [ ] Log visibili in `/var/log/mikrotik/raw.log`
- [ ] Syslog parser in esecuzione e popola database
- [ ] Database contiene log: `SELECT COUNT(*) FROM network_logs;`
- [ ] Sistema ML può addestrare con dati reali

---

**Prossimo Step**: Dopo 24h di raccolta log, esegui il primo training ML!
