# Wie sicher ist OpenVPN? Kann man es als root laufen lassen?

## BlackEye

Hallo Leute,

ich habe folgendes Vorhaben:

Für unsere Kunden brauchen wir so etwas wie ein "extranet". Kunden sollen auf Dienste zugreifen können die nicht im Internet zugänglich sind. Außerdem muss ich auf die Server unsere Kunden zugreifen können um gewisse Dienste zu verwenden. Da habe ich an ein VPN gedacht. Und zwar stelle ich bei unseren Kunden einen VPN-Client in Form eines alix-Boards auf, der eine Verbindung mit unserem VPN-Server herstellt. Funktioniert prima.

Mein Problem ist nun, dass ich Serverseitig bestimmte Routings nach Verbindungsaufbau setzen muss. Dafür würde ich gern das client-connect/client-disconnect Skript benutzen. Dort Routen zu setzen bedeutet aber dass ich root-Rechte brauche. Ergo kann ich den OpenVPN-Server nicht in einer chroot-Umgebung laufen lassen und auch nicht mit anderen Rechten. Es sei denn jemand hätte eine andere Idee wie ich die Routen dynamisch hinzufügen könnte.

Meine Frage ist daher wie sicher der OpenVPN-Serverdienst einzuschätzen ist? Sollte ich lieber einen komplett eigenständigen und abgeschotteten Server für den Fall der Fälle dafür bereit stellen oder macht man sich hier jetzt zu viele Gedanken?

Besten Dank schon mal für die Antworten und viele Grüße,

Martin

----------

## manuels

 *Quote:*   

> Dafür würde ich gern das client-connect/client-disconnect Skript benutzen.

 

Wenn ich dich richtig verstehe, gehören diese Scripte zu OpenVPN.

Nutz doch die entsprechenden Konfigurationsdateien von Gentoo (/etc/conf.d/net*).

----------

## BlackEye

Vielleicht habe ich mich etwas missverständlich ausgedrückt.

Es gibt bei mir einen OpenVPN-Server.

X Kunden werden sich mit diesem Server verbinden. Jeder Kunde hat ein anderes Netzwerk (andere IP Netze).

Was ich machen möchte ist:

Beim Verbindungsaufbau eines VPN-Clients eines unserer Kunden mit unserem OpenVPN-Server wird das client-connect Skript aufgerufen. Dieses Skript weiß, aufgrund von Informationen die es vom OpenVPN-Server geliefert bekommt, welcher Kunde gerade eine Verbindung aufgebaut hat und welches IP-Netz dahinter verfügbar ist. Daher kann ich nun dynamisch eine Route zu diesem Netz hinzufügen (das Gateway ist dabei die ip der VPN-Gegenstelle beim Kunden). Beim Verbindungsabbau wird mit dem client-disconnect Skript diese Route wieder entfernt.

Da all diese Aktionen dynamisch stattfinden kann ich mit Gentoo-Boardmitteln nichts erreichen.

----------

## 69719

Ich weiss zwar nicht was du mit connect/disconnect script meinst, aber die einfachste weise ist es am Server mittels der Client Konfiguration die entsprechenden Routen zu push'en.

----------

## BlackEye

 *escor wrote:*   

> Ich weiss zwar nicht was du mit connect/disconnect script meinst, aber die einfachste weise ist es am Server mittels der Client Konfiguration die entsprechenden Routen zu push'en.

 

client-connect wird auf dem Server ausgeführt, wenn sich ein Client mit dem Server verbindet. client-disconnect hingegen wenn sich ein Client wieder vom Server trennt.

Laut man-Page ist die "push"-Option aber eine Serverseitige Option. D.h. ich kann mit "push" eine Route beim Client eintragen lassen. Nicht aber umgekehrt wie ich es bräuchte

----------

## py-ro

Warum musst du zusätzlichen Routen beim Server eintragen lassen, dieser hat doch automatisch die Routen zu den VPNs?

Aber was spräche den zum Beispiel dagegen dem openvpn per sudo die Möglichkeit zu geben die Routen zu ändern? 

Py

----------

## 69719

Ich verstehe nicht wieso du die Routen ständig am Server anlegen und löschen willst?

Ich vermute du hast verschiedene Netze? Trotzdem ist das sinnfrei, da diese sowieso

angelegt werden wenn sich die Clients verbinden, daher kann man sie auch gleich

fest konfigurieren.

----------

## BlackEye

Nein - die Routen werden nicht selbstständig angelegt. Wie soll ich das erklären...

Also. Der Server, auf dem der OpenVPN-Serverdienst läuft, gehört in ein Netzwerk. Sagen wir mal 10.0.0.0/24

Der Server selbst hat wegen mir die IP 10.0.0.1

Jetzt definiere ich mal zwei Kundennetzwerke. Rein fiktiv:

Kunde A: 192.168.0.0/24

Kunde B: 192.168.1.0/24

Jetzt funktioniert OpenVPN so:

Es wird ein Zwischennetz definiert, aus dem der Server und jeder verbundene Client eine IP-Adresse zugewiesen bekommt. Sagen wir mal: 172.16.0.0/24

Der OpenVPN-Server benutzt ein TAP-Device als virtuelle Netzwerkkarte für die VPN-Verbindungen. Dieses TAP-Device bekommt die erste IP aus dem Zwischennetz: 172.16.0.1

Der VPN-Client von Kunde A (Netz 192.168.0.0/24) erzeugt vor Verbindungsaufbau dynamisch ein TAP-Device. Jetzt verbindet er sich mit dem vpn-server. Der vpn-server weist diesem Client eine freie IP aus dem Zwischennetz zu. In diesem Fall 172.16.0.2. Das TAP-Device beim Client von Kunde A bekommt also die IP 172.16.0.2

Dasselbe geschieht bei Kunde B - nur mit der IP 172.16.0.3

Routen werden hier erstmal keine weiteren gesetzt. Ich kann nun vom server die IP 172.16.0.2 und 172.16.0.3 anpingen. Nicht aber IPs aus den Netzen dahinter.

Die Option "push route ..." ist leider eine Serveroption. Damit könnte ich den CLIENTS sagen, sie möchten doch bitte eine route für das Netz hinter dem Server bei sich setzen. Das ist aber genau das Gegenteil von dem was ich möchte. Die Clients haben in meinem Netz nichts zu suchen.

Jetzt kommt also das ominöse "client-connect" Skript zum Einsatz. Dieses wird beim Server angestoßen, wenn sich ein Client (z.B. Kunde A) erfolgreich verbunden hat. Mit diesem Skript kann ich nun die folgende Route setzen: route add -net 192.168.0.0/24 gw 172.16.0.2

Jetzt kann ich auf das Netz hinter dem vpn-client von Kunde A zugreifen (diverse Vorkehrungen wie z.b. Masquerading usw auf dem vpn-client des Kunden mal vorausgesetzt). Trennt sich die Verbindung zum Kunden A wird automatisch das "client-disconnect" Skript aufgerufen, welches: "route del -net 192.168.0.0/24 gw 172.16.0.2" ausführt. So einfach ist das.

Wäre da nicht das Problem dass routen nur als root gesetzt werden dürfen...

----------

## 69719

Du willst, dass der Server die Clients mit ihren richtigen Netzwerk Adressen ansprechen kann, sprich ping, telnet usw...?

Dies könntest du über die openvpn.conf am Server realisieren.

```

route 192.168.0.0 255.255.255.0 gw 172.16.0.1

route 192.168.1.0 255.255.255.0 gw 172.16.1.1

```

Damit werden die Routen für jedes Netz beim starten des OpenVPN Server gesetzt und müssen nicht ständig angelegt und entfernt werden.

----------

## BlackEye

Ja wäre natürlich auch eine Idee. Dann könnte ich die Routen auch permanent festlegen. Auch wenn die Clients nicht verbunden sind. Ist zwar irgendwie unschön, aber ginge zur Not.

----------

## 69719

Unschön finde ich die Script Lösung wo man mit sudo oder anderem arbeiten muss und dann auch noch prüfen muss ob es nun erfolgreich gesetzt wurde oder nicht.

So ist es zentral gehalten und leichter zu durchschauen, ordentlich kommentieren ist natürlich Voraussetzung.

----------

