VPN mit SSL: OpenVPN

Einführung

ZIEL: Einen virtuellen, privaten Kanal in öffentlichen Netzen schaffen.

Zur Definition „VPN“ siehe https://www.elektronik-kompendium.de/sites/net/0512041.htm Zitat: „VPN ist ein logisches privates Netzwerk auf einer öffentlich zugänglichen Infrastruktur.“

Software-Lösungen

  • IPsec mit IKE Handshake

    • FreeS/WAN (bei Kernel 2.4, kein NAT traversal Support), => https://en.wikipedia.org/wiki/FreeS/WAN

    • StrongSwan, ab Kernel 2.6 (ein Fork von FreeS/WAN)

    • Linux-nativ, ab Kernel 2.6 (von OpenBSD stammend): Projekt KAME mit setkey/racoon

  • OpenVPN (SSL-basiert, baut auf bekannte Protokolle auf)

  • WireGuard (performante, neue Open Source Lösung, => https://www.wireguard.com/)

https://searchsecurity.techtarget.com/definition/SSL-VPN

VPN-Typen

  • Host-to-Site (= klassisches Roadwarrior-Szenario: Ein Reisender loggt sich im Firmennetz ein)

  • Host-to-Host (= Peer2Peer)

  • Site-to-Site (= Branch-Office-VPN)

Voraussetzung sind bei all dem zwei unterschiedliche Netzwerke, die via Router verbunden sind. In einem einzigen physischen Netzsegment können Client und Server nicht gemeinsam stehen, das ist erst bei einem Wireguard-VPN möglich.

Am besten wäre die „perfekte“ Verschlüsselung dank des Internet Key Exchange Protokolls (IKE) von Diffie/Hellman. Das sind die klassischen VPNs mit IPsec; die standardmäßige Linux-Implementation stammt von BSD (Policies mit ‚setkey‘ setzen, Handshakes mittels Daemon ‚racoon‘). Da aber IPsec sehr kompliziert ist, ergeben sich immer wieder Fehler und Lücken, besonders bei der Administration. Weshalb sich die SSL basierte Lösung OpenSSL etabliert hat.

OpenVPN baut auf altbekannte SSL-Libraries auf, wobei hier nicht nur in OSI Layer 5/6 verschlüsselt wird, sondern bereits in den Schichten 1 bis 3. Damit sind höhere Protokolle automatisch mit eingeschlossen.

Gute Links zum Einstieg:

Bridging vs Routing

Für ein komfortables Site-to-Site Setup ist der Bridging-Modus ideal (dev tap). Der virtuelle, verschlüsselte Datenstrom läuft dann z.B. über tap0, der Vorteil: DHCP-Broadcasts u.ä. können durchgereicht werden. Voraussetzung dafür ist jedoch, dass die zugrunde liegende Ethernet-Schnittstelle über eine Linux-Bridge verwaltet wird.

Die andere Möglichkeit wäre, Routing zu verwenden (dev tun oder dev tap), Vorteil: Abschottung gegen Broadcasts. In unserer Testumgebung verwenden wir diesen Routing-Modus im Zusammenhang mit dev tap; als Schnittstelle ergibt sich daraus automatisch ebenfalls tap0.

Siehe dazu:

Installation und Konfiguration

root@d8squid:~# apt-get install openvpn
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.
Statusinformationen werden eingelesen.... Fertig
Die folgenden zusätzlichen Pakete werden installiert:
  easy-rsa libpkcs11-helper1 opensc opensc-pkcs11
Die folgenden NEUEN Pakete werden installiert:
  easy-rsa libpkcs11-helper1 opensc opensc-pkcs11 openvpn
0 aktualisiert, 5 neu installiert, 0 zu entfernen und 6 nicht aktualisiert.
Es müssen 1.446 kB an Archiven heruntergeladen werden.
Nach dieser Operation werden 4.508 kB Plattenplatz zusätzlich benutzt.
Möchten Sie fortfahren? [J/n]

Wir starten nun mit einer einfachen Konfiguration, die das Wesentliche herausstellen soll.

Server-Konfiguration

Zuerst erzeugen wir einen geheimen Pre-Shared-Key mittels openvpn --genkey --secret /etc/openvpn/simple-vpn.key.

Dann erstellen wir auf der Maschine ‚d8squid‘ eine Datei namens ‚/etc/openvpn/server.conf‘ mit folgendem Inhalt:

dev tap
ifconfig 10.4.0.1 255.255.255.0
secret /etc/openvpn/simple-vpn.key
    status openvpn-status.log

HINWEIS: Mittels status geben wir eine spezielle Log-Datei an, die Informationen übers Routing und eine Liste der aktuell verbundenen Clients beinhaltet (LPI-relevant!, => https://openvpn.net/community-resources/reference-manual-for-openvpn-2-4/).

Temporäres Testen der Konfiruration mit openvpn --config <DATEI> (Weil der Daemon durch einen zwischenzeitlichen Reboot bereits läuft, erhalten wir „Address already in use“!):

root@d8squid:~# openvpn --config /etc/openvpn/server.conf
Tue Dec 13 09:24:06 2016 OpenVPN 2.3.4 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [MH] [IPv6] built on Nov 12 2015
Tue Dec 13 09:24:06 2016 library versions: OpenSSL 1.0.1t  3 May 2016, LZO 2.08
Tue Dec 13 09:24:06 2016 WARNING: normally if you use --mssfix and/or --fragment, you should also set --tun-mtu 1500 (currently it is 1468)
Tue Dec 13 09:24:06 2016 TCP/UDP: Socket bind failed on local address [undef]: Address already in use
Tue Dec 13 09:24:06 2016 Exiting due to fatal error
root@d8squid:~#

Wir gehen aber mal davon aus, dass alles läuft und sehen uns insbesondere die verantwortliche Schnittstelle ‚tap0‘ an:

root@d8squid:~# ip -4 addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
    inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 10.20.30.5/24 brd 10.20.30.255 scope global eth0
    valid_lft forever preferred_lft forever
3: tap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1468 qdisc pfifo_fast state UNKNOWN group default qlen 100
    inet 10.4.0.1/24 brd 10.4.0.255 scope global tap0
    valid_lft forever preferred_lft forever
root@d8squid:~#

Kontrolle des geoffnetes Ports:

root@d8squid:~# lsof -iUDP -Pn | grep 1194
openvpn    946  root    5u  IPv4  12676      0t0  UDP *:1194
root@d8squid:~#

HINWEIS: Bei neueren Versionen tauchen Sicherheitswarnungen auf, mit openvpn --cipher AES-256-CBC --ncp-disable --config my-simple.conf kann unsere einfache Konfiguration per Übergabaparameter ergänzt werden.

Automatisches Starten

Zum automatischen Starten des VPN-Daemons beim Systemstart editieren wir unter Debian/Ubuntu die Datei /etc/default/openvpn und aktivieren die Zeile AUTOSTART="all".

Danach führen wir folgendes aus:

root@VPN-SRV ~# systemctl daemon-reload
root@VPN-SRV ~#
root@VPN-SRV ~# systemctl restart openvpn
root@VPN-SRV ~#
root@VPN-SRV ~# pgrep -alfi vpn
29076 /usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/server.conf --writepid /run/openvpn/server.pid
root@VPN-SRV ~#
root@VPN-SRV ~# #   >> Funzt.

ZUSAMMENFASSUNG Server

  • Software installieren:

    apt-get install openvpn
    
  • Schlüssel und Server-Config erzeugen:

    vi /etc/openvpn/server.conf
    openvpn --genkey --secret /etc/openvpn/simple-vpn.key
    
  • Server-Startverhalten konfigurieren:

    vi /etc/default/openvpn  # Zeile aktiviert:   AUTOSTART="all"
    systemctl daemon-reload
    systemctl restart openvpn
    pgrep -alfi openvpn    # -> Bitte die Config-Dateinamen prüfen
    

Zur sinnvollen Verwendung des VPN-Tunnels für SMB siehe: https://pemmann.de/doc/Linux/samba-openvpn.html

Client-Konfiguration

Der erste Client: ein Linux-System

Im ersten Szenario soll ein anderes Linux-System als OpenVPN-Client fungieren, z.B. Arch Linux:

$ pacman -Sy
$ pacman -S openvpn
Nun erstellen wir eine Konfigurationsdatei namens client.conf, in der insbesondere mit remote die reale

IP-Adresse der entfernten VPN-Servers angegeben wird. Außerdem nehmen wir wegen LPI nobind mit auf (nicht den Server-Port 1194 verwenden, sondern einen dynamischen):

[root@tux ~]# cd /etc/openvpn/
[root@tux openvpn]#
[root@tux openvpn]# cat client.conf
dev tap
remote 10.20.30.5
ifconfig 10.4.0.3 255.255.255.0
route-gateway 10.4.0.1
redirect-gateway
secret /etc/openvpn/simple-vpn.key
nobind
[root@tux openvpn]#
[root@tux openvpn]# openvpn --config client.conf

Tue Dec 13 09:48:41 2016 OpenVPN 2.3.14 x86_64-unknown-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [MH] [IPv6] built on Dec  7 2016
Tue Dec 13 09:48:41 2016 library versions: OpenSSL 1.0.2j  26 Sep 2016, LZO 2.09
Tue Dec 13 09:48:41 2016 WARNING: INSECURE cipher with block size less than 128 bit (64 bit).  This allows attacks like SWEET32.  Mitigate by using a --cipher with a larger block size (e.g. AES-256-CBC).
Tue Dec 13 09:48:41 2016 WARNING: INSECURE cipher with block size less than 128 bit (64 bit).  This allows attacks like SWEET32.  Mitigate by using a --cipher with a larger block size (e.g. AES-256-CBC).
Tue Dec 13 09:48:41 2016 WARNING: normally if you use --mssfix and/or --fragment, you should also set --tun-mtu 1500 (currently it is 1468)
Tue Dec 13 09:48:41 2016 TUN/TAP device tap0 opened
Tue Dec 13 09:48:41 2016 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
Tue Dec 13 09:48:41 2016 /usr/bin/ip link set dev tap0 up mtu 1468
Tue Dec 13 09:48:41 2016 /usr/bin/ip addr add dev tap0 10.4.0.3/24 broadcast 10.4.0.255
Tue Dec 13 09:48:41 2016 UDPv4 link local (bound): [undef]
Tue Dec 13 09:48:41 2016 UDPv4 link remote: [AF_INET]10.20.30.5:1194
Tue Dec 13 09:48:49 2016 Peer Connection Initiated with [AF_INET]10.20.30.5:1194
Tue Dec 13 09:48:50 2016 Initialization Sequence Completed

Und schon steht der Tunnel! Künftig sollten die verschiedenen Anwendungen ihre Datenpakete nur noch über tap0 versenden:

[tux@tux ~]$ ping -c4 10.4.0.1
PING 10.4.0.1 (10.4.0.1) 56(84) bytes of data.
64 bytes from 10.4.0.1: icmp_seq=1 ttl=64 time=0.729 ms
64 bytes from 10.4.0.1: icmp_seq=2 ttl=64 time=0.734 ms
64 bytes from 10.4.0.1: icmp_seq=3 ttl=64 time=0.685 ms
64 bytes from 10.4.0.1: icmp_seq=4 ttl=64 time=0.675 ms

--- 10.4.0.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3039ms
rtt min/avg/max/mdev = 0.675/0.705/0.734/0.041 ms
[tux@tux ~]$

Der zweite Client: ein Windows-System

Im nächsten Szenario soll sich Windows 10 als OpenVPN-Client zum Linux-Gateway verbinden. Dazu bitte von https://openvpn.net/index.php/open-source/downloads.html das passende Installationspaket herunterladen.

Nach der Installation der Software navigieren wir mit Hilfe des Explorers ins Verzeichnis C:\Program Files\OpenVPN\config und legen dort eine neue Textdatei namens client.ovpn an. Der Inhalt sollte in etwa so aussehen:

## Schnittstellentyp angeben:
dev tap

## Bitte die IP-Adresse des VPN-Servers angeben (-> ping-Test!):
remote 10.20.30.3

## Der tap-Adapter unter Windows erhält diese IP/Maske:
ifconfig 10.4.0.2 255.255.255.0

## Bitte auskommentieren, weil wir sonst die Skype-Sitzung verlieren:
#route-gateway 10.4.0.1
#redirect-gateway

## Auf sichere Art den pre shared Key kopieren/hinterlegen:
secret C:\\Programme\\OpenVPN\\config\\simple-vpn.key

## Nicht den Port 1194 verwenden, sondern einen dynamischen (wie bei Clients üblich):
nobind

Den Pre-shared-Key kopieren wir dabei am besten mittels WinScp (https://winscp.net/eng/download.php) auf die Windows-Maschine…

Danach folgt ein erster Test, der einfach nur die Syntax der ovpn-Datei prüfen soll, denn der Port 1194 ist auf der Firewall noch geschlossen!

ACHTUNG: Dabei wird das Standard-Gateway auf die innere Übungsumgebung gesetzt, was unerwünschte Effekte haben kann!! Notfalls können die beiden Zeilen

route-gateway 10.4.0.1
redirect-gateway

mit einem Doppelkreuz (‚#‘) auskommentiert oder ganz einfach weggelassen werden.

Siehe auch:

DPv4 link remote: [AF_INET]10.20.30.5:1194
Wed Dec 14 11:31:16 2016 WARNING: INSECURE cipher with block size less than 128 bit (64 bit).  This allows attacks like SWEET32.  Mitigate by using a --cipher with a larger block size (e.g. AES-256-CBC).
Wed Dec 14 11:31:16 2016 WARNING: INSECURE cipher with block size less than 128 bit (64 bit).  This allows attacks like SWEET32.  Mitigate by using a --cipher with a larger block size (e.g. AES-256-CBC).
Wed Dec 14 11:31:16 2016 [d8squid.dom1.site] Peer Connection Initiated with [AF_INET]10.20.30.5:1194
Wed Dec 14 11:31:17 2016 Initialization Sequence Completed

OpenVPN mit X509-Zertifikaten (EasyRSA v3)

Neben dem vorrangigen Ziel, die Kommunikation zu verschlüsseln, gibt es einen zweiten Grund, Transport Layer Security zu aktivieren: Um nämlich das simultane Verbinden von mehreren Clients zum Server zuzulassen, müssen wir die Serverkonfiguration um diese beiden Direktiven erweitern:

duplicate-cn
mode server

Allerdings erfordert dies ein Aktivieren von TLS-Verschlüsselung („duplicate-cn requires mode server“ und dann eben: „mode server requires „tls-server“)! Dieser Angelegenheit werden wir uns nun also widmen.

Gibt es dann später mehrere Clients, kann der Server übrigens auch direkten Austausch mittels der Anweisung client-to-client zulassen (LPI-relevant. => https://www.aaflalo.me/2015/01/openvpn-tap-bridge-mode/).

Zertifikate auf dem VPN-Server erstellen

Eine Root CA erstellen

SICHERHEIT: Man mache dies am besten auf einem Notebook, das dann in einem Tresor verwahrt wird!

Siehe dazu https://blog.buettner.xyz/zertifikate-openvpn-authentifizierung-generieren/

root@d10srv1:~# apt-get install git
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.
Statusinformationen werden eingelesen.... Fertig
git ist schon die neueste Version (1:2.20.1-2+deb10u1).
0 aktualisiert, 0 neu installiert, 0 zu entfernen und 1 nicht aktualisiert.
root@d10srv1:~#
root@d10srv1:~#
root@d10srv1:~# git clone git://github.com/OpenVPN/easy-rsa
Klone nach 'easy-rsa' ...
remote: Enumerating objects: 29, done.
remote: Counting objects: 100% (29/29), done.
remote: Compressing objects: 100% (22/22), done.
remote: Total 1876 (delta 9), reused 25 (delta 7), pack-reused 1847
Empfange Objekte: 100% (1876/1876), 5.72 MiB | 5.30 MiB/s, Fertig.
Löse Unterschiede auf: 100% (784/784), Fertig.
root@d10srv1:~#
root@d10srv1:~#
root@d10srv1:~# cd easy-rsa/
root@d10srv1:~/easy-rsa#
root@d10srv1:~/easy-rsa# ls -F
build/     COPYING.md  doc/       KNOWN_ISSUES  op_test.orig*  README.md             release-keys/  wop_test.sh
ChangeLog  distro/     easyrsa3/  Licensing/    op_test.sh*    README.quickstart.md  wop_test.bat
root@d10srv1:~/easy-rsa#
root@d10srv1:~/easy-rsa# cd easyrsa3/
root@d10srv1:~/easy-rsa/easyrsa3#
root@d10srv1:~/easy-rsa/easyrsa3# ls -F
easyrsa*  openssl-easyrsa.cnf  vars.example  x509-types/
root@d10srv1:~/easy-rsa/easyrsa3#
root@d10srv1:~/easy-rsa/easyrsa3# cp vars.example vars.dom1.test.vpn
root@d10srv1:~/easy-rsa/easyrsa3#
root@d10srv1:~/easy-rsa/easyrsa3# vi vars.dom1.test.vpn
# ...
# Wichtige Änderungen ab Zeile 108:
#set_var EASYRSA_KEY_SIZE       2048
set_var EASYRSA_KEY_SIZE        4096

#set_var EASYRSA_DIGEST         "sha256"
set_var EASYRSA_DIGEST          "sha512"

set_var EASYRSA_REQ_COUNTRY     "DE"
set_var EASYRSA_REQ_PROVINCE    "Sachsen"
set_var EASYRSA_REQ_CITY        "Chemnitz"
set_var EASYRSA_REQ_ORG "CC"
set_var EASYRSA_REQ_EMAIL       "me@example.net"
set_var EASYRSA_REQ_OU          "Techniker"

root@d10srv1:~/easy-rsa/easyrsa3# gg vars.dom1.test.vpn
if [ -z "$EASYRSA_CALLER" ]; then
        echo "You appear to be sourcing an Easy-RSA 'vars' file." >&2
        echo "This is no longer necessary and is disallowed. See the section called" >&2
        echo "'How to use this file' near the top comments for more details." >&2
        return 1
fi
set_var EASYRSA_REQ_COUNTRY     "DE"
set_var EASYRSA_REQ_PROVINCE    "Sachsen"
set_var EASYRSA_REQ_CITY        "Chemnitz"
set_var EASYRSA_REQ_ORG "CC"
set_var EASYRSA_REQ_EMAIL       "me@example.net"
set_var EASYRSA_REQ_OU          "Techniker"
set_var EASYRSA_KEY_SIZE        4096
set_var EASYRSA_DIGEST          "sha512"
root@d10srv1:~/easy-rsa/easyrsa3#
root@d10srv1:~/easy-rsa/easyrsa3#
root@d10srv1:~/easy-rsa/easyrsa3# ./easyrsa --vars=./vars.dom1.test.vpn init-pki

Note: using Easy-RSA configuration from: ./vars.dom1.test.vpn

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /root/easy-rsa/easyrsa3/pki


root@d10srv1:~/easy-rsa/easyrsa3#
root@d10srv1:~/easy-rsa/easyrsa3#
root@d10srv1:~/easy-rsa/easyrsa3# ./easyrsa --vars=./vars.dom1.test.vpn build-ca

Note: using Easy-RSA configuration from: ./vars.dom1.test.vpn
Using SSL: openssl OpenSSL 1.1.1d  10 Sep 2019

Enter New CA Key Passphrase:
Re-Enter New CA Key Passphrase:
Generating RSA private key, 4096 bit long modulus (2 primes)
......................................................................................................................++++
............................................................................++++
e is 65537 (0x010001)
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.
-----
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:d10srv1.dom1.test

CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/root/easy-rsa/easyrsa3/pki/ca.crt

root@d10srv1:~/easy-rsa/easyrsa3#
root@d10srv1:~/easy-rsa/easyrsa3#
root@d10srv1:~/easy-rsa/easyrsa3# ls -l /root/easy-rsa/easyrsa3/pki/ca.crt
-rw------- 1 root root 1919 Feb 19 10:49 /root/easy-rsa/easyrsa3/pki/ca.crt
root@d10srv1:~/easy-rsa/easyrsa3#
root@d10srv1:~/easy-rsa/easyrsa3# head -5 /root/easy-rsa/easyrsa3/pki/ca.crt
-----BEGIN CERTIFICATE-----
MIIFXTCCA0WgAwIBAgIUUvYD5co80O719OxjMh67qIxu25YwDQYJKoZIhvcNAQEN
BQAwHDEaMBgGA1UEAwwRZDEwc3J2MS5kb20xLnRlc3QwHhcNMjAwMjE5MDk0OTM4
WhcNMzAwMjE2MDk0OTM4WjAcMRowGAYDVQQDDBFkMTBzcnYxLmRvbTEudGVzdDCC
AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMHIPVQ+DDyXjIsXL/oUkvp0
root@d10srv1:~/easy-rsa/easyrsa3#
root@d10srv1:~/easy-rsa/easyrsa3# ls -l /root/easy-rsa/easyrsa3/pki/private/ca.key
-rw------- 1 root root 3326 Feb 19 10:48 /root/easy-rsa/easyrsa3/pki/private/ca.key
root@d10srv1:~/easy-rsa/easyrsa3#
root@d10srv1:~/easy-rsa/easyrsa3# head -5 /root/easy-rsa/easyrsa3/pki/private/ca.key
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-256-CBC,66601309CA81A716E92D8536EEE9342C

cVoAXP81ETjWcHN77cK6+Khooyz8xTlF+lby3KkwV92BtFJNY2QzFp9CgE6CJ5Ir
root@d10srv1:~/easy-rsa/easyrsa3#

Damit ist unsere neue CA einsatzbereit.

Schlüssel für den OpenVPN-Server generieren

root@d10srv1:~/easy-rsa/easyrsa3# ./easyrsa --vars=./vars.dom1.test.vpn gen-req server nopass

Note: using Easy-RSA configuration from: ./vars.dom1.test.vpn
Using SSL: openssl OpenSSL 1.1.1d  10 Sep 2019
Generating a RSA private key
.............................................................................................++++
........++++
writing new private key to '/root/easy-rsa/easyrsa3/pki/easy-rsa-4456.rzamU6/tmp.4L8CFs'
-----
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.
-----
Common Name (eg: your user, host, or server name) [server]:d10srv1.dom1.test

Keypair and certificate request completed. Your files are:
req: /root/easy-rsa/easyrsa3/pki/reqs/server.req
key: /root/easy-rsa/easyrsa3/pki/private/server.key

Schlüssel für den ersten Client generieren

root@d10srv1:~/easy-rsa/easyrsa3# ./easyrsa --vars=./vars.dom1.test.vpn gen-req client1

Note: using Easy-RSA configuration from: ./vars.dom1.test.vpn
Using SSL: openssl OpenSSL 1.1.1d  10 Sep 2019
Generating a RSA private key
....................................................................................++++
.........................................++++
writing new private key to '/root/easy-rsa/easyrsa3/pki/easy-rsa-4647.27nYVx/tmp.8uDrwl'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
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.
-----
Common Name (eg: your user, host, or server name) [client1]:d10wks.dom1.test

Keypair and certificate request completed. Your files are:
req: /root/easy-rsa/easyrsa3/pki/reqs/client1.req
key: /root/easy-rsa/easyrsa3/pki/private/client1.key

root@d10srv1:~/easy-rsa/easyrsa3#

Zertifikat für den OpenVPN-Server ausstellen

root@d10srv1:~/easy-rsa/easyrsa3# ./easyrsa --vars=./vars.dom1.test.vpn sign-req server server

Note: using Easy-RSA configuration from: ./vars.dom1.test.vpn
Using SSL: openssl OpenSSL 1.1.1d  10 Sep 2019


You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.

Request subject, to be signed as a server certificate for 825 days:

subject=
    commonName                = d10srv1.dom1.test


Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
Using configuration from /root/easy-rsa/easyrsa3/pki/easy-rsa-4885.9s4Jiq/tmp.ajCddo
Enter pass phrase for /root/easy-rsa/easyrsa3/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'d10srv1.dom1.test'
Certificate is to be certified until May 24 10:02:17 2022 GMT (825 days)

Write out database with 1 new entries
Data Base Updated

Certificate created at: /root/easy-rsa/easyrsa3/pki/issued/server.crt

root@d10srv1:~/easy-rsa/easyrsa3#

Zertifikat für den ersten Client ausstellen

root@d10srv1:~/easy-rsa/easyrsa3# ./easyrsa --vars=./vars.dom1.test.vpn sign-req client client1

Note: using Easy-RSA configuration from: ./vars.dom1.test.vpn
Using SSL: openssl OpenSSL 1.1.1d  10 Sep 2019


You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.

Request subject, to be signed as a client certificate for 825 days:

subject=
    commonName                = d10wks.dom1.test


Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
Using configuration from /root/easy-rsa/easyrsa3/pki/easy-rsa-5141.5bUP0p/tmp.hKXdPD
Enter pass phrase for /root/easy-rsa/easyrsa3/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'d10wks.dom1.test'
Certificate is to be certified until May 24 10:04:40 2022 GMT (825 days)

Write out database with 1 new entries
Data Base Updated

Certificate created at: /root/easy-rsa/easyrsa3/pki/issued/client1.crt

root@d10srv1:~/easy-rsa/easyrsa3#

CRL generieren

root@d10srv1:~/easy-rsa/easyrsa3# ./easyrsa --vars=./vars.dom1.test.vpn gen-crl

Note: using Easy-RSA configuration from: ./vars.dom1.test.vpn
Using SSL: openssl OpenSSL 1.1.1d  10 Sep 2019
Using configuration from /root/easy-rsa/easyrsa3/pki/easy-rsa-5475.iwIcS4/tmp.97pGQj
Enter pass phrase for /root/easy-rsa/easyrsa3/pki/private/ca.key:

An updated CRL has been created.
CRL file: /root/easy-rsa/easyrsa3/pki/crl.pem


root@d10srv1:~/easy-rsa/easyrsa3#
root@d10srv1:~/easy-rsa/easyrsa3#
root@d10srv1:~/easy-rsa/easyrsa3# openssl crl -inform PEM -text -in pki/crl.pem
Certificate Revocation List (CRL):
        Version 2 (0x1)
        Signature Algorithm: sha512WithRSAEncryption
        Issuer: CN = d10srv1.dom1.test
        Last Update: Feb 19 10:08:43 2020 GMT
        Next Update: Aug 17 10:08:43 2020 GMT
        CRL extensions:
            X509v3 Authority Key Identifier:
                keyid:A5:B7:BB:71:65:1C:6F:EA:8E:8F:CA:5D:5C:14:2B:AB:8F:B0:F2:0B
                DirName:/CN=d10srv1.dom1.test
                serial:52:F6:03:E5:CA:3C:D0:EE:F5:F4:EC:63:32:1E:BB:A8:8C:6E:DB:96

No Revoked Certificates.
    Signature Algorithm: sha512WithRSAEncryption
        77:0f:71:e3:9f:a2:89:0e:16:bc:0e:4c:7a:f3:a9:90:ca:8b:
        59:31:07:d1:5b:2c:c6:6f:da:b5:a6:88:c8:49:01:77:d7:a9:
        f8:ec:8d:ef:c7:6e:49:e2:5d:6d:b0:6d:9e:d4:b5:ef:5d:1d:
        52:77:4b:80:84:99:d0:fd:eb:ad:a6:9e:2a:ea:ed:9d:2e:94:
        e7:81:94:b2:15:78:0e:5d:35:eb:74:c1:58:d2:3d:44:11:f8:
        24:27:8d:1e:76:6a:3a:64:12:ac:25:84:40:79:73:3f:cb:2b:
        b8:8c:3b:6b:86:e8:9d:06:34:87:96:1c:c2:dc:5b:b6:db:e5:
        fd:84:7e:c8:1c:4a:88:85:cf:80:85:7e:5a:b2:47:bf:b7:90:
        8a:fa:de:03:c2:eb:0d:2c:ed:e6:b8:ee:fa:e4:6a:84:52:12:
        aa:4b:11:67:d6:27:47:c1:20:41:c4:49:b2:67:80:43:c8:a7:
        83:5d:89:b6:d5:9d:b7:cc:7e:79:f1:54:0d:d9:dd:7f:ae:e0:
        b9:30:73:38:44:86:39:ba:09:5c:43:e3:d4:ea:5f:ee:0d:28:
        f0:42:eb:c9:11:07:77:c6:5c:ba:da:0c:83:c1:ec:7e:43:c9:
        a3:36:f0:52:4d:74:d5:7f:6d:90:0b:5b:1e:33:77:1a:b0:0e:
        04:de:7a:9e:1b:17:cc:b1:38:7f:41:47:4d:94:f1:86:11:f8:
        aa:e9:07:b8:42:c1:8b:ad:33:8a:c7:a9:7e:cb:e6:a1:0d:6d:
        9a:b1:9d:b1:78:92:7c:ad:ee:d1:13:97:f8:d6:68:68:28:12:
        ec:08:76:f8:00:7d:8d:bf:f7:8d:5c:8f:b9:aa:1a:3d:4d:14:
        b0:fd:76:60:c7:bb:fa:a0:65:96:d5:d1:31:15:f2:0c:ab:ea:
        f1:e0:d5:a4:2a:86:89:c4:1d:ef:c6:8f:2d:e7:a3:90:ed:cc:
        9a:15:23:77:a4:11:9d:7d:e1:fd:83:68:d5:5e:90:18:eb:88:
        00:39:b2:50:0a:1d:c9:a8:d9:70:79:ec:4a:d5:94:62:90:95:
        b1:00:72:92:e7:42:0b:58:71:9c:5d:2d:39:50:2e:da:ea:24:
        d0:ff:93:cf:f9:7d:c4:45:ab:13:c1:58:48:24:02:76:3e:7e:
        d7:4d:a0:e8:74:f4:e4:8b:be:80:08:19:a3:f0:b3:c4:eb:f5:
        47:36:de:fc:3d:8e:d8:95:34:cf:33:ac:08:75:cf:94:84:6b:
        fa:58:6f:79:1f:54:c9:18:96:da:aa:88:3b:97:ad:47:dc:4f:
        74:42:51:6e:c9:75:36:22:86:24:e1:a0:52:30:9a:86:d4:45:
        47:de:46:5f:9b:65:57:19
-----BEGIN X509 CRL-----
MIICwjCBqwIBATANBgkqhkiG9w0BAQ0FADAcMRowGAYDVQQDDBFkMTBzcnYxLmRv
bTEudGVzdBcNMjAwMjE5MTAwODQzWhcNMjAwODE3MTAwODQzWqBbMFkwVwYDVR0j
BFAwToAUpbe7cWUcb+qOj8pdXBQrq4+w8guhIKQeMBwxGjAYBgNVBAMMEWQxMHNy
djEuZG9tMS50ZXN0ghRS9gPlyjzQ7vX07GMyHruojG7bljANBgkqhkiG9w0BAQ0F
AAOCAgEAdw9x45+iiQ4WvA5MevOpkMqLWTEH0Vssxm/ataaIyEkBd9ep+OyN78du
SeJdbbBtntS1710dUndLgISZ0P3rraaeKurtnS6U54GUshV4Dl0163TBWNI9RBH4
JCeNHnZqOmQSrCWEQHlzP8sruIw7a4bonQY0h5Ycwtxbttvl/YR+yBxKiIXPgIV+
WrJHv7eQivreA8LrDSzt5rju+uRqhFISqksRZ9YnR8EgQcRJsmeAQ8ing12JttWd
t8x+efFUDdndf67guTBzOESGOboJXEPj1Opf7g0o8ELryREHd8ZcutoMg8HsfkPJ
ozbwUk101X9tkAtbHjN3GrAOBN56nhsXzLE4f0FHTZTxhhH4qukHuELBi60zisep
fsvmoQ1tmrGdsXiSfK3u0ROX+NZoaCgS7Ah2+AB9jb/3jVyPuaoaPU0UsP12YMe7
+qBlltXRMRXyDKvq8eDVpCqGicQd78aPLeejkO3MmhUjd6QRnX3h/YNo1V6QGOuI
ADmyUAodyajZcHnsStWUYpCVsQBykudCC1hxnF0tOVAu2uok0P+Tz/l9xEWrE8FY
SCQCdj5+102g6HT05Iu+gAgZo/CzxOv1Rzbe/D2O2JU0zzOsCHXPlIRr+lhveR9U
yRiW2qqIO5etR9xPdEJRbsl1NiKGJOGgUjCahtRFR95GX5tlVxk=
-----END X509 CRL-----
root@d10srv1:~/easy-rsa/easyrsa3#

Diffie-Hellman Parameter generieren

Falls folgendes zu lange dauert, sollte man den Vorgang abbrechen und das Paket ‚haveged‘ installieren („haveged ist ein Userspace-Daemon zur Bereitstellung von Entropie“):

root@d10srv1:~/easy-rsa/easyrsa3# ./easyrsa --vars=./vars.dom1.test.vpn gen-dh

Note: using Easy-RSA configuration from: ./vars.dom1.test.vpn
Using SSL: openssl OpenSSL 1.1.1d  10 Sep 2019
Generating DH parameters, 4096 bit long safe prime, generator 2
This is going to take a long time
.............+.....

(gekürzt)

+......................


DH parameters of size 4096 created at /root/easy-rsa/easyrsa3/pki/dh.pem

root@d10srv1:~/easy-rsa/easyrsa3#

Zertifikate und Schlüssel bereitstellen

root@d10srv1:~/easy-rsa/easyrsa3# ls -ltrc pki/ | tail -5
-rw------- 1 root root   20 Feb 19 11:04 index.txt.attr
-rw------- 1 root root  159 Feb 19 11:04 index.txt
drwx------ 2 root root 4096 Feb 19 11:04 issued
-rw------- 1 root root 1011 Feb 19 11:08 crl.pem
-rw------- 1 root root  769 Feb 19 11:25 dh.pem
root@d10srv1:~/easy-rsa/easyrsa3#
root@d10srv1:~/easy-rsa/easyrsa3# ls -ltrc pki/issued/ | tail -5
insgesamt 16
-rw------- 1 root root 7414 Feb 19 11:02 server.crt
-rw------- 1 root root 7270 Feb 19 11:04 client1.crt
root@d10srv1:~/easy-rsa/easyrsa3#

root@d10srv1:~/easy-rsa/easyrsa3# cd pki
root@d10srv1:~/easy-rsa/easyrsa3/pki# cp ca.crt dh.pem crl.pem issued/server.crt private/server.key /etc/openvpn/
root@d10srv1:~/easy-rsa/easyrsa3/pki#
root@d10srv1:~/easy-rsa/easyrsa3/pki# ls -ltrc /etc/openvpn/
insgesamt 40
drwxr-xr-x 2 root root 4096 Feb 18 10:51 client
-rwxr-xr-x 1 root root 1468 Feb 18 10:51 update-resolv-conf
drwxr-xr-x 2 root root 4096 Feb 18 11:00 server
lrwxrwxrwx 1 root root   17 Feb 18 11:00 server.conf -> server/gw1.config
-rw------- 1 root root  636 Feb 18 11:02 secret.key
-rw------- 1 root root 1919 Feb 19 12:30 ca.crt
-rw------- 1 root root 3272 Feb 19 12:30 server.key
-rw------- 1 root root 7414 Feb 19 12:30 server.crt
-rw------- 1 root root  769 Feb 19 12:30 dh.pem
-rw------- 1 root root 1011 Feb 19 12:30 crl.pem
root@d10srv1:~/easy-rsa/easyrsa3/pki#

Konfiguration anpassen

root@d10srv1:~/easy-rsa/easyrsa3/pki# cd /etc/openvpn/
root@d10srv1:/etc/openvpn# ls -ltrc | tail -5 >> server/gw1.config
root@d10srv1:/etc/openvpn#
root@d10srv1:/etc/openvpn# vi server/gw1.config
root@d10srv1:/etc/openvpn#
root@d10srv1:/etc/openvpn# cat server/gw1.config
dev tap
ifconfig 10.4.0.1 255.255.255.0
#secret /etc/openvpn/secret.key

mode server
tls-server
max-clients 5
verb 3
status openvpn-status.log

ca ca.crt
key server.key
cert server.crt
dh dh.pem
crl-verify crl.pem
root@d10srv1:/etc/openvpn#
root@d10srv1:/etc/openvpn#
root@d10srv1:/etc/openvpn# systemctl stop openvpn
root@d10srv1:/etc/openvpn#
root@d10srv1:/etc/openvpn# openvpn --config server/gw1.config
Wed Feb 19 12:43:48 2020 OpenVPN 2.4.7 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Feb 20 2019
Wed Feb 19 12:43:48 2020 library versions: OpenSSL 1.1.1d  10 Sep 2019, LZO 2.10
Wed Feb 19 12:43:48 2020 WARNING: --keepalive option is missing from server config
Wed Feb 19 12:43:48 2020 Diffie-Hellman initialized with 4096 bit key
Wed Feb 19 12:43:48 2020 WARNING: normally if you use --mssfix and/or --fragment, you should also set --tun-mtu 1500 (currently it is 1391)
Wed Feb 19 12:43:48 2020 TUN/TAP device tap0 opened
Wed Feb 19 12:43:48 2020 TUN/TAP TX queue length set to 100
Wed Feb 19 12:43:48 2020 /sbin/ip link set dev tap0 up mtu 1391
Wed Feb 19 12:43:48 2020 /sbin/ip addr add dev tap0 10.4.0.1/24 broadcast 10.4.0.255
Wed Feb 19 12:43:48 2020 Could not determine IPv4/IPv6 protocol. Using AF_INET
Wed Feb 19 12:43:48 2020 Socket Buffers: R=[212992->212992] S=[212992->212992]
Wed Feb 19 12:43:48 2020 UDPv4 link local (bound): [AF_INET][undef]:1194
Wed Feb 19 12:43:48 2020 UDPv4 link remote: [AF_UNSPEC]
Wed Feb 19 12:43:48 2020 MULTI: multi_init called, r=256 v=256
Wed Feb 19 12:43:48 2020 Initialization Sequence Completed
^CWed Feb 19 12:45:08 2020 event_wait : Interrupted system call (code=4)
Wed Feb 19 12:45:08 2020 Closing TUN/TAP interface
Wed Feb 19 12:45:08 2020 /sbin/ip addr del dev tap0 10.4.0.1/24
Wed Feb 19 12:45:08 2020 SIGINT[hard,] received, process exiting
root@d10srv1:/etc/openvpn#
root@d10srv1:/etc/openvpn#
root@d10srv1:/etc/openvpn# # >>> Vorerst mit STRG-C beendet, die Client-Seite ist dran...
root@d10srv1:/etc/openvpn#
root@d10srv1:/etc/openvpn# cd -
/root/easy-rsa/easyrsa3/pki
root@d10srv1:~/easy-rsa/easyrsa3/pki#
root@d10srv1:~/easy-rsa/easyrsa3/pki#

root@d10srv1:~/easy-rsa/easyrsa3/pki# ssh tux@192.168.2.222 mkdir -m 000 x509
tux@192.168.2.222's password:
root@d10srv1:~/easy-rsa/easyrsa3/pki#
root@d10srv1:~/easy-rsa/easyrsa3/pki# scp ca.crt issued/client1.crt private/client1.key tux@192.168.2.222:x509
tux@192.168.2.222's password:
scp: x509/ca.crt: Permission denied
scp: x509/client1.crt: Permission denied
scp: x509/client1.key: Permission denied
root@d10srv1:~/easy-rsa/easyrsa3/pki#
root@d10srv1:~/easy-rsa/easyrsa3/pki#
root@d10srv1:~/easy-rsa/easyrsa3/pki# ssh tux@192.168.2.222 chmod 700 x509
tux@192.168.2.222's password:
root@d10srv1:~/easy-rsa/easyrsa3/pki#
root@d10srv1:~/easy-rsa/easyrsa3/pki# scp ca.crt issued/client1.crt private/client1.key tux@192.168.2.222:x509
tux@192.168.2.222's password:
ca.crt                                                                                                       100% 1919     1.5MB/s   00:00
client1.crt                                                                                                  100% 7270     4.3MB/s   00:00
client1.key                                                                                                  100% 3414     1.8MB/s   00:00
root@d10srv1:~/easy-rsa/easyrsa3/pki#
root@d10srv1:~/easy-rsa/easyrsa3/pki#

Auf dem Client

root@d10wks:/etc/openvpn# mv /home/tux/x509/* .
root@d10wks:/etc/openvpn#
root@d10wks:/etc/openvpn# ls -1trc | tail -3
client1.key
client1.crt
ca.crt
root@d10wks:/etc/openvpn#
root@d10wks:/etc/openvpn# ls -1trc | tail -3 >> client.conf
root@d10wks:/etc/openvpn#
root@d10wks:/etc/openvpn# vi client.conf

root@d10wks:/etc/openvpn# cat client.conf
dev tap
remote 192.168.5.2
ifconfig 10.4.0.2 255.255.255.0
#route-gateway 10.4.0.1
#redirect-gateway
#secret /etc/openvpn/secret.key

tls-client

key client1.key
cert client1.crt
ca ca.crt
root@d10wks:/etc/openvpn#
root@d10wks:/etc/openvpn#

Testings

Zuerst starten wir den VPN-Server:

root@d10srv1:/etc/openvpn# openvpn --config server/gw1.config
Wed Feb 19 12:53:44 2020 OpenVPN 2.4.7 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Feb 20 2019
Wed Feb 19 12:53:44 2020 library versions: OpenSSL 1.1.1d  10 Sep 2019, LZO 2.10
Wed Feb 19 12:53:44 2020 WARNING: --keepalive option is missing from server config
Wed Feb 19 12:53:44 2020 Diffie-Hellman initialized with 4096 bit key
Wed Feb 19 12:53:44 2020 WARNING: normally if you use --mssfix and/or --fragment, you should also set --tun-mtu 1500 (currently it is 1391)
Wed Feb 19 12:53:44 2020 TUN/TAP device tap0 opened
Wed Feb 19 12:53:44 2020 TUN/TAP TX queue length set to 100
Wed Feb 19 12:53:44 2020 /sbin/ip link set dev tap0 up mtu 1391
Wed Feb 19 12:53:44 2020 /sbin/ip addr add dev tap0 10.4.0.1/24 broadcast 10.4.0.255
Wed Feb 19 12:53:44 2020 Could not determine IPv4/IPv6 protocol. Using AF_INET
Wed Feb 19 12:53:44 2020 Socket Buffers: R=[212992->212992] S=[212992->212992]
Wed Feb 19 12:53:44 2020 UDPv4 link local (bound): [AF_INET][undef]:1194
Wed Feb 19 12:53:44 2020 UDPv4 link remote: [AF_UNSPEC]
Wed Feb 19 12:53:44 2020 MULTI: multi_init called, r=256 v=256
Wed Feb 19 12:53:44 2020 Initialization Sequence Completed

Und nun ist der VPN-Client dran:

root@d10wks:/etc/openvpn# openvpn --config client/roadwarrior1.config
Wed Feb 19 12:54:44 2020 disabling NCP mode (--ncp-disable) because not in P2MP client or server mode
Wed Feb 19 12:54:44 2020 OpenVPN 2.4.7 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Feb 20 2019
Wed Feb 19 12:54:44 2020 library versions: OpenSSL 1.1.1d  10 Sep 2019, LZO 2.10
Wed Feb 19 12:54:44 2020 WARNING: No server certificate verification method has been enabled.  See http://openvpn.net/howto.html#mitm for more info.
Enter Private Key Password: ********
Wed Feb 19 12:55:10 2020 WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this
Wed Feb 19 12:55:10 2020 WARNING: normally if you use --mssfix and/or --fragment, you should also set --tun-mtu 1500 (currently it is 1471)
Wed Feb 19 12:55:10 2020 TUN/TAP device tap0 opened
Wed Feb 19 12:55:10 2020 /sbin/ip link set dev tap0 up mtu 1471
Wed Feb 19 12:55:10 2020 /sbin/ip addr add dev tap0 10.4.0.2/24 broadcast 10.4.0.255
Wed Feb 19 12:55:10 2020 TCP/UDP: Preserving recently used remote address: [AF_INET]192.168.5.2:1194
Wed Feb 19 12:55:10 2020 UDP link local (bound): [AF_INET][undef]:1194
Wed Feb 19 12:55:10 2020 UDP link remote: [AF_INET]192.168.5.2:1194
Wed Feb 19 12:55:11 2020 WARNING: 'tun-mtu' is used inconsistently, local='tun-mtu 1503', remote='tun-mtu 1423'
Wed Feb 19 12:55:11 2020 WARNING: 'ifconfig' is present in local config but missing in remote config, local='ifconfig 10.4.0.0 255.255.255.0'
Wed Feb 19 12:55:11 2020 WARNING: INSECURE cipher with block size less than 128 bit (64 bit).  This allows attacks like SWEET32.  Mitigate by using a --cipher with a larger block size (e.g. AES-256-CBC).
Wed Feb 19 12:55:11 2020 WARNING: INSECURE cipher with block size less than 128 bit (64 bit).  This allows attacks like SWEET32.  Mitigate by using a --cipher with a larger block size (e.g. AES-256-CBC).
Wed Feb 19 12:55:11 2020 WARNING: cipher with small block size in use, reducing reneg-bytes to 64MB to mitigate SWEET32 attacks.
Wed Feb 19 12:55:11 2020 [d10srv1.dom1.test] Peer Connection Initiated with [AF_INET]192.168.5.2:1194
Wed Feb 19 12:55:12 2020 Initialization Sequence Completed

Funktionstest auf dem VPN-Client:

  • Wir senden via ICMP/ping das Muster „deadbeef“: -p deadbeef

  • Auf dem Router läuft währenddessen tcpdump -n -i eth0 -X

  • Nur bei Klartextkommunikation darf dieses Muster erkennbar sein: ping -p deadbeef 192.168.5.2

  • Bei ping -p deadbeef 10.4.0.1 sind nur wirre Zeichen zu sehen. :-)

Siehe dazu hier:

tux@d10wks 12:57:14:~$ ip -4 addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 192.168.2.222/24 brd 192.168.2.255 scope global enp0s3
    valid_lft forever preferred_lft forever
3: lxcbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    inet 10.33.1.1/24 scope global lxcbr0
    valid_lft forever preferred_lft forever
6: tap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1471 qdisc pfifo_fast state UNKNOWN group default qlen 100
    inet 10.4.0.2/24 brd 10.4.0.255 scope global tap0
    valid_lft forever preferred_lft forever
tux@d10wks 12:57:19:~$
tux@d10wks 12:57:19:~$ ping -p deadbeef 10.4.0.1
PATTERN: 0xdeadbeef
PING 10.4.0.1 (10.4.0.1) 56(84) bytes of data.
64 bytes from 10.4.0.1: icmp_seq=1 ttl=64 time=1.39 ms
64 bytes from 10.4.0.1: icmp_seq=2 ttl=64 time=0.986 ms
64 bytes from 10.4.0.1: icmp_seq=3 ttl=64 time=0.896 ms
64 bytes from 10.4.0.1: icmp_seq=4 ttl=64 time=1.71 ms
^C
--- 10.4.0.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 36ms
rtt min/avg/max/mdev = 0.896/1.245/1.714/0.329 ms
tux@d10wks 12:59:34:~$

Zur Kontrolle auf dem Client:

root@d10wks:/etc/openvpn# ls -ltrc
insgesamt 32
drwxr-xr-x 2 root root 4096 Feb 18 12:49 server
-rwxr-xr-x 1 root root 1468 Feb 18 12:49 update-resolv-conf
lrwxrwxrwx 1 root root   26 Feb 18 12:54 client.conf -> client/roadwarrior1.config
-rw------- 1 root root  636 Feb 18 12:55 secret.key
-rw------- 1 tux  tux  3414 Feb 19 12:50 client1.key
-rw------- 1 tux  tux  7270 Feb 19 12:50 client1.crt
-rw------- 1 tux  tux  1919 Feb 19 12:50 ca.crt
drwxr-xr-x 2 root root 4096 Feb 19 12:52 client
root@d10wks:/etc/openvpn#

Zur Kontrolle auf dem Server:

root@d10srv1:/etc/openvpn# ls -ltrc
insgesamt 44
drwxr-xr-x 2 root root 4096 Feb 18 10:51 client
-rwxr-xr-x 1 root root 1468 Feb 18 10:51 update-resolv-conf
lrwxrwxrwx 1 root root   17 Feb 18 11:00 server.conf -> server/gw1.config
-rw------- 1 root root  636 Feb 18 11:02 secret.key
-rw------- 1 root root 1919 Feb 19 12:30 ca.crt
-rw------- 1 root root 3272 Feb 19 12:30 server.key
-rw------- 1 root root 7414 Feb 19 12:30 server.crt
-rw------- 1 root root  769 Feb 19 12:30 dh.pem
-rw------- 1 root root 1011 Feb 19 12:30 crl.pem
drwxr-xr-x 2 root root 4096 Feb 19 12:42 server
-rw------- 1 root root  232 Feb 19 12:59 openvpn-status.log
root@d10srv1:/etc/openvpn#
root@d10srv1:/etc/openvpn# cat openvpn-status.log
OpenVPN CLIENT LIST
Updated,Wed Feb 19 12:59:24 2020
Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since
ROUTING TABLE
Virtual Address,Common Name,Real Address,Last Ref
GLOBAL STATS
Max bcast/mcast queue length,0
END
root@d10srv1:/etc/openvpn#
root@d10srv1:/etc/openvpn#

Konfiguration von OpenSSL-Defaults

Gute HyperLinks:

Auf der Seite von „dozent.maruweb.de“ liest man u.a.:

„Openssl wird in fertigen Distributionspaketen häufig zusammen mit dem Script CA.pl ausgeliefert, …“

Zu den Experimenten von https://www-user.tu-chemnitz.de/~hot/SSL/

$ vi /etc/ssl/openssl.cnf

Anpassungen auf folgende Werte z.B. bei:

dir                             = ./CA-ComCave
default_days                    = 3650
countryName_default             = DE
stateOrProvinceName_default     = Sachsen
0.organizationName_default      = ComCave

Danach geht es mit dem Gründen einer eigenen CA los:

$ CA.pl -newca

Die weiteren Schritte bitte in folgenden Dokumenten nachschlagen:

TIPPS zum Thema CAs verwalten:

Zur Erinnerung:

$ grep -i common /etc/ssl/openssl.cnf
commonName             = supplied

Siehe auch:

$ dpkg -L openssl