Jak korzystać z Google Authenticator z serwerem OpenVPN na Ubuntu 12.04

9

Mam działający system OpenVPN na Ubuntu 12.04 i chciałbym dodać Google Authenticator dla dodatkowego bezpieczeństwa.

Oto moja obecna konfiguracja openvpn:

dev tun
proto udp
port 1096
ca ubuserv04-ca.crt
cert ubuserv04.crt
klucz ubuserv04.key
dh dh1024.pem
serwer 10.10.0.0 255.255.255.0
Wciśnij „redirect-gateway def1”
push „route 192.168.0.0 255.255.255.0”
Wciśnij „dhcp-option DNS 8.8.8.8”
Wciśnij „dhcp-opcja DNS 8.8.4.4”
pływak
log-append /var/log/openvpn-otp-1096-status.log

(To tylko konfiguracja testowa, wiem, że powinienem zmienić niektóre jej aspekty, ale na razie to działa.)

Na kliencie mam:

dev tun
klient
proto udp
zdalny mój.serwer.fqdn 1096
resolv-retry nieskończoność
ca ubuserv04-ca.crt
cert user1.crt
klucz użytkownik1.klucz
czasownik 3

Powyższa konfiguracja działa dobrze: bez błędów, szybko, stabilnie.

Próbowałem kilka porad, aby uruchomić Google Authenticator, ale za każdym razem kończę rozwiązywanie problemów ubocznych w tych artykułach. Nie chcę uwierzytelniać się na lokalnej bazie danych użytkowników / haseł serwera, tylko system, który już mam, plus Google Authenticator.

Mam uruchomiony Google Authenticator; Zainstalowałem go za pomocą apt-get install libpam-google -hentator i użyłem go wcześniej do uwierzytelnienia sesji ssh. To działało dobrze, ale teraz to wyłączyłem, ponieważ to tylko serwer testowy i ten konkretny test został zakończony.

Proszę, bądź konkretny. Wiem, że powinienem dodać wtyczkę do konfiguracji ovpn mojego serwera i że powinienem dodać coś do /etc/pam.d/openvpn, ale co dokładnie?

Każda pomoc byłaby bardzo mile widziana!

/Informacje dodatkowe

Śledziłem ten artykuł: http://www.howtoforge.com/securing-openvpn-with-a-one-time-password-otp-on-ubuntu Zamiast kompilacji ze źródła zainstalowałem Google Authenticator z apt -get zainstaluj libpam-google -hentator. Przeczytałem również, ale nie wykorzystane w tym przypadku, te artykuły: http://www.howtogeek.com/121650/how-to-secure-ssh-with-google-authenticators-two-factor-authentication/ i http : //zcentric.com/2012/10/09/google-authenticator-with-openvpn-for-2-factor-auth/ . I czytałem na PAM, jak sugerowałem;)

Oto kilka interesujących programów.

/etc/pam.d/openvpn ma to:

konto [sukces = 2 new_authtok_reqd = gotowe domyślne = zignoruj] pam_unix.so 
konto [sukces = 1 new_authtok_reqd = gotowe domyślnie = zignoruj] pam_winbind.so 
wymagane konto pam_deny.so
wymagane konto pam_permit.so
wymagane uwierzytelnianie pam_google_authenticator.so

Zgodnie z howto skopiowałem oryginał z /etc/pam.d/common-account i dodałem ostatni wiersz. Teraz, jeśli skomentuję ostatni wiersz, połączenie OpenVPN powiedzie się. Jeśli jednak ostatni wiersz nie został skomentowany, /var/log/auth.log rejestruje to:

PAM nie może dlopen (pam_google_authenticator.so): /lib/security/pam_google_authenticator.so: niezdefiniowany symbol: pam_get_item
PAM dodaje wadliwy moduł: pam_google_authenticator.so

i /var/log/openvpn-otp-1096.log rejestruje to:

PLUGIN_CALL: funkcja wtyczki PLUGIN_AUTH_USER_PASS_VERIFY nie powiodła się ze statusem 1: /usr/lib/openvpn/openvpn-auth-pam.so
Błąd uwierzytelniania TLS: uwierzytelnianie nazwy użytkownika / hasła nie powiodło się dla elementu równorzędnego
e-korzystanie z kontekstu SSL / TLS
AUTH-PAM: INFORMACJE OGÓLNE: użytkownik „martin” nie mógł się uwierzytelnić: moduł jest nieznany

Problem wydaje się być między PAM a Google Authenticator.

Google wymienia problemy z innymi wtyczkami, ale tak naprawdę nie mogę znaleźć informacji dotyczących Google Authenticator.

Widelec
źródło
„Próbowałem kilku poradników, aby uruchomić Google Authenticator”. Czy możesz podać link do niektórych z nich? To raczej niejasne, co dokładnie wypróbowałeś i byłoby smutne, gdyby inni użytkownicy wymyślili podejścia, które już wypróbowałeś. Nawiasem mówiąc, libpam-google-authenticatorsłuży do uwierzytelniania za pomocą Google Authenticator w PAM. Nie jest to przydatne w OpenVPN, ponieważ używasz tam certyfikatów. Sugeruję przeczytanie o tym, czym jest PAM - zrozumiesz, że w twoim przypadku nie ma to nic wspólnego z OpenVPN.
gertvdijk
@ „Nie ma to zastosowania w OpenVPN, ponieważ używasz tam certyfikatów”. W porządku. Możesz użyć certyfikatów i jednorazowego hasła z Google Authenticator przez PAM jako drugiego czynnika do uwierzytelnienia w OpenVPN.
Cholerny terminal
Dodanie dodatkowych informacji do pierwotnego pytania. Nie jestem pewien, czy robię to dobrze ...
Forkbeard
@gertvdijk: Rozumiem, że jest to zbędne, ale chciałbym użyć obu certyfikatów i hasła jednorazowego. Wydaje mi się to bezpieczniejsze niż stosowanie każdej z metod osobno.
Forkbeard
Hm, wygląda na błąd w Google Authenticator. Zbudowanie go za pomocą LDFLAGS = "- lpam" powinno pomóc, ale nie jestem pewien, jak to zrobić, przykład na Howtoforge (link w pierwotnym pytaniu) nie działa, adres URL zwraca 404.
Forkbeard

Odpowiedzi:

2

Ok, Google jest moim przyjacielem.

Ja to zrobiłem:

# apt-get purge libpam-google -hentator
# pobierz https://code.google.com/p/google-authenticator/downloads/list
# apt-get install libpam-dev

Dodaj to do Makefile, zaraz po licencji:

LDFLAGS = "- lpam"

Następnie

# robić
# make install
# usługa openvpn restart

Upewnij się również, że /home/username/.google_authenticator nie ma żadnych praw, z wyjątkiem praw do odczytu dla użytkownika, który będzie z niego korzystać.

Teraz muszę wprowadzić moją nazwę użytkownika, czyli moją lokalną nazwę użytkownika na serwerze (moje konto powłoki) jako moją nazwę użytkownika OpenVPN i 6-cyfrowy kod Google Authenticator jako hasło.

Teraz działa.

Dziękuję wszystkim za poświęcony czas :)

(Jak mogę oznaczyć ten post jako rozwiązany? Czy po prostu edytuję tytuł tematu?)

Widelec
źródło
2

Jeśli chcesz tylko uwierzytelniania OTP dla OpenVPN, dostępna jest natywna wtyczka OTP OpenVPN. Jest kompatybilny z tajnymi kluczami Google Authenticator. Wszystkie sekrety są przechowywane w jednym pliku tekstowym i nie ma potrzeby konfigurowania PAM ani tworzenia katalogów użytkowników.

Sprawdź to: https://github.com/evgeny-gridasov/openvpn-otp

egridasov
źródło
Dziękuję za odpowiedź, egridasov. Ponieważ mam teraz działającą konfigurację, nie zamierzam jej wypróbowywać, ale mogę spróbować w innym systemie. 0-bitowy okres renegacji, który uważam za szczególnie pomocny, łamałem głowę, jak sprawić, aby połączenie nie spadało po 3600 sekundach
Forkbeard