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.
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:
- L-indirizz IP intern ta 'utent li jkun ikkonnettja b'suċċess mas-server VPN huwa awtomatikament fil-lista griża.
- L-avveniment ta 'konnessjoni awtomatikament jiġġenera kodiċi ta' darba li jintbagħat lill-utent billi juża wieħed mill-metodi disponibbli.
- 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.
- 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
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.
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:
- interface-list "2fa" - lista dinamika ta' interfaces tal-klijenti, li t-traffiku minnhom jeħtieġ l-ipproċessar fi ħdan 2FA;
- address-list "2fa_jailed" - lista "griża" tal-indirizzi IP tal-mini tal-klijenti VPN;
- 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.
- 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:
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:
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.
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
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
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
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
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:
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