Šis vadovas prie VPN, kuris autentifikuoja per RADIUS, prideda dviejų veiksnių autentifikavimą vienu telefono paspaudimu. Notakey auth-proxy įsiterpia tarp jūsų VPN koncentratoriaus ir RADIUS serverio: slaptažodžio patikrą, kaip įprasta, persiunčia į RADIUS, į naudotojo telefoną išsiunčia patvirtinimo užklausą ir tik tada, kai pavyksta abu žingsniai, grąžina VPN atsakymą Access-Accept.
Kadangi tarpinis serveris abiejose pusėse bendrauja standartiniu RADIUS protokolu, jis veikia beveik su bet kuriuo RADIUS serveriu (FreeRADIUS, Microsoft NPS, integruotu MikroTik User Manager ar paties Notakey RADIUS papildiniu) ir su bet kuriuo VPN koncentratoriumi, kurį galima nukreipti į RADIUS serverį.
Kaip tai veikia
VPN concentrator ──RADIUS──▶ Notakey auth-proxy ──RADIUS──▶ your RADIUS server
│
└──▶ push notification ──▶ user's phone
- Naudotojas jungiasi prie VPN su savo naudotojo vardu ir slaptažodžiu.
- Koncentratorius RADIUS užklausą siunčia į auth-proxy (o ne tiesiai į jūsų RADIUS serverį).
- Tarpinis serveris užklausą persiunčia toliau. Jei slaptažodžio patikra nepavyksta, prisijungimas atmetamas iš karto.
- Jei slaptažodis teisingas, tarpinis serveris į naudotojo telefoną
išsiunčia patvirtinimo užklausą ir laiko RADIUS seansą atvirą, kol
naudotojas atsako, pagal numatytuosius nustatymus iki 30 sekundžių
(
vpn_message_ttl). - Patvirtinus → VPN grąžinamas Access-Accept. Atmetus arba pasibaigus laikui → prisijungimas atmetamas.
Iš 4 žingsnio išplaukia viena svarbi pasekmė: jūsų VPN RADIUS kliento laukimo limitas (timeout) turi būti ne trumpesnis už patvirtinimo langą: bent 30 sekundžių. Daugumos RADIUS klientų numatytoji reikšmė tesiekia kelias sekundes ar mažiau, nes paprasta slaptažodžio patikra atsako akimirksniu; o čia žmogus turi spėti išsitraukti telefoną.
Ko reikės
- Notakey autentifikavimo serverio: nemokamo debesijos plano adresu signup.notakey.com arba vietinio įrenginio
- RADIUS serverio (arba naudokite Notakey RADIUS papildinį, žr. toliau)
- VPN, kuris autentifikuoja per RADIUS
- To paties naudotojo vardo Notakey servise, RADIUS serveryje ir VPN (pagal jį tarpinis serveris adresuoja tiesioginį „push“ pranešimą)
1 žingsnis. Sukurkite VPN programą
Notakey valdymo skydelyje sukurkite VPN skirtą programą (servisą), užregistruokite naudotojų telefonus ir nusikopijuokite programos Access ID – UUID, kurį toliau įklijuosite į tarpinio serverio konfigūraciją.
2 žingsnis. Sukonfigūruokite auth-proxy
Vietinis įrenginys: integruotas tarpinis serveris
Auth-proxy jau įtrauktas į įrenginio komplektą. Sukonfigūruokite jį įrenginio komandinėje eilutėje vienu JSON dokumentu:
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
Tada paleiskite paslaugą:
ntk ap start
Ką reiškia kiekvienas laukas:
| Laukas | Reikšmė |
|---|---|
vpn_port_in |
Prievadas, kuriuo tarpinis serveris priima jūsų VPN RADIUS užklausas |
vpn_port_out |
Jūsų RADIUS serverio prievadas |
vpn_radius_address |
Jūsų RADIUS serverio adresas |
vpn_secret_in |
Bendroji paslaptis (shared secret) tarp jūsų VPN ir tarpinio serverio |
vpn_secret_out |
Bendroji paslaptis tarp tarpinio serverio ir jūsų RADIUS serverio |
vpn_access_id |
Programos Access ID iš 1 žingsnio |
vpn_message_ttl |
Kiek sekundžių naudotojas turi patvirtinimui (30 – protinga numatytoji reikšmė) |
message_title / message_description |
Kas rodoma push pranešime; {0} pakeičiamas naudotojo vardu |
Debesijos variantas: tarpinis serveris Docker konteineryje
Jei Notakey serveris veikia debesyje, tą patį tarpinį serverį paleiskite kaip konteinerį savo tinkle, priešais savo RADIUS serverį:
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
Tos pačios sudedamosios dalys, tik kitokia pakuotė: NOTAKEY_HOST yra jūsų
debesies egzemplioriaus API URL, DOWNSTREAM_ADDRESS – jūsų RADIUS
serveris, o dvi paslaptys atitinkamai susiejamos su VPN puse ir RADIUS puse.
Išsamų abiejų variantų aprašą (įskaitant MSI diegimo paketą tarpiniam serveriui Windows aplinkoje, tinklo pasiekiamumo reikalavimus ir žurnalų vietas) rasite Authentication Proxy žinyne.
3 žingsnis. Dar neturite RADIUS serverio? Naudokite mūsų
Jei RADIUS iki šiol nenaudojote, statyti jo vien dėl šio sprendimo nereikia:
- Notakey RADIUS papildinys. Įrenginio komplekte yra RADIUS paslaugos papildinys (FreeRADIUS pagrindu). Jis autentifikuoja pagal naudotojus, jau aprašytus jūsų Notakey servise, todėl atskiros RADIUS naudotojų duomenų bazės prižiūrėti nereikia. Diegimas aprašytas mūsų žinių bazės straipsnyje RADIUS paslaugos papildinys (naudotojų konfigūruoti nereikia).
- MikroTik User Manager. Jei jūsų VPN jau baigiasi MikroTik maršrutizatoriuje, jo integruotas User Manager paketas tinka kaip galutinis RADIUS serveris.
- Bet kuris jau veikiantis įmonės RADIUS (FreeRADIUS, Microsoft NPS ir panašūs) veikia be jokių pakeitimų; tarpinis serveris jam yra skaidrus.
4 žingsnis. Nukreipkite VPN į tarpinį serverį
Perkonfigūruokite VPN koncentratoriaus RADIUS klientą: ta pati paslaptis
kaip vpn_secret_in, tačiau serverio adresas dabar – tarpinis serveris,
o ne RADIUS serveris. Ir padidinkite laukimo limitą.
MikroTik įrenginyje tai atrodo taip:
/radius
add service=ppp address=<proxy-address> secret=secret_to_radius_server timeout=30s
/ppp aaa
set use-radius=yes
Parametras timeout=30s yra esminis. Numatytasis MikroTik RADIUS
laukimo limitas yra 300 milisekundžių: slaptažodžio patikrai to pakanka, bet
žmogaus patvirtinimui – beviltiškai mažai. Nustatykite bent 30 sekundžių
(kad atitiktų vpn_message_ttl), kitaip prisijungimai žlugs naudotojui dar
nespėjus paimti telefono. Ta pati taisyklė galioja bet kurio kito gamintojo
RADIUS kliento nustatymams.
Išbandykite
Prisijunkite prie VPN. Slaptažodžio patikra praeina, ir į telefoną atkeliauja push pranešimas. Jis matomas ir užrakintame ekrane, todėl naudotojui net nereikia būti atsidarius programėlės:

Atidarius matoma visa užklausa: kas jungiasi ir iš kokio IP adreso, su atgal skaičiuojamu laiku, kol tarpinis serveris laiko RADIUS seansą atvirą:

Ryšys užmezgamas tik paspaudus Patvirtinti. Būtent šis ekranas ir yra viso sprendimo saugumo prasmė: naudotojas, gavęs tokį pranešimą tuo metu, kai pats prie VPN nesijungia, mato, kad jo slaptažodžiu naudojasi kažkas kitas iš aiškiai matomo IP adreso – ir vienas paspaudimas ant Atmesti sustabdo prisijungimą bei palieka pėdsaką audito žurnale. Jei prisijungimai baigiasi laiko limitu net patvirtinus greitai, pirmiausia patikrinkite RADIUS kliento laukimo limitą: tai dažniausia šio diegimo klaida.
Susiję vadovai
- MikroTik maršrutizatoriaus prisijungimo 2FA: tas pats tarpinis serveris, nukreiptas į paties maršrutizatoriaus WinBox/SSH prisijungimą
- Linux SSH 2FA su pam_radius: tas pats tarpinis serveris, saugantis SSH, sudo ir su
- MikroTik VPN 2FA – išsamus scenarijais grįstas diegimas: alternatyva vienam maršrutizatoriui, visai be RADIUS
- Windows Credential Provider nuotoliniam darbalaukiui