Inrichten van Two Factor Auth op Ubuntu middels Google OTP. (One Time Password)
Daarnaast ingebouwd in een hardened configuratie.
Specifiek om het volgende te kunnen:

  • root kan alleen vanaf een specifiek ip-adres inloggen en alleen met certificaat.
  • andere users kunnen vanaf dit specifieke ip-adres inloggen met gebruikersnaam en certificaat.
  • andere users moeten vanaf een willekeurig ip-adres inloggen met certificaat en OTP.

Uitvoering

Installatie Google Authenticator

Zorg ervoor dat NTP client actief is voor de juiste tijd op het systeem!!

apt-get install libpam0g-dev libqrencode3
cd ~
wget https://google-authenticator.googlecode.com/files/libpam-google-authenticator-1.0-source.tar.bz2
tar jvxf libpam-google-authenticator-1.0-source.tar.bz2
cd libpam-google-authenticator-1.0/
make
make install

Indien het bestand niet te downloaden is via bovenstaande link, dan via deze link Libpam-google-authenticator-1.0-source.tar.bz2 wel. 

Aanmaken code

Login als de gebruiker waarvoor je de code wil gaan instellen. Voor de root user doen we dit dus niet!!
Geef het volgende commando:

$ google-authenticator

Beantwoord alle vragen met "y"

Open de Google Authenticator App op je telefoon en scan de QR code. De App zal dan de OTP toevoegen aan de app.

Noteer daarnaast de URL, secret key, verification code en de emergency scratch codes. (liefst in Keepass of een andere password kluis)

Neem Google OTP in de configuratie op

Bewerk PAM

$ nano /etc/pam.d/sshd

Vervang de regel

@include common-auth

met het volgende codeblok

#Disabled Common Auth
#@include common-auth
#Google Authenticator
auth sufficient pam_google_authenticator.so

Bewerk SSHD configuratie

Open de SSHD configuratie

nano /etc/ssh/sshd_config

Om uberhaupt logins van root te limiteren tot een bepaald adres en andere logins toe te staan vanaf waar dan ook de volgende regel aan het begin opnemen. 8.8.8.8 door het gewenste adres vervangen.

AllowUsers root@8.8.8.8 username@*

Alleen publickey auth voor root

PermitRootLogin without-password

Voor de volledigheid de volgende opties als volgt zetten

PubkeyAuthentication yes
ChallengeResponseAuthentication yes
PasswordAuthentication no
UsePAM yes

Dan onderaan de file het volgende toevoegen. Hiermee zorgen we er voor dat als je inlogt vanaf een onbekend IP je via publickey auth en OTP moet inloggen. Vanaf een bekend IP is het alleen publickey auth.

AuthenticationMethods publickey,keyboard-interactive
Match Address 8.8.8.8/32
AuthenticationMethods publickey

Herstart hierna ssh, maar hou 1 sessie open totdat je alles getest hebt met inloggen. (Tenzij je ook console access hebt)

service ssh restart

Mocht je meerdere ip-adressen toevoegen dan kan dat door het subnet uit te breiden en indien het niet in hetzelfde subnet zit voor elk ip-adres/subnet de volgende sectie nogmaals toevoegen.

Match Address 8.8.4.4/32
AuthenticationMethods publickey

Bronnen

Dit document is samengesteld a.d.h.v. de volgende pagina en daarnaast eigen variatie in de sshd config.
De afbeeldingen komen ook van de volgende pagina.
1. http://blog.remibergsma.com/2013/06/08/playing-with-two-facor-authentication-in-linux-using-google-authenticator/