Zu allererst sollte man verstehen das SSH Server nichts anderes sind als die Kommandozeile eines entfernten Rechner. Deshalb ist es auch wichtig zu verstehen das auch Fremde versuchen sich mit den Rechner zu verbinden um Schaden anzurichten, sofern der Server für andere Zugänglich ist.
Insoweit man die Zugriffsversuche loggt, stellt man fest das sekündlich Zugriffsversuche entstehen.
Meistens werden Standard Credentials benutzt die Hersteller bei Geräten festlegen. Solche Sachen wie admin:admin, root:root oder ähnliches. Deshalb wäre es fatal gewesen, wenn man in der Vergangenheit einen Raspi mit dem Standard Raspberry Pi OS und der Standardkonfiguration einfach dem Internet überlassen hätte.
Die Credentials dafür waren pi
als Benutzer und raspberry
als Passwort.
Nur um das zu verdeutlichen… Der Benutzer pi
konnte sudo
ohne Einschränkung nutzen. Das heißt man hat vollständige Adminrechte für einen Computer in einem fremden Netzwerk. Mehr muss dazu nicht gesagt werden…
Konfiguration und Absicherung
Deshalb ist es für mich eine Selbstverständlichkeit keinen SSH Server in die Öffentlichkeit zu setzen ohne entsprechende Anpassungen vorgenommen zu haben.
- GatewayPorts
- SSH Port
- Authentifzierung
- Rechteverwaltung
fail2ban
GatewayPorts
Diese Funktion muss aktiviert werden, damit auch die Geräte im kompletten Netzwerk des Zielservers auf den geöffneten Port zugreifen können
Folgenden Inhalt…
…entsprechend Anpassen:
Jede Anpassung die in der
sshd_config
passiert wird erst nach einem neustarten des Dienstes aktiv.Das kann mittels
systemctl restart ssh
,systemctl status sshd
oder auchservice sshd restart
erfolgen.
SSH Port
Die meisten Bots versuchen über Port 22 sich per SSH zu verbinden da das der Standard Port ist. Alleine das zu ändern sorgt dafür das kaum bis gar keine Anfragen mehr kommen, je nachdem welcher Port verwendet wird. Statt 22 könnte man ja sowas wie 22522, 52222 2222 oder auch 42452 nutzen. Bei 65535 ist Schluss.
Dort ist folgender Inhalt zu finden:
Das kann folgendermaßen geändert werden:
Authentifzierung
Passwörter werden standardmäßig immer als Authentifzierung genommen. Jedoch gibt es eine bequemere und sichere Möglichkeit sich mit den Systemen zu verbinden.
Mittels SSH-Keys kann die Authentifzierung ohne Passwort erfolgen. Dafür erstellt man lediglich die keys mittels ssh-keygen
und sendet diese an das Zielsystem mitssh-copy-id
.
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/user/.ssh/id_ed25519):
Created directory '/home/user/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_ed25519
Your public key has been saved in /home/user/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:qlTCoRakidohmE3Bxq7gGjA7kgagsKO7sLvX10l7F+c root@SSH-Exposer
The key's randomart image is:
+--[ED25519 256]--+
| o+. |
|=B+ |
|@++ . |
|Xo.= . |
|B*+ o . S |
|O+ o .. . . |
|=+ .. .o o + |
|+...... + . . E |
|== .. . . |
+----[SHA256]-----+
ssh-copy-id user@ssh-server -p <port>
Danach sollte die nächste SSH Verbindung ohne Passwortabfrage aufgebaut werden.
Rechteverwaltung
Es ist ebenfalls auch möglich User so einzuschränken dass diese nur bestimmte Zwecke erfüllen dürfen.
Beispielsweise kann man den Nutzer /bin/bash
vollständig wegnehmen damit keine Befehle durchgeführt werden können. Oder lediglich auf einzelne Sachen beschränken das Starten von bestimmten Skripten.
Dazu wird noch recherchiert wie man das machen kann und wie es am sinnvollsten ist.
fail2ban
DIeses Tool wird in diesem Fall verwendet um zu bannen. Wenn der Client zu oft die Verbindung nicht erfolgreich aufbauen konnte aufgrund von fehlgeschlagene Authentifizierung, wird deren IP in die Firewall eingetragen und für bestimmten Zeitraum gebannt.
Installieren der Pakete
Die jail.conf kopieren da die bei jeder Aktualisierung des Programms überschrieben wird.
Folgenden Eintrag könnte eventuell schon vorhanden sein:
Wie man es anpassen kann:
Danach den Dienst fail2ban neustarten.