# VPN Monitoring Script ## **Überblick** Dieses Projekt implementiert ein flexibles und robustes VPN-Überwachungsskript, das den Netzwerkverkehr und die VPN-Funktionalität überprüft. Das Skript bietet zeitabhängige Prüfungen und die Möglichkeit, bei Erkennung von Problemen den VPN-Dienst automatisch neu zu starten. Das Skript wurde modular aufgebaut, um die Wartbarkeit und Erweiterbarkeit zu verbessern. ## **Funktionen** 1. **Netzwerkverkehrsprüfung**: - Misst den eingehenden und ausgehenden Netzwerkverkehr eines bestimmten Netzwerkinterfaces. - Verwendet Schwellenwerte zur Bewertung der Verbindung. - Automatischer Dienstneustart bei Abweichung von Schwellwerten. 2. **SQL-basierte Aktivitätsprüfung** (außerhalb der Hauptarbeitszeit): - Überprüft die Datenbank auf Aktivitäten, die durch spezifische Benutzer oder Dienste ausgelöst wurden. - Erkennt inaktive Verbindungen und leitet notwendige Schritte ein. 3. **Automatischer Neustart des VPN-Dienstes**: - Führt einen Dienstneustart remote über SSH aus. - Überprüft die Funktionalität nach dem Neustart. 4. **Detailliertes Logging**: - JSON-basiertes Logging für maschinenlesbare und gut strukturierte Ausgaben. - Logrotation zum Schutz vor übermäßigem Speicherverbrauch. 5. **Konfigurierbarkeit**: - Anpassbare Zeitfenster, Schwellenwerte, Datenbankeinstellungen und SSH-Verbindungsdetails. - Modularer Aufbau für einfache Anpassungen und Erweiterungen. --- ## **Installationsanleitung** ### **Systemanforderungen** - Betriebssystem: Linux (z. B. Ubuntu, Debian, CentOS) - Pakete: - `ifstat` - `mysql-client` - `openssh-client` - `logrotate` - `bc` (für Gleitkommaoperationen) ### **Installation** 1. Klone das Repository oder kopiere die Skriptdateien auf deinen Server: ```bash git clone cd vpn-monitor ``` 2. Stelle sicher, dass die erforderlichen Pakete installiert sind: ```bash sudo apt update sudo apt install ifstat mysql-client openssh-client logrotate bc ``` 3. Konfiguriere die Berechtigungen: ```bash chmod +x vpn_monitor.sh chmod +x functions/*.sh ``` 4. Passe die `config.conf` Datei an: - Definiere Netzwerkinterface, Schwellenwerte, Datenbankeinstellungen, SSH-Details und Logdateipfad. 5. (Optional) Füge die Logrotation hinzu: - Kopiere die Datei `logrotate/vpn_monitor` nach `/etc/logrotate.d/`: ```bash sudo cp logrotate/vpn_monitor /etc/logrotate.d/ ``` 6. Plane das Skript mit Cron: - Öffne den Cron-Editor: ```bash crontab -e ``` - Füge den Eintrag hinzu, um das Skript regelmäßig auszuführen: ```bash */5 * * * * /path/to/vpn_monitor.sh ``` --- ## **Nutzung** ### **Konfiguration** Die Einstellungen werden in der Datei `config.conf` vorgenommen. Nachfolgend eine Übersicht der wichtigsten Parameter: | Parameter | Beschreibung | Standardwert | |----------------------|-----------------------------------------------------------|-----------------------| | `INTERFACE` | Netzwerkinterface zur Überwachung | `ens19` | | `LOG_FILE` | Pfad zur Logdatei | `/var/log/vpn_monitor.log` | | `THRESHOLD_INBOUND` | Schwellenwert für eingehenden Verkehr (KB/s) | `0.5` | | `THRESHOLD_OUTBOUND` | Schwellenwert für ausgehenden Verkehr (KB/s) | `0.5` | | `MEASUREMENT_COUNT` | Anzahl der Messzyklen | `10` | | `INTERVAL` | Intervall zwischen Messungen (Sekunden) | `6` | | `DB_USER` | Benutzername für die Datenbank | `username` | | `DB_PASSWORD` | Passwort für die Datenbank | `password` | | `DB_NAME` | Name der Datenbank | `database` | | `SSH_KEY` | Pfad zur SSH-Schlüsseldatei | `/path/to/private_key`| | `SSH_USER` | Benutzername für SSH | `user` | | `SSH_HOST` | Hostname oder IP der SSH-Verbindung | `remote_host` | | `SERVICE_NAME` | VPN-Dienst automatisch neu starten | `false` | | `SERVICE_NAME` | Name des zu überprüfenden Dienstes | `ipsec.service` | --- ### **Ablauf** #### **Innerhalb der Hauptarbeitszeit (07:00-18:00 Uhr)** - Misst eingehenden und ausgehenden Netzwerkverkehr. - Vergleicht die Durchschnittswerte mit den definierten Schwellenwerten. - Protokolliert den Status. - Führt bei Bedarf einen Neustart des VPN-Dienstes aus. #### **Außerhalb der Hauptarbeitszeit (18:00-07:00 Uhr)** - Überprüft SQL-Aktivitäten: - Letzter Eintrag eines bestimmten Benutzers. - Letzter Eintrag eines spezifischen Dienstes im Log. - Leitet einen Neustart ein, wenn Aktivitätskriterien nicht erfüllt sind. --- ## **Fehlerbehandlung** Das Skript behandelt potenzielle Fehler folgendermaßen: 1. **Netzwerkfehler**: - Kein Output von `ifstat`: Meldet einen Fehler und bricht ab. 2. **SQL-Verbindungsfehler**: - Fehlschlagende SQL-Abfragen werden geloggt und führen zum Abbruch. 3. **SSH-Fehler**: - Fehler beim Neustart des Dienstes werden detailliert protokolliert. 4. **Dienstprüfung**: - Nach Neustart überprüft `ipsec statusall` den Dienststatus. Fehlerhafte Zustände führen zur Eskalation. --- ## **Logging** - Logs werden standardmäßig unter `/var/log/vpn_monitor.log` gespeichert. - JSON-Format für maschinenlesbare Logs. - Beispiel eines Logeintrags: ```json { "timestamp": "2024-11-28 12:45:00", "level": "INFO", "message": "Network traffic is above thresholds. Avg In: 0.6 KB/s, Avg Out: 0.7 KB/s." } ``` --- ## **Erweiterungsideen** 1. **Benachrichtigungssystem**: - Integration eines E-Mail- oder Push-Benachrichtigungssystems bei Eskalationen. 2. **Multithreading**: - Parallele Prüfung mehrerer Netzwerkinterfaces oder SQL-Datenbanken. 3. **Web-Dashboard**: - Echtzeit-Monitoring und Visualisierung der Logs über eine Weboberfläche. 4. **Externe API-Integration**: - Verknüpfung mit Monitoring-Tools wie Zabbix oder Prometheus. --- ## **Autoren** - **Dein Name** E-Mail: [deine.email@example.com](mailto:deine.email@example.com) GitHub: [DeinGitHub](https://github.com/DeinGitHub) --- ## **Lizenz** Dieses Projekt steht unter der MIT-Lizenz. Weitere Informationen findest du in der Datei `LICENSE`.