Grundlagen VPN und dessen Nutzung
Quelle:
http://www.online-tutorials.net/security/openvpn-tutorial/tutorials-t-69-209.html
http://www.vpnforum.de/wiki/index.php/OVPN-Linux
http://www.imped.net/oss/misc/openvpn-2.0-howto-edit.html#examples
http://www.64-bit.de/dokumentationen/netzwerk/a/012/DE-VPN-HOWTO-3.html
http://www.vpnforum.de/wiki/index.php/Config_ServerNET_Routing
Infos:
OpenVPN dient zum Aufbau eines Tunnels und ist für alle *BSD, Linux Mac OS X und Windows PCs verfügbar.
OpenSSL ist eine Open-Source-Version des SSL/TLS-Protokolls, und hat die Aufgabe sichere, verschlüsselte Verbindungen aufzubauen. SSL wird vor allem bei HTTP, aber auch bei Applikationen wie z.B. SSH, und OpenVPN eingesetzt.
DSA (Digital Signature Standard) Standard der US-Regierung für Digitale Signaturen von der NSA entwickelt: kann nur für Entschlüsselung verwendet werden RSA (nach Erfindern benannt): für Ver- und Entschlüsselung sowie für digitale Signaturen verwendbar Schlüsselpaar: privat (decode,sign,secret) öffentlich (encode, check)
Schlüsselverteilung: Empfänger: erzeugt Private Key & Public Key Public Key-> Sender: verschlüsselt mit Public Key von Empfänger den zu sendenden Inhalt <- verschlüsselter Inhalt Empfänger: entschlüsselt mit seinem Private Key den Inhalt vom Sender
Es wird benötigt:
Windows:
Cisco VPN Client
Debian:
apt-get install openvpn // zum Aufbau einer VPN Verbindung apt-get install openssl // zum erstellen der Zertifikate für eine verschlüsselte Verbindung
Openvpn mit PSK
Openvpn mit einem verteiltem Schlüssel betreiben
Preshared Key erzeugen
openvpn --genkey --secret static.key
1. server.conf erstellen
dev tun ifconfig 10.8.0.1 10.8.0.2 secret static.key
2. client.conf erstellen
remote myremote.mydomain dev tun ifconfig 10.8.0.2 10.8.0.1 secret static.key
1. Schlüssel für Certificate Authority erstellen
openssl genrsa -aes256 -out private/vpn-cakey.pem 2048
%genrsa – RSA Parameter erzeugen
%-aes256 – Verschlüsselungsalgorithmus
%-out – als Datei ausgeben
%2048 – 2048 Bit Schlüssel
\\
2. Zertifikat erstellen
openssl req -new -x509 -days 365 -key private/vpn-cakey.pem -out vpn-ca.pem -set_serial 1
%reg – X.509 Anfrage erstellen
%-new – neue Anfrage schicken
%-x509 – X.509 Zertifikattyp
%-days 365 – Gültigkeit des Zertifikates
%-key – verwendeter Masterschlüssel vpn-cakey.pem
%-out – als Datei ausgeben
%-set_serial 1 – Seriennummer die hochgezählt wird
3. Zugriffsrechte auf „private“ Verzeichnis entziehen
chmod 0700 private
4. Zertifikate für den Server erstellen
Inhaltsverzeichnis für die Zertifikate erstellen:
touch /usr/local/ssl/index.txt && echo "01" > /usr/local/ssl/serial
5. Zertifikatsanfrage für den Schlüssel vom Server erstellen
Hinweis: Option "Common Name (eg. YOUR name) []:<server> wird später von OpenVPN in der Option "tls-remote <server>" verwendet.
openssl req -new -newkey rsa:2048 -out certs/servercsr.pem -nodes -keyout private/serverkey.pem -days 365
%reg – X.509 Anfrage erstellen
%-new – neue Anfrage schicken
%-newkey – neuen Schlüsselbund erstellen
%rsa:2048 – RSA Schlüssellänge
%-out – als Datei ausgeben
%-nodes – kein Passwort auf Certifikate (sollte bei Clientzertifikaten nicht verwendet werden)
%-keyout – Ausgabe in Datei
%servercsr.pem – Zertifikatsanfrage
%-days 365 – Gültigkeit des Zertifikates
openssl x509 -req -in certs/servercsr.pem -out certs/servercert.pem -CA vpn-ca.pem -CAkey private/vpn-cakey.pem -CAserial /usr/local/ssl/serial -days 365
%x509 – X.509 Zertifikattyp
%-reg – X.509 Anfrage erstellen
%-in – Serverzertifikat als Grundlage
%-out – als Datei ausgeben
%-CA – Certificate Authority Zertifikat festlegen
%-CAkey – Certificate Authority Key festlegen
%-CAserial – Certificate Authority Serial festlegen
6. Zertifikate für die Clients erstellen
openssl req -new newkey rsa:2048 -out certs/simon_lan_csr.pem -nodes -keyout private/simon_lan_key.pem -days 365 #Hinweis: -nodes weglassen wenn Kennwortabfrage gesetzt werden soll
openssl x509 -req -in certs/simon_lan_csr.pem -out certs/simon_lan_cert.pem -CA vpn-ca.pem -CAkey private/vpn-cakey.pem -CAserial /usr/local/ssl/serial -days 365
rm certs/simon_lan_csr.pem
7. DH Parameter erzeugen
openssl dhparam -out dh2048.pem 2048
8. OpenVPN einrichten
OpenVPN Konfigurationsscripte
server.conf ----------- port 1194 dev tun ifconfig 10.8.0.1 10.8.0.2 mode server tls-server dh dh2048.dh ca ca.crt cert server.crt key server.key client.conf ----------- dev tun tls-client tls-remote remotehost.domain ca ca.crt cert client.crt key client.key
testen erfolgt mit
openvpn --config /etc/openvpn/server.conf bzw. client.conf
9. Schlüsselverteilung
Filename Needed By Purpose Secret (Zugriff entziehen) -------- --------- ------- -------------------------- ca.crt server + all clients Root CA certificate NO ca.key key signing machine only Root CA key YES dh{n}.pem server only Diffie Hellman parameters NO server.crt server only Server Certificate NO server.key server only Server Key YES client1.crt client1 only Client1 Certificate NO client1.key client1 only Client1 Key YES client2.crt client2 only Client2 Certificate NO client2.key client2 only Client2 Key YES client3.crt client3 only Client3 Certificate NO client3.key client3 only Client3 Key YES
20. Details zu Zertifikaten herausfinden
openssl x509 -in <cert> -text openssl asn1parse -i -in <cert> -dump
21. Zertifikate checken
openssl verify -CAfile ca.crt -purpose sslclient angel-client.crt
Tunnel TLS based Security
OpenVPN Server Befehl
openvpn --remote clientname.domain --dev tun1 --ifconfig 10.4.0.2 10.4.0.1 --tls-server --ca tmp-ca.crt --cert server.crt --key server.key --reneg-sec 60 --verb 5 --dh dh1024.pem
OpenVPN Client Befehl
openvpn --remote servername.domain --dev tun1 --ifconfig 10.4.0.1 10.4.0.2 --tls-client --ca tmp-ca.crt --cert client.crt --key client.key --reneg-sec 60 --verb 5
1. ins /etc/ssl Verzeichnis wechseln
cd /etc/ssl/
2. Ordner für die neuen Zertifikate anlegen
mkdir zertifikate
3. Schlüssel für die CA (Certificate Authority ) erstellen
openssl genrsa -aes256 -out private/vpn-cakey.pem 2048 Passwort für CA-Key angeben Bsp.: "cakey"
4. Certificate Authority erstellen
openssl req -new -x509 -days 365 -key private/vpn-cakey.pem -out vpn-ca.pem -set_serial 1 Country Name: DE Province Name: Sachsen Locality Name: Chemnitz Organization Name: TU Organizational Unit Name: IT Common Name: CASERVER Email: -
5. index.txt anlegen um später evtl Zertifikate sperren zu können
touch index.txt && echo "01" > serial
6. Zertifikatanfrage und Schlüssel für den Server erstellen
openssl req -new -newkey rsa:2048 -out zertifikate/server_csr.pem -nodes -keyout private/server_key.pem -days 365 Angaben für das Zertifikat siehe oben Common Name: VPNSERVER challenge Password: vpnserver Company Name: - openssl x509 -req -in zertifikate/server_csr.pem -out zertifikate/server_cert.pem -CA vpn-ca.pem -CAkey private/vpn-cakey.pem -CAserial serial -days 365 Enter Password: cakey
7. Zertifikat für einen Client erstellen
openssl req -new -newkey rsa:2048 -out zertifikate/client1_csr.pem -keyout private/client1_key.pem -days 365 Passphrase für Client1: client1vpn Country: DE State: Sachsen Locality Name: Chemnitz Organization: TU Org. Unit Name: IT Common Name: client1 Email Address: - challenge Password: client1key Opt. Company Name: - openssl x509 -req -in zertifikate/client1_csr.pem -out zertifikate/client_cert.pem -CA vpn-ca.pem -CAkey private/vpn-cakey.pem -CAserial serial -days 365 Enter Password: cakey
8. Diffie Hellman Parameter erstellen (2048 Bit Key)
openssl dhparam -out dh2048.pem 2048
9. Konfigurationsdateien für den Server erstellen server.ovpn für IP Tunnel
# TUN simuliert ein Point-to-Point Netzwerkgerät (OSI-Layer 3), während TAP ein Ethernet-Gerät simuliert (OSI-Layer 2) # Konfigurationsdatei mit TUN Device (IP Tunnel) # In der Konsole ausführen um Tunneling Kernelmodul zu laden -> modprobe tun dev tun ifconfig 10.1.0.1 10.1.0.2 tls-server dh dh2048.pem ca vpn-ca.pem cert server_cert.pem key server_key.pem verb 3
9.1 Konfigurationsdateien für den Server erstellen server.ovpn für Ethernettunnel
port 1194 proto udp mode server tls-server dev tap #Server IP ifconfig 10.0.0.1 255.255.255.0 #dynamic clients from 10.0.0.2-10.0.0.254 ifconfig-pool 10.0.0.2 10.0.0.254 tun-mtu 1492 #mssfix ca /etc/ssl/vpn-ca.pem cert /etc/ssl/zertifikate/server_cert.pem key /etc/ssl/private/server_key.pem #client-to-client dh /etc/ssl/dh1024.pem keepalive 10 120 auth SHA1 comp-lzo user nobody group nogroup persist-key persist-tun verb 3
10. Konfigurationsdateien für den Client erstellen client.ovpn für IP Tunnel
dev tun remote 134.109.1.1 1194 ifconfig 10.1.0.2 10.1.0.1 tls-client ca vpn-ca.pem cert client1_cert.pem key client1_key.pem verb 3
10.1. Konfigurationsdateien für den Client erstellen client.ovpn für Ethernet Tunnel
tls-client #float dev tap #tun-mtu 1492 #mssfix #tcp oder udp proto udp #Server IP remote 192.168.10.1 1194 #WICHTIG: hier den COMMON Name vom Server Zertifikat nehmen! tls-remote VPNSERVER ca vpn-ca.pem cert client1_cert.pem key client1_key.pem auth SHA1 nobind comp-lzo persist-key persist-tun verb 3
Schlüsselverteilung
Filename Needed By Purpose Secret (Zugriff entziehen) -------- --------- ------- -------------------------- ca.crt server + all clients Root CA certificate NO ca.key key signing machine only Root CA key YES dh{n}.pem server only Diffie Hellman parameters NO server.crt server only Server Certificate NO server.key server only Server Key YES client1.crt client1 only Client1 Certificate NO client1.key client1 only Client1 Key YES client2.crt client2 only Client2 Certificate NO client2.key client2 only Client2 Key YES client3.crt client3 only Client3 Certificate NO client3.key client3 only Client3 Key YES
11. Serverkonfiguration testen
openvpn --config /etc/openvpn/server.ovpn
oder
12. OpenVPN Server Befehl
openvpn --dev tun1 --ifconfig 10.1.0.2 10.1.0.1 --tls-server --ca vpn-ca.pem --cert server.crt --key server.key --reneg-sec 60 --verb 5 --dh dh1024.pem
13. OpenVPN Client Befehl
openvpn --remote 134.109.184.163 --dev tun1 --ifconfig 10.1.0.1 10.1.0.2 --tls-client --ca vpn-ca.pem --cert client.crt --key client.key --reneg-sec 60 --verb 5
Wenn man alles richtig gemacht hat
OpenVPN Server Start ada:~/openvpn_server/serveruse# openvpn tlsserver.ovpn Fri Nov 2 13:54:57 2007 OpenVPN 2.0.9 i486-pc-linux-gnu [SSL] [LZO] [EPOLL] built on May 19 2007 Fri Nov 2 13:54:57 2007 IMPORTANT: OpenVPN's default port number is now 1194, based on an official port number assignment by IANA. OpenVPN 2.0-beta16 and earlier used 5000 as the default port. Fri Nov 2 13:54:57 2007 Diffie-Hellman initialized with 2048 bit key Fri Nov 2 13:54:57 2007 Control Channel MTU parms [ L:1541 D:138 EF:38 EB:0 ET:0 EL:0 ] Fri Nov 2 13:54:57 2007 TUN/TAP device tun0 opened Fri Nov 2 13:54:57 2007 /sbin/ifconfig tun0 10.1.0.1 pointopoint 10.1.0.2 mtu 1500 Fri Nov 2 13:54:57 2007 Data Channel MTU parms [ L:1541 D:1450 EF:41 EB:4 ET:0 EL:0 ] Fri Nov 2 13:54:57 2007 Local Options hash (VER=V4): '3ff3d966' Fri Nov 2 13:54:57 2007 Expected Remote Options hash (VER=V4): '588add67' Fri Nov 2 13:54:57 2007 UDPv4 link local (bound): [undef]:1194 Fri Nov 2 13:54:57 2007 UDPv4 link remote: [undef] Fri Nov 2 13:55:12 2007 TLS: Initial packet from 134.109.184.60:1194, sid=84f3c060 c3b8cc19 Fri Nov 2 13:55:12 2007 VERIFY OK: depth=1, /C=DE/ST=Sachsen/L=Chemnitz/O=TU/OU=IT/CN=server Fri Nov 2 13:55:12 2007 VERIFY OK: depth=0, /C=DE/ST=Sachsen/L=Chemnitz/O=TU/OU=IT/CN=client Fri Nov 2 13:55:12 2007 Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit key Fri Nov 2 13:55:12 2007 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication Fri Nov 2 13:55:12 2007 Data Channel Decrypt: Cipher 'BF-CBC' initialized with 128 bit key Fri Nov 2 13:55:12 2007 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication Fri Nov 2 13:55:12 2007 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 2048 bit RSA Fri Nov 2 13:55:12 2007 [client] Peer Connection Initiated with 134.109.184.60:1194 Fri Nov 2 13:55:14 2007 Initialization Sequence Completed
OpenVPN Client Start jean:~/openvpnclient/clientuse# openvpn tlsclient.ovpn Fri Nov 2 13:55:08 2007 OpenVPN 2.0.9 i486-pc-linux-gnu [SSL] [LZO] [EPOLL] built on May 19 2007 Fri Nov 2 13:55:08 2007 IMPORTANT: OpenVPN's default port number is now 1194, based on an official port number assignment by IANA. OpenVPN 2.0-beta16 and earlier used 5000 as the default port. Enter Private Key Password: Fri Nov 2 13:55:12 2007 Control Channel MTU parms [ L:1541 D:138 EF:38 EB:0 ET:0 EL:0 ] Fri Nov 2 13:55:12 2007 TUN/TAP device tun0 opened Fri Nov 2 13:55:12 2007 /sbin/ifconfig tun0 10.1.0.2 pointopoint 10.1.0.1 mtu 1500 Fri Nov 2 13:55:12 2007 Data Channel MTU parms [ L:1541 D:1450 EF:41 EB:4 ET:0 EL:0 ] Fri Nov 2 13:55:12 2007 Local Options hash (VER=V4): '588add67' Fri Nov 2 13:55:12 2007 Expected Remote Options hash (VER=V4): '3ff3d966' Fri Nov 2 13:55:12 2007 UDPv4 link local (bound): [undef]:1194 Fri Nov 2 13:55:12 2007 UDPv4 link remote: 134.109.184.163:1194 Fri Nov 2 13:55:12 2007 TLS: Initial packet from 134.109.184.163:1194, sid=81823dff 8d83e16b Fri Nov 2 13:55:12 2007 VERIFY OK: depth=1, /C=DE/ST=Sachsen/L=Chemnitz/O=TU/OU=IT/CN=server Fri Nov 2 13:55:12 2007 VERIFY OK: depth=0, /C=DE/ST=Sachsen/L=Chemnitz/O=TU/OU=IT/CN=serverkey Fri Nov 2 13:55:12 2007 Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit key Fri Nov 2 13:55:12 2007 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication Fri Nov 2 13:55:12 2007 Data Channel Decrypt: Cipher 'BF-CBC' initialized with 128 bit key Fri Nov 2 13:55:12 2007 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication Fri Nov 2 13:55:12 2007 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 2048 bit RSA Fri Nov 2 13:55:12 2007 [serverkey] Peer Connection Initiated with 134.109.184.163:1194 Fri Nov 2 13:55:14 2007 Initialization Sequence Completed
Bridging vs. Routing
What is the difference between bridging and routing? Bridging and routing are two methods of linking systems via a VPN. Bridging advantages * Broadcasts traverse the VPN -- this allows software that depends on LAN broadcasts such as Windows NetBIOS file sharing and network neighborhood browsing to work. * No route statements to configure. * Works with any protocol that can function over ethernet, including IPv4, IPv6, Netware IPX, AppleTalk, etc. * Relatively easy-to-configure solution for road warriors. Bridging disadvantages * Less efficient than routing, and does not scale well. Routing advantages * Efficiency and scalability. * Allows better tuning of MTU for efficiency. Routing disadvantages * Clients must use a WINS server (such as samba) to allow cross-VPN network browsing to work. * Routes must be set up linking each subnet. * Software that depends on broadcasts will not "see" machines on the other side of the VPN. * Works only with IPv4 in general, and IPv6 in cases where tun drivers on both ends of the connection support it explicitly.
Wasn nu tun oder tap?
Die Wahl welches Device benutzt wird, hängt davon ab was man über den VPN-Tunnel senden will. Mit dem tun-Device können nur IP-Pakete gesendet werden. Es ist also ein IP-Tunnel. Das tap-Device kann dagegen auch andere Protokolle senden. D.h. es könnte z.B. über einen VPN-Tunnel auch per Netware IPX auf einen Novell-Server zugegriffen werden. Daher nennt man die Benutzung dieses Devices Ethernet-Bridging. Hier die wichtigsten Vor- und Nachteile (aus der OpenVPN-FAQ): Vorteile -------- Ethernet Bridging - 'Überbrückt' den VPN-Tunnel - keine Routen notwendig - lässt auch andere Protokolle zu (z.B. Appletalk, Netware IPX usw.) - Einfache Konfiguration für Roadwarrior IP-Tunnel - Effizient und Skalierbar - Erlaubt besseres tuning Nachteile --------- Ethernet Bridging - weniger Effizient als IP-Tunnel - schwer skalierbar IP-Tunnel - Clienten benötigen einen WINS-Server um zwischen Netzwerken zu 'browsen' - keine Broadcasts über die Netze möglich (OFFEN) - Netzwerke müssen geroutet werden Wie wird nun aber bei dem tap-Device eine 'Brücke' hergestellt? Auf Details gehe ich hier nicht ein (es geht ja um VPN und nicht um Ethernet-Bridging), aber hier ein kurzer Tip: Ethernet-Bridging bedeutet bei VPN das ein Netzwerkcontroller den Tunnel überbrücken kann. Es muss also einem Controller gesagt werden, dass er das VPN-Device benutzen soll. Unter Linux kann dazu das Tool brtcl benutzt werden. Unter Windows müssen in den Netzwerkverbindungen die betreffende Verbindung und das VPN-Device markiert werden, dann ein Klick mit der rechten Maustaste und Verbindungen überbrücken wählen. tap = Ethernet Tunnel -> jeglicher Traffic -> Bridging -> siehe oben ^^ tun = IP Tunnel -> nur IP Pakete -> Routing
VPN ohne Keys nur mit Loginname und Passwort möglich? Point to Point Tunnel .. Multipoint fähig?
VPN Client Cisco mit OpenVPN?
VPN Client unter Win als Dienst vor Anmeldung? o.O
Die Authentifizierung am OpenVPN Server ist ein zusätzlicher Schutzmechanismus. Achtung: Dieser Schutz ist ohne Verschlüsselung sinnlos, da Username und Passwort unverschlüsselt übertragen werden! Es ist in jedem Fall zu empfehlen, die zusätzliche Authentifizierung nur in Verbindung mit der zertifikatbasierten Authentifizierung und Verschlüsselung zu nutzen.
VPN Client To Multichannel
http://www.vpnforum.de/wiki/index.php/Config_ServerNET_Routing
Es scheint als würde der CISCO VPN Client nicht mit dem OpenVPN Server zusammenarbeiten bzw. wurde nichts darüber im Internet gefunden, es wurde nur gesagt den OpenVPN Traffic durch ein Cisco VPN durchzuleiten o.O
Als GUI für OpenVPN unter Windows gibt es folgende Möglichkeit:
Files downloaden und installieren
http://openvpn.se/files/install_packages/openvpn-2.0.9-gui-1.0.3-install.exe
http://openvpn.se/files/localized/binary/1.0.3/openvpn-gui-1.0.3-de.exe
die Datei openvpn-gui.exe im OpenVPN Verzeichnis (C:\Programme\openvpn\bin\) mit der Datei openvpn-gui-1.0.3-de.exe ersetzen aber den Namen beibehalten -> openvpn-gui.exe
Konfigurationsdateien anpassen
die Linux Konfigurationsdateien sind zu übernehmen und in das Verzeichnis C:\Programme\openvpn\config zu kopieren.
Ethernet Bridging
http://openvpn.net/bridge.html
Bridge Start Skript
#!/bin/bash ################################# # Set up Ethernet bridge on Linux # Requires: bridge-utils ################################# # Define Bridge Interface br="br0" # Define list of TAP interfaces to be bridged, # for example tap="tap0 tap1 tap2". tap="tap0" # Define physical ethernet interface to be bridged # with TAP interface(s) above. eth="eth0" eth_ip="192.168.8.4" eth_netmask="255.255.255.0" eth_broadcast="192.168.8.255" for t in $tap; do openvpn --mktun --dev $t done brctl addbr $br brctl addif $br $eth for t in $tap; do brctl addif $br $t done for t in $tap; do ifconfig $t 0.0.0.0 promisc up done ifconfig $eth 0.0.0.0 promisc up ifconfig $br $eth_ip netmask $eth_netmask broadcast $eth_broadcast
Bridge Stop Skript
#!/bin/bash #################################### # Tear Down Ethernet bridge on Linux #################################### # Define Bridge Interface br="br0" # Define list of TAP interfaces to be bridged together tap="tap0" ifconfig $br down brctl delbr $br for t in $tap; do openvpn --rmtun --dev $t done
OpenVPN Server tap Device tlsserver_tap.ovpn
# Konfigurationsdatei mit TAP Device (Ethernettunnel) dev tap port 1194 mode server server-bridge 10.0.0.0 255.255.255.0 10.0.0.100 10.0.0.130 client-to-client tls-server dh dh2048.pem ca vpn-ca.pem cert server_cert.pem key server_key.pem verb 3 keepalive 10 30 persist-key persist-tun
OpenVPN Client tap Device tlsclient_tap.ovpn
dev tap remote 134.109.184.163 port 1194 tls-client ca vpn-ca.pem cert client1_cert.pem key client_key.pem verb 3 pull