Jak włączyć uwierzytelnianie 2-czynnikowe za pomocą Google Authenticator dla dostępu openVPN opartego na plikach .ovpn?

11

Mam konfigurację openVPN, w której użytkownicy nie mają kont powłoki na maszynie Wirtualnej Debiana z uruchomionym openVPN. Artykuły, które znalazłem podczas korzystania z Google, zawierają instrukcje dotyczące konfigurowania Google Authenticator dla klasycznego użytkownika * nix (na przykład konieczność uruchomienia pliku binarnego Authenticator w katalogu osobistym użytkownika).

Czy istnieje dokument wyjaśniający, jak zintegrować Google Authenticator z serwerami openvpn, które uwierzytelniają się wyłącznie na podstawie .ovpnplików używanych po stronie klienta?

Spojrzałem na https://github.com/evgeny-gridasov/openvpn-otp , ale nadal wymaga skonfigurowania Google Authenticator.

Animesh
źródło
Czy problem polega na rejestracji uwierzytelniającego google, czy na konieczności wprowadzenia hasła?
cornelinux

Odpowiedzi:

4

Nie. Oczywiście, że nie możesz tego zrobić. To pokonałoby cel 2FA. Twój serwer musi mieć sposób na weryfikację danych uwierzytelniających użytkownika, a te informacje nie powinny być przesyłane przez sieć (tzn. Nie możesz używać wyłącznie pliku client.ovpn).

Chociaż niekoniecznie musisz tworzyć użytkowników unixowych, musisz jednak pozwolić użytkownikom zainstalować ich kody weryfikacyjne na serwerze. Możesz używać sftp z wirtualnymi użytkownikami korzystającymi z ich już wydanego certyfikatu, https z autoryzacją po stronie klienta (wzajemną), CIFS (samba) lub dobrą starą ftp z rozszerzeniem TLS lub w inny sposób, który pozwala serwerowi poznać kody weryfikacyjne utworzone przez użytkowników . Kanał komunikacji powinien być bezpieczny (szyfrowany || lokalnie).

Oczywiście, jeśli użytkownicy przesyłają własne pliki, nie można użyć poświadczeń opartych na zbiorczym pliku używanych przez openvpn-otp. Na szczęście mamy inną (i znacznie lepszą) opcję, wykorzystując doskonały moduł bezpieczeństwa pam.

Przede wszystkim musisz zebrać pliki użytkownika utworzone przez google -hentator w jednym z wyżej wymienionych sposobów. W naszym przypadku będzie to / etc / google-auth.

Państwo musi egzekwować pojedynczy identyfikator użytkownika dla wszystkich plików tutaj, bo nie masz prawdziwych użytkowników. Niech to będzie OpenVPN . Uprawnienia muszą wynosić 0400 (-r --------). Pam nie lubi poświadczeń czytelnych dla świata / grupy (z pewnością). Możesz to łatwo wymusić za pomocą samby, apache, ftp lub, w najgorszym przypadku, za pomocą karty cron (niezalecane).

Dla celów testowych po prostu zrób to:

mkdir /etc/google-auth
apt-get install libpam-google-authenticator
google-authenticator
# set up as you wish, save image and/or codes
mv ~/.google_authenticator /etc/google-auth/some_username
chown -R openvpn /etc/google-auth

Następnie poprosisz openvpn o uwierzytelnienie wobec libpam, który ma własny moduł uwierzytelniania google. Dołącz to do pliku serwera openvpn:

plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so openvpn

Oznacza to, że użyjemy metody uwierzytelniania pam z identyfikatorem pam auth id openvpn .

Teraz utwórz konfigurację pam dla openvpn. Edytuj /etc/pam.d/openvpn:

auth    requisite       /lib/security/pam_google_authenticator.so secret=/etc/google-auth/${USER}  user=openvpn
account    required     pam_permit.so

Mówimy tutaj, że bez udanego uwierzytelnienia google natychmiast zawiedziemy (wymagane), używamy specjalnego tajnego pliku zamiast domyślnego $ HOME / .google_authenticator (tajny =) i uzyskujemy dostęp do plików jako użytkownik openvpn, ponieważ nie jest powiązany żaden rzeczywisty identyfikator użytkownika z naszymi użytkownikami. W następnym wierszu stwierdzamy, że zezwalamy wszystkim na łączenie się po udanym uwierzytelnieniu. Oczywiście powinieneś wdrożyć tutaj swoją własną politykę uprawnień. Możesz kontrolować dozwolonych użytkowników za pomocą pliku, mysql db lub ldap za pomocą odpowiednich modułów pam.

Dołącz to do pliku klienta openvpn

   auth-user-pass
   auth-nocache
   reneg-sec 0

Używamy auth-user-pass, aby pozwolić klientowi openvpn zapytać o nazwę użytkownika i hasło. Nie lubimy buforowania (zmienia się „hasło”), a okresowe ponowne negowanie jest dla nas złe z tego samego powodu.

Następnie powinieneś być w stanie połączyć się bez openvpn-otp. Proszę wziąć pod uwagę, że jest to metoda bardziej elastyczna, ponieważ można zaimplementować bardzo złożone reguły w plikach kontrolnych pam, jeśli chcesz. Możesz włączyć / wyłączyć użytkowników na podstawie katalogu mysql lub ldap bez dotykania na przykład tych certyfikatów.

goteguru
źródło
1

Konfiguracja: Serwer OpenVPN z 2FA (Google Authenticator) na Ubuntu Server 18.04.4 LTS dla Raspberry Pi Sprzęt: Raspberry Pi 3 Model B + Rev 1.3

  • musisz się zalogować z użytkownikiem systemu Linux bez aktywnej konfiguracji logowania 2FA (mój przypadek użytkownika)
  • wprowadź następujące polecenia
sudo apt install libqrencode3 libpam-google-authenticator
google-authenticator
sudo mv /home/someuser/.google_authenticator /etc/google-auth/someuser
sudo chown -R root /etc/google-auth
  • dodaj następujący plik do pliku konfiguracyjnego openvpn (w moim przypadku /etc/openvpn/server/server.conf)
plugin /usr/lib/aarch64-linux-gnu/openvpn/plugins/openvpn-plugin-auth-pam.so  openvpn
  • utwórz plik /etc/pam.d/openvpn i wypełnij go następującą treścią
# Google Authenticator
auth    requisite       /lib/aarch64-linux-gnu/security/pam_google_authenticator.so secret=/etc/google-auth/someuser user=root
account    required     pam_permit.so
  • dodaj następujące 3 linie do pliku klienta openvpn
auth-user-pass
auth-nocache
reneg-sec 0
  • uruchom ponownie usługę openvpn i uruchom test
systemctl restart openvpn@server
  • podczas połączenia z klientem OpenVPN (w Windows 10) otrzymasz dodatkowy login (Użytkownik: someuser / Hasło: „OTP z Google Authenticator”)
Wolfgang Reidlinger
źródło