SSH Zugang des Bitcoin-/ Lightning Node sichern

5 Min. Lesedauer
Von FuSsY
SSH Zugang des Bitcoin-/ Lightning Node sichern

Wenn wir einen Bitcoin / Lightning Node bzw. einen Server betreiben, sind diese GerĂ€te im Normalfall 24 Stunden, 7 Tage die Woche, 365 Tage im Jahr fĂŒr uns erreichbar. Wir nutzen all die Vorteile eines eigenen Node und unserem eigenen Electrum- / Fulcrumserver.

Diese GerÀte sind allerdings auch rund um die Uhr mit dem Internet verbunden damit sie zuverlÀssig funktionieren. Das birgt Gefahren...!

Um nicht Opfer des erstbesten Script-Kiddies zu werden, ist es unumgĂ€nglich uns Gedanken darĂŒber zu machen, wie wir unseren Node vor Angreifern schĂŒtzen.

Da wir via SSH (secure shell) verschlĂŒsselt mit unserem Node kommmunizieren, kommt diesem Service besondere Aufmerksamkeit zu. Denn Ports welche eine Authentifizierung anbieten (HTTPS, SSH, FTP, SMTP, 
) werden auch angegriffen.

Im wesentlichen werden wir als erstes ein paar Basics an unserem SSH Zugang Àndern. Diese sind dann schon ein riesen Schritt in die richtige Richtung! Fangen wir an....

Hinweis: Damit wir uns bei Fehlern in der Config nicht aus unserem Node bzw. Server aussperren, lasst das aktive Terminalfenster geöffnet! Die Session und der Login bleibt erhalten, bis wir das Terminal beenden. Zum Testen der Änderungen einfach ein weiteres Terminal öffnen.

Standard SSH Port Àndern

Um automatischen SSH Portscans von Angreifern aus dem Weg zu gehen, legen wir den SSH-Dienst, der standardmĂ€ĂŸig auf dem TCP-Port 22 horcht, auf einen zufĂ€lligen höheren Port. Nehmt einen Port, der in euren Node Konfigs nicht von anderen Services genutzt wird z.B. 43210.

Login zu eurem Node, wechselt in das Verzeichnis /etc/ssh und öffnet die sshd_config (die systemweiter SSH Konfiguration):

sudo nano /etc/ssh/sshd_config
Port 43210

Strg+x und J zum speichern.

Neustart des SSH Servers:

sudo systemctl restart sshd

Macht ein neues Terminal auf und ssh auf euren Node...

ssh [email protected] -p 43210

Um es uns zu ersparen, bei jedem Login den Port mit angeben zu mĂŒssen öffnen wir lokal (auf dem SSH Client) die SSH Config...

nano ~/.ssh/config

Dort tragen wir 2 Zeilen ein:

Host "Name oder IP des Node/Server"
Port 43210

Strg+x speichern und fertig. Beim erneuten Versuch euch per SSH zu verbinden reicht euer normaler [email protected].

Damit gehen wir automatisierten SSH-Scans effektiv aus dem Weg.

TCP-Wrapper nutzen mit "/etc/hosts.allow" und "/etc/hosts.deny"

Mit dem TCP-Wrapper haben wir die Möglichkeit, Anfragen an unsere Services wie SSH zu beschrĂ€nken. TCP-Wrapper nimmt entsprechende Verbindungsanfragen im voraus entgegen und unterbindet oder leitet sie an unseren Dienst weiter. Somit können wir auf einfache Weise bestimmte IP's und Netzwerke ausschließen bzw. zulassen.

Dazu bearbeiten wir die Sperrklauseln /etc/hosts.deny:

sudo nano /etc/hosts.deny

#SSH Zugangssperre Alle außer Lokale
sshd: ALL EXCEPT LOCAL

Strg+x speichern.

Die freigegebenen Adressen kommen in die /etc/hosts.allow:

sudo nano /etc/hosts.allow

#Beispiele fĂŒr erlaubte IP's und Netze
#sshd: 192.168.10.123
#sshd: 192.168.10.5
#sshd: 192.168.178.0/255.255.255.0

Strg+x speichern.

Die Adressen mĂŒssen an eure Netzwerkumgebung angepasst werden. Mit diesen beiden Dateien stellen wir sicher, dass nur noch von den direkt angegebenen IP's und den IP's des Subnetzwerk auf den Node/Server zugegriffen werden kann. Mit ALL EXCEPT LOCAL haben wir uns den lokalen Zugriff am Server selbst freigehalten.

Deaktivieren des direkten Root-Zugangs

Direkte Root-Anmeldungen an unserem Node sind nicht zu empfehlen! Wir brauchen es auch nicht, da unser angelegter User jederzeit per "su-command" als Root angemeldet werden kann bzw. jeder Terminal Befehl auch mit dem vorgesetzten "sudo" als Root ausgefĂŒhrt werden kann.

Wir sperren den Root Login:

sudo nano /etc/ssh/sshd_config
PermitRootLogin no

Wir sperren die PAM Authentifizierung:

UsePAM no
ChallengeResponseAuthentication no

Strg+x speichern und fertig.

EinschrÀnken auf Public-Key-Zugang

Um Brute-Force Attacken, auf unser relativ unsichers Passwort Login zu unterbinden, sollte der Passwort Login komplett abgeschaltet werden und die Authentifizierung nur ĂŒber ein Public-Key-Auth erfolgen.

Hierzu mĂŒssen wir uns zuerst ein SchlĂŒsselpaar erstellen. Das tun wir lokal auf unserem Rechner/Client.

Voraussetzungen: OpenSSL installieren, z.B. unter Debian/Ubuntu mittels apt-get install openssl

Im Terminal erstellen wir unser Key-Pair:

ssh-keygen -t rsa -b 4096 -f /home/"USER"/.ssh/id_rsa

Ausgabe:

Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): "nutzt einen PW-Manager und erstellt ein starkes Passwort!"
Enter same passphrase again:
Your identification has been saved in /<Verzeichnis_zum_Speichern_der_SchlĂŒssel>/id_rsa.
Your public key has been saved in /<Verzeichnis_zum_Speichern_der_SchlĂŒssel>/id_rsa.pub.
The key fingerprint is:
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX

Die Passphrase schĂŒtzt den Zugriff auf den privaten SchlĂŒssel.

Der öffentliche SchlĂŒssel befindet sich in der Datei "id_rsa.pub", der private SchlĂŒssel in "id_rsa".

FĂŒr Windows:

Ihr könnt versuchen im Windows CMD das SchlĂŒsselpaar via OpenSSH zu generieren. OpenSSH wurde irgendwann in Windows 10 integriert... folgenden Befehl im Terminal ausfĂŒhren:

ssh-keygen -b 4096

Nach "Enter" kommt die Eingabe der Passphrase. Die Passphrase schĂŒtzt den Zugriff auf den privaten SchlĂŒssel. Verwendet einen Passwortmanager und erzeugt ein starkes Passwort!

Das Key-Pair wird in folgendem Verzeichnis gespeichert.

C:\Users\MyUserName\.ssh id_rsa und id_rsa.pub

Alternativ, falls es dabei Schwierigkeiten gibt, nehmt das Tool Puttygen um SchlĂŒssel fĂŒr OpenSSH zu erstellen. Sucht euch die passende Version fĂŒr euer Windows raus.

SchlĂŒssel erstellen:

1. Unter "Parameters" auf "SSH-2-RSA" bzw. "SSH-2-DSA" klicken.

2. Anschließend im Textfeld darunter "4096" eingeben.

3. Auf die SchaltflÀche "Generate" klicken.

4. Die Maus bewegen, bis der blaue Balken am rechten Rand angekommen ist.

5. Nach kurzer Zeit hinter "Key Passphrase" und "Confirm Passphrase" die Passphrase eingeben.

Hinweis: Die Passphrase schĂŒtzt den Zugriff auf den privaten SchlĂŒssel. Verwendet einen Passwortmanager und erzeugt ein starkes Passwort!

6. Auf die SchaltflĂ€che "Save public key" und danach auf "Save private key" klicken. Legt dann im jeweils erscheinenden Dialogfenster  fest, wo die SchlĂŒssel gespeichert werden sollen.

Jetzt kopieren wir den Public Key, rsa.pub auf unseren Node/Server in die Datei /home/USER/.ssh/authorized_keys. USER ist wie immer mit eurem Nutzernamen zu ersetzen...

scp ~/.ssh/id_rsa.pub | ssh USER@HOST "mkdir /home/USER/.ssh; cat >> .ssh/authorized_keys"

FĂŒr einen extra Layer an Sicherheit setzen wir die Ordner & Dateirechte von authorized_keys auf:

sudo chmod -R 700 ~/.ssh && chmod 600 ~/.ssh/authorized_key

Das verhindert einen Zugriff auf das Verzeichnis und unser Keyfile durch andere User außer uns.

Anpassen der SSH Config

Wechselt in die ssh config eures Node und setzt diese 2 Zeilen auf:

sudo nano /etc/ssh/sshd_config
PubkeyAuthentication yes
PasswordAuthentication no

Strg+x speichern.

Damit wir uns bei einem Fehler jetzt nicht aus unserem Node aussperren, lasst dieses Terminalfenster geöffnet! Die Session und der Login bleibt erhalten, bis wir das Terminal beenden.

Damit unsere Änderungen angewendet werden öffnen wir ein neues Terminal und melden uns mit unserem [email protected] und dem noch erlaubten Passwort an. Danach restarten wir unseren SSH Server mit:

sudo systemctl restart sshd

Jetzt checken wir ob alles geklappt hat. Neues Terminal öffnen und login auf eurem Node/Server via:

ssh [email protected]

Im folgenden öffnet sich ein Fenster zur Abfrage der Passphrase (unser neu erstelltes starkes PW).
Nach Eingabe des PW erfolgt der Login zu eurem Node.


Last login: Thu Apr  6 21:04:23 2023 from 192.168.10.123

Falls jetzt Probleme auftreten wie Permission denied oder Fehler im PreAuth haben wir noch unsere aktive Terminalsession, die wir vorhin NICHT geschlossen haben. Dort einfach nochmal in die SSH Config und die Zeile

PasswordAuthentication no

Ă€ndern auf

PasswordAuthentication yes

Danach könnt ihr in Ruhe schauen wo es hÀngt. Bei Problemen findet ihr immer guten Rat in unserer Telegram Gruppe ;)

Hat dir der Artikel gefallen? Stay safe... cheers ;)

Onchain/Lightning Beer: https://coinos.io/FuSsY

http://vm7h454g5hiy2nt3u5o7evtz3vigtypo2mkyausakvdkbmd7wpyhx5qd.onion/FuSsY

Lightning only Beer: [email protected]

TrustBTC Community 🏮


Folgen