Openvpn
Inhaltsverzeichnis
Einfaches Setup für zwei Maschinen
Auf beiden Maschinen
apt-get install openvpn
Server side
openvpn --genkey --secret secret.key
scp secret.key root@<remote host>
vim /etc/openvpn/simple.conf
dev tun
ifconfig 10.8.0.1 10.8.0.2
secret secret.key
keepalive 10 60
ping-timer-rem
persist-tun
persist-key
user nobody
group nogroup
daemon
Client side
Der <remote.host> muss durch den Clienten aufgelöst werden können.
Entweder per /etc/hosts oder DNS
vim /etc/openvpn/simple.conf
remote <remote.host>
dev tun
ifconfig 10.8.0.2 10.8.0.1
secret secret.key
keepalive 10 60
ping-timer-rem
persist-tun
persist-key
user nobody
group nogroup
daemon
Sternförmiges Setup mit zentralem Server
OpenVPN-Server mit CentOS 7
Installation
OpenVPN befindet sich nicht in den Repos des CentOS-Projektes.
Deshalb müssen Fedora EPEL repos eingebunden werden.
yum install epel-release yum makecache
yum install openvpn easy-rsa -y
Ifconfig wird benötigt, es ist per default nicht installiert.
yum install net-tools -y
Zertifikate erstellen
Wir bauen uns unsere eigene Certification Authority.
Wichtiger Hinweiß: Aus Sicherheitsgründen sollten der ca.key niemals auf dem Server verbleiben!
Easy-rsa findet sich bei CentOS 7 in
/usr/share/easy-rsa/2.0
Das verzeichniss 2.0 kopieren wir an einen Platz unserer Wahl, der Ordner kann jeden Namen haben.
Empfehlenswert ist ein Verzeichnissname, der den Namen des VPN widerspiegelt.
In vars folgende Positionen ändern
vim vars
export KEY_COUNTRY="<Dein Länderkürzel>" export KEY_PROVINCE="<Dein Bundesland>" export KEY_CITY="<Deine Stadt>" export KEY_ORG="<Deine Organisation/Firma>" export KEY_EMAIL="<Deine E-Mail-Adresse>" export KEY_OU="<Abteilung>" export KEY_NAME="<irgendwas sinnvollen, VPN-Name mit Name>"
Danach folgende Schritte ausführen.
. ./vars ./clean-all ./build-ca
./build-ca wird die Frage nach dem Common Name aufwerfen.
Irgendwas sinnvolles, vielleicht VPN-Name.
Server Key und Zertifikat
<Servername> sollte der gleiche String wie Common Name, der bei der Erstellung abgefragt wird, sein.
Die anfallenden Files weirden den Prefix <Servername> haben.
./build-key-server <Servername>
Client Key und Zertifikat
<Clientname> sollte der gleiche String wie Common Name, der bei der Erstellung abgefragt wird, sein.
Die anfallenden Files weirden den Prefix <Clientname> haben.
./build-key <Clientname>
Diffie Hellman Parameter erstellen
./build-dh
Verteilung und Zugriffsrechte der Dateien
Dateiname | Benötigt von | Zweck | Geheim |
---|---|---|---|
ca.crt | Server + alle Clienten | Root CA Zertifikat | Nein |
ca.key | Zertifikat signierende Maschine | Root CA Schlüssel | Ja |
dh{n}.pem | Nur Server | Diffie Hellman parameter | Nein |
server.crt | Nur Server | Server Zertifikat | Nein |
server.key | Nur Server | Server Schlüssel | Ja |
client1.crt | Client1 | Client1 Zertifikat | Nein |
Client1.key | Client1 | Client1 Schlüssel | Ja |
client2.crt | Client2 | Client2 Zertifikat | Nein |
Client2.key | Client2 | Client2 Schlüssel | Ja |
Config
Server Config
# # /etc/openvpn/newvpn.conf # Files liegen in /etc/openvpn/newvpn # und /etc/openvpn/newvpn/ccd-dir # Port, default ist 1124, alles ist besser als 1124. Minimiert Script-Angriffe. port <Port des VPN-Servers> #Protokoll-Typ proto udp # Device Typ, möglich sind tun und tap dev-type tun # Devicename dev newvpn # Speicherort der Zertifikate, Schlüssel usw. Pfade sind relativ zum Configfile ca newvpn/ca.crt cert newvpn/server.crt key newvpn/server.key dh newvpn/dh2048.pem mode server tls-server # Topologie des Netzwerkes topology subnet # mit push wird die Topologie dem Clienten mitgeteilt push "topology subnet" # IP des Servers und Netzmaske, ergibt zugleich das Netzwerk ifconfig 10.8.100.10 255.255.255.0 # Range der frei vergebbaren IPs, vergleichbar mit Range aus DHCP ifconfig-pool 10.8.0.11 10.8.0.199 255.255.255.0 # Hier werden die IPs der Clienten hinterlegt, vergleichbar mit # host win01 { hardware ethernet 00:00:00:00:00:00; fixed-address 192.168.0.5; } # Zuweisung erfolgt über den Dateinamen, der der selbe sein muss wie Common Name im Schlüssel des Clienten #Pfade sind relativ zum Configfile client-config-dir newvpn/ccd-dir ifconfig-pool-persist ipp.txt # Dadurch können sich Clienten untereinander verbinden client-to-client keepalive 10 120 # Kommpression der Verbindung comp-lzo # openvpns user-ID user nobody # openvpns group-ID group nobody # Schlüssel wird bei Erhalt von SIGUSR1 nicht neu geladen persist-key # Tun-Device wird bei Erhalt von SIGUSR1 nicht neu geladen persist-tun # Pfad ist relativ zum Configfile status openvpn-status.log # Verbosity Level verb 3
IP Zuweisung an Client
Im Verzeichniss newvpn/ccd-dir liegen die Dateien, die den Clienten feste IPs zuweisen können.
Die Datei hat den selben Namen wie der Common Name im Key des Clienten
vim <Common Name>
Inhalt der Datei
ifconfig-push 10.8.100.201 255.255.255.0
Files in newvpn
ca.crt dh2048.pem server.crt server.key
Service starten
Startet automatisch bei Systemstart.
String zwischen @ und .service ergibt sich aus dem Confignamen
systemctl enable openvpn@server.service
Händischer Start
systemctl start openvpn@server.service
Client Config
# # /etc/openvpn/newvpn.conf # Files liegen in /etc/openvpn/newvpn tls-client remote <IP oder FQDN des VPN-Servers> <Port des VPN-Servers> proto udp dev-type tun dev newvpn ca newvpn/ca.crt cert newvpn/client1.crt key newvpn/client1.key pull keepalive 10 120 comp-lzo persist-key persist-tun verb 3
Files in newvpn
ca.crt client1.crt client1.key