# Sophos Firewall Manager

Zentrales Dashboard und Regelmanager für Sophos XGS Firewalls in IKK Kliniken (Ilmenau, Arnstadt).

## Übersicht

Der Sophos Firewall Manager bietet eine einheitliche Oberfläche zur Verwaltung mehrerer Sophos XGS Firewalls. Regeln, VPN-Tunnel und Systemstatus aller Standorte werden zentral überwacht und verwaltet — inklusive automatischer Sophos XML API Integration.

- **Produktion:** https://sophos-manager.c3po42.de
- **Download:** https://downloads.c3po42.de/sophos-manager/
- **Port:** 8970

## Technologie

| Komponente | Technologie |
|---|---|
| Backend | FastAPI (Python 3.10+) |
| Datenbank | SQLite (aiosqlite, WAL-Modus) |
| Auth | JWT (python-jose) + bcrypt |
| Sophos API | httpx → Sophos XML API (Port 4444) |
| Frontend | Single-Page (static/index.html) |
| Live-Updates | Server-Sent Events (SSE) |

## Datenmodell

| Tabelle | Beschreibung |
|---|---|
| `benutzer` | Benutzerkonten (ADMIN, VIEWER) |
| `firewall` | Verwaltete Sophos Firewalls (Host, API-Zugangsdaten, Standort, Modell) |
| `fw_status` | Zeitreihe: CPU, RAM, Disk, Sessions, Uptime, SSL-VPN-User |
| `fw_regel` | Firewall-Regeln (Source/Dest Zone+Net, Dienste, Aktion, Position) |
| `fw_vpn` | VPN-Tunnel (IPSec, SSL-VPN) mit Status |
| `fw_alert` | Alarme (INFO, WARNUNG, KRITISCH) mit Bestätigung |

## API-Endpunkte

### Auth
| Methode | Pfad | Beschreibung |
|---|---|---|
| POST | `/api/auth/login` | Login (username/password → JWT) |
| GET | `/api/auth/me` | Aktueller Benutzer |

### Dashboard
| Methode | Pfad | Beschreibung |
|---|---|---|
| GET | `/api/dashboard` | Übersicht aller Firewalls mit KPIs |

### Firewalls CRUD
| Methode | Pfad | Beschreibung |
|---|---|---|
| GET | `/api/firewalls` | Alle aktiven Firewalls |
| POST | `/api/firewalls` | Firewall hinzufügen (ADMIN) |
| PUT | `/api/firewalls/{id}` | Firewall bearbeiten (ADMIN) |
| DELETE | `/api/firewalls/{id}` | Firewall deaktivieren (ADMIN) |

### Firewall-Status
| Methode | Pfad | Beschreibung |
|---|---|---|
| GET | `/api/firewalls/{id}/status` | Status-Historie (letzte N Stunden) |

### Firewall-Regeln
| Methode | Pfad | Beschreibung |
|---|---|---|
| GET | `/api/firewalls/{id}/regeln` | Regeln einer Firewall (nach Position sortiert) |
| POST | `/api/firewalls/{id}/regeln` | Regel erstellen (ADMIN) |
| PUT | `/api/regeln/{id}` | Regel bearbeiten (ADMIN) |
| DELETE | `/api/regeln/{id}` | Regel löschen (ADMIN) |

### VPN
| Methode | Pfad | Beschreibung |
|---|---|---|
| GET | `/api/firewalls/{id}/vpn` | VPN-Tunnel einer Firewall |
| GET | `/api/vpn` | Alle VPN-Tunnel (standortübergreifend) |

### Alerts
| Methode | Pfad | Beschreibung |
|---|---|---|
| GET | `/api/alerts` | Alarme (Filter: firewall_id, offen) |
| POST | `/api/alerts/{id}/bestaetigen` | Alarm bestätigen |
| POST | `/api/alerts/alle-bestaetigen` | Alle Alarme bestätigen |

### Sync & Push
| Methode | Pfad | Beschreibung |
|---|---|---|
| POST | `/api/firewalls/{id}/sync` | Manueller Pull von Firewall (ADMIN) |
| POST | `/api/firewalls/{id}/push-regel/{rid}` | Regel an Firewall senden (ADMIN) |

### SSE & System
| Methode | Pfad | Beschreibung |
|---|---|---|
| GET | `/api/events` | Server-Sent Events (Live-Updates) |
| GET | `/api/health` | Health-Check |
| GET | `/docs/readme` | README als Markdown |
| GET | `/docs/handbuch` | Benutzerhandbuch als Markdown |
| GET | `/produkt` | Produktseite |

## Sophos XML API Integration

Der Manager kommuniziert über die **Sophos Firewall XML API** (Port 4444, HTTPS):

- **Get:** FirewallRule, Interface, IPSecConnection, SSLVPNPolicy
- **Set (add/update):** FirewallRule
- **Remove:** FirewallRule

Die XML-Anfragen werden per `httpx` an `/webconsole/APIController` gesendet. SSL-Verifizierung ist deaktiviert (selbstsignierte Zertifikate auf den Firewalls).

## Polling Engine

Automatisches Polling aller aktiven Firewalls alle 60 Sekunden (konfigurierbar über `POLL_INTERVAL`):

1. Erreichbarkeit prüfen
2. Firewall-Regeln synchronisieren
3. VPN-Tunnel aktualisieren
4. Bei Unerreichbarkeit: Kritischer Alert (max. 1 pro Stunde)
5. SSE-Broadcast an alle verbundenen Clients

## Demo-Modus

Beim ersten Start werden automatisch Demo-Daten angelegt:

- **Login:** `admin` / `admin`
- **3 Firewalls:** FW-Ilmenau (XGS 2300), FW-Arnstadt (XGS 2100), FW-DMZ (XGS 3300)
- **13 Firewall-Regeln** (LAN-to-WAN, MedTech-Block, VPN, WLAN, DMZ, Default Deny)
- **5 VPN-Tunnel** (IPSec Site-to-Site + SSL-VPN)
- **6 Alerts** (VPN, System, Threat, Lizenz)
- **72 Status-Einträge** (24h Historie pro Firewall)

## Umgebungsvariablen

| Variable | Default | Beschreibung |
|---|---|---|
| `DB_PATH` | `sophos_manager.db` | Pfad zur SQLite-Datenbank |
| `JWT_SECRET` | `sophos-manager-dev-secret-2026` | JWT-Signaturschlüssel |
| `PORT` | `8970` | Server-Port |
| `POLL_INTERVAL` | `60` | Polling-Intervall in Sekunden |

## Installation

### Windows (Einzeiler)
```powershell
irm https://downloads.c3po42.de/sophos-manager/install.ps1 | iex
```

### Linux (Einzeiler)
```bash
curl -fsSL https://downloads.c3po42.de/sophos-manager/install.sh | bash
```

### Manuell
```bash
pip install -r requirements.txt
python main.py
# Browser öffnet http://localhost:8970
```

## Deploy

```bash
python deploy_vps.py          # VPS-Deploy (systemd, Nginx, DNS, SSL)
python deploy_downloads.py    # Download-Seite deployen
```
