Awtentikazzjoni b'żewġ fatturi ta 'utenti VPN permezz ta' MikroTik u SMS

Hello kollegi! Illum, meta l-intensità tal-passjonijiet madwar "xogħol mill-bogħod" naqset ftit, il-maġġoranza tal-amministraturi rebħu l-kompitu tal-aċċess mill-bogħod tal-impjegati għan-netwerk korporattiv, wasal iż-żmien li naqsam l-esperjenza twila tiegħi fit-titjib tas-sigurtà VPN. Dan l-artikolu mhux se jkun moda issa IPSec IKEv2 u xAuth. Huwa dwar il-bini ta 'sistema. awtentikazzjoni b'żewġ fatturi (2FA) Utenti VPN meta MikroTik jaġixxi bħala server VPN. Jiġifieri, meta jintużaw protokolli "klassiċi" bħal PPP.

Awtentikazzjoni b'żewġ fatturi ta 'utenti VPN permezz ta' MikroTik u SMS

Illum se ngħidlek kif tipproteġi MikroTik PPP-VPN anke f'każ ta '"ħtiġ" tal-kont tal-utent. Meta din l-iskema ġiet introdotta lil wieħed mill-klijenti tiegħi, huwa ddeskrivieha fil-qosor bħala "ukoll, issa huwa bħal f'bank!".

Il-metodu ma jużax servizzi ta' awtentikatur esterni. Il-kompiti jitwettqu internament mir-router innifsu. Ebda spiża għall-klijent li jgħaqqad. Il-metodu jaħdem kemm għall-klijenti tal-PC kif ukoll għall-apparat mobbli.

L-iskema ta’ protezzjoni ġenerali hija kif ġej:

  1. L-indirizz IP intern ta 'utent li jkun ikkonnettja b'suċċess mas-server VPN huwa awtomatikament fil-lista griża.
  2. L-avveniment ta 'konnessjoni awtomatikament jiġġenera kodiċi ta' darba li jintbagħat lill-utent billi juża wieħed mill-metodi disponibbli.
  3. L-indirizzi f'din il-lista għandhom aċċess limitat għar-riżorsi tan-netwerk lokali, bl-eċċezzjoni tas-servizz "awtentikatur", li qed jistenna li jirċievi passcode ta 'darba.
  4. Wara li jippreżenta l-kodiċi, l-utent ikollu aċċess għar-riżorsi interni tan-netwerk.

L-ewwel l-iżgħar problema li kelli niffaċċja kienet il-ħażna ta 'informazzjoni ta' kuntatt dwar l-utent biex tibgħatlu l-kodiċi 2FA. Peress li huwa impossibbli li jinħolqu oqsma tad-dejta arbitrarji li jikkorrispondu għall-utenti f'Mikrotik, intuża l-qasam "kumment" eżistenti:

/ppp sigrieti add name=password Petrov=4M@ngr! kumment="89876543210"

It-tieni il-problema rriżulta li kienet aktar serja - l-għażla tat-triq u l-metodu ta 'twassil tal-kodiċi. Bħalissa qed jiġu implimentati tliet skemi: a) SMS permezz ta' USB-modem b) e-mail c) SMS permezz ta' e-mail disponibbli għall-klijenti korporattivi tal-operatur ċellulari aħmar.

Iva, l-iskemi tal-SMS iġibu l-ispejjeż. Imma jekk tħares, "is-sigurtà hija dejjem dwar il-flus" (ċ).
Jien personalment ma nħobbx l-iskema bl-e-mail. Mhux għax jeħtieġ li s-server tal-posta jkun disponibbli għall-klijent li jkun awtentikat - mhix problema li t-traffiku jinqasam. Madankollu, jekk klijent bi traskuraġni ssejvja kemm passwords vpn kif ukoll email f'browser u mbagħad tilef il-laptop tiegħu, l-attakkant jikseb aċċess sħiħ għan-netwerk korporattiv minnu.

Għalhekk, huwa deċiż - aħna nwasslu kodiċi ta 'darba billi tuża messaġġi SMS.

It-tielet Il-problema kienet fejn kif tiġġenera kodiċi psewdo-random għal 2FA f'MikroTik. M'hemm l-ebda ekwivalenti għall-funzjoni random() fil-lingwa ta 'scripting RouterOS, u rajt diversi ġeneraturi ta' numri psewdo-random ta 'crutch script qabel. Ma għoġobni ebda wieħed minnhom għal diversi raġunijiet.

Fil-fatt, hemm ġeneratur ta 'sekwenza psewdo-random f'MikroTik! Huwa moħbi minn ħarsa superfiċjali fil-kuntest ta '/certificates scep-server. L-ewwel mod li tikseb password ta' darba hija faċli u sempliċi - bil-kmand /ċertifikati scep-server otp jiġġeneraw. Jekk inwettqu operazzjoni sempliċi ta 'assenjazzjoni varjabbli, se nġibu valur ta' firxa li jista 'jintuża aktar tard fl-iskripts.

It-tieni mod il-kisba ta' password ta' darba li hija wkoll faċli biex tapplika - bl-użu ta' servizz estern random.org biex tiġġenera t-tip mixtieq ta 'sekwenza ta' numri psewdo-każwali. Hawn waħda simplifikata cantilever eżempju ta 'dħul ta' data f'varjabbli:

Kodiċi
:global rnd1 [:pick ([/tool fetch url="https://www.random.org/strings/?num=1&len=7&digits=on&unique=on&format=plain&rnd=new" as-value output=user ]->"da
ta") 1 6] :put $rnd1

Talba ifformattjata għall-console (li jaħarbu karattri speċjali jkunu meħtieġa fil-korp tal-iskript) tirċievi sensiela ta 'sitt ċifri fil-varjabbli $rnd1. Il-kmand "put" li ġej sempliċement juri l-varjabbli fil-console MikroTik.

Ir-raba’ problema li kellhom jiġu solvuti malajr - dan huwa kif u fejn il-klijent konness se jittrasferixxi l-kodiċi ta 'darba tiegħu fit-tieni stadju ta' awtentikazzjoni.

Awtentikazzjoni b'żewġ fatturi ta 'utenti VPN permezz ta' MikroTik u SMS

Għandu jkun hemm servizz fuq ir-router MikroTik li jista 'jaċċetta l-kodiċi u jqabbel ma' klijent speċifiku. Jekk il-kodiċi pprovdut jaqbel ma 'dak mistenni, l-indirizz tal-klijent għandu jkun inkluż f'ċerta lista "abjad", li l-indirizzi li minnhom huma permessi aċċess għan-netwerk intern tal-kumpanija.

Minħabba l-għażla fqira tas-servizzi, ġie deċiż li jiġu aċċettati kodiċijiet permezz ta' http bl-użu tal-webproxy mibni f'Mikrotik. U peress li l-firewall jista 'jaħdem ma' listi dinamiċi ta 'indirizzi IP, huwa l-firewall li jwettaq it-tfittxija għall-kodiċi, qabbilha mal-IP tal-klijent u żżidha mal-lista "abjad" billi tuża Layer7 regexp. Ir-router innifsu ġie assenjat isem DNS kondizzjonali "gw.local", inħoloq A-record statiku fuqu biex jinħareġ lill-klijenti PPP:

DNS
/ip dns static add name=gw.local address=172.31.1.1

Qbid tat-traffiku ta' klijenti mhux verifikati fuq il-proxy:
/ip firewall nat add chain=dstnat dst-port=80,443 in-interface=2fa protocol=tcp !src-address-list=2fa_approved action=redirect to-ports=3128

F'dan il-każ, il-prokura għandha żewġ funzjonijiet.

1. Iftaħ konnessjonijiet tcp mal-klijenti;

2. F'każ ta' awtorizzazzjoni b'suċċess, ireġġa' l-browser tal-klijent lejn paġna jew stampa li tinnotifika dwar awtentikazzjoni b'suċċess:

Konfigurazzjoni tal-prokura
/ip proxy
set enabled=yes port=3128
/ip proxy access
add action=deny disabled=no redirect-to=gw.local./mikrotik_logo.png src-address=0.0.0.0/0

Se nsemmi l-elementi importanti tal-konfigurazzjoni:

  1. interface-list "2fa" - lista dinamika ta' interfaces tal-klijenti, li t-traffiku minnhom jeħtieġ l-ipproċessar fi ħdan 2FA;
  2. address-list "2fa_jailed" - lista "griża" tal-indirizzi IP tal-mini tal-klijenti VPN;
  3. address_list "2fa_approved" - lista "bajda" ta' indirizzi IP tal-mini ta' klijenti VPN li għaddew b'suċċess mill-awtentikazzjoni b'żewġ fatturi.
  4. katina tal-firewall "input_2fa" - jiċċekkja l-pakketti tcp għall-preżenza ta 'kodiċi ta' awtorizzazzjoni u jaqbel mal-indirizz IP ta 'min jibgħat il-kodiċi ma' dak meħtieġ. Ir-regoli fil-katina huma miżjuda u mneħħija b'mod dinamiku.

Flowchart simplifikata tal-ipproċessar tal-pakketti tidher bħal din:

Awtentikazzjoni b'żewġ fatturi ta 'utenti VPN permezz ta' MikroTik u SMS

Biex tidħol fil-kontroll Layer7 tat-traffiku minn klijenti mil-lista "griża" li għadhom ma għaddewx mit-tieni stadju tal-awtentikazzjoni, inħolqot regola fil-katina standard "input":

Kodiċi
/ip firewall filter add chain=input !src-address-list=2fa_approved action=jump jump-target=input_2fa

Issa ejja nibdew naqfu dan il-ġid kollu mas-servizz tal-PPP. MikroTik jippermettilek tuża skripts fil-profili (ppp-profile) u tassenjahom għall-avvenimenti li tistabbilixxi u tkisser konnessjoni ppp. Is-settings tal-ppp-profil jistgħu jiġu applikati kemm għas-server PPP kollu kemm hu kif ukoll għal utenti individwali. Fl-istess ħin, il-profil assenjat lill-utent għandu prijorità, u jegħleb il-parametri tal-profil magħżul għas-server kollu kemm hu bil-parametri speċifikati tiegħu.

Bħala riżultat ta 'dan l-approċċ, nistgħu noħolqu profil speċjali għall-awtentikazzjoni b'żewġ fatturi u nassenjawh mhux lill-utenti kollha, iżda biss lil dawk li jqisu li huwa meħtieġ li jagħmlu dan. Dan jista' jkun rilevanti jekk tuża servizzi PPP mhux biss biex tgħaqqad l-utenti finali, iżda fl-istess ħin biex tibni konnessjonijiet minn sit għal sit.

Fil-profil speċjali maħluq ġdid, nużaw iż-żieda dinamika tal-indirizz u l-interface tal-utent konness mal-listi "griżi" ta 'indirizzi u interfaces:

winbox
Awtentikazzjoni b'żewġ fatturi ta 'utenti VPN permezz ta' MikroTik u SMS

Kodiċi
/ppp profile add address-list=2fa_jailed change-tcp-mss=no local-address=192.0.2.254 name=2FA interface-list=2fa only-one=yes remote-address=dhcp_pool1 use-compression=no use-encryption= required use-mpls=no use-upnp=no dns-server=172.31.1.1

Huwa meħtieġ li tuża kemm "lista ta' indirizzi" kif ukoll "lista ta' interfaces" biex tiskopri u jaqbad it-traffiku minn klijenti VPN mhux sekondarji fil-katina dstnat (prerouting).

Meta titlesta l-preparazzjoni, jinħolqu ktajjen addizzjonali tal-firewall u profil, aħna se niktbu skript responsabbli għall-ġenerazzjoni awtomatika tal-kodiċi 2FA u regoli individwali tal-firewall.

Dokumentazzjoni wiki.mikrotik.com fuq PPP-Profil tarrikkixxina b'informazzjoni dwar varjabbli assoċjati ma 'avvenimenti ta' konnessjoni u skonnettjar tal-klijent PPP "Eżegwixxi script fuq l-avveniment tal-login tal-utent. Dawn huma varjabbli disponibbli li huma aċċessibbli għall-iskript tal-avveniment: utent, indirizz lokali, indirizz remot, id-sejjieħ, id-sejħa, interface". Xi wħud minnhom huma utli ħafna għalina.

Kodiċi użat fil-profil għall-avveniment ta' konnessjoni PPP on-up

#Логируем для отладки полученные переменные 
:log info (

quot;local-address")
:log info (


quot;remote-address")
:log info (


quot;caller-id")
:log info (


quot;called-id")
:log info ([/int pptp-server get (


quot;interface") name])
#Объявляем свои локальные переменные
:local listname "2fa_jailed"
:local viamodem false
:local modemport "usb2"
#ищем автоматически созданную запись в адрес-листе "2fa_jailed"
:local recnum1 [/ip fi address-list find address=(


quot;remote-address") list=$listname]

#получаем псевдослучайный код через random.org
#:local rnd1 [:pick ([/tool fetch url="https://www.random.org/strings/?num=1&len=7&digits=on&unique=on&format=plain&rnd=new" as-value output=user]->"data") 0 4] #либо получаем псевдослучайный код через локальный генератор
#:local rnd1 [pick ([/cert scep-server otp generate as-value minutes-valid=1]->"password") 0 4 ]

#Ищем и обновляем коммент к записи в адрес-листе. Вносим искомый код для отладки
/ip fir address-list set $recnum1 comment=$rnd1
#получаем номер телефона куда слать SMS
:local vphone [/ppp secret get [find name=$user] comment]

#Готовим тело сообщения. Если клиент подключается к VPN прямо с телефона ему достаточно
#будет перейти прямо по ссылке из полученного сообщения
:local msgboby ("Your code: ".$comm1."n Or open link http://gw.local/otp/".$comm1."/")

# Отправляем SMS по выбранному каналу - USB-модем или email-to-sms
if $viamodem do={
/tool sms send phone-number=$vphone message=$msgboby port=$modemport }
else={
/tool e-mail send server=a.b.c.d [email protected] [email protected] subject="@".$vphone body=$msgboby }

#Генерируем Layer7 regexp
local vregexp ("otp\/".$comm1)
:local vcomment ("2fa_".(


quot;remote-address"))
/ip firewall layer7-protocol add name=(


quot;vcomment") comment=(


quot;remote-address") regexp=(


quot;vregexp")

#Генерируем правило проверяющее по Layer7 трафик клиента в поисках нужного кода
#и небольшой защитой от брутфорса кодов с помощью dst-limit
/ip firewall filter add action=add-src-to-address-list address-list=2fa_approved address-list-timeout=none-dynamic chain=input_2fa dst-port=80,443,3128 layer7-protocol=(


quot;vcomment") protocol=tcp src-address=(


quot;remote-address") dst-limit=1,1,src-address/1m40s

Speċjalment għal dawk li jħobbu kopja-pejst bla ħsieb, inwissik - il-kodiċi huwa meħud mill-verżjoni tat-test u jista 'jkun fih typos minuri. Mhux se jkun diffiċli għal persuna li tifhem eżattament fejn.

Meta utent jiskonnettja, jiġi ġġenerat avveniment "On-Down" u jissejjaħ l-iskrittura korrispondenti bil-parametri. Il-kompitu ta 'dan l-iskritt huwa li tnaddaf ir-regoli tal-firewall maħluqa għall-utent skonnettjat.

Kodiċi użat fil-profil għall-avveniment ta' konnessjoni PPP on-down

:local vcomment ("2fa_".(

quot;remote-address"))
/ip firewall address-list remove [find address=(


quot;remote-address") list=2fa_approved] /ip firewall filter remove [find chain="input_2fa" src-address=(


quot;remote-address") ] /ip firewall layer7-protocol remove [find name=$vcomment]
Imbagħad tista 'toħloq utenti u tassenjahom kollha jew uħud minnhom għal profil ta' awtentikazzjoni b'żewġ fatturi.

winbox
Awtentikazzjoni b'żewġ fatturi ta 'utenti VPN permezz ta' MikroTik u SMS

Kodiċi
/ppp secrets set [find name=Petrov] profile=2FA

Kif jidher min-naħa tal-klijent.

Meta tiġi stabbilita konnessjoni VPN, telefon/tablet Android/iOS b'SIM card jirċievi SMS bħal dan:

SMS
Awtentikazzjoni b'żewġ fatturi ta 'utenti VPN permezz ta' MikroTik u SMS

Jekk il-konnessjoni hija stabbilita direttament mit-telefon / pillola, allura tista 'tgħaddi minn 2FA sempliċement billi tikklikkja fuq il-link mill-messaġġ. Huwa komdu.

Jekk il-konnessjoni VPN tiġi stabbilita minn PC, allura l-utent ikun meħtieġ li jdaħħal formola ta 'password minima. Forma żgħira fil-forma ta 'fajl HTML tingħata lill-utent meta twaqqaf il-VPN. Il-fajl jista 'saħansitra jintbagħat bil-posta sabiex l-utent jiffrankah u joħloq shortcut f'post konvenjenti. Jidher bħal dan:

Tikketta fuq il-mejda
Awtentikazzjoni b'żewġ fatturi ta 'utenti VPN permezz ta' MikroTik u SMS

L-utent jikklikkja fuq is-shortcut, tinfetaħ formola sempliċi tad-dħul tal-kodiċi, li se tippejstja l-kodiċi fil-URL miftuħ:

Formola tal-iskrin
Awtentikazzjoni b'żewġ fatturi ta 'utenti VPN permezz ta' MikroTik u SMS

L-aktar forma primittiva tingħata bħala eżempju. Dawk li jixtiequ jistgħu jimmodifikaw għalihom infushom.

2fa_login_mini.html

<html>
<head> <title>SMS OTP login</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head>
<body>
<form name="login" action="location.href='http://gw.local/otp/'+document.getElementById(‘text').value"  method="post"
 <input id="text" type="text"/> 
<input type="button" value="Login" onclick="location.href='http://gw.local/otp/'+document.getElementById('text').value"/> 
</form>
</body>
</html>

Jekk l-awtorizzazzjoni kienet ta’ suċċess, l-utent se jara l-logo MikroTik fil-browser, li għandu jindika awtentikazzjoni b’suċċess:

Awtentikazzjoni b'żewġ fatturi ta 'utenti VPN permezz ta' MikroTik u SMS

Innota li l-immaġni hija rritornata mis-server tal-web MikroTik mibni bl-użu ta 'WebProxy Deny Redirect.

Nissoponi li l-immaġni tista 'tiġi personalizzata bl-użu tal-għodda "hotspot", ittella' l-verżjoni tiegħek hemmhekk u tistabbilixxi l-URL Deny Redirect għaliha ma' WebProxy.

Talba kbira lil dawk li qed jippruvaw jixtru l-irħas "ġugarell" Mikrotik għal $20 u jissostitwixxu router ta '$500 miegħu - tagħmilx hekk. Apparati bħal "hAP Lite" / "hAP mini" (punt ta 'aċċess tad-dar) għandhom CPU dgħajjef ħafna (smips), u huwa probabbli li mhux se jlaħħqu mat-tagħbija fis-segment tan-negozju.

Twissija! Din is-soluzzjoni għandha żvantaġġ wieħed: meta l-klijenti jikkonnettjaw jew jiskonnettjaw, iseħħu bidliet fil-konfigurazzjoni, li r-router jipprova jsalva fil-memorja mhux volatili tiegħu. B'numru kbir ta 'klijenti u konnessjonijiet u skonnessjonijiet frekwenti, dan jista' jwassal għal degradazzjoni tal-ħażna interna fir-router.

PS: Metodi għat-twassil tal-kodiċi lill-klijent jistgħu jiġu estiżi u supplimentati sakemm il-kapaċitajiet ta 'programmar tiegħek huma biżżejjed. Pereżempju, tista' tibgħat messaġġi lil telegram jew... tissuġġerixxi għażliet!

Nittama li l-artiklu jkun utli għalik u jgħin biex in-netwerks ta 'negozji żgħar u ta' daqs medju jkunu ftit aktar siguri.

Sors: www.habr.com