HowTo: Ubuntu Server SSH Zugang mit OTP absichern

Opiekey auf Android
Opiekey auf Android

Dienste die mit geöffneten Ports im Internet laufen sollten abgesichert werden. Sehr wichtig ist hier vor allem der SSH Dienst, denn dieser erlaubt einen direkten Zugriff auf das System, sofern man die Benutzer/Passwort Kombination weiss. Es gibt verschiedenste Wege SSH abzusichern, die gängigen wurden von Patrick schon zusammengefasst. Ich möchte daher eine Absicherung vorstellen, die darüber hinaus geht.

Man kann SSH mittels OTP (One-time passwords, also Einmalpasswörtern) absichern, dies bietet eine sehr grosse Sicherheit gegenüber Angreifern und schützt parallel auch vor Keyloggern auf unsicheren PCs, denn das Passwort wird nach Benutzung ungültig. Hierzu wird eine Server/Client-Struktur geschaffen, man benötigt auf dem Server, auf den man zugreifen will, einen Serverdienst und einen Client am zugreifenden PC. In Zeiten von Smartphones lässt sich das sogar über geeignete Software auf dem Smartphone lösen. Somit braucht man auf dem zugreifenden PC keinen Client und kann von überall zugreifen, sofern man sein Smartphone dabei hat. Auf meinem Android benutze ich „Opiekey“, welches reibungslos mit dem auf Ubuntu installierten Opie-Servern zusammen arbeitet.

Man braucht zuerst auf dem Server, auf den man zugreifen will zwei Applikationen die man mittels:

sudo apt-get install opie-server opie-client

installiert. Nun generiert man erstmalig ein gültiges Opie-Passwort und versieht es mit einer Passphrase (achtet darauf eine möglichst sichere zu wählen!):

opiepasswd -c

Opie kann mit den PAM (Pluggable Authentication Modules) verbunden und für weitere Dienste, abseits von SSH verwendet werden. Hierzu legt man sich zuerst die Datei /etc/pam.d/opie an und füllt sie mit dem folgenden Inhalt (bedenkt das in diesem Beispiel einzig der Login mit OTP möglich ist und der alternative Weg über die normale Benutzer/Passwort-Kombination deaktiviert wurde, wir wollen ja richtig absichern):
auth sufficient pam_opie.so

Am Beispielt SSH zeige ich euch nun, wie ihr die Authentifizierung mit Opie dem entsprechenden Dienst hinzufügen könnt.
In der Configdatei /etc/pam.d/sshd kommentiert man den Eintrag @include common-auth aus und fügt einen Eintrag für die Authentifizierung mit Opie hinzu: @include opie

SSH hat noch eine kleine Besonderheit, daher muss man noch in der Config /etc/ssh/sshd_config den Eintrag ChallengeResponseAuthentication no auf ChallengeResponseAuthentication yes abändern und anschliessend den Dienst neustarten: sudo /etc/init.d/ssh restart

Nun seid ihr gerüstet und könnt euren ersten Login mittels OTP durchführen. Einfach am zugreifenden PC, ich gehe im folgenden Beispiel von einem Ubuntu PC, der den Opie-Client installiert hat, aus.
Verbindet euch mit SSH auf den fertig eingerichteten Server: ssh 10.10.10.1 (hier einfach die IP eures Servers verwenden).
Ihr bekommt vom Server eine Ausgabe in der Form von:

otp-md5 498 no2283 ext, Response:

zurück, diese gebt ihn nun in euren Client ein:

opiekey 498 no2283

Mit der vorher gewählen Passphrase bestätigt ihr die Eingabe und erhaltet dann das Response in Form von:

CLUE SWAT BODY SIP HURT COOL

womit ihr euch nun anmelden könnt.

Komfortabel geht es auch von unterwegs mit dem schon erwähnten Programm für Android „Opiekey“. Siehe Screenshot.

Wollt ihr andere Dienste mit OTP Abfragen absichern müsst ihr nur in der entsprechenden PAM Config unter /etc/pam.d/Dienstname den Eintrag „@include common-auth“ durch „@include opie“ austauschen.