OpenVPN Dienst bequem aus der Konsole steuern

24 Okt

An meiner Hochschule wird OpenVPN eingesetzt um die W-Lan Verbindungen effektiv zu verschlüsseln. Da ich relativ viel in Linux unterwegs bin, und OpenVPN in diversen Window-Managern (i3, XFCE, KDE) und auf der Konsole nutze, suchte ich eine Möglichkeit, um OpenVPN bequem und sicher starten und stoppen zu können.

Es kommt – zumindest bei mir – häufiger vor, dass ich mit mehr als einem VPN verbunden bin. Ein simples „killall“ zum Terminieren einer einzelnen Verbindung ist in diesem Fall nicht angebracht. Ich erweiterte die OpenVPN Konfigurationen daher zunächst um folgende Zeilen (hier exemplarisch für die Konfiguration der FH):

writepid /var/run/openvpn-fh.pid

Dies erleichtert es zu überprüfen, ob ein Tunnel aufgebaut ist, und welcher Prozess für diesen Zuständig ist. Anschließend kann mit folgendem Script der Tunnel gestartet und gestoppt werden:

 

#!/bin/sh
 
PIDFILE=/var/run/openvpn-fh.pid
CONFIG=fh.ovpn
 
if [ "$1" != 'start' ] && [ "$1" != 'stop' ]; then
        echo "usage: $0 {start|stop}"
        exit 1
fi
 
if [ $(id -u) -ne 0 ]; then
        exec sudo $0 $1
        exit 1
fi
 
vpnrunning() {
        if [ ! -f $PIDFILE ]; then
                return 1
        else
                pid=$(cat $PIDFILE)
                if kill -0 $pid 2>/dev/null ; then
                        return 0
                else
                        return 1
                fi
        fi
}
 
case $1 in
        start)
                if vpnrunning; then
                        echo "openvpn already running" >&2
                else
                        exec openvpn --cd /etc/openvpn --config $CONFIG --daemon
                fi
                ;;
 
        stop)
                if vpnrunning; then
                        exec kill $(cat $PIDFILE)
                else
                        echo "openvpn is not running" >&2
                fi
                ;;
esac

Die Zeilen 3 und 4 beinhalten die wichtigsten Konfigurationspfade. Die Zeilen 6 bis 9 überprüfen die übergebenen Parameter auf Richtigkeit. Sofern der aufrufende Benutzer keine Root-Rechte hat, versucht der folgende Block (Zeilen 11-14), diese mittels sudo zu erlangen. Die Zeilen 16-27 prüfen, ob der VPN-Prozess bereits läuft. Der Rest des Scripts befasst sich damit, den entsprechenden Prozess bei Bedarf zu starten und zu stoppen.

Das Script liegt unter /usr/local/bin/fhvpn. Damit normale Benutzer VPN-Tunnel auf- und abbauen können, ist folgende Zeile in /etc/sudoers nötig:

myUser ALL=NOPASSWD: /usr/local/bin/fhvpn

et voilá. Nun kann mittels fhvpn start und fhvpn stop das VPN kontrolliert werden. Eine mögliche Verbesserung wäre, den Namen der VPN-Konfiguration als zweiten Parameter entgegenzunehmen. Dem Leser sei diese Aufgabe selbst überlassen.

Noch mehr Automatismus

Es gibt viele Möglichkeiten, um die WLan-Verbindung zu verwalten. Neben händisch Konfigurationen mit wpa-supplicant (besonders interessant ist hier der Bereich Roaming in Kombination mit den üblichen up und down-Scripten) gibt es beispielsweise den häufig installierten Networkmanager oder wicd. Lässt man diese nach erfolgreicher Verbindung den Tunnel automatisch aufbauen, muss in der OpenVPN-Config das Passwort für die Zertifikatsdatei hinterlegt werden. Ich möchte an dieser Stelle ausdrücklich auf die damit verbundenen Sicherheitsrisiken hinweisen, da dass Passwort im Klartext gespeichert werden muss.

echo "askpass client.p" >> /etc/openvpn/fh.ovpn
echo -n "mein-passwort" > /etc/openvpn/client.p
chmod 400 /etc/openvpn/client.p

Zumindest für wicd ist es zusätzlich nötig, Scipte anzulegen welche ohne Parameter gestartet werden können. Diese sehen z.B. so aus:

#!/bin/sh
 
exec fhvpn start

Diese Scripte können dann nach einer erfolgreichen Verbindung automatisch gestartet werden.

Have fun!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.