OpenVPN
Aus Fedorawiki.de
| | Dieser Artikel ist noch nicht vollständig. Du kannst helfen, ihn zu bearbeiten. |
Ein Virtual Private Network (VPN) ist ein Computernetz, das zum Transport privater oder vertraulicher Daten ein öffentliches Netz nutzt. Teilnehmer eines VPN können Daten wie in einem internen LAN austauschen, sie müssen dazu nicht direkt miteinander verbunden sein, sondern können irgendwo auf der Welt sein. Die Übermittlung der Daten geschieht in verschlüsselten Tunneln zwischen den Endpunkten. Endpunkte können Netzwerke oder Clients sein. Eine Verbindung zwischen Netz wird über einen Tunnel zwischen VPN-Client und VPN-Server (Concentrator) aufgebaut. Meist wird der Tunnel dabei durch SSL gesichert, aber auch ein ungesicherter Klartexttunnel kann ein VPN sein. Bei OpenVPN wird OpenSSL zur Verschlüsselung verwendet.
Inhaltsverzeichnis |
Server-Seite
OpenVPN-Server installieren
Das OpenVpn-Paket steht im Repository von Fedora zur Verfügung und kann mit yum installiert werden.
Zertifikate
Es gibt auch den Weg mit Schlüsseln zu arbeiten, aber es wird aus Sicherheitsgründen empfohlen mit Zertifikaten die Authentifizierung durchzuführen. Zur Verschlüsselung wird OpenSSL verwendet. Da OpenSSL bereits alle Werkzeuge mitbringt, um eine CA (Certificate Authority) aufzusetzen und damit Server- und Client-Zertifikate sowie die dazugehörigen privaten Schlüssel zu erstellen. Die Zertifikate sollen nach X.509-Standard sein und tragen deshalb die Endung *.pem.
Generieren der CA
Es sollte in ein Verzeichnis gewechselt werden, welches später die Zertifikate beinhalten soll. Zum Beispiel /usr/share/openvpn
Dann noch weitere Verzeichnisse zur Aufnahme der erzeugten Dateien erzeugen.
mkdir private && mkdir certs
Nun werden die Zertifikate erzeugt.
openssl genrsa -aes256 -out private/vpn_ca_key.pem 2048 Generating RSA private key, 2048 bit long modulus .+++ ...........................................................................+++ e is 65537 (0x10001) Enter pass phrase for vpn-ca.pem: Verifying - Enter pass phrase for vpn-ca.pem:
Nun der zweite Befehl erledigt den Restr.
openssl req -new -x509 -days 3650 -key private/vpn_ca_key.pem -out vpn_ca.pem -set_serial 1
Die Zugriffsrechte müssen nun angepasst werden
Server-Zertifikate
Eine Text-Datei anlegen, damit verhindert werden kann, dass man etwas doppelt macht.
touch index.txt && echo "01" > serial-nr
Server-Zertifikat erzeugen.
openssl req -new -newkey rsa:1024 -out certs/server_csr.pem -nodes -keyout private/server_key.pem -days 3650 Generating a 1024 bit RSA private key ..........++++++ .........................++++++ writing new private key to 'server_key.pem' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [GB]:ch State or Province Name (full name) [Berkshire]:berne Locality Name (eg, city) [Newbury]:berne Organization Name (eg, company) [My Company Ltd]:fedora-wiki.de Organizational Unit Name (eg, section) []:fab Common Name (eg, your name or your server's hostname) []:vpn_server03.fomain Email Address []:root@localhost Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:password An optional company name []:
und danach
openssl x509 -req -in certs/server_csr.pem -out certs/server_cert.pem -CA vpn_ca.pem -CAkey private/vpn_ca_key.pem -CAserial serial-nr -days 3650 Signature ok subject=/C=ch/ST=berne/L=berne/O=fedorawiki.de/CN=fab/emailAddress=root@localhost Getting CA Private Key Enter pass phrase for private/vpn_ca_key.pem:
Nun kann das csr-File gelöscht werden.
rm certs/server_csr.pem
Zertifikate für die VPN-Clients
Dies geschieht analog zu den Server-Zertifikaten
openssl req -new -newkey rsa:1024 -out certs/user01_lan_csr.pem -nodes -keyout private/user01_lan_key.pem -days 3650
zweiter Schritt
openssl x509 -req -in certs/user01_lan_csr.pem -out certs/user01_lan_cert.pem -CA vpn_ca.pem -CAkey private/vpn_ca_key.pem -CAserial serial-nr -days 3650
Generieren der Diffie Hellman Parameter
openssl dhparam -out dh1024.pem 1024 This is going to take a long time ........+...................................................+...... .....+.+...............................+.........+....+.............. ........................................+............................ ...................+........................................++*++*++*
Nun sollten noch alle *csr*-Files gelöscht werden.
Devices
Auf dem OpenVPN-Server muss in jedem Fall das IP-Forwarding (Routing) eingestellt sein, damit die Pakete auch weiterkommen und nicht verworfen werden. Es gibt zwei Arten von Devices bei OpenVPN, die für unterschiedliche Anwendungsarten verwendet werden.
tun-Device
Durch den VPN-Tunnel können mit diesem Device alle gängigen Netzwerkprotokolle auf IP-Layer 3 übermittelt werden. So ist es möglich Daten zu kopieren und E-Mails zu lesen, als wäre man in diesem LAN. Durch Routing wird die Übermittlung der Daten durch die verschiedenen Netzwerke geregelt. Die Konfigurations-Vorlagen sind für den Einsatz von tun-Devicen gemacht worden.
tap-Device
Das tap-Device wird verwendet beim Bridging. Wenn zwei Netze, das virtuelle VPN-Netz und das lokale Netzwerk, über eine Netzwerk-Brücke miteinander verbunden und im selben Subnetz vereint sind.
VPN-Server konfigurieren
Alle relevanten Informationen zur Konfiguration des Servers stehen unter /etc/openvpn/openvpn.conf
# Die Server-IP-Adresse ifconfig 10.10.0.1 255.255.255.0 # Port port 1194 # TCP oder UDP? proto udp mode server tls-server # Das tun Device erstellt einen IP-Tunnel, während das tap Device einen Ethernet-Tunnel aufbautt. dev tap # Dynamische IP-Adressen von 10.10.0.10-10.10.0.100 ifconfig-pool 10.10.0.10 10.10.0.100 # Die Pakete werden auf dieser Grösse gekapselt tun-mtu 1492 # fragment 1300 mssfix # Pfad zu den Zertifikaten ca certs/vpn_ca.pem cert certs/server_cert.pem key certs/server_key.pem # Diffie-Hellmann Parameter dh certs/dh1024.pem # Gleiche IP-Adresse in der nächsten Session ifconfig-pool-persist ipp.txt # Routet die Pakete zum internen Netzwerk #push "route 192.168.0.0 255.255.255.0" # Prüfung der Verbindung mittels Ping-Paket (wait=120sec) keepalive 10 120 # Authentifikation auth SHA1 # Der Verschlüsselungs-Algorithmus cipher aes-256-cbc # openvpn --show-ciphers for testing #Kompression comp-lzo # Setzen der Rechte nach dem Verbindungs-Aufbau user nobody group nogroup # Dies wird benötigt, da Benutzer nobody/group nobody persist-key persist-tun #Logging 0, (testing:5) verb 0
Firewall
Die Firewall muss die Pakete, welche durch den definierten Port kommen, durchlassen.
und
Client-Seite
Auf der Client-Seite muss ein VPN-Client installiert und konfiguriert werden. Es gibt diverse Clients für die diversen Desktop Envoirments und für die Konsole. Als Beispiel seien kVpnc, kovpn oder NetworkManager, dieser wird später separat behandelt, genannt.
Folgende Dateien müssen bei allen VPN-Clients auf sicherem Weg auf das Client-System übertragen werden.
- vpn-ca_key.pem
- user01_lan_cert.pem
- user01_lan_key.pem
Eine einefache Variante des Konfigurations-Files für den Client könnte so aussehen.
# Die Server-IP-Adresse remote [Server-IP-Adresse] # Port port 1194 # Festlegen als was fungiert wird tls-client pull # Das tun Device erstellt einen IP-Tunnel, während das tap Device einen Ethernet-Tunnel aufbautt. dev tap # Protokoll auswählen udp oder tcp proto udp # Auflösen des Hostnames des Servers (wegen nicht permanent mit dem Internet verbundenen Rechnern) resolv-retry infinite # Lokalen Port festlegen oder freigeben nobind # Verbindung immer gleich halten persist-key persist-tun #zu verwendende Zertifikate und Schlüssel ca vpn-ca.pem cert ZERTIFIKAT_cert.pem key SCHLUESSEL_key.pem # Verschlüsselung cipher AES-256-CBC # Komprimiernug comp-lzo # Authentifizierungsmethode auth SHA1 # "Gesprächigkeit" des Tunnels verb 3 # Silence repeating messages mute 20
OpenVPN-Client
Der Client befindet sich auch im Server-Paket von OpenVPN und lässt sich analog installieren.
Konsolen-VPN-Client
Der bekannteste Konsolen VPN-Client ist der Cisco VPN Client for Linux, vpnc bietet aber mehr Funktionalität und eine trivialere Installation. Fedora Extra stellt die Version 0.3.3-7.2 zur Verfügung.
Nach der Installation kann der Client als root gestartet werden und mal ein erster Test gemacht werden.
[root@localhost ~]# vpnc Enter IPSec gateway address: 192.168.10.10 Enter IPSec ID for 192.168.10.10: test Enter IPSec secret for test@192.168.10.10: Enter username for 192.168.10.10: root Enter password for root@192.168.10.10:
Da das ständige Eingeben der Daten nicht sehr komfortable ist, kann auch das File /etc/vpnc/vpnc.conf editiert werden und die Verbindungsdaten dort dauerhaft gespeichert werden.
#IPSec gateway my.vpn.gateway #IPSec ID my.ipsec.id #IPSec secret mysecret # your username goes here: #Xauth username # if you want to test rekeying specify nonzero seconds here: #Rekeying interval 0
Gemäss Readme funktioniert diese Version von vpnc nur mit IPSec-Tunnel, also kann sie eventuell nicht verwendet werden für OpenVPN-Verbindungen.
NetworkManager als VPN-Client
VPN-Verbindungen können auch mit dem NetworkManager eingerichtet und verwaltet werden. Die Installation erfolgt mit Hilfe von yum.
Die Konfiguration ist denkbar einfach.
| NetworkManager-OpenVPN | ||
|---|---|---|
| Start der VPN-Verbindungskonfiuration | Der Einstellungs-Dialog versteckt sich hinter dem Icon des NetworkManagers | |
| VPN-Verbindungen | Liste aller vorhandenen VPN-Verbindungen, nun auf Hinzufügen klicken | |
| Start des Assistent | Auf Weiter klicken. | |
| Auswahl des Verbindungs-Typ | in diesem Fall muss OpenVPN Client eingestellt werden | |
| Detail der Verbindung | In die Felder die Informationen gemäss eigenem Netzwerk eingeben. Die Speicherort der Zertifikate gemäss eigenem System eintragen. | |
Anwendungs-Beispiele
Im folgenden sollen diverse Anwendungs-Fälle näher betrachtet werden, die in der Praxis vorkommen können.
Über OpenVPN ins Internet
Zum Verständnis sei gesagt, dass das Internet nichts anderes ist als ein Netzwerk mit vielen Systemen, sprich der Weg zu allen IP-Adresse 0.0.0.0 mit allen Netzmasken 0.0.0.0. Wenn nun über eine OpenVPN-Verbindung eine Verbindung in dieses Netz gemacht werden möchte, muss eine Route eingetragen werden. Der OpenVPN-Server hat diese Verbindung. Der Client muss nun entsprechend angepasst werden. Die Konfigurations-Datei des Client wird leicht ergänzt.
remote [IP-Adresse des OpenVPN-Server (lokal)] dev tun ifconfig 10.10.0.2 10.10.0.1 (die getunnelten Adressen des Client und des Servers) secret blabla.txt port 1194 route-gateway 10.10.0.1 (Dies ist das Default-Gateway) route 0.0.0.0 0.0.0.0 (Route zu allen Rechnern)
wenn bereits ein Default-Gateway eingetragen, muss es mit der folgender Zeile umgeleitet werden.
route-gateway 10.10.0.1 redirect-gateway
Unter Umständes ist es nötig, die gewünschten DNS-Server manuell in die Konfiguration einzutragen.
Wireless LAN und VPN
Da Wireless-Verbindungen sehr einfach gesagt, so funktionieren, wie wenn der Client an eine Hub angeschlossen ist, ist es ein leichtes mit einem Analyse-Tool wie Wireshark, dem Nachfolger von Ethereal, den gesamten Verkehr aufzuzeichenen und nach interessanten Informationen zu durchsuchen. Wenn im WLAN eine Verschlüsselung verwendet wird, sprich es wird WEP oder WPA eingesetzt, wird die Sicherheit erhöht. Da sich in WEP diverse Implementierungsfehler eingeschlichten haben, kann mit ein bisschen Aufwand der Key der Verschlüsselung geknackt werden. WPA-verschlüsselte Netzwerke lassen sich in der Zwischenzeit auch knacken, der Aufwand ist aber um ein Vielfaches höher als bei WEP. Bei der Verwendung von VPN kann auf die Verschlüsselung per WEP oder WPA verzichtet werden, der Zugang zum Access Point ist einfacher zu managen und die Sicherheit wird erhöht, da alle Daten durch einen verschlüsselten VPN-Tunnel über ein offenes Medium transportiert werden und so nicht mehr belauscht werden können.
VPN und Proxy-Server
Bei Proxy-Servern tritt meistens das Problem auf, dass sie nur TCP-Pakete durchlassen, so müssen die UDP-Pakete "verpackt" werden, damit sie als TCP-Pakete erscheinen. Folgende Methoden werden von OpenVPN bei http-Proxy-Servern unterstützt
- keine Proxy-Authentifikation
- elementare Proxy-Authentifikation
- NTLM-Proxy-Authentifikation
Folgender Eintrag muss bei der Server- und der Client-Konfiguration eingetragen werden.
proto tcp
Alle proto udp-Zeilen in der Konfiguration müssen gelöscht werden.
Ebenfalls muss die Client-Konfiguration zwingend eine folgende Zeile eingefügt werden. Hier wäre der Proxy-Server mit der IP-Adresse 192.168.1.1 und dem Port 3128 in einer Standard-Konfiguration.
http-proxy 192.168.1.1 3128
Bei elementarer Proxy-Authentifikation
http-proxy 192.168.1.1 3128 stdin basic
Bei NTLM-Proxy-Authentifikation
http-proxy 192.168.1.1 3128 stdin ntlm
stdin öffnet einen Prompt für die Eingabe des Benutzernames und des Passwortes. Statt stdin kann auch eine Text-Datei verwendet werden mit Benutzernamen und dem Passwort. Die Text-Datei muss folgendes Format haben.
Benutzername Passwort
Die Datei als Beispiel unter /home/user/user.conf
http-proxy 192.168.1.1 3128 /home/user/user.conf basic
Mehrere Clients
Werden mehrere Clients eingesetzt, die auf einen VPN-Server zugreifen sollen, muss die Konfiguration minimal angepasst werden. Jeder Client braucht eine eigene Konfiguration, so lassen sich leicht auch Gruppen definieren.
Untertunneln der Firewall
Oftmals ist es so, dass in Firmen-Netzwerken oder öffentlichen Netzwerken nur der Port 80 für das Surfen offen ist und alle anderen Port geschlossen sind. In diesem Fall können dann die E-Mails nicht gelesen werden und auch sind keine Verbindungen per ssh möglich. Die Lösung dieses Problemes ist, dass alles durch den Port 80 geleitet wird und niemand etwas merken sollen, geschweige denn den Inhalt der Pakete lesen. Um den Datenstrom zu verbergen und so möglichst unauffällig zu bleiben, soll zudem mit Traffic Shaping gearbeitet werden.
Siehe auch
- Einfache Host-zu-Host-Verbindung mit OpenVPN einrichten - anderes Artikel zu OpenVPN mit statischen Schlüsseln
Links

