HowTo: Debian SSH absichern für Beginner

Du hast einen Debian Server und kennst dich noch nicht so gut mit Linux und Sicherheit aus? Dann solltest du unbedingt darüber nachdenken deinen Server abzusichern. In diesem Tutorial geht es darum, wie man seinen SSH Zugang effektiv absichern kann.

Vorbereitung

Damit ihr alles reibungslos nach diesem Tutorial machen könnt, logt euch als root ein und aktualisiert zuerst euer Debian:
apt-get upgrade && apt-get update
Eventuell müsst ihr etwas mit einem "y" bestätigen. Weiter geht's mit dem Text-Editor "nano". Sollte dieser nicht schon installiert sein, installiert ihn mit:
apt-get install nano
Jetzt erstellen wir noch einen Benutzer und eine Gruppe. Der Gruppe werden wir später erlauben, sich auf dem SSH Server einzuloggen.
Den Benutzer den wir erstellen, fügen wir der Gruppe hinzu. Somit kann man sich später nur noch mit Benutzern anmelden, welche in der angelegten Gruppe sind.
adduser name "name" mit einem beliebigen Usernamen ersetzen!
Nun muss noch das Passwort des Benutzers gesetzt werden. Die abgefragten Daten wie Name etc. müssen nicht ausgefüllt werden. Am Ende muss noch mit einem "y" bestätigt werden.
Als nächstes erstellen wir eine Gruppe und fügen den erstellten Benutzer der Gruppe hinzu.
addgroup allowedssh usermod -aG allowedssh name "name" wieder mit dem angelegten Benutzernamen ersetzen
Das war's auch schon mit der Vorbereitung!

Direkten Root Login verbieten

In diesem Schritt werden wir die nötigen Änderungen vornehmen, um den root User für den Login zu sperren. Einloggen kann man sich dann nur noch mit den Benutzern, welche man in der erstellten Gruppe hat.
Zu erst loggen wir uns als Root ein, dann editieren wir die Datei /etc/ssh/sshdconfig
nano /etc/ssh/sshd
config
In dieser Datei ändern wir folgende Zeilen:

# Authentication: Login
GraceTime 120 
PermitRootLogin yes 
StrictModes yes

Zu:

# Authentication: Login
GraceTime 120
PermitRootLogin no
AllowGroups allowedssh
StrictModes yes

Jetzt müssen wir speichern (STRG+X) und noch den SSH Dienst neustarten.
/etc/init.d/ssh restart (Sollte dies nicht funktionieren /etc/init.d/sshd restart)
Will man sich jetzt noch als root User einloggen, bekommt man den Fehler "Access denied". Mit dem erstellten Benutzer funktioniert der Login allerdings.
Doch irgendwie muss man doch Zugriff auf Root Rechte bekommen wenn sie nötig sind? Das geht ganz einfach! Loggt euch einfach in den neu erstellten Benutzer ein und tippt ein:
su
Jedes Mal wenn Root Rechte benötigt werden, kann man dies einfach mit dem Befehl su machen.

Port ändern

Der standard Port für SSH ist im Normalfall 22. Eine Sicherheitsstütze kann es schon darstellen, wenn der Port geändert wird. Dazu öffnen wir wieder mit Root Rechten die SSH Config.
nano /etc/ssh/sshd_config
Ziemlich weit oben zusehen sind die Zeilen

# What ports, IPs and protocols we listen for 
Port 22

Diese ändern wir nun in einen beliebigen !FREIEN! Port um. Welche Ports frei sind könnt ihr mit dem Befehl more /etc/services überprüfen.
Nun muss die Datei wieder gespeichert werden (STRG+X) und der SSH Dienst neugestartet werden.
/etc/init.d/ssh restart (Sollte dies nicht funktionieren /etc/init.d/sshd restart)
Bitte beachte das der Port im eigenen SSH Client ebenfalls geändert werden muss (Zu dem der in der Konfigurationsdatei eingestellt wurde).

Brute-Force mit Fail2Ban verhindern

Bevor wir mit diesem Teil beginnen, gibt es erstmal eine kleine Erläuterung was eine Brute-Force Attacke ist. Bei der sogenannten Brute-Force-Methode, versucht (meist) ein Programm das Passwort zu "erraten".
Es testet alle möglichen Zeichen-/Zifferkombinationen und versucht so, irgendwann an das richtige Passwort zu kommen. Damit dies so gut wie unmöglich ist, nutzen wir eine kleine aber feine Möglichkeit dies zu verhindern. Wir installieren das Programm Fail2Ban und sorgen somit, dass einem Angreifer nach mehreren Fehlversuchen der Login unmöglich gemacht wird.
Installation (als root):
apt-get install fail2ban
Als nächstes müssen wir Fail2Ban konfigurieren.
nano /etc/fail2ban/jail.conf
Hier ändern wir die Zeilen:

# "ignoreip" can be an IP address, a CIDR mask or a DNS host
ignoreip = 127.0.0.1/8
bantime = 600
maxretry = 3

Zu:

# "ignoreip" can be an IP address, a CIDR mask or a DNS host
ignoreip = 127.0.0.1
# Die Lokale IP Adresse wird nicht berücksichtigt bantime = 1800 # Nach den angegebenen Fehlversuchen wird ein 1800 Sekundenban (30 Minuten) ausgeführt maxretry = 3 # Nach 3 falschen Versuchen wird der Ban ausgeführt Jetzt Konfigurieren wir Fail2Ban noch separat für den SSH Dienst. Dazu scrollen wir ein wenig runter und ändern folgende Zeilen:
[ssh]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 6

Zu:

[ssh]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3

Als letztes muss der Dienst noch per /etc/init.d/fail2ban restart neugestartet werden.

Geschafft! Der SSH Dienst ist nun einigermaßen abgesichert. Trotzdem solltest du dich über weitere mögliche Sicherheitsrisiken informieren und deinen Server schützen. Nur so kannst du dir sicher sein, dass niemand unbefugt auf deinen Server zugreifen kann.