Ten przewodnik dodaje uwierzytelnianie dwuskładnikowe potwierdzane dotknięciem telefonu do sieci VPN, która uwierzytelnia się przez RADIUS. Notakey auth-proxy stoi między koncentratorem VPN a serwerem RADIUS: przekazuje sprawdzenie hasła do RADIUS jak zwykle, wysyła na telefon użytkownika powiadomienie push z prośbą o potwierdzenie i zwraca do VPN Access-Accept dopiero wtedy, gdy powiodą się oba kroki.
Ponieważ proxy mówi po obu stronach standardowym RADIUS, współpracuje z niemal każdym serwerem RADIUS (FreeRADIUS, Microsoft NPS, natywnym User Managerem MikroTika czy własną wtyczką RADIUS od Notakey) oraz z każdym koncentratorem VPN, który potrafi wskazać serwer RADIUS.
Jak to działa
VPN concentrator ──RADIUS──▶ Notakey auth-proxy ──RADIUS──▶ your RADIUS server
│
└──▶ push notification ──▶ user's phone
- Użytkownik łączy się z VPN, podając nazwę użytkownika i hasło.
- Koncentrator wysyła żądanie RADIUS do auth-proxy (a nie bezpośrednio do serwera RADIUS).
- Proxy przekazuje żądanie do docelowego serwera RADIUS. Jeśli sprawdzenie hasła się nie powiedzie, logowanie zostaje natychmiast odrzucone.
- Jeśli hasło jest poprawne, proxy wysyła na telefon użytkownika
powiadomienie push z prośbą o potwierdzenie i utrzymuje otwartą wymianę
RADIUS, dopóki użytkownik nie odpowie, domyślnie do 30 sekund
(
vpn_message_ttl). - Approve → Access-Accept wraca do VPN. Deny lub przekroczenie czasu → odrzucenie.
Krok 4 ma jedną istotną konsekwencję: limit czasu klienta RADIUS w Państwa VPN musi być co najmniej tak długi jak okno na potwierdzenie, czyli co najmniej 30 sekund. Większość klientów RADIUS ma domyślnie kilka sekund lub mniej, ponieważ zwykłe sprawdzenie hasła odpowiada natychmiast; tutaj człowiek musi najpierw sięgnąć po telefon.
Wymagania
- Notakey Authentication Server: darmowy wariant w chmurze pod signup.notakey.com lub urządzenie on-premise
- Serwer RADIUS (albo można skorzystać z wtyczki RADIUS od Notakey; patrz niżej)
- Sieć VPN, która uwierzytelnia się względem RADIUS
- Ta sama nazwa użytkownika w usłudze Notakey, w RADIUS i w VPN (proxy używa jej do zaadresowania powiadomienia push)
Krok 1: Utworzenie aplikacji VPN
W panelu Notakey należy utworzyć aplikację (usługę) dla VPN, zarejestrować telefony użytkowników i skopiować Access ID aplikacji, czyli identyfikator UUID, który zostanie wklejony w poniższej konfiguracji proxy.
Krok 2: Konfiguracja auth-proxy
Urządzenie on-premise: wbudowane proxy
Urządzenie ma auth-proxy już w zestawie. Konfiguruje się je z poziomu CLI urządzenia jednym dokumentem JSON:
ntk cfg set :ap '{
"vpn_port_in": "1812",
"vpn_port_out": "1812",
"vpn_radius_address": "10.0.1.23",
"vpn_secret_in": "secret_to_radius_server",
"vpn_secret_out": "secret_to_radius_server",
"vpn_access_id": "c468f008-485b-b11c-aad9672fbae1",
"vpn_message_ttl": "30",
"message_title": "VPN authentication",
"message_description": "Allow {0} login?"
}' --json-input
Następnie należy uruchomić usługę:
ntk ap start
Znaczenie poszczególnych pól:
| Pole | Znaczenie |
|---|---|
vpn_port_in |
Port, na którym proxy nasłuchuje żądań RADIUS z Państwa VPN |
vpn_port_out |
Port docelowego serwera RADIUS |
vpn_radius_address |
Adres docelowego serwera RADIUS |
vpn_secret_in |
Wspólny sekret między Państwa VPN a proxy |
vpn_secret_out |
Wspólny sekret między proxy a serwerem RADIUS |
vpn_access_id |
Access ID aplikacji z kroku 1 |
vpn_message_ttl |
Liczba sekund na potwierdzenie (30 to rozsądna wartość domyślna) |
message_title / message_description |
Co wyświetla push; {0} zostaje zastąpione nazwą użytkownika |
Urządzenie w chmurze: proxy w Dockerze
Przy serwerze Notakey hostowanym w chmurze należy uruchomić to samo proxy jako kontener we własnej sieci, przed serwerem RADIUS:
docker run --name auth-proxy \
-e NOTAKEY_HOST="https://2fa.your_company.com/api" \
-e NOTAKEY_ACCESS_ID="c468f008-485b-b11c-aad9672fbae1" \
-p 1812:1812/udp \
-e LISTEN_ADDRESS=0.0.0.0 \
-e ADDRESS_SECRET_IN=0.0.0.0:secret_to_radius_server \
-e DOWNSTREAM_ADDRESS=10.0.1.23 \
-e SECRET_OUT=secret_to_radius_server \
notakey/authproxy:latest
Te same elementy, inaczej opakowane: NOTAKEY_HOST to adres URL API Państwa
instancji w chmurze, DOWNSTREAM_ADDRESS to Państwa serwer RADIUS, a dwa sekrety
odpowiadają odpowiednio stronie VPN i stronie RADIUS.
Pełną dokumentację obu wariantów (w tym instalator MSI do uruchamiania proxy w systemie Windows, wymagania co do łączności sieciowej oraz lokalizacje logów) znajduje się w podręczniku Authentication Proxy.
Krok 3: Brak serwera RADIUS? Można skorzystać z naszego
Jeśli nie mają Państwo jeszcze uruchomionego RADIUS, nie trzeba stawiać go tylko po to:
- Wtyczka Notakey RADIUS. Urządzenie dostarcza wtyczkę usługi RADIUS (opartą na FreeRADIUS). Akceptuje ona jedno globalne hasło albo krótką listę haseł przypisanych do poszczególnych użytkowników, przechowywaną we własnej konfiguracji wtyczki, więc nie trzeba budować bazy użytkowników RADIUS; użytkownika weryfikuje potwierdzenie w telefonie. Wtyczka nie sprawdza haseł użytkowników z katalogu; jeśli jest to potrzebne, należy użyć Microsoft NPS lub innego serwera RADIUS połączonego z Państwa katalogiem. Konfigurację opisuje nasz artykuł w bazie wiedzy Wtyczka usługi RADIUS (bez potrzeby konfigurowania użytkowników).
- MikroTik User Manager. Jeśli Państwa VPN i tak kończy się na urządzeniu MikroTik, jego natywny pakiet User Manager posłuży jako docelowy serwer RADIUS.
- Dowolny istniejący firmowy RADIUS (FreeRADIUS, Microsoft NPS i podobne) działa bez zmian; proxy jest dla niego przezroczyste.
Krok 4: Skierowanie VPN na proxy
Należy przekonfigurować klienta RADIUS w koncentratorze VPN: ten sam sekret co
vpn_secret_in, ale adres serwera to teraz proxy, a nie serwer RADIUS.
Należy też zwiększyć limit czasu.
Na urządzeniu MikroTik wygląda to tak:
/radius
add service=ppp address=<proxy-address> secret=secret_to_radius_server timeout=30s
/ppp aaa
set use-radius=yes
timeout=30s ma znaczenie. Domyślny limit czasu RADIUS w MikroTiku
wynosi 300 milisekund: w sam raz do sprawdzenia hasła, beznadziejnie za mało
do potwierdzenia przez człowieka. Należy ustawić go na co najmniej 30 sekund (zgodnie z
vpn_message_ttl), inaczej logowania będą kończyć się niepowodzeniem, zanim
użytkownik zdąży sięgnąć po telefon. Ta sama reguła dotyczy ustawień klienta
RADIUS u każdego innego producenta.
Testowanie
Należy połączyć się z VPN. Sprawdzenie hasła przechodzi, a powiadomienie push trafia na telefon, również na ekran blokady, więc użytkownik nie musi nawet mieć otwartej aplikacji:

Po otwarciu widać pełne żądanie: kto się loguje i z jakiego adresu IP, z odliczaniem, podczas gdy proxy utrzymuje otwartą wymianę RADIUS:

Połączenie dochodzi do skutku dopiero po naciśnięciu Approve. I właśnie ten ekran jest tym, co pod względem bezpieczeństwa daje cała ta konfiguracja: użytkownik, który dostaje to powiadomienie, choć akurat nie łączy się z VPN, widzi w tym momencie kogoś obcego posługującego się jego hasłem, wraz z adresem IP, z którego następuje próba – a jedno naciśnięcie Deny zatrzymuje logowanie i zostawia ślad w dzienniku audytu. Jeśli logowania kończą się przekroczeniem czasu nawet przy szybkim potwierdzeniu, należy najpierw sprawdzić limit czasu klienta RADIUS; to najczęstszy błąd w tej konfiguracji.
Powiązane przewodniki
- Palo Alto GlobalProtect 2FA przez RADIUS: to samo proxy z wtyczką RADIUS urządzenia, bez osobnego serwera RADIUS
- 2FA logowania do routera MikroTik: to samo proxy skierowane na własne logowanie routera przez WinBox/SSH
- Linux SSH 2FA z pam_radius: to samo proxy chroniące SSH, sudo i su
- MikroTik VPN 2FA – kompletna konfiguracja oparta na skrypcie: alternatywa z jednym routerem i całkowicie bez RADIUS
- Windows Credential Provider dla pulpitu zdalnego