Ein richtiger Linux Root-Server wird anderes als ein Windows-System nicht per graphischer Oberfläche mit Maus gesteuert, sondern alles wird per Konsole über Tastatur mit Hilfe des Protokolls SSH gesteuert (bunte Weboberflächen können immer ein Sicherheitsrisiko bedeuten). Damit nur gewünschte Zugriffe auf den Server stattfinden muss die Standard-Konfiguration verändert werden.
SSH (Wikipedia) ist ein Netzwerkprotokoll über welches von extern verschlüsselt der Server gesteuert werden kann und Daten ausgetauscht werden können.
Unter Windows ist ein SSH-Login mit PuTTY (Wikipedia) zur Konfiguration und das kopieren von Dateien mit WinSCP (Wikipedia) möglich.
Sehr unsicher ist jedoch das verwenden eines Kennwortes für den direkten root-Zugriff (Wikipedia) auf den Server. Darum wird zuerst ein eigenes Zertifikat erzeugt, dann der Zugriff eingeschränkt und anschließend das Passwort-Raten per sog. Brute-Force Angriff (Wikipedia) blockiert.
1. eigenes Zertifikat erzeugen
Mit dem Windows Programm PuTTYgen kann ein eigener Schlüssel erzeugt werden. Der Vorteil ist, dass wenn mehrere Server zu betreuen sind, dass man diesen Schlüssel auf jedem Server ablegen kann (siehe dazu Punkt 2. Zugriff einschränken) und auch nicht jedesmal ein Kennwort eingeben muss. Denn dies wird von nun an mit dem zusätzlichen Programm Pageant erledigt.
Das hier verwendete Prinzip setzt auf einem öffentlichen Schlüssel (Wipipedia), der ohne Bedenken weitergegeben werden kann und einem privaten Schlüssel (Wikipedia) auf, welcher mit einem Kennwort und vor fremdem Zugriff geschützt werden muss.
In PuTTYgen wird unter Parameters die Einstellung auf SSH-2 DSA gewählt und mit einem Klick auf Generate der Schlüssel erstellt. Nachdem Mausbewegungen für Zufallsparameter gesorgt haben kann ein Kommentar wie z.B. der eigene Name oder E-Mail Adresse eingegeben werden um später mehrere Schlüssel auseinander zu halten.
Für maximale Sicherheit muss der Schlüssel mit einer Passphrase geschützt werden. Im Unterschied zu einem Passwort kann hier auch ein ganzer Satz eingegeben werden.
Der Public key für OpenSSH wird aus dem Fenster rauskopiert und in einer Textdatei gespeichert. Der mit einer Passphrase geschützten Private key wird mit der Endung .ppk auf der Festplatte gespeichert. Dieser kann später mit Pageant geöffnt werden und verschwindet dann als Icon in der Statuszeile neben der Windows-Uhr, um dann Logins mit PuTTY oder WinSCP automatisch mit dem passenden Schlüssel zu versorgen und so einem Zugriff ohne eine nochmalige Passwort-Eingabe zu ermöglichen.
2. Zugriff einschränken
Der eben eingerichteten und kopierten öffentlichen Schlüssel aus dem Feld Public key für OpenSSH wird nun auf dem Server eingerichtet. Dazu benötigt man zuerst einen neuen Benutzer, wenn man sich vorher nur über root verbunden hat.
adduser –ingroup users –disabled-password BENUTZERNAME
im neu erstellten Home-Verzeichniss wird ein neuer Ordner .ssh erstellt und eine neue Datei authorized_keys erstellt und mit den richtigen Rechten versehen:
mkdir /home/BENUTZERNAME/.ssh
touch /home/BENUTZERNAME/.ssh/authorized_keys
chown -R BENUTZERNAME:users /home/BENUTZERNAME/
In diese neue Datei authorized_keys wird der öffentliche Schlüssel kopiert.
Während die Verbindung mit root-Rechten offen bleibt, wird versucht eine neue zusätzliche Verbindung zum Server aufzunehmen. Klappt alles hat man sich nicht selber ausgesperrt.
Nun ist es soweit den Root-Login auf den Server zu verbieten, in der Datei /etc/ssh/sshd_config wird folgende Einstellung vorgenommen:
PermitRootLogin no
Somit wird in Zukunft, nach einem Neustart von sshd ein direkter Root-Zugriff verhindert:
/etc/init.d/ssh restart
Befehle oder Aktionen, wie das einspielen der Sicherheitsupdates, erfordern natürlich auch weiterhin root-Rechte, die aber für normale Benutzer mit entsprechender Kenntnis des Root-Kennworts einfach zu erlangen sind:
su –
3. Brute-Force Angriffe blockieren
beim verfolgen der Einträge in der Protokolldatei /var/log/auth.log fällt sofort auf, dass hier ständig probiert wird Benutzernamen und entsprechende Passwörter zu raten. Die passiert per Brute-Force und meist sogar ohne Wissen der Benutzer der IP. Dies kann sowohl ein von Viren befallener PC, oder ein gehackter Server sein. Da diese meist im Ausland beheimatet sind, ist eine Meldung oder Anzeige kaum erfolgreich.
Hier hilft nur den Server selber mit einer eigenen Firewall zu schützen. Das Tool iptables (Wikipedia) ist dafür ausgelegt, Pakete zu prüfen und entsprechend eingestellter Regeln zu verwerfen.
Wenn gewünscht ist den Angreifer auszubremsen und ihm so ein Passwort-Raten zu erschweren wird ein Shell-Script angelegt, z.b. bfstopper.sh und mit dem folgenden Inhalt befüllt:
iptables -A INPUT -m state –state ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp –dport ssh -m recent –update –seconds 600 -j DROP
iptables -A INPUT -p tcp –dport ssh –tcp-flags syn,ack,rst syn -m recent –set -j ACCEPT
Somit werden alle wiederholten Verbindungen auf den SSH-Port 22 von der gleichen IP für 600 Sekunden, also 10 Minuten geblockt.
Alternativ gibt es natürlich weitere Methoden, wie das verlegen von SSH auf einen anderen Port, oder ein aktives Pflegen der hosts.allow und hosts.deny Dateien, oder durch das verwenden von fail2ban. Alles etwas überdimensioniert.
Hallo, netter Eintrag, aber dein letzter Satz “Alles etwas überdimensioniert” finde ich ehrlich gesagt schwachsinn. Man kann eigentlich nie genug Sicherheit haben. Vorallem die Möglichkeiten die du angesprochen hast, von wegen Port verlegen (sehr gute Idee, verhindert schätzungsweies 80% der angriffe!!) oder Programme die automatisch blocken sind durchaus nützlich und das nicht nur für SSH sondern auch für andere Protokolle, z.B. POP3/SMTP
Hi, as you may already discovered I’m new here.
In first steps it is very good if somebody supports you, so hope to meet friendly and helpful people here. Let me know if I can help you.
Thanks and good luck everyone! 😉