178 lines
6.7 KiB
Markdown
178 lines
6.7 KiB
Markdown
|
|
# 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 https://git.admins.tech/no/vpn-con-checker.git
|
|
cd vpn-con-checker
|
|
```
|
|
|
|
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. Kopiere `config.conf.sample` zu `config.conf` und passe die 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: [[email protected]](mailto:[email protected])
|
|
GitHub: [DeinGitHub](https://git.admins.tech/no)
|
|
|
|
---
|
|
|
|
## **Lizenz**
|
|
|
|
Dieses Projekt steht unter der MIT-Lizenz. Weitere Informationen findest du in der Datei `LICENSE`.
|