OpenVPN Debian 8 Jessy

Hi,

da sich einiges geändert hat bei OpenVPN und Debian 8 Jessy wollte ich mal ein keine neues HowTo dazu schreiben.

Explizit geht es um die Version : OpenVPN 2.3.4 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [MH] [IPv6] built on Jun 26 2017

 

Die Wichtigste änderung von OpenVPN unter Debian 6 & 7 ist das man jetzt ein Tool hat names pkitool mit dem sich alle Zertifikate erstellen lassen und man kann ohne große Umwege neue Keys für User/Clients erstellen OHNE das man die alten löschen muss.

Zu erwähnen ist auch noch das man das pkitool nach installieren muss, damit kommen auch die alten Scripte mit.

Früher waren diese unter den Documents abgelegt was aber NICHT mehr der Fall ist.

 

Installation:

Nach dem wechsel von User auf Root mit su.

aptitude install openvpn
oder
apt-get install openvpn
oder
apt install openvpn

Aber wie oben schon erwähnt fehlen alle Scripte und das pkitool!

Das pkitool installieren wir dann noch hinterher:

aptitude install easy-rsa
oder
apt-get install easy-rsa
oder
apt install easy-rsa

Im Verzeichnis /usr/share/easy-rsa findet man jetzt die Scripte die man schon von der vorgänger Version sondern auch das pkitool.

Ich kopiere mi diesen Ordner dann immer in den OpenVPN Ordner.

cp -R /usr/share/easy-rsa /etc/openvpn/easy-rsa

Nun wechselt man in das easy RSA Verzeichnis unter OpenVPN

cd /etc/openvpn/easy-rsa/

Und schauen uns erstmal an was wir hier für Dateien haben

l
insgesamt 120K
-rwxr-xr-x 1 root root  119 Dez 25 19:27 build-ca
-rwxr-xr-x 1 root root  352 Dez 25 19:27 build-dh
-rwxr-xr-x 1 root root  188 Dez 25 19:27 build-inter
-rwxr-xr-x 1 root root  163 Dez 25 19:27 build-key
-rwxr-xr-x 1 root root  157 Dez 25 19:27 build-key-pass
-rwxr-xr-x 1 root root  249 Dez 25 19:27 build-key-pkcs12
-rwxr-xr-x 1 root root  268 Dez 25 19:27 build-key-server
-rwxr-xr-x 1 root root  213 Dez 25 19:27 build-req
-rwxr-xr-x 1 root root  158 Dez 25 19:27 build-req-pass
-rwxr-xr-x 1 root root  449 Dez 25 19:27 clean-all
-rwxr-xr-x 1 root root 1,5K Dez 25 19:27 inherit-inter
drwx------ 2 root root 4,0K Jan 13 22:37 keys
-rwxr-xr-x 1 root root  302 Dez 25 19:27 list-crl
-rw-r--r-- 1 root root 7,7K Dez 25 19:27 openssl-0.9.6.cnf
-rw-r--r-- 1 root root 8,3K Dez 25 19:27 openssl-0.9.8.cnf
-rw-r--r-- 1 root root 8,2K Dez 25 19:27 openssl-1.0.0.cnf
-rwxr-xr-x 1 root root  13K Dez 25 19:27 pkitool
-rwxr-xr-x 1 root root 1,1K Dez 25 19:27 revoke-full
-rwxr-xr-x 1 root root  178 Dez 25 19:27 sign-req
-rw------- 1 root root  636 Dez 25 19:32 ta.key
-rw-r--r-- 1 root root 2,1K Dez 25 19:27 vars
-rwxr-xr-x 1 root root  740 Dez 25 19:27 whichopensslcnf

Die Datei vars bearbeiten mit einem beliebigen Editor:

nano vars

Und ändern den Bereich nach seinen Wünschen ab:

Original:
export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="me@myhost.mydomain"
export KEY_OU="MyOrganizationalUnit"

Änderung:
export KEY_COUNTRY="DE"
export KEY_PROVINCE="Hessen"
export KEY_CITY="Babenhausen"
export KEY_ORG="Firmenname oder sonst was"
export KEY_EMAIL="DEINE@EMAIL.ADRESSE"
export KEY_OU="HOSTENAME DEINES SERVER"

Die Datei abspeichern mit strg +o

Man kann jetzt wie im alten HowTo vorgehen und die alten Scripte nutzen oder man nutzt das pkitool.

Um mal eine Überblick zu bekommen kann man das tool mal ausführen und bekommt damit auch gleiche eine Anleitung sowie alle Optionen.

./pkitool
pkitool 2.0
Usage: pkitool [options...] [common-name]

Options:
  --batch    : batch mode (default)
  --keysize  : Set keysize
      size   : size (default=1024)
  --interact : interactive mode
  --server   : build server cert
  --initca   : build root CA
  --inter    : build intermediate CA
  --pass     : encrypt private key with password
  --csr      : only generate a CSR, do not sign
  --sign     : sign an existing CSR
  --pkcs12   : generate a combined PKCS#12 file
  --pkcs11   : generate certificate on PKCS#11 token
      lib    : PKCS#11 library
      slot   : PKCS#11 slot
      id     : PKCS#11 object id (hex string)
      label  : PKCS#11 object label

Standalone options:
  --pkcs11-slots   : list PKCS#11 slots
      lib    : PKCS#11 library
  --pkcs11-objects : list PKCS#11 token objects
      lib    : PKCS#11 library
      slot   : PKCS#11 slot
  --pkcs11-init    : initialize PKCS#11 token DANGEROUS!!!
      lib    : PKCS#11 library
      slot   : PKCS#11 slot
      label  : PKCS#11 token label

Notes:
  Please edit the vars script to reflect your configuration,
  then source it with "source ./vars".
  Next, to start with a fresh PKI configuration and to delete any
  previous certificates and keys, run "./clean-all".
  Finally, you can run this tool (pkitool) to build certificates/keys.
  In order to use PKCS#11 interface you must have opensc-0.10.0 or higher.

Generated files and corresponding OpenVPN directives:
(Files will be placed in the $KEY_DIR directory, defined in ./vars)
  ca.crt     -> root certificate (--ca)
  ca.key     -> root key, keep secure (not directly used by OpenVPN)
  .crt files -> client/server certificates (--cert)
  .key files -> private keys, keep secure (--key)
  .csr files -> certificate signing request (not directly used by OpenVPN)
  dh1024.pem or dh2048.pem -> Diffie Hellman parameters (--dh)

Examples:
  pkitool --initca          -> Build root certificate
  pkitool --initca --pass   -> Build root certificate with password-protected key
  pkitool --server server1  -> Build "server1" certificate/key
  pkitool client1           -> Build "client1" certificate/key
  pkitool --pass client2    -> Build password-protected "client2" certificate/key
  pkitool --pkcs12 client3  -> Build "client3" certificate/key in PKCS#12 format
  pkitool --csr client4     -> Build "client4" CSR to be signed by another CA
  pkitool --sign client4    -> Sign "client4" CSR
  pkitool --inter interca   -> Build an intermediate key-signing certificate/key
                               Also see ./inherit-inter script.
  pkitool --pkcs11 /usr/lib/pkcs11/lib1 0 010203 "client5 id" client5
                              -> Build "client5" certificate/key in PKCS#11 token

Typical usage for initial PKI setup.  Build myserver, client1, and client2 cert/keys.
Protect client2 key with a password.  Build DH parms.  Generated files in ./keys :
  [edit vars with your site-specific info]
  source ./vars
  ./clean-all
  ./build-dh     -> takes a long time, consider backgrounding
  ./pkitool --initca
  ./pkitool --server myserver
  ./pkitool client1
  ./pkitool --pass client2

Typical usage for adding client cert to existing PKI:
  source ./vars
  ./pkitool client-new

Um es kurz zu machen benötigt man aber nur folgende Reihenfolge durch zu führen:

source ./vars
  ./clean-all
  ./build-dh     -> takes a long time, consider backgrounding
  ./pkitool --initca
  ./pkitool --server myserver
  ./pkitool client1

Da wir die Datei schon angepasst haben kann man erstmal mit

source ./vars

die Variablen festlegen.

Durch clean-all werden eventuell vorhandene Keys gelöscht und MUSS ausgeführt werden aber das musste man vorher schon.

./clean-all

Das nächste Script erstellt uns den DH Key zum Verschlüsseln  Kommunikation

./build-dh

Nun wir das CA Root Zertifikat erstellt

./pkitool --initca

Und als nächstes das Server Zertifikat

./pkitool --server myserver #kann frei gewählt werden

Jetzt kann man für seine Clients die Zertifikate erstellen

./pkitool client1 #hostanme des Clients nutzen

Ich nutze immer den Hostname des Clients da dies für bestimmte funktionen von nöten ist und ich habe eine klare zuweise. (Laptop, Handy,PC)

Diesen Befehl kann man für alle seine Clients wiederholen, man ändert nur den Namen

./pkitool pc
./pkitool handy
./pkitool laptop

Und jetzt die „große“ änderung, da dies vorher leider nur mit eigene  Scripten ging

source ./vars
./pkitool client-new

Man muss source ./vars ausführen und kann danach wieder neue Keys erstellen für neue Clients.


Server Config:

server.conf
port 1194
proto udp
dev tun

ca keys/ca.crt
cert keys/computer-babenhausen.de.crt
key keys/computer-babenhausen.de.key
dh keys/dh2048.pem

server 192.168.1.0 255.255.255.0

ifconfig-pool-persist ipp.txt

client-config-dir ccd
route 192.168.1.0 255.255.255.0

push "redirect-gateway 62.138.16.1 def1"
push "dhcp-option DNS 194.150.168.168"
push "dhcp-option DNS 85.214.20.141"

keepalive 10 120

tls-auth keys/ta.key 0

cipher AES-256-CBC

comp-lzo

max-clients 10

user nobody
group nogroup

persist-key
persist-tun

status /etc/openvpn/log/openvpn-status.log

log         openvpn.log
log-append  openvpn.log

verb 4

tcp-queue-limit 512
tun-mtu 1500
bcast-buffers 4096
txqueuelen 1000
sndbuf 393216
rcvbuf 393216
push "sndbuf 393216"
push "rcvbuf 393216"

Was es nicht mehr gibt oder nicht mehr geht ist das Login Plugin, die Authentifizierung läuft nur noch über die Keys, also keine Keys kein Zugang.

Die Werte:

bcast-buffers 4096
txqueuelen 1000
sndbuf 393216
rcvbuf 393216
push "sndbuf 393216"
push "rcvbuf 393216"

Habe ich hinzugefügt und den Paketverlust über den VPN zu verringern , ohne diese hat man leider einen recht hohen Paketverlust.

Unter Win7 sollte man sich auch über die Webseite von OpenVPN den TAP Treiber 9.0 oder jede andere Webseite benutzen und nicht 9.01 der sorgt auch für Packetverluste.

Alles andere kann auch über meine alte Anleitung gefunden werden.

Wer sich fragt warum ich keine Passwort Datei erstellt habe bzw. kein für das Zertifikat habe ?

Nutzt man OpenVPN als Service und die Keychain wird erneuert (alle 30min.) muss man jedesmal das Passwort neu eingeben, beim Service kommt dazu aber keine Abfrage daher geht die VPN Verbindung danach down.

Das gleiche gilt bei der nutzung des Clients nur das hier die abfrage kommt und man muss alle 30 min. das Passwort eingeben.


Damit sind wir auch wieder am ende.

Wie immer bei Fragen oder sonstigem einen Kommentar hinterlassen.

Eurer DocSchneidi

Tagged , , , , , , , , , .Speichere in deinen Favoriten diesen permalink.

Schreibe einen Kommentar

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

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.