Root-Server SSH absichern


Root-Server SSH absichern

Der Zugriff auf einen Server erfolgt meist durch SSH über das unsichere Internet.
Um Probleme mit Anwälten und Sicherheitsbehörden zu vermeiden sollte der Zugang bestmöglich abgesichert werden!
Hier wird(hoffentlich verständlich) erklärt, wie man die Sicherheit erhöhen kann.

Die folgenden Hinweise beziehen sich auf einen Debian 7(Wheezy) Server, der mit der Windowsversion von PuTTY gesteuert wird.

Hinweis

SSH stellt eine verschlüsselte Verbindung zwischen Computern im Internet bereit. Die Kommunikation erfolgt dabei über den Standartport 22.
Dieser Port muss für den entfernten Benutzer offen sein, da er sonst ja gar nicht auf den Server zugreifen kann.
Somit ist dieser Dienst(SSH) ein bevorzugtes Angriffsziel für Kriminelle die auf zu kurze Passwörter und die Dummheit der Anwender hoffen. Denn zum ersten Zugriff auf einen Server wird immer ein "root" Useraccount vorgegeben. Leider nutzen viele dieses Account weiter und erstellen aus Bequemlichkeit gar kein weiteres; oft ist das Passwort bei denen sogar nur "god/gott/geheim/password"!!
Selbst wer Buchstabensalat als Passwort wählt ist nicht auf der sicheren Seite, da erst ab ca. 14 Zeichen eine ausreichende Sicherheit angenommen wird. Genügend Rechenleistung vorausgesetzt kann man aus abgehörten Datenpaketen sogar das Passwort bestimmen..

Hier kommt die Verwendung von Schlüsselpaaren ins Spiel, deren Schlüssellänge eine wesentlich höhere Sicherheit verspricht. Die Vorteile sind erhöhte Sicherheit/Komfort, denn diese langen Schlüssel können auf einem Datenträger(USB-Stick) lokal gespeichert werden.
Sinnvoll ist es auch den eigentlichen Schlüssel mit einem Passwort zu versehen, damit eine unbemerkte Kopie des Schlüssels wertlos ist.

Befehle

# /etc/init.d/ssh restart ausführen um die Änderungen am SSHd zu übernehmen.

Erweiterte Konfiguration

Zuerst muss auf dem Server ein nichtprivilegierter User vorhanden sein bzw. hinzugefügt werden(siehe Userverwaltung). Dabei auch gleich das Unterverzeichnis /home/username/.ssh/ die leere Datei /home/username/.ssh/authorized_keys erstellen und die Zugriffsrechte vergeben.:
# su username
$ mkdir ~/.ssh
$ touch ~/.ssh/authorized_keys
$ chmod 700 ~/.ssh && chmod 600 ~/.ssh/*
Der erste Befehl dient zum Wechsel vom User "root" zum User "username", er ist wichtig, um die richtigen Rechte bereitzustellen.
Rückkehr zum root-Account mit einmaligem $ exit.

Mit PuTTYgen die Schlüssel(SSH2-RSH/2048bit) erstellen und den öffentlichen Schlüssel in die /home/username/.ssh/authorized_keys kopieren.

Den privaten Schlüssel auf einem USB-Stick nach dem Format user@server speichern und ein Profil für den neuen User in PuTTY erstellen, dabei kann das ursprüngliche Rootprofil kopiert werden(Namen des Profils, des Users und den Pfad der Schlüsseldatei anpassen).

Zu Testzwecken einmal mit dem neuen Useraccount via PuTTY in den Server einloggen.
Wurde alles richtig eingestellt sollte folgendes ausgegeben werden:
Using username "brainbug".
Authenticating with public key "brainbug@meinserver.de"
Passphrase for key "brainbug@meinserver.de":
(Natürlich ist brainbug@meinserver nur ein Beispiel und wird je nach verwendetem Usernamen/Server anders aussehen^^).

Mögliche Fehlerquellen: nicht vollständig kopierter öffentlicher Schlüssel/falsche Zuweisung des privaten Schlüssels (wenn der Schlüssel von root für den User brainbug genutzt wird, kann es nicht klappen..).

Einige Punkte müssen aus Sicherheitsgründen geändert werden:
1.) User "root" darf sich überhaupt nicht mehr via SSH einloggen können(weder mit Passwort noch mit Schlüsseldatei).
2.) Passwörter sind für alle User nicht mehr erlaubt, stattdessen müssen Schlüsseldateien genutzt werden.
3.) Die Zeit zwischen Loginversuch und Schlüsselübergabe wird auf 5 Sekunden gesenkt(das gilt auch für die Eingabe des Schlüsselpasswortes!)
4.) Ein Banner soll vor dem eigentlichen Login angezeigt werden

/etc/ssh/sshd_config prüfen und korrigieren:

Port 22 default Port für SSH
Protocol 2 nur die neuere Protokollversion 2 nutzen
LoginGraceTime 5 nur 5 Sekunden fürs Einloggen erlauben
PermitRootLogin no root ist direktes Einloggen via SSH verboten
RSAAuthentication yes nötig für RSA-verschlüsselte.. Schlüssel?
PubkeyAuthentication yes nur bei 'yes' werden Schlüssel als Authentifizierung abgefragt
PermitEmptyPasswords no unbeding auf 'no' belassen! Leere Passwörter sind.. selten dämlich!
ChallengeResponseAuthentication no
PasswordAuthentication no bei 'no' ist keine Anmeldung mit Passwörtern möglich, '#' löschen!
X11Forwarding no ein Server braucht keinen X11 "Desktop"!
MaxStartups 10:30:60
Banner /etc/ssh/ssh-banner Pfad zu einer Bannerdatei(Inhalt folgt im nächsten Absatz:)

Die Banner-Datei mit # editor /etc/ssh/ssh-banner öffnen und mit folgendem Inhalt füllen und am Ende eine Leerzeile anhängen:
*********************************************************************************
*                                                                               *
*                                NOTICE TO USERS                                *
*                                                                               *
*      WARNING! The use of this system is restricted to authorized users,       *
*        unauthorized access is forbidden and will be prosecuted by law.        *
*                                                                               *
*         All information and communications on this system are subject         *
*               to review, monitoring and recording at any time,                *
*              without notice or permission. Users should have no               *
*                            expectation of privacy.                            *
*                                                                               *
*********************************************************************************

# /etc/init.d/ssh restart nicht vergessen!