VPN erabiltzaileen bi faktoreko autentifikazioa MikroTik eta SMS bidez

Kaixo lankideok! Gaur egun, "urruneko lanaren" inguruko pasioen intentsitatea apur bat apaldu zenean, administratzaile gehienek langileen sare korporatiborako urruneko sarbidea izateko zeregina irabazi zuten, VPN segurtasuna hobetzeko nire aspaldiko esperientzia partekatzeko garaia da. Artikulu hau ez da modan egongo orain IPSec IKEv2 eta xAuth. Sistema bat eraikitzea da. bi faktoreko autentifikazioa (2FA) VPN erabiltzaileak MikroTik VPN zerbitzari gisa jarduten duenean. Alegia, PPP bezalako protokolo "klasikoak" erabiltzen direnean.

VPN erabiltzaileen bi faktoreko autentifikazioa MikroTik eta SMS bidez

Gaur MikroTik PPP-VPN nola babestu esango dizut erabiltzailearen kontua "bahitu" bada ere. Nire bezeroetako bati eskema hau aurkeztu ziotenean, laburki deskribatu zuen "beno, orain banku batean bezala da!".

Metodoak ez ditu kanpoko autentifikazio-zerbitzurik erabiltzen. Zereginak bideratzaileak berak egiten ditu barnean. Ez dago kosturik konektatzen duen bezeroarentzat. Metodoak ordenagailuko bezeroentzat eta gailu mugikorrentzat funtzionatzen du.

Babes erregimen orokorra honako hau da:

  1. VPN zerbitzarira behar bezala konektatu den erabiltzaile baten barne IP helbidea automatikoki zerrenda grisean dago.
  2. Konexio-gertaerak automatikoki uneko kode bat sortzen du, erabilgarri dauden metodoetako bat erabiliz erabiltzaileari bidaltzen zaiona.
  3. Zerrenda honetako helbideek sare lokaleko baliabideetarako sarbide mugatua dute, "autentifikatzailea" zerbitzua izan ezik, behin-behineko pasahitza jasotzeko zain dagoena.
  4. Kodea aurkeztu ondoren, erabiltzaileak sareko barne baliabideetarako sarbidea du.

Lehen Aurre egin behar izan nuen arazo txikiena erabiltzaileari buruzko harremanetarako informazioa gordetzea izan zen 2FA kodea bidaltzeko. Mikrotik-en erabiltzaileei dagozkien datu-eremu arbitrarioak sortzea ezinezkoa denez, lehendik dagoen "iruzkin" eremua erabili zen:

/ppp secrets add name=Petrov pasahitza=4M@ngr! comment="89876543210"

Bigarren arazoa larriagoa izan zen - kodea emateko bidea eta metodoa aukeratzea. Gaur egun hiru eskema inplementatzen dira: a) SMS-ak USB-modem bidez b) posta elektronikoa c) zelula gorriko operadorearen bezero korporatiboen eskuragarri dauden posta elektroniko bidezko SMSak.

Bai, SMS eskemek kostuak ekartzen dituzte. Baina begiratuz gero, "segurtasuna beti dirua da" (c).
Pertsonalki ez zait gustatzen posta elektronikoaren eskema. Ez posta zerbitzaria autentifikatzen ari den bezeroarentzat erabilgarri egotea eskatzen duelako - ez da arazorik trafikoa zatitzea. Hala ere, bezero batek kontu handiz gordeko balitu vpn eta posta elektronikoko pasahitzak arakatzaile batean eta gero ordenagailu eramangarria galduko balu, erasotzaileak sare korporatiborako sarbide osoa lortuko luke bertatik.

Beraz, erabaki da: behin-behineko kodea bidaltzen dugu SMS mezuak erabiliz.

Hirugarrena Arazoa non zegoen nola sortu 2FArako kode sasi-ausazko bat MikroTik-en. RouterOS gidoi-lengoaian ez dago random() funtzioaren analogorik, eta aurretik hainbat makulu-gidoi sasi-ausazko zenbaki-sorgailu ikusi ditut. Ez zait bat ere gustatu hainbat arrazoirengatik.

Izan ere, MikroTik-en sasi-ausazko sekuentzia-sorgailu bat dago! Azaleko begirada batetik ezkutatuta dago /certificates scep-server-ren testuinguruan. Lehenengo bidea behin-behineko pasahitza lortzea erraza eta erraza da - komandoarekin /certificates scep-server otp generate. Aldagaien esleipen eragiketa sinple bat egiten badugu, gero scriptetan erabil daitekeen array-balio bat lortuko dugu.

Bigarren bidea aplikatzeko erraza den behin-behineko pasahitza lortzea - ​​kanpoko zerbitzu bat erabiliz ausazko.org nahi duzun zenbaki sasi-ausazkoen segida mota sortzeko. Hemen sinplifikatuta dago cantilevered datuak aldagai batean sartzeko adibidea:

Code
: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

Kontsolarentzat formateatutako eskaera batek (karaktere bereziei ihes egitea beharrezkoa izango da script-aren gorputzean) sei digituko kate bat jasotzen du $rnd1 aldagaian. Hurrengo "jarri" komandoak aldagaia MikroTik kontsolan bistaratzen du.

Laugarren arazoa azkar konpondu behar zen - hau da, nola eta non transferituko duen konektatutako bezeroak bere behin-behineko kodea autentifikazioaren bigarren fasean.

VPN erabiltzaileen bi faktoreko autentifikazioa MikroTik eta SMS bidez

MikroTik bideratzailean kodea onartu eta bezero zehatz batekin lotu dezakeen zerbitzu bat egon behar da. Emandako kodea espero denarekin bat badator, bezeroaren helbidea zerrenda "zuri" jakin batean sartu behar da, zeinetatik helbideak enpresaren barne-sarerako sarbidea baimentzen baitute.

Zerbitzuen aukera eskasa dela eta, Mikrotik-en integratutako webproxy-a erabiliz http bidez kodeak onartzea erabaki zen. Eta suebakiak IP helbideen zerrenda dinamikoekin lan egin dezakeenez, suebakia da kodearen bilaketa egiten duena, bezeroaren IParekin bat eginez eta Layer7 regexp erabiliz zerrenda "zurian" gehituz. Bideratzaileari "gw.local" baldintzazko DNS izen bat esleitu zaio, A-erregistro estatiko bat sortu da bertan PPP bezeroei igortzeko:

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

Egiaztatu gabeko bezeroen trafikoa harrapatzea proxyan:
/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

Kasu honetan, proxyak bi funtzio ditu.

1. Ireki tcp konexioak bezeroekin;

2. Baimen arrakastatsua izanez gero, birbideratu bezeroaren arakatzailea autentifikazio arrakastatsuaren berri ematen duen orrialde edo irudi batera:

Proxy konfigurazioa
/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

Konfigurazio elementu garrantzitsuak zerrendatuko ditut:

  1. interface-list "2fa" - bezeroen interfazeen zerrenda dinamikoa, trafikoa 2FA barruan prozesatu behar duena;
  2. address-list "2fa_jailed" - VPN bezeroen tuneleko IP helbideen "grisa" zerrenda;
  3. address_list "2fa_approved" - bi faktoreko autentifikazioa arrakastaz gainditu duten VPN bezeroen tuneleko IP helbideen zerrenda "zuria".
  4. suebaki-katea "input_2fa" - tcp paketeak baimen-kode bat dagoen egiaztatzen du eta kode-igorlearen IP helbidea behar denarekin lotzen du. Kateko arauak dinamikoki gehitzen eta kentzen dira.

Paketeen prozesamenduaren fluxu-diagrama sinplifikatu batek itxura hau du:

VPN erabiltzaileen bi faktoreko autentifikazioa MikroTik eta SMS bidez

Oraindik autentifikazioaren bigarren fasea gainditu ez duten "gris" zerrendako bezeroen trafikoaren Layer7 egiaztapenean sartzeko, arau bat sortu da "sarrera" kate estandarrean:

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

Orain has gaitezen aberastasun hori guztia PPP zerbitzuari lotzen. MikroTik-ek script-ak profiletan erabiltzeko aukera ematen dizu (ppp-profile) eta ppp konexio bat ezartzeko eta hausteko gertaeretara esleitzeko. ppp-profilaren ezarpenak PPP zerbitzari osoan zein erabiltzaile indibidualetan aplika daitezke. Aldi berean, erabiltzaileari esleitutako profilak lehentasuna du, zerbitzariaren osotasunean hautatutako profilaren parametroak bere zehaztutako parametroekin gainidatziz.

Planteamendu horren ondorioz, bi faktoreko autentifikaziorako profil berezi bat sor diezaiekegu eta ez erabiltzaile guztiei esleitu, hori egitea beharrezkoa ikusten dutenei baizik. Hau garrantzitsua izan daiteke PPP zerbitzuak erabiltzen badituzu azken erabiltzaileak konektatzeko ez ezik, aldi berean gunez gune konexioak eraikitzeko.

Sortu berri den profil berezian, konektatutako erabiltzailearen helbidea eta interfazearen gehikuntza dinamikoa erabiltzen dugu helbide eta interfazeen zerrenda "grisean":

winbox
VPN erabiltzaileen bi faktoreko autentifikazioa MikroTik eta SMS bidez

Code
/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

Beharrezkoa da "helbide-zerrenda" eta "interfaze-zerrenda" zerrendak erabiltzea dstnat (prerouting) katean bigarren mailako VPN bezeroen trafikoa detektatzeko eta harrapatzeko.

Prestaketa amaitzen denean, suebaki-kate osagarriak eta profil bat sortzen dira, 2FA kodearen eta banakako suebaki-arauen auto-sorkuntzaz arduratzen den script bat idatziko dugu.

Dokumentazioa wiki.mikrotik.com on PPP-Profile-k PPP bezero konektatu-deskonektatu gertaerekin lotutako aldagaiei buruzko informazioarekin aberasten gaitu "Exekutatu script-a erabiltzailearen saioa hasteko ekitaldian. Hauek dira gertaeren script-erako erabilgarri dauden aldagaiak: erabiltzailea, helbide lokala, urruneko helbidea, deitzailearen IDa, deituriko IDa, interfazea". Horietako batzuk oso erabilgarriak zaizkigu.

Profilean erabilitako kodea PPP konexio-ekitaldirako

#Π›ΠΎΠ³ΠΈΡ€ΡƒΠ΅ΠΌ для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ 
: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

Batez ere burugabeko kopia-itsatsi gustatzen zaienentzat, ohartarazten dizut: kodea probako bertsiotik hartua da eta akats txikiak izan ditzake. Ez da zaila izango pertsona ulerkorrari non zehazki asmatzea.

Erabiltzaile bat deskonektatzen denean, "On-Down" gertaera bat sortzen da eta dagokion script-a parametroekin deitzen da. Script honen helburua deskonektatutako erabiltzailearentzat sortutako suebaki-arauak garbitzea da.

Profilean erabilitako kodea PPP on-down konexio gertaerarako

: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]
Ondoren, erabiltzaileak sor ditzakezu eta horietako guztiak edo batzuk bi faktoreko autentifikazio-profil batera eslei ditzakezu.

winbox
VPN erabiltzaileen bi faktoreko autentifikazioa MikroTik eta SMS bidez

Code
/ppp secrets set [find name=Petrov] profile=2FA

Nola ikusten duen bezeroaren aldetik.

VPN konexioa ezartzen denean, SIM txartela duen Android/iOS telefono/tableta batek honelako SMS bat jasotzen du:

SMS
VPN erabiltzaileen bi faktoreko autentifikazioa MikroTik eta SMS bidez

Konexioa telefonotik / tabletetik zuzenean ezartzen bada, 2FA bidez joan zaitezke mezuko estekan klik eginda. Erosoa da.

VPN konexioa ordenagailu batetik ezartzen bada, erabiltzaileak pasahitz gutxieneko formularioa sartu beharko du. HTML fitxategi baten formako inprimaki txiki bat ematen zaio erabiltzaileari VPNa konfiguratzean. Fitxategia postaz ere bidali daiteke, erabiltzaileak gorde eta leku egoki batean lasterbide bat sor dezan. Honela dirudi:

Etiketa mahai gainean
VPN erabiltzaileen bi faktoreko autentifikazioa MikroTik eta SMS bidez

Erabiltzaileak lasterbidean klik egiten du, kodea sartzeko inprimaki soil bat irekiko da, eta kodea irekitako URLan itsatsiko du:

Pantaila inprimakia
VPN erabiltzaileen bi faktoreko autentifikazioa MikroTik eta SMS bidez

Forma primitiboena adibide gisa jartzen da. Nahi dutenek beren kabuz alda dezakete.

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>

Baimena arrakastatsua izan bada, erabiltzaileak MikroTik logotipoa ikusiko du arakatzailean, eta horrek autentifikazio arrakastatsua adierazi beharko luke:

VPN erabiltzaileen bi faktoreko autentifikazioa MikroTik eta SMS bidez

Kontuan izan irudia integratutako MikroTik web zerbitzaritik itzultzen dela WebProxy Deny Redirect erabiliz.

Irudia "hotspot" tresna erabiliz pertsonalizatu daitekeela suposatzen dut, zure bertsioa bertan igoz eta Deny Redirect URLa WebProxy-rekin ezarriz.

Eskaera handi bat Mikrotik "jostailu" merkeena 20 $-ren truke erosten eta 500 $-ko bideratzaile bat ordezkatzen saiatzen ari direnentzat - ez egin hori. "hAP Lite" / "hAP mini" (etxeko sarbide-puntua) bezalako gailuek CPU oso ahula dute (smips), eta litekeena da negozio-segmentuko kargari aurre egingo ez diotela.

Erne! Irtenbide honek desabantaila bat du: bezeroak konektatzen edo deskonektatzen direnean, konfigurazio-aldaketak gertatzen dira, bideratzaileak bere memoria ez-hegazkorran gordetzen saiatzen direnak. Bezero kopuru handiarekin eta maiz konexio eta deskonexioekin, horrek bideratzailearen barne biltegiratzea hondatu dezake.

PS: Bezeroari kodea emateko metodoak zabaldu eta osatu daitezke zure programazio gaitasunak nahikoak diren neurrian. Adibidez, telegramera mezuak bidal ditzakezu edo... aukerak proposatu!

Espero dut artikulua baliagarria izatea eta enpresa txiki eta ertainen sareak apur bat seguruago egiten lagunduko dizula.

Iturria: www.habr.com