SSH: Login mit Key statt Passwort und schön bunt

Jedes Mal wenn ich einen neuen Raspberry oder Webserver einrichte, mache ich ein paar Modifikationen an der bash Shell und sorge dafür, dass ich mich ohne Passwort mit einem Schlüssel anmelden kann und an der Farbe des Prompts erkenne, ob ich mit root-Rechten arbeite.
Eingefärbte Verzeichnisse und praktische Abkürzungen mag ich auch.

Also bash sicherer und praktisch.

Weiterlesen

VPN Server einrichten

Wolltet Ihr auch schon mal von unterwegs auf Euer NAS zugreifen? Oder auf den PC? Mache ich dauernd. Meistens mit der Hilfe des Teamviewers, aber manchmal hilft der nicht weiter. Z.B. wenn man auf einen FileShare zugreifen möchte.

Dann könnte man ein VPN (virtual private network) benutzen. Damit verbindet man seinen Laptop oder das Handy mit dem Netzwerk zu Hause. Das funktioniert dann genauso als wäre man daheim im WLAN.

Manche Router bieten so etwas von Haus aus. So auch meine FritzBox. Nur ist die Konfiguration der „Clients“, also der Software auf dem Laptop, extrem unpraktisch und unflexibel.

Mit sind Standard-Lösungen lieber, die dann auch von überall, von jedem Handy, Mac, Windows PC und so weiter funktionieren. So eine Standard-Lösung ist OpenVPN, das nun wirklich überall benutzt wird. Warum also nicht einen Raspberry (egal welche Version), die es für wenig Geld überall zu kaufen gibt, als OpenVPN Server benutzen.

Im folgenden beschreibe ich, wie man so etwas einrichtet.

Ausgangspunkt ist ein Raspberry Pi (Version egal) mit installiertem „Raspbian“ Betriebssystem. Eine Anleitung dazu gibt es z.B. auf raspberrypi.org. Außerdem solltet Ihr per SSH auf den Raspberry zugreifen können. SSH schaltet man mittels sudo raspi-config ein (Interfacing Options / SSH) und benutzt anschließend Putty um sich von einem Windows Rechner aus mit Raspi zu verbinden.

Die Anleitung funktioniert aber genauso mit einem Debian-Linux oder Ubuntu.

Erst mal eine Root-Shell öffnen und alles auf den neuesten Stand bringen:
sudo -s
apt-get update
apt-get upgrade

Dann den OpenVPN Server und ein Tool zum generieren der nötigen Schlüssel installieren:
apt-get install openvpn
apt-get install easy-rsa

easy-rsa benötigt ein wenig Konfiguration:
sudo make-cadir /etc/openvpn/easy-rsa

Damit wurden die Konfigurationsdaten kopiert, wir müssen uns nur noch für die richtige openssl-Version entscheiden und die entsprechende Datei umbennen:
cd /etc/openvpn/easy-rsa
mv openssl-1.0.0.cnf openssl.cnf

Nun mittels nano die Datei vars ändern. Also nano vars ausführen und die Zeile
export EASY_RSA="`pwd`"
so ändern:
export EASY_RSA="/etc/openvpn/easy-rsa"
Wer Lust hat, kann auch noch die Angaben für den Ort, Firma usw. ändern, aber das ist nicht unbendingt nötig:
export KEY_COUNTRY="AT"
export KEY_PROVINCE="Vienna"
export KEY_CITY="Vienna"
export KEY_ORG="tethis IT"
export KEY_EMAIL="support@tethis-it.at"
export KEY_OU="VPN"
Speichern und verlassen mit STRG-o, Return und STRG-x

Jetzt können wir die Skripte benutzen um Schlüssel zu generieren. Eine genaue Erklärung der Schritte findet sich in der OpenVPN Dokumentation.

source ./vars
./clean-all
./build-ca

Jetzt kommen ein paar Fragen. Was man da eingibt ist eigentlich egal, einfach mehrmals Return drücken ist ok.

./build-key-server Server

Anstelle von „Server“ könnt Ihr auch irgendwas anderes benutzen. Merkt es Euch, denn jetzt kommen ein paar Fragen. Nur die folgenden sich dabei wichtig:
Common Name (eg, your name or your server's hostname) [Server]: => einfach Return drücken
A challenge password []: => einfach Return drücken
Sign the certificate? [y/n]: y
1 out of 1 certificate requests certified, commit? [y/n] y

Nun erzeugen wir je einen Schlüssel für alle Benutzer, die das VPN nutzen wollen. Hier heißt er beispielhaft „user“ und bekommt das Passwort „password“
./build-key-pass user
Enter PEM pass phrase: => password + Return
Verifying - Enter PEM pass phrase: => password + Return
Die folgenden Fragen einfach mit Return beantworten. Wer Lust hat, kann die E-Mail-Adresse ändern, aber das Challenge Passwort MUSS leer bleiben und die beiden letzten Fragen werden mit y beantwortet:
A challenge password []: => einfach Return drücken
Sign the certificate? [y/n]: y
1 out of 1 certificate requests certified, commit? [y/n] y

Jetzt noch die DES3-Version dieses Schlüssels erzeugen (für Handys nötig):
cd keys
openssl rsa -in user.key -des3 -out user.3des.key
Man wird zuerst nach der pass phrase von oben gefragt, danach muss man zwei mal eine neue pass phrase eingeben. Einfach drei mal das oben festgelegte „password“ eingeben.

Dann brauchen wir noch Schutz gegen Denial-of-Service Attacken und einen Diffie-Hellmann-Key:
cd /etc/openvpn/easy-rsa
openvpn --genkey --secret keys/ta.key
./build-dh
Das dauert. Geht euch ein, zwei Tassen Kaffee holen, oder macht einfach in einem zweiten Putty Fenster weiter, bis Ihr an den Punkt kommt, wo der Raspi rebootet werden muss.

Der OpenVPN Server braucht eine Konfiguration.
Meine Vorlage dazu gibt es hier: server.conf
nano /etc/openvpn/server.conf
Dann den Inhalt der Vorlagen hier hinein kopieren (Strg-C auf der Webseite, dann rechts-klick im nano Fenster).
Es müssen einige IP Adressen angepasst werden. An diesen Stellen sind in der Datei GROSSGESCHRIEBENE Kommentare.
Danach die Daten mit Strg-O und Strg-X speichern.

Jetzt kümmern wir uns um den Linux-Kernel und die Firewall.
Erst mal dem Kernel erlauben, überhaupt Netzwerkpakete weiterzuleiten:
nano /etc/sysctl.conf

Das ‚#‘ am Anfang der Zeile #net.ipv4.ip_forward=1 entfernen.
Die Datei mit Strg-O und Strg-X speichern.
sysctl -p macht die Änderung wirksam.

Um eine Ausnahme für die Firewall einzurichten, geben wir folgendes ein:
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT –to-source 192.168.XX.XX
Dabei die IP Adresse am Ende durch die IP Adresse des Raspberry ersetzen.
Mit iptables -L -t nat kann man sich ansehen, ob das funktioniert hat. Es sollte etwas wie folgt angezeigt werden:
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
SNAT all — 10.8.0.0/24 anywhere to:192.168.178.56

Dummerweise geht die Regel beim nächsten Boot wieder verloren, also müssen sie noch permanent machen:
apt-get install iptables-persistent
iptables-save > /etc/iptables/rules.v4

Damit ist der Server fertig!! Fehlt nur noch ein Reboot:
reboot

Nun wieder dem Raspberry verbinden, sudo su - und nun den OpenVPN Server starten
systemctl start openvpn@server
systemctl enable openvpn@server

 

Lass andere teilhaben...