SSH-Dienst zusätzlich mit OTP absichern

Bislang habe ich zur Absicherung meiner SSH-Dienste ausschließlich Passwörter deaktiviert und auf SSH-Schlüssel gesetzt. Mit einem zusätzlichen Authentifizierungsfaktor wie einem Einmalpasswort kann die Sicherheit auch bei Verlust des SSH-Schlüssels erheblich gesteigert werden. Hierbei habe ich auf die OTP-Implementierung des Google Authenticators gesetzt.

Die Installation ist eigentlich recht einfach. Hierfür müssen auf dem Server nur die folgenden Schritte (zusätzlich zu normalen Härtungsmaßnahmen) durchgeführt werden:

  1. Installation des Google-Authenticator-Moduls:
    apt-get install libpam-google-authenticator
    
  2. Im Kontext eines normalen Users, für den die OTP-Methode verwendet werden soll, die entsprechende Konfiguration einleiten:
    1. google-authenticator
      
    2. Einscannen des Codes mit der entsprechenden App. Ich verwende die von RedHat implementierte Variante FreeOTP
    3. Sicheres Verwahren der Backup-Codes, falls das Mobiltelefon mal nicht verfügbar sein sollte
    4. Beantwortung der folgenden Konfigurations-Fragen:
      1. Do you want me to update your "/home/<user>/.google_authenticator" file (y/n) y
        
      2. 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
        
      3. 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
        
      4. 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) n
        

        Dies sollte eigentlich durch andere Härtungsmaßnahmen des SSH-Dienstes erreicht worden sein.

    5. Bearbeiten von /etc/pam.d/sshd
      1. Unter der Zeile „@include common-password“ folgendes einfügen:
        auth required pam_google_authenticator.so nullok
        

        „nullok“ bewirkt, dass OTP optional für diejenigen Benutzer, die den Google Authenticator eingerichtet haben, genutzt wird. Alle anderen, wie beispielsweise ohnehin eingeschränkte Service-Accounts, benötigen keinen zweiten Faktor.

      2. Auskommentieren der folgenden Zeile:
        @include common-auth
        
    6. Einstellungen am SSH-Dienst in /etc/ssh/sshd_config vornehmen:
      1. Setzen der folgenden Variable
        ChallengeResponseAuthentication yes
        
      2. Unterhalb von „UsePAM yes“ folgendes einfügen:
        AuthenticationMethods publickey,keyboard-interactive
        
    7. Nun kann der SSH-Dienst neugestartet werden. Bitte darauf achten, dass man bis zur vollständigen Verifikation der Funktionalität eine Shell während des Testens offen hält, damit man sich nicht selbst aus seinem Server aussperrt.
    8. Im Idealfall sieht nun der Login am Server so aus:

Sollte man aus irgendeinem Grund die Zweifaktor-Authentifizierung für einen einzelnen Benutzer nicht mehr benötigen, so reicht es – durch das Setzen von „nullok“ in der PAM-Konfiguration – die Datei .google_authenticator im Home-Verzeichnis des Benutzers zu verschieben oder zu löschen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.