http://www.pronix.de -> Tutorials -> OpenVPN Tutorial -> Advanced -> Trafficanalyse

OpenVPN Trafficanalyse

Da mich persönlich die Netzwerklast von OpenVPN interessiert hat, habe ich mir Gedanken über eine Traffic Analyse gemacht.

Die folgende Beschreibung bringt die Trafficdaten in eine MySQL Datenbank und ermöglicht eine Ausgabe mit einfachen MySQL Querys.

OpenVPN bietet die Möglichkeit eigene Scripte/Befehle beim Verbindungsaufbau und beim beenden der Verbindung auszuführen.
Wenn das Netzwerk im UDP Modus läuft, gilt eine Verbindung als beendet, wenn der Timeout aus der keepalive Option erreicht ist. Ebenso werden die disconnect Scripte ausgeführt, wenn der Server einen SIGUSR1 erhält, oder heruntergefahren wird.
Beachten Sie, dass Sie das Signal SIGUSR1 nicht senden sollten, falls der Server Port kleiner als 1025 ist und der Server unter einer anderen Userkennung als root läuft.
Wenn OpenVPN SIGHUP1 empfängt, wird die Bindung an den Port gelöst und dann neu aufgebaut. Ein unpriviligierter User hat aber keine Berechtigung sich an einen der Ports kleiner als 1025 zu binden, weshalb der Server beendet werden muss.

OpenVPN stellt für die eigenen Scripte(oder Befehle/Programme) die folgenden Umgebungsvariablen zur Verfügung aus denen wir den Traffic ermitteln können.

  • $ifconfig_pool_local_ip
    Die locale IP des Client.
  • $ifconfig_pool_remote_ip
    Die remote IP des Client.
  • $common_name
    Der CommonName des Client Zertifikates.

Zusätzlich werden für die disconnect Scripte noch diese Umgebungsvariablen zur Verfügung gestellt:

  • $bytes_received
    Die Anzahl der empfangenen Bytes.
  • $bytes_sent
    Die Anzahl der gesendeten Bytes.

Hierduch haben wir die Möglichkeit, die Verbindungen zu dokumentieren, indem wir beim Verbindungsaufbau die IPs und den CommonName des Client notieren und beim beenden der Verbindung den Traffic hinzufügen.

Damit die Statistiken aktuell bleiben, können wir dem Server einmal pro Tag das Signal SIGHUP1 per Cronjob senden(insofern der Server auf einem Port höher als 1024 lauscht), oder wir restarten den Server einmal pro Tag mit unserem init Script.

Falls Sie die Variante wählen, dem Server ein SIGHUP1 zu senden, müssen Sie noch die folgenden Optionen in die Konfigurationsdatei des Server einfügen, um den Server anzuweisen ifconfig, die Routingbefehle, das einlesen der Keys und IPs nicht neu auszuführen, sondern die Daten im Cache zu behalten, da ihm beim Userswitching die Rechte dazu entzogen wurden.

persist-key
persist-tun
persist-local-ip
persist-remote-ip

Das Programm, dass sich auf der nächsten Seite befindet loggt den Traffic in einer MySQL Datenbank.

Weiter mit Das Analyseprogramm