Dilysu dau ffactor o ddefnyddwyr VPN trwy MikroTik a SMS

Helo cydweithwyr! Heddiw, pan ostyngodd dwyster y nwydau o amgylch “gwaith o bell” ychydig, enillodd mwyafrif y gweinyddwyr y dasg o fynediad o bell gweithwyr i'r rhwydwaith corfforaethol, mae'n bryd rhannu fy mhrofiad hirsefydlog o wella diogelwch VPN. Ni fydd yr erthygl hon yn ffasiynol nawr IPSec IKEv2 a xAuth. Mae'n ymwneud ag adeiladu system. dilysu dau ffactor (2FA) Defnyddwyr VPN pan fo MikroTik yn gweithredu fel gweinydd VPN. Sef, pan ddefnyddir protocolau "clasurol" fel PPP.

Dilysu dau ffactor o ddefnyddwyr VPN trwy MikroTik a SMS

Heddiw, byddaf yn dweud wrthych sut i amddiffyn MikroTik PPP-VPN hyd yn oed os yw'r cyfrif defnyddiwr yn cael ei "herwgipio". Pan gyflwynwyd y cynllun hwn i un o’m cwsmeriaid, fe’i disgrifiodd yn fyr fel “wel, nawr mae fel mewn banc!”.

Nid yw'r dull yn defnyddio gwasanaethau dilysu allanol. Mae'r tasgau'n cael eu perfformio'n fewnol gan y llwybrydd ei hun. Dim cost i'r cleient cysylltiedig. Mae'r dull yn gweithio ar gyfer cleientiaid PC a dyfeisiau symudol.

Mae'r cynllun amddiffyn cyffredinol fel a ganlyn:

  1. Mae cyfeiriad IP mewnol defnyddiwr sydd wedi cysylltu'n llwyddiannus â'r gweinydd VPN yn cael ei restru llwyd yn awtomatig.
  2. Mae'r digwyddiad cysylltiad yn cynhyrchu cod un-amser yn awtomatig a anfonir at y defnyddiwr gan ddefnyddio un o'r dulliau sydd ar gael.
  3. Mae gan gyfeiriadau yn y rhestr hon fynediad cyfyngedig i adnoddau rhwydwaith lleol, ac eithrio'r gwasanaeth “dilyswr”, sy'n aros i dderbyn cod pas un-amser.
  4. Ar ôl cyflwyno'r cod, mae gan y defnyddiwr fynediad i adnoddau mewnol y rhwydwaith.

Cyntaf y broblem leiaf y bu'n rhaid i mi ei hwynebu oedd storio gwybodaeth gyswllt am y defnyddiwr i anfon y cod 2FA ato. Gan ei bod yn amhosibl creu meysydd data mympwyol sy'n cyfateb i ddefnyddwyr yn Mikrotik, defnyddiwyd y maes “sylw” presennol:

/ppp cyfrinachau ychwanegu enw=cyfrinair Petrov=4M@ngr! sylw="89876543210"

Mae'r ail trodd y broblem yn fwy difrifol - dewis y llwybr a'r dull o gyflwyno'r cod. Mae tri chynllun yn cael eu gweithredu ar hyn o bryd: a) SMS trwy fodem USB b) e-bost c) SMS trwy e-bost ar gael i gleientiaid corfforaethol y gweithredwr cellog coch.

Ydy, mae cynlluniau SMS yn dod â chostau. Ond os edrychwch, "mae diogelwch bob amser yn ymwneud ag arian" (c).
Yn bersonol, nid wyf yn hoffi'r cynllun gydag e-bost. Nid oherwydd ei fod yn ei gwneud yn ofynnol i'r gweinydd post fod ar gael ar gyfer y cleient sy'n cael ei ddilysu - nid yw'n broblem i hollti'r traffig. Fodd bynnag, pe bai cleient yn arbed cyfrineiriau vpn ac e-bost yn ddiofal mewn porwr ac yna'n colli ei liniadur, byddai'r ymosodwr yn cael mynediad llawn i'r rhwydwaith corfforaethol ohono.

Felly, penderfynwyd - rydym yn cyflwyno cod un-amser gan ddefnyddio negeseuon SMS.

Yn drydydd Y broblem oedd ble sut i gynhyrchu cod ffug-hap ar gyfer 2FA yn MikroTik. Nid oes analog o'r swyddogaeth random() yn iaith sgriptio RouterOS, ac rwyf wedi gweld sawl generadur rhif ffug-hap sgript crutch o'r blaen. Doeddwn i ddim yn hoffi unrhyw un ohonyn nhw am wahanol resymau.

Mewn gwirionedd, mae generadur dilyniant ffug-hap yn MikroTik! Mae wedi'i guddio rhag cipolwg arwynebol yng nghyd-destun /certificates scep-server. Y ffordd gyntaf mae cael cyfrinair un-amser yn hawdd ac yn syml - gyda'r gorchymyn /tystysgrifau scep-server otp cynhyrchu. Os byddwn yn cyflawni gweithrediad aseiniad newidiol syml, byddwn yn cael gwerth arae y gellir ei ddefnyddio yn ddiweddarach mewn sgriptiau.

Yr ail ffordd cael cyfrinair un-amser sydd hefyd yn hawdd ei gymhwyso - gan ddefnyddio gwasanaeth allanol hap.org i gynhyrchu'r math o ddilyniant o rifau ffug-hap a ddymunir. Dyma symlach cantilifrog enghraifft o gael data i mewn i newidyn:

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

Mae cais wedi'i fformatio ar gyfer y consol (bydd angen dianc rhag nodau arbennig yng nghorff y sgript) yn derbyn llinyn o chwe digid i'r newidyn $rnd1. Mae'r gorchymyn "rhoi" canlynol yn dangos y newidyn yn y consol MikroTik.

Y bedwaredd broblem y bu'n rhaid ei ddatrys yn gyflym - dyma sut a ble y bydd y cleient cysylltiedig yn trosglwyddo ei god un-amser yn ail gam y dilysu.

Dilysu dau ffactor o ddefnyddwyr VPN trwy MikroTik a SMS

Rhaid bod gwasanaeth ar y llwybrydd MikroTik a all dderbyn y cod a'i baru â chleient penodol. Os yw'r cod a ddarperir yn cyfateb i'r un disgwyliedig, dylid cynnwys cyfeiriad y cleient mewn rhestr "gwyn" benodol, y caniateir mynediad i rwydwaith mewnol y cwmni o'r cyfeiriadau hyn.

Oherwydd y dewis gwael o wasanaethau, penderfynwyd derbyn codau trwy http gan ddefnyddio'r webproxy sydd wedi'i ymgorffori yn Mikrotik. A chan y gall y wal dân weithio gyda rhestrau deinamig o gyfeiriadau IP, y wal dân sy'n perfformio'r chwiliad am y cod, gan ei baru ag IP y cleient a'i ychwanegu at y rhestr "gwyn" gan ddefnyddio Layer7 regexp. Mae'r llwybrydd ei hun wedi cael enw DNS amodol "gw.local", mae cofnod A sefydlog wedi'i greu arno i'w roi i gleientiaid PPP:

DNS
/ip dns statig ychwanegu enw=gw.local address=172.31.1.1

Dal traffig cleientiaid heb ei wirio ar y dirprwy:
/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

Yn yr achos hwn, mae gan y dirprwy ddwy swyddogaeth.

1. cysylltiadau tcp agored â chleientiaid;

2. Mewn achos o awdurdodiad llwyddiannus, ailgyfeirio'r porwr cleient i dudalen neu lun sy'n hysbysu am ddilysu llwyddiannus:

Cyfluniad dirprwy
/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

Byddaf yn rhestru'r elfennau ffurfweddu pwysig:

  1. rhyngwyneb-rhestr "2fa" - rhestr ddeinamig o ryngwynebau cleient, y mae angen prosesu traffig ohonynt o fewn 2FA;
  2. rhestr cyfeiriadau "2fa_jailed" - rhestr "llwyd" o gyfeiriadau IP twnnel cleientiaid VPN;
  3. address_list "2fa_approved" - rhestr "gwyn" o gyfeiriadau IP twnnel cleientiaid VPN sydd wedi pasio dilysiad dau ffactor yn llwyddiannus.
  4. cadwyn wal dân "input_2fa" - mae'n gwirio pecynnau tcp am bresenoldeb cod awdurdodi ac yn cyfateb cyfeiriad IP anfonwr y cod gyda'r un gofynnol. Mae rheolau yn y gadwyn yn cael eu hychwanegu a'u tynnu'n ddeinamig.

Mae siart llif symlach o brosesu pecynnau yn edrych fel hyn:

Dilysu dau ffactor o ddefnyddwyr VPN trwy MikroTik a SMS

I fynd i mewn i wiriad Haen7 o draffig gan gleientiaid o'r rhestr "llwyd" nad ydynt eto wedi pasio'r ail gam dilysu, mae rheol wedi'i chreu yn y gadwyn "mewnbwn" safonol:

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

Nawr, gadewch i ni ddechrau cau'r holl gyfoeth hwn i'r gwasanaeth PPP. Mae MikroTik yn caniatáu ichi ddefnyddio sgriptiau mewn proffiliau (ppp-profile) a'u neilltuo i'r digwyddiadau o sefydlu a thorri cysylltiad ppp. Gellir cymhwyso'r gosodiadau proffil ppp i'r gweinydd PPP yn ei gyfanrwydd neu i ddefnyddwyr unigol. Ar yr un pryd, mae gan y proffil a neilltuwyd i'r defnyddiwr flaenoriaeth, gan ddiystyru paramedrau'r proffil a ddewiswyd ar gyfer y gweinydd yn ei gyfanrwydd gyda'i baramedrau penodedig.

O ganlyniad i'r dull hwn, gallwn greu proffil arbennig ar gyfer dilysu dau ffactor a'i neilltuo nid i bob defnyddiwr, ond dim ond i'r rhai sy'n ystyried bod angen gwneud hynny. Gall hyn fod yn berthnasol os ydych yn defnyddio gwasanaethau PPP nid yn unig i gysylltu defnyddwyr terfynol, ond ar yr un pryd i adeiladu cysylltiadau safle-i-safle.

Yn y proffil arbennig sydd newydd ei greu, rydym yn defnyddio'r ychwanegiad deinamig o gyfeiriad a rhyngwyneb y defnyddiwr cysylltiedig at y rhestrau "llwyd" o gyfeiriadau a rhyngwynebau:

winbocs
Dilysu dau ffactor o ddefnyddwyr VPN trwy MikroTik a SMS

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

Mae angen defnyddio rhestrau "rhestr cyfeiriad" a "rhestr rhyngwyneb" i ganfod a dal traffig gan gleientiaid VPN nad ydynt yn eilaidd yn y gadwyn dstnat (rhagflaenu).

Pan fydd y paratoad wedi'i gwblhau, mae cadwyni wal dân ychwanegol a phroffil yn cael eu creu, byddwn yn ysgrifennu sgript sy'n gyfrifol am gynhyrchu'r cod 2FA yn awtomatig a rheolau wal dân unigol.

Dogfennaeth wiki.mikrotik.com ar PPP-Profile yn ein cyfoethogi â gwybodaeth am newidynnau sy'n gysylltiedig â digwyddiadau cysylltu-datgysylltu cleient PPP msgstr "Cyflawni sgript ar ddigwyddiad mewngofnodi defnyddiwr. Mae'r rhain yn newidynnau sydd ar gael sy'n hygyrch ar gyfer sgript y digwyddiad: defnyddiwr, cyfeiriad lleol, cyfeiriad o bell, ID galwr, id galw, rhyngwyneb". Mae rhai ohonynt yn ddefnyddiol iawn i ni.

Cod a ddefnyddir yn y proffil ar gyfer digwyddiad cysylltiad ymlaen PPP

#Логируем для отладки полученные переменные 
: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

Yn enwedig i'r rhai sy'n hoffi copïo-gludo yn ddifeddwl, rwy'n eich rhybuddio - mae'r cod yn cael ei gymryd o'r fersiwn prawf a gall gynnwys mân deipos. Ni fydd yn anodd i berson deall ddarganfod yn union ble.

Pan fydd defnyddiwr yn datgysylltu, cynhyrchir digwyddiad "Ar-Lawr" a gelwir y sgript gyfatebol â pharamedrau. Tasg y sgript hon yw glanhau'r rheolau wal dân a grëwyd ar gyfer y defnyddiwr sydd wedi'i ddatgysylltu.

Cod a ddefnyddir yn y proffil ar gyfer digwyddiad cysylltiad ar-lawr PPP

: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]
Yna gallwch greu defnyddwyr a neilltuo pob un neu rai ohonynt i broffil dilysu dau ffactor.

winbocs
Dilysu dau ffactor o ddefnyddwyr VPN trwy MikroTik a SMS

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

Sut mae'n edrych ar ochr y cleient.

Pan fydd cysylltiad VPN wedi'i sefydlu, mae ffôn / llechen Android / iOS gyda cherdyn SIM yn derbyn SMS fel hyn:

SMS
Dilysu dau ffactor o ddefnyddwyr VPN trwy MikroTik a SMS

Os sefydlir y cysylltiad yn uniongyrchol o'r ffôn / tabled, yna gallwch fynd trwy 2FA yn syml trwy glicio ar y ddolen o'r neges. Mae'n gyfforddus.

Os yw'r cysylltiad VPN wedi'i sefydlu o gyfrifiadur personol, yna bydd yn ofynnol i'r defnyddiwr nodi ffurflen cyfrinair fach iawn. Rhoddir ffurflen fach ar ffurf ffeil HTML i'r defnyddiwr wrth sefydlu'r VPN. Gellir hyd yn oed anfon y ffeil trwy'r post fel bod y defnyddiwr yn ei arbed ac yn creu llwybr byr mewn man cyfleus. Mae'n edrych fel hyn:

Label ar y bwrdd
Dilysu dau ffactor o ddefnyddwyr VPN trwy MikroTik a SMS

Mae'r defnyddiwr yn clicio ar y llwybr byr, mae ffurflen mynediad cod syml yn agor, a fydd yn gludo'r cod i'r URL a agorwyd:

Ffurflen sgrin
Dilysu dau ffactor o ddefnyddwyr VPN trwy MikroTik a SMS

Rhoddir y ffurf fwyaf cyntefig fel esiampl. Gall y rhai sy'n dymuno addasu drostynt eu hunain.

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>

Os oedd yr awdurdodiad yn llwyddiannus, bydd y defnyddiwr yn gweld logo MikroTik yn y porwr, a ddylai ddangos dilysiad llwyddiannus:

Dilysu dau ffactor o ddefnyddwyr VPN trwy MikroTik a SMS

Sylwch fod y ddelwedd yn cael ei dychwelyd o'r gweinydd gwe MikroTik adeiledig gan ddefnyddio WebProxy Deny Redirect.

Mae'n debyg y gellir addasu'r ddelwedd gan ddefnyddio'r teclyn "hotspot", uwchlwytho'ch fersiwn eich hun yno a gosod yr URL Gwrthod Ailgyfeirio ato gyda WebProxy.

Cais mawr i'r rhai sy'n ceisio prynu'r "tegan" Mikrotik rhataf am $20 a gosod llwybrydd $500 yn ei le - peidiwch â gwneud hynny. Mae gan ddyfeisiau fel "hAP Lite" / "hAP mini" (pwynt mynediad cartref) CPU gwan iawn (smips), ac mae'n debygol na fyddant yn ymdopi â'r llwyth yn y segment busnes.

Rhybudd! Mae gan yr ateb hwn un anfantais: pan fydd cleientiaid yn cysylltu neu'n datgysylltu, mae newidiadau cyfluniad yn digwydd, y mae'r llwybrydd yn ceisio eu cadw yn ei gof anweddol. Gyda nifer fawr o gleientiaid a chysylltiadau a datgysylltiadau aml, gall hyn arwain at ddiraddio'r storfa fewnol yn y llwybrydd.

PS: Gellir ehangu ac ychwanegu at ddulliau o gyflwyno cod i'r cleient cyn belled â bod eich galluoedd rhaglennu yn ddigonol. Er enghraifft, gallwch anfon negeseuon i telegram neu ... awgrymu opsiynau!

Rwy'n gobeithio y bydd yr erthygl yn ddefnyddiol i chi ac yn helpu i wneud y rhwydweithiau o fusnesau bach a chanolig ychydig yn fwy diogel.

Ffynhonnell: hab.com