Tux vpn
I_UfE_Ag_vpn
links
- http://sarwiki.informatik.hu-berlin.de/OpenVPN_(deutsch)
- Ein schöner Überblick: http://www.henningdippel.de/vpn/installation-eines-openvpn-servers/
- http://openvpn.net/index.php/documentation/howto.html
- http://www.online-tutorials.net/security/openvpn-tutorial/tutorials-t-69-209.html
- http://webmail.charite.de/doku/openvpn/linux/
- http://www.pronix.de/pronix-991.html
- zu openssl: http://wiki.cacert.org/wiki/VhostTaskForce
output
ufe:/etc/openvpn/easy-rsa # . ./vars
NOTE: when you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys
ufe:/etc/openvpn/easy-rsa # ./clean-all
ufe:/etc/openvpn/easy-rsa # ./build-ca
Generating a 1024 bit RSA private key ........++++++ ...................++++++ writing new private key to 'ca.key' ----- 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) DE: State or Province Name (full name) norden: Locality Name (eg, city) luebeck: Organization Name (eg, company) ufe-vpntest: Organizational Unit Name (eg, section) [[]]:erste_section Common Name (eg, your name or your server's hostname) [[]]:ufe Email Address von_ufevpntest@hoxel.org:
ufe:/etc/openvpn/easy-rsa # ./build-key-server server
Generating a 1024 bit RSA private key ..........................++++++ ......++++++ writing new private key to 'server.key' ----- 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) DE: State or Province Name (full name) norden: Locality Name (eg, city) luebeck: Organization Name (eg, company) ufe-vpntest: Organizational Unit Name (eg, section) [[]]: Common Name (eg, your name or your server's hostname) [[]]:l.ufegmbh.de Email Address von_ufevpntest@hoxel.org:
Please enter the following 'extra' attributes to be sent with your certificate request A challenge password [[]]:bingo5 An optional company name [[]]:ufe Using configuration from /etc/openvpn/easy-rsa/openssl.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'DE' stateOrProvinceName :PRINTABLE:'norden' localityName :PRINTABLE:'luebeck' organizationName :PRINTABLE:'ufe-vpntest' commonName :PRINTABLE:'l.ufegmbh.de' emailAddress :IA5STRING:'von_ufevpntest@hoxel.org' Certificate is to be certified until Aug 10 16:24:50 2018 GMT (3650 days) Sign the certificate? y/n:y 1 out of 1 certificate requests certified, commit? y/ny Write out database with 1 new entries Data Base Updated
ufe:/etc/openvpn/easy-rsa # ./build-key client1
Generating a 1024 bit RSA private key
...............++++++
....++++++
writing new private key to 'client1.key'
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) [DE]:
State or Province Name (full name) [norden]:
Locality Name (eg, city) [luebeck]:
Organization Name (eg, company) [ufe-vpntest]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:client1
Email Address [von_ufevpntest@hoxel.org]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:bingo5
An optional company name []:
Using configuration from /etc/openvpn/easy-rsa/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'DE'
stateOrProvinceName :PRINTABLE:'norden'
localityName :PRINTABLE:'luebeck'
organizationName :PRINTABLE:'ufe-vpntest'
commonName :PRINTABLE:'client1'
emailAddress :IA5STRING:'von_ufevpntest@hoxel.org'
Certificate is to be certified until Aug 10 16:30:33 2018 GMT (3650 days)
Sign the certificate? [y/n]:y
ufe:/etc/openvpn/easy-rsa # ./build-key client2
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
Generating a 1024 bit RSA private key
.........................................................................++++++
............................................++++++
writing new private key to 'client2.key'
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) [DE]:
State or Province Name (full name) [norden]:
Locality Name (eg, city) [luebeck]:
Organization Name (eg, company) [ufe-vpntest]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:client2
Email Address [von_ufevpntest@hoxel.org]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:bingo5
An optional company name []:
Using configuration from /etc/openvpn/easy-rsa/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'DE'
stateOrProvinceName :PRINTABLE:'norden'
localityName :PRINTABLE:'luebeck'
organizationName :PRINTABLE:'ufe-vpntest'
commonName :PRINTABLE:'client2'
emailAddress :IA5STRING:'von_ufevpntest@hoxel.org'
Certificate is to be certified until Aug 10 16:31:17 2018 GMT (3650 days)
Sign the certificate? [y/n]:y
ufe:/etc/openvpn/easy-rsa # ./build-key client3
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
Generating a 1024 bit RSA private key
.................................++++++
........++++++
writing new private key to 'client3.key'
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) [DE]:
State or Province Name (full name) [norden]:
Locality Name (eg, city) [luebeck]:
Organization Name (eg, company) [ufe-vpntest]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:client3
Email Address [von_ufevpntest@hoxel.org]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:bingo5
An optional company name []:
Using configuration from /etc/openvpn/easy-rsa/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'DE'
stateOrProvinceName :PRINTABLE:'norden'
localityName :PRINTABLE:'luebeck'
organizationName :PRINTABLE:'ufe-vpntest'
commonName :PRINTABLE:'client3'
emailAddress :IA5STRING:'von_ufevpntest@hoxel.org'
Certificate is to be certified until Aug 10 16:31:55 2018 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
beschreibung
OpenVPN-Server
Dies ist eine Anleitung, die sich mit der Installation eines VPN-Servers unter Ubuntu und der Konfiguration von Clients zum Verbinden mit diesem VPN beschäftigt. Sie ist aus meinem eigenen Bedürfnis entstanden, von verschiedenen Standorten aus auf ein virtuelles internes Netzwerk zuzugreifen, um z.B. mit Freunden sicher und privat Dateien auszutauschen. Solide Linux-Grundkenntnisse sollten vor der Installation eines solchen VPN-Servers prinzipiell vorhanden sein, auch wenn diese Anleitung jeden Schritt relativ idiotensicher erklärt. Als VPN-Software habe ich mich für OpenVPN entschieden, ein unter der GPL-Lizenz stehendes freies Programm, das neben Linux auch für Windows und MacOS verfügbar ist und als Verschlüsselungsmethode SSL nutzt. Diese Anleitung orientiert sich sehr stark am offiziellen HowTo für OpenVPN 2.0, ist jedoch für Ubuntu angepasst und auf Deutsch statt Englisch.
Auf Client-Seite wird bei OpenVPN eine “virtuelle” Netzwerkkarte installiert (im beschriebenen Fall ein sog. tun-Device). Über diese virtuelle Schnittstelle läuft dann der gesamt Netzwerkverkehr zwischen VPN-Client und VPN-Server.
Diese Anleitung basiert auf einem unter Ubuntu 6.06 laufenden Server und Clients, die Windows 2000/XP, Linux oder MacOS verwenden. Serverseitig wurde Ubuntu 6.06 LTS Server Edition genutzt, die Anleitung sollte sich aber auf alle Ubuntu 6.06-Versionen übertragen lassen.
OpenVPN installieren Als ersten Schritt OpenVPN auf dem Server installiert. Dazu wird natürlich das pratische apt verwendet:
sudo apt-get install openvpn
Die für uns relevanten Konfigurationsdateien befinden sich nun in
/usr/share/doc/openvpn/
Wir kopieren sie um, da bei einem eventuellen Upgrade nicht die zu machenden Änderungen überschrieben werden sollen:
sudo cp -r /usr/share/doc/openvpn/ /etc/
Auswählen eines Subnet Ein VPN befindet sich in einem virtuellen Subnet. Ein von der IANA für LANs freigegebenes Subnet ist z.B. das bekannte und weit verbreitete 192.168/16-Netz (also IP-Adressen wie 192.168.0.1). Dieses könnte man für ein VPN verwenden, es wäre aber in vielen Fällen sehr ungünstig. Wenn man sich z.B. aus einem Internet-Cafe oder einem WLAN-Hotspot, das dieses Subnet verwendet, in das VPN einwählen würde, dass ebenfalls auf diesem Subnet basiert, würden Probleme entstehen. Der Rechner wüßte nicht, über welches Interface (also die physikalische oder die virtuelle Netzwerkkarte) er in dieses Netz addressierte Pakete versenden sollte. Damit sich solche LANs und das VPN nicht auf eine solche Art und Weise in die Quere kommen, wählen wir am Besten ein Subnet aus dem Bereich 10/8 (also 10.0.0.0 bis 10.255.255.255). Diese Bereiche werden viel seltener genutzt als das 192.168/16-Netz. In diesem Beispiel wird folgender Bereich verwendet: 10.8.0.0/24. Wie wir später sehen werden, erspart uns dieser Bereich ein wenig Tipparbeit, da er bereits die Standardeinstellung von OpenVPN ist. Er kann aber auch einfach verändert werden.
Zertifikate und Schlüssel generieren OpenVPN stellt prinzipiell zwei Methoden Zur Authentifikation zur Verfügung: per preshared key oder zertifikatsbasiert. Hier soll die zertifikatsbasierte Authentifikation verwendet werden, da sich bei einem preshared key stets nur ein Client im VPN befinden könnte. In dem zu erstellenden VPN sollen aber mehrere Clients parallel mit dem Netzwerk Verbindung aufnehmen können.
Für den Betrieb benötigen wir verschiedene Zertifikate und Schlüssel: Jeder Client benötigt einen eigenen privaten und einen öffentlichen Schlüssel (Zertifikat), ebenso wie der Server. Zusätzlich ist ein Master-Schlüssel und -Zertifikat erforderlich, mit dem die anderen Zertifikate signiert werden. Weitere Informationen zu asymmetrischen Verschlüsselungs-Verfahrens findet man hier.
Wir wechseln nun in folgendes Verzeichnis:
cd /etc/openvpn/examples/easy-rsa/
Dort bearbeiten wir die Datei “vars”:
sudo nano vars
Folgende Einträge sollten dort verändert werden:
export KEY_COUNTRY=DE export KEY_PROVINCE=Hessen export KEY_CITY=Kassel export KEY_ORG=”vpn-test” export KEY_EMAIL=”spammerfalle@henningdippel.de”
Als E-Mail sollte natürlich die reguläre Adresse des Administrators angegeben werden, ebenso sollten Provinz und Stadt individuell verändert werden.
Wenn die Änderungen durchgeführt wurden, speichern wir die Datei und beenden nano:
Strg+O Strg+X
OpenVPN kommt schon mit fertigen Scripten, um die PKI (Public-Key-Infrastruktur) zu intialisieren. Diese führen wir aus:
. ./vars sudo ./clean-all sudo ./build-ca
Mit dem letzten Scriptaufruf wird das Master-Zertifikat und der Master-Schlüssel erstellt.
Nun erstellen wir das Zertifikat und den Schlüssel für den Server:
sudo ./build-key-server server
Anschließend wird automatisch der Schlüssel mit dem vorher erstellten Master-Zertifikat signiert. Hierbei tragen wir als “Common Name” “server” ein, anschließend bestätigen wir zwei Mal mit “y”.
Nun ist es an der Zeit, die Schlüssel für die Clients zu generieren. In diesem Beispiel möchten wir drei Clients den Zugang zum VPN ermöglichen und generieren dazu drei Schlüssel:
sudo ./build-key client1 sudo ./build-key client2 sudo ./build-key client3
Als “Common Name” muß hierbei immer jeweils client1, client2 oder client3 verwendet werden.Jetzt generieren wir die sogenannten Diffie-Hellman-Parameter. Diese bieten eine Möglichkeit, kryptografische Schlüssel sicher über unsichere Kanäle auszuhandeln. Diese Möglichkeit wird später beim Einwählen in das VPN benötigt.
sudo ./build-dh
Dieser Schritt kann einige Zeit dauern.Nun sind alle benötigten Dateien im Ordner
/etc/openvpn/examples/easy-rsa/keys/
Wir müssen die für die Clients benötigten Dateien an diese weitergeben. Da das Verzeichnis keys/ aber nur vom User root gelesen werden darf, ändern wir kurzerhand die Rechte:
sudo chmod 755 /etc/openvpn/examples/easy-rsa/keys/
Wir kopieren folgende Dateien, die die Clients benötigen:
ca.crt client1.crt client1.key client2.crt client2.key client3.crt client3.key
Erstellen der Konfigurations-Dateien für Server und Clients
Zur Erstellung der Konfigurations-Dateien editieren wir die mitgelieferten Beispiel-Konfigurationen.
cd /etc/openvpn/examples/sample-config-files/
Die Datei server.conf ist komprimiert, wir entkomprimieren sie:
sudo gunzip server.conf.gz
Nun bearbeiten wir die Datei für den Server:
sudo nano /etc/openvpn/examples/sample-config-files/server.conf
Die Einstellungen sind schon sehr brauchbar, es wird der UDP-Port 1194 und das Subnetz 10.8.0.0/24 verwendet. Wenn man möchte, dass sich die mit dem VPN verbundenen Clients auch untereinander sehen können, muss die Zeile client-to-client auskommentiert werden (d.h. das Semikolon muss gelöscht werden).
Ansonsten sollten noch folgende Zeilen anpgeasst werden, damit der OpenVPN-Server unsere erstellen Schlüssel und Zertifikate findet:
ca /etc/openvpn/examples/easy-rsa/keys/ca.crt cert /etc/openvpn/examples/easy-rsa/keys/server.crt # This file should be kept secret key /etc/openvpn/examples/easy-rsa/keys/server.key # Diffie hellman parameters. dh /etc/openvpn/examples/easy-rsa/keys/dh1024.pem
Nun Speichern und Beenden wir die Datei
Anschließend muss die Konfigurationsdatei für die Clients editiert werden. Diese brauchen sie, um das VPN zu erreichen.
sudo nano /etc/openvpn/examples/sample-config-files/client.conf
Wir ändern zunächst die Adresse des VPN-Servers, unter der dieser im Internet erreichbar ist. Ich habe dazu einen DynDNS-Host angelegt:
remote beispielname.dyndns.org
Desweiteren müssen eventuell die Pfadangaben zu den Dateien ca.crt, clientX.crt und clientX.key angepasst werden. Wenn sie beim Client aber im selber Verzeichnis wie die Datei client.conf liegen, ist dies aber nicht nötig.
Wir speichern und beenden wiederum.
Den eventuell durch eine Firewall geschützten Server aus dem Internet erreichbar machen Wenn der Server in einem Netzwerk steht, dass durch einen DSL-Router ins Internet geht, ist das Netzwerk höchstwahrscheinlich durch eine Router-interne Firewall geschützt. Daher müssen wir das Port-Forwarding auf dem DSL-Router aktivieren. Der Port 1194 (UDP) muss dabei auf die interne IP-Adresse des VPN-Servers weitergeleitet werden. Dazu sollte die Anleitung des DSL-Routers konsultiert werden.
OpenVPN-Server starten Nun können nun auch schon den Server starten:
sudo openvpn /etc/openvpn/examples/sample-config-files/server.conf
Clients mit dem Server verbinden Die Clients verbinden sich mit dem VPN unter Linux folgendermaßen:
openvpn /home/henning/OpenVPN-Test/client.conf
Dazu muss natürlich vorher openvpn installiert worden sein und das tun-Device (/dev/net/tun) muss die richtigen Rechte besitzen.
VPN-Server automatisch beim Booten starten
Wenn der VPN-Server sofort beim Booten von Ubuntu gestartet werden soll, müssen einfach folgende Dateien in das Verzeichnis
/etc/openvpn/
gelegt werden:
server.conf server.key cerver. crt ca.crt
Dabei müssen natürlich auch noch die Pfadangaben zu diesen Dateien in der Datei server.conf angepasst werden.
Rechner im lokalen LAN für die VPN-Clients sichtbar machen
Wir wollen nun, dass auch die anderen Rechner, die im LAN des VPN-Servers stehen, für die via VPN eingewählten Benutzer sichtbar sind. Dazu editieren wir die Datei server.conf sudo /etc/openvpn/server.conf und ergänzen den entsprechenden Bereich um ein
push “route 192.168.178.0 255.255.255.0″
wobei der (für mein LAN gültige) Eintrag 192.168.178.0 durch den IP-Bereich des jeweiligen serverseitigen LANs ersetzt werden muss.
Nun muss noch das IP-Forwarding auf dem VPN-Server aktiviert werden. Dies geschieht, indem in der Datei
/proc/sys/net/ipv4/ip_forward
die “0″ durch eine “1″ ersetzt wird.
Anschließend muss das serverseitige LAN-Gateway (in meinem Fall eine Fritz!Box) angewiesen werden, den Traffic für das VPN-Subnet 10.8.0.0/24 über den VPN-Server zu routen. Wie und ob das geht, ist der Anleitung des Gateways zu entnehmen.
Nun sind alle Rechner im serverseitign LAN über die VPN-Verbindung für die verbundenen Clients sichtbar. Hierbei ist allerdings zu beachten, dass die beiden LANs (von Server und Client) nicht dasselbe Subnet wie z.B. 192.168.0.0/24 verwenden dürfen, ansonsten funktioniert es nicht!
openvpn virtual private network (vpn) auf einem client installieren
dateien vom UfE-Server aus /etc/openvpn/keys/mpc003_ufe/* nach /etc/openvpn/ des m_pcs
vom server:#scp /etc/openvpn/keys/mpc003_keys/* root@192.168.2.100:/etc/openvpn oder vom mpc:#scp root@l.ufegmbh.de:/etc/openvpn/keys/keys_mpc017/* /etc/openvpn
danach das vpn auf dem mpc neu starten
/etc/init.d/openvpn restart
Nun geht es immer noch nicht! In der Datei auf dem UfE-Server /etc/openvpn/u_client_conf/mpc003_ufe muß die Zeile:
ifconfig-push 10.1.1.3 10.1.1.4
stehen.\n\n