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.

Comments on this entry are closed.

  • Marodeur

    Sehr interessanter Artikel.

    Mir stellt sich aber grad die Frage, muss ich das opie immer verwenden oder krieg ich Ausnahmen rein. Z.B. wenn ich mit meinem Notebook im selben Lan bin und auf den Server zugreifen will?

    • http://www.nodch.de nodch

      Zum einen kannst du wenn du die /etc/pam.d/opie anlegst folgende Zeilen nutzen:
      <code>auth sufficient pam_unix.so
      auth sufficient pam_opie.so
      auth required pam_deny.so</code>
      Damit ermöglichst du schonmal das die normale Authentifizierung noch möglich ist, parallel kannst du natürlich in der /etc/ssh/sshd_config entsprechende Ausnahmen abfangen und ihnen dann entweder die "@include opie" oder die "@include common-auth" zuweisen.

      Ziel des Artikels war es aber den "geschlossenen" Weg zu zeigen und die Serverdienste wirklich dich zu zurren. Ausnahmen gibt es natürlich immer, das ist ja das Schöne an Linux! ;)

  • Pingback: uberVU - social comments()

  • http://aquarium.teufel100.de Sven

    Wow, dass gefällt mir und wird demnächst umgesetzt. Habe bisher SSH immer mit der Firewall gesperrt und nur geöffnet, wenn ich Zugriff auf den Server brauchte, aber so wird das Ganze natürlich noch sicherer. 
    Ich möchte aber noch eine andere Frage stellen: Bin gerade auf den Blog aufmerksam geworden und vielleicht habt ihr ja schon ein How-To geschrieben. Ich würde gerne meine Plesk-Admin-Seite noch weiter absichern, dazu gibt es ja die Möglichkeit, eine IP-Adresse einzugeben, für die dann nur noch der Zugriff erlaubt ist. Nun habe ich natürlich keine feste IP und dachte mir, dass es vielleicht auch mit einer Domain gehen könne (DynDNS), bin mir da aber nicht sicher. 

    Gruß,
    Sven

    • http://www.nodch.de Nodch

      Soweit ich weiss gehen nur IP-Adressen, bzw. Netze.

      • http://aquarium.teufel100.de Sven

        Danke für die Info, dann muss ich mir eine andere Lösung einfallen lassen :-(

  • Pingback: Linux Server absichern | Bits, Bytes and my 5 cents()