User Logging

Aus OpenVPN Wiki

Wechseln zu: Navigation, Suche

Einfaches User Logging mit Hilfe eines Batch Scripts unter Windows unter Nutzung der OpenVPN Umgebungsvariablen

Testsystem OpenVPN Server: GUI von Mathias Sundman, (release 1.0.3 mit OpenVPN 2.0.9) auf W2K SP4 Professional

Testsystem OpenVPN Client: GUI von Mathias Sundman, (release 1.0.3 mit OpenVPN 2.0.9) auf WinXP SP2 Professional


Das Komplett-Installationspackage (OpenVPN + GUI) wurde serverseitig als Dienst installiert, damit der OpenVPN Server selbständig startet und sich connected, auch wenn kein Windows User angemeldet ist. In diesem Zusammenhang wurde auch der Registry Eintrag HKEY_LOCAL_MACHINE/Software/OpenVPNGUI/Service auf „1“ gesetzt. Dies hat zur Folge, dass über das GUI Symbol im Systray nun der Windows-Dienst auch manuell gestoppt/getartet werden kann. Weiterhin zeigt das Symbol nun auch wieder die richtigen Farben für den jeweiligen Connect-Status an. Dies ist aber für das Userlogging nicht von Bedeutung sondern erleichtert Wartungsarbeiten, wenn der Admin mal am System angemeldet ist. Ansonsten wurden als Grundlage die Standard Konfig Dateien server.ovpn und client.ovpn genutzt. Auf die weiteren Einstellungen bzgl. Firewall, Port-Forwarding, Routing u.s.w. wird hier nicht weiter eingegangen. Es wird vorausgesetzt, dass ein Tunnel normal etabliert werden kann.

Grundsätzlich bringt der OpenVPN Server ja von Hause aus schon verschiedene Log Funktionalitäten mit. Nur leider haben mir diese alle nicht 100%ig zugesagt. Die Standard Server Log Datei enthält zwar viele Informationen, ist aber für normales User Accounting viel zu kryptisch. Wenn alles fertig eingerichtet ist und zur Zufriedenheit läuft, brauche ich nicht ständig diese ganzen Systeminformationen sondern eigentlich nur "wer" sich "wann" angemeldet hat.
Eine weitere Variante ist die Management Funktion, welche ich in der Server Konfig aktivieren kann. Diese gibt dann an eine definierte IP Adresse über einen festgelegten Port ständig Syslog Daten aus. Mit einem entsprechenden Syslogger kann man diese Daten abfangen, filtern, anzeigen und speichern. Auch diese Variante habe ich getestet. Dazu habe ich den User Manager von Mertech installiert (http://www.mertech.com.au/mertech-products-openvpnusermanager.aspx). Leider traten dabei ein paar Schwierigkeiten auf. Der Syslogger ließ sich nicht als Dienst installieren, sprich, man muss ihn manuell nach Anmelden am Windows System starten und auch einrichten. Damit er auch selbständig startet, ohne dass jedesmal ein User angemeldet sein muss, wurde ein Application-to-Service Tool installiert, welches den Syslogger als Systemdienst automatisch bei Windowsstart mit hochfährt. Nur leider werden Dienste unter dem Systemkonto gestartet und haben dann sämtliche Einstellungen vergessen, mit denen man sie vorher konfiguriert hatte. Am Ende liefen diese Dienste alle nicht 100%ig stabil oder deaktivierten sich, wenn der User sich wieder vom Windows abmeldete. In meinen Augen alles nicht befriedigend und stabil genug für eine produktive Umgebung.


Nun zur Umsetzung des einfachen User Loggings mit Hilfe eines Batch Scriptes:

Damit jeder User später anhand seines "Common Name" in einer Log Datei identifiziert werden kann, wurden erst mal Einzelzertifikate generiert, deren Common Name eindeutig den User beschreiben. Die Zertifikate könnten also "Max_Mustermann" oder "User1" heißen.


Als Nächstes wurde in der serverseitigen OpenVPN Konfig Datei server.ovpn folgende Zeilen ergänzt:

client-connect "c:\\programme\\openvpn\\log\\logon.bat"
client-disconnect "c:\\programme\\openvpn\\log\\logoff.bat"

Die Option "client-connect" bewirkt, dass OpenVPN, nachdem ein Client sich connected hat, das im nachfolgenden Pfad liegende Batch File ausführt. Diese Option funktioniert nur, wenn der OpenVPN Prozess als VPN Server konfiguriert ist. Als VPN Client werden diese Optionen ignoriert.
Die Option "client-disconnect" bewirkt, dass OpenVPN, nachdem sich ein Client disconnected hat, das im nachfolgenden Pfad liegende Batch File ausführt. Auch diese Option funktioniert nur, wenn der OpenVPN Prozess als Server konfiguriert ist.

Inhalt der logon.bat (client-connect Batch File)

echo logon %common_name% %trusted_ip% %date% %time% >> d:\pfad\log\logon.log
exit /B 0

Der Befehl "echo" erzeugt eine Ausgabe der nachfolgenden Zeichen/Variablen. Mit ">>" wird diese Ausgabe dann an die Datei "logon.log" umgeleitet.
Hier tauchen nun auch die beiden Umgebungsvariablen "common_name" und "trusted_ip" auf, die nun als Windows Umgebungsvariablen in "%" Zeichen gesetzt werden müssen. Außerdem werden jetzt mit %date% und %time% weitere Windows eigene Systemvariablen dem Log hinzugefügt.


Inhalt der logoff.bat (client-disconnect Batch File)

echo logoff %common_name% %trusted_ip% %date% %time% %bytes_sent% %bytes_received% >> d:\pfad\log\logon.log
exit /B 0

Zusätzlich zur logon.bat kommen hier lediglich die beiden OpenVPN Umgebungsvariablen "bytes_sent" und "bytes_received" dazu, die beim client-disconnect Ereignis vom OpenVPN Prozess zur Verfügung gestellt werden. Und natürlich wurde die Zeichenkette "logon" gegen ein "logoff" ausgetauscht.


Wenn die Batch Files ordnungsgemäß laufen, wird beim An- und Abmelden von Usern folgende Log Datei generiert:

logon Max_Mustermann 12.34.56.78 Di 02.10.2007 17:37:32,78 
logon Barbara_Beispiel 13.24.35.46 Di 02.10.2007 17:38:58,54 
logoff Max_Mustermann 12.34.56.78 Di 02.10.2007 17:42:38,58 19605 23531 
logoff Barbara_Beispiel 13.24.35.46 Di 02.10.2007 17:45:25,71 22303 28357

Zu bemerken wäre noch, dass der OpenVPN Prozess "Disconnect" Ereignisse scheinbar nur mit Verzögerung mitbekommt bzw. weitermeldet. Es können daher schon mal ein paar Minuten ins Land gehen, bis ein Logoff Eintrag im Logfile generiert wird. Dieser Effekt tritt aber nach meinen Erfahrungen auch bei der Variante mit den Sysloggern auf. Dort sogar noch gravierender, da stellenweise noch Stunden später einige User als "Online" angezeigt wurden, obwohl sie sich schon lange disconnected hatten.

Natürlich kann man die Sache nach Belieben noch ausbauen. Allein schon der OpenVPN Prozess stellt eine Vielzahl weiterer Umgebungsvariablen bereit, die auf diese einfache Art ausgelesen und mitgeloggt werden können. Eine Auflistung aller OpenVPN Umgebungsvariablen enthält die OpenVPN 2.0.x Man Page http://openvpn.net/man.html

Persönliche Werkzeuge