SSH Zugang per Multifaktor Authentifizierung absichern
In der Standardkonfiguration von SSH erfolgt die Anmeldung am System per Benutzername/Passwort. Insbesondere bei Systemen, die per SSH über das Internet erreichbar sind ist dies ein schwerwiegendes Sicherheitsproblem, da Benutzername/Passwort keinen ausreichenden Schutz vor Angriffen bietet.
Abhilfe schafft hier die Implementierung von Multifaktor Authentifizierung (MFA) per Einmal-Passwort (OTP) mit dem Google Authenticator Modul, das auf dem jeweiligen Linux Betriebssytem installiert werden kann.
Da fast alle Befehlt im sudo-Modus ausgeführt werden, aktiviert man diesen am Besten im Vorfeld:
sudo -i
Installation
Installation unter Ubuntu Linux und Debian Linux
apt-get install libpam-google-authenticator
Installation unter CentOS und Fedora Linux
yum install google-authenticator
Installation auf Arch Linux
yaourt -S libpam-google-authenticator
Konfiguration
Ist das Google Authenticator Modul installiert, startet man die Konfiguration des OTP Tokens mit:
google-authenticator
Während der Konfiguration werden folgende Codes/Keys konfiguriert:
- QR Code / URL: URL zum OTP Token QR Code für die Einrichtung der Smartphone App mit Hilfe der Kamera.
- Secret Key: Der Secret Key kann alternativ zum QR Code für die Einrichtung des OTP Tokens in der Smartphone App genutzt werden.
- Verification Code:
- Emergency Codes: Die Emergency Codes werden benötigt, um im Falle eines Verlusts des Tokens die Token Konfiguration zurücksetzen zu können.
Do you want authentication tokens to be time-based (y/n) y https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/foo@barOsecret%0815CODE Your new secret key is: <Secret Key> Your verification code is <Verification Code> Your emergency scratch codes are: <Emergency-Code 1> <Emergency-Code 2> <Emergency-Code 3> <Emergency-Code 4> <Emergency-Code 5> Do you want me to update your "/home/username/.google_authenticator" file (y/n) y Do you want to disallow multiple uses of the same authentication token? This restricts you to one login about every 30s, but it increases your chances to notice or even prevent man-in-the-middle attacks (y/n) y By default, tokens are good for 30 seconds and in order to compensate for possible time-skew between the client and the server, we allow an extra token before and after the current time. If you experience problems with poor time synchronization, you can increase the window from its default size of 1:30min to about 4min. Do you want to do so (y/n) n If the computer that you are logging into isn't hardened against brute-force login attempts, you can enable rate-limiting for the authentication module. By default, this limits attackers to no more than 3 login attempts every 30s. Do you want to enable rate-limiting (y/n) y
Bevor nach der Konfiguration nun MFA auch aktiviert wird, sollte der OTP Token in die Smartphone App importiert und getestet werden.
Aktivierung
Ist der OTP Token konfiguriert, muss die Nutzung von MFA noch aktiviert werden. Dazu wird die Datei /etc/pam.d/sshd
angepasst.
nano /etc/pam.d/sshd
Wichtig zu wissen ist, dass die Reihenfolge der Einträge in der Datei die Reihenfolge der Anmeldeverfahren widerspiegelt, d.h. wird MFA in die erste Zeile eingetragen, wird der MFA OTP Code auch bei der Anmeldung als erstes abgefragt.
Ubuntu Linux / Debian Linux / CentOS / Fedora
Bei Ubuntu, Debian, CentOS und Fedora muss die folgende Zeile eingefügt werden:
auth required pam_google_authenticator.so
Arch Linux
Bei Arch müssen die folgenden 3 Zeilen eingefügt werden:
auth required pam_google_authenticator.so auth required pam_unix.so auth required pam_env.so
Für Testzwecke kann der Wert required
auch auf sufficient
geändert werden. Das bewirkt, dass die Anmeldung allein mit Passwort noch funktioniert, auch wenn MFA mit dem OTP Token fehlschlägt.
Abschließend wird das für MFA benötigte Challenge Response Authentication Verfahren in der Datei /etc/ssh/sshd_config
aktiviert.
nano /etc/ssh/sshd_config
Der Wert für den Parameter ChallengeResponseAuthentication
ist darin wie folgt anzupassen:
ChallengeResponseAuthentication yes
Zur Aktivierung der Anpassungen ist der SSH Daemon neu zu starten:
systemctl restart sshd.service # oder # service sshd restart
Danach erfolgt die Anmeldung an SSH per MFA.