Artykuł opisuje konfigurację serwera OpenVPN w celu włączenia uwierzytelniania dwuetapowego za pomocą bota Telegram, który będzie wysyłał prośbę o potwierdzenie przy połączeniu.
OpenVPN to szeroko znany, bezpłatny serwer VPN z otwartym kodem źródłowym, który jest powszechnie stosowany w celu zapewnienia bezpiecznego dostępu pracowników do zasobów wewnętrznych organizacji.
Jako metodę uwierzytelniania dołączenia do serwera VPN zazwyczaj używa się kombinacji klucza oraz loginu/hasła użytkownika. Zapisane na kliencie hasło sprawia, że całość staje się jednym czynnikiem, co nie zapewnia odpowiedniego poziomu bezpieczeństwa. Osoba nieuprawniona, która uzyska dostęp do komputera klienta, zyskuje również dostęp do serwera VPN. Szczególnie dotyczy to połączeń z komputerów działających pod systemem Windows.
Użycie drugiego czynnika zmniejsza ryzyko nieuprawnionego dostępu o 99% i wcale nie utrudnia procesu łączenia się dla użytkowników.
Od razu zaznaczam, że do realizacji ewentualne będzie wymagane połączenie z zewnętrznym serwerem uwierzytelniającym multifactor.ru, w którym do swoich potrzeb można wykorzystać bezpłatny plan.
Zasada działania
- OpenVPN używa wtyczki openvpn-plugin-auth-pam do sprawdzania uwierzytelnienia.
- Wtyczka sprawdza hasło użytkownika na serwerze i żąda drugiego czynnika za pośrednictwem protokołu RADIUS w usłudze Multifactora.
- Multifactor przesyła do użytkownika wiadomość przez bota Telegram z potwierdzeniem dostępu.
- Użytkownik potwierdza prośbę o dostęp w czacie Telegram i łączy się z VPN.
Instalacja serwera OpenVPN.
W internecie dostępnych jest wiele artykułów opisujących proces instalacji i konfiguracji OpenVPN, dlatego nie będziemy ich powtarzać. Jeśli potrzebujesz pomocy, na końcu artykułu znajdziesz kilka linków do materiałów szkoleniowych.
Konfiguracja Multifactora.
Przejdź do , wejdź w sekcję "Zasoby" i utwórz nowy VPN.
Po utworzeniu będą dostępne dwa parametry: NAS-IDentifier. i Shared Secret., będą one potrzebne do późniejszej konfiguracji.

W sekcji "Grupy" wejdź w parametry grupy "Wszyscy użytkownicy" i usuń znacznik "Wszystkie zasoby", aby tylko użytkownicy określonej grupy mogli łączyć się z serwerem VPN.
Utwórz nową grupę "VPN users", wyłącz wszystkie metody uwierzytelniania z wyjątkiem Telegram i określ, że użytkownicy mają dostęp do utworzonego zasobu VPN.

W sekcji "Użytkownicy" utwórz użytkowników, którzy będą mieli dostęp do VPN, dodaj ich do grupy "VPN users" i wyślij im link do skonfigurowania drugiego czynnika uwierzytelniania. Login użytkownika powinien odpowiadać loginowi na serwerze VPN.

Konfiguracja serwera OpenVPN
Otwórz plik /etc/openvpn/server.conf i dodaj wtyczkę do uwierzytelniania za pomocą modułu PAM
plugin /usr/lib64/openvpn/plugins/openvpn-plugin-auth-pam.so openvpnWtyczka może znajdować się w katalogu /usr/lib/openvpn/plugins/ lub /usr/lib64/openvpn/plugins/ w zależności od twojego systemu.
Następnie musisz zainstalować moduł pam_radius_auth
$ sudo yum install pam_radiusOtwórz do edycji plik /etc/pam_radius.conf i wskaż adres serwera RADIUS Multifactora
radius.multifactor.ru shared_secret 40gdzie:
- radius.multifactor.ru — adres serwera
- shared_secret — skopiuj z odpowiedniego parametru ustawień VPN
- 40 sekund — czas oczekiwania na żądanie z dużym zapasem
Pozostałe serwery należy usunąć lub skomentować (wstawić na początku kropkę z przecinka)
Następnie stwórz plik dla typu usługi openvpn
$ sudo vi /etc/pam.d/openvpni wpisz do niego
auth required pam_radius_auth.so skip_passwd client_id=[NAS-IDentifier]
auth substack password-auth
account substack password-authpierwsza linia łączy moduł PAM pam_radius_auth z parametrami:
- skip_passwd — wyłącza przesyłanie do serwera RADIUS Multifactora hasła użytkownika (nie musi go znać).
- client_id — wstaw zamiast [NAS-Identifier] odpowiedni parametr z ustawień zasobów VPN.
Wszystkie możliwe parametry są opisane w .
Druga i trzecia linia obejmują systemową kontrolę loginu, hasła i uprawnień użytkownika na twoim serwerze razem z drugim czynnikiem uwierzytelniania.
Uruchom ponownie OpenVPN
$ sudo systemctl restart openvpn@serverKonfiguracja klienta
Włącz w pliku konfiguracyjnym klienta żądanie loginu i hasła użytkownika
auth-user-passWeryfikacja
Uruchom klienta OpenVPN, połącz się z serwerem, podaj login i hasło. Od bota Telegram przyjdzie żądanie dostępu z dwoma przyciskami

Jeden przycisk zezwala na dostęp, drugi blokuje.
Teraz śmiało możesz zapisać hasło na kliencie, drugi czynnik niezawodnie ochroni twój serwer OpenVPN przed nieautoryzowanym dostępem.
Jeśli coś nie działa
Kolejno sprawdź, czy niczego nie pominąłeś:
- Na serwerze z OpenVPN znajduje się użytkownik z ustawionym hasłem
- Z serwera uzyskano dostęp przez port UDP 1812 pod adresem radius.multifactor.ru
- Parametry NAS-Identifier i Shared Secret są poprawnie określone
- W systemie Multifactor zarejestrowano użytkownika o tym samym loginie i przyznano mu dostęp do grupy użytkowników VPN
- Użytkownik skonfigurował metodę uwierzytelniania przez Telegram
Jeśli wcześniej nie konfigurowałeś OpenVPN, przeczytaj .
Instrukcja została przygotowana z przykładami na CentOS 7.
Źródło: habr.com
