Tag Archives: ssh

SSH absichern

(C) frko @ sxc

Mein root Server bei Hetzner nutzt schon lange das publickey-Verfahren, um sich gegen Attacken gegen Port 22 und damit SSH zu schützen. Dafür hat Frank gesorgt. Meine Server in der Schule nun endlich auch … und damit bestand das Problem, dass ich nicht den gleichen Key für zwei Server nutzen wollte bzw die Neuerstellung eines weiteren Keys den Inhalt der id_dsa Datei im .ssh Verzeichnis überschreibt und ich so meinen alten Key verloren hätte. Wer zwei oder mehr getrennte Keys wünscht, muss also Pfade zu denselben angeben.

Während der gesamten folgenden Schritte immer eine root-shell auf dem Server offen haben, damit man sich die alten Einstellungen im Notfall zurück holen kann, sollte man sich aussperren.

Zur Vorbereitung die /etc/ssh/sshd_config an einen sicheren Ort wegkopieren und dann anpassen – und zwar die folgenden Zeilen in derselben, sofern man unter einem Debian / einer SuSE mit installiertem sudo bzw. Ubuntu arbeitet:

Port 222222
PermitRootLogin no
X11Forwarding no
PrintMotd no
ChallangeResponseAuthentication no
PasswordAuthentication no

Port 22222 ist evtl. etwas übertrieben – aber Paranoia schadet ja nicht.

Auf dem Client dann den Key erstellen und die Rückfrage nach einem Passwort für den Key mit einer entsprechend komplizierten und langen Passphrase beantworten:

ssh-keygen -f /home/benutzer/.ssh/benutzer-servername

Der öffentliche Teil muss dann mit Hilfe von scp auf den Server transferiert werden:

scp /home/benutzer/.ssh/benutzer-servername.pub benutzer@servername.domain:/home/benutzer

Dort den öffentlichen Schlüssel in den Schlüsselbund kopieren:

cat benutzer-servername.pub >> /home/benutzer/.ssh/authorized_keys

Ein

/etc/init.d/ssh restart

schaltet die Änderungen scharf.

Jetzt die Verbindung vom Client aus testen:

ssh benutzer@servername.domain -p 22222 -i /home/benutzer/.ssh/benutzer-servername

Wenn alles klappt, man also nach der Passphrase für den Key und nicht mehr nach einem Serverkennwort gefragt wird, sich also anmelden und mit Hilfe von sudo auch root werden kann, ist alles gut. Wenn nicht, dann zuerst die Rechte der eben angelegten Dateien und Verzeichnisse kontrollieren.

rsync über ssh mit Hop

Einer meiner Laptops steht in der Schule – also hinter einer Firewall und nur über seine schulinterne IP erreichbar. Angenehm ist, wenn der Datenbestand auf dieser Maschine dem Datenbestand auf meinem heimischen Arbeitsplatzrechner entspricht. Bisher trug ich den Schullaptop deswegen immer in den Ferien mit nach Hause, synchronisierte diesen im heimischen Netz und nahm diesen dann am ersten Schultag wieder mit zum Arbeitsplatz. Der Datenbestand hinkte demnach etwas hinterher.

Für eine Erstsynchronisation ist dieses Vorgehen immer noch ratsam. Aber jetzt aktualisiere ich öfter – mit Hilfe von rsync über ssh und einem Hop über einen anderen Rechner im Schulnetz, der – so zu sagen – “in der Mitte” steht, von Außen erreichbar ist und immer am Netz hängt. Ich nenne diese Maschine hier “rechnermitte”.

Die Maschine rechnermitte ist nicht über den Standard SSH Port 22, sondern (sagen wir mal) über Port 2244 zu erreichen. Der SSH Server auf dem Schullaptop jedoch hört auf Port 22.

Hinweis: Damit keiner Blödsinn mit meinem Schullaptop macht, ist der Login über SSH nur für einen bestimmten User (hier: schullaptopnutzer) erlaubt und außerdem hab ich auf diesem als zusätzliche Hürde fail2ban installiert.

Zuerst wird ein SSH-Tunnel zum Schullaptop geöffnet, und zwar so, dass dessen Port 22 über rechnermitte an den Port 2223 am Heimarbeitsplatz (localhost) gebunden wird:

ssh -L 2223:interne_ip_schullaptop:22 user_mitte@rechnermitte.schuldomain.de -p 2244

Der Aufruf verlangt nach dem Passwort für user_mitte auf rechnermitte.

Steht diese Verbindung, kann ich meinen Schullaptop vom heimischen Rechner aus schon wie folgt über SSH erreichen:

ssh schullaptopnutzer@localhost -p 2223

Es folgt der Aufruf von rsync auf dem heimischen Rechner, mit dem Ziel, die zu Hause geänderten Daten auf den Schulrechner zu übertragen (umgekehrt geht das auch – aber das ist nicht Teil dieser Beschreibung):

rsync -r -t -p -x -v –progress –delete -z /home/heimrechnernutzer/Dokumente/Schule/ –rsh=’ssh -p2223′ schullaptopnutzer@localhost:/home/schullaptopnutzer/Dokumente/schule

Selbstverständlich dauert eine derartige Synchronisation über das Internet wesentlich länger – ich hab hier nur “Bauern-DSL” und entsprechend niedrige Upload-Raten. Aber es klappt trotz aller Einschränkungen erstaunlich flott – die Zeit für das Abendessen reicht fast immer.

Nach einer erfolgreichen Synchronisation kann ich den Schullaptop dann von zu Hause aus herunterfahren.

Vereinfachend für mich ist, dass ich auf dem Schullaptop nur selten viele Dateien überarbeite: Die Maschine dient im Wesentlichen als Präsentationsrechner. Wenn doch umfangreichere Änderungen vorgenommen werden, dann schick ich mir diese meist per Mail oder werf sie nach Dropbox, so dass ich extrem selten einen rsync vom Laptop in Richtung Heimrechner benötige. Sollte dies sich ändern, dann käme evtl. noch unison ins Spiel und würde weitere Vereinfachungen ermöglichen: http://wiki.ubuntuusers.de/Unison

Eine gute Sammlung verschiedener Methoden für rsync über ssh liefert die folgenden Website inklusive Sicherheitshinweise: http://samba.anu.edu.au/rsync/firewall.html