Nasnameya du-faktorî ya bikarhênerên VPN bi MikroTik û SMS

Silav hevalno! Îro, dema ku tundiya dilxwazên li dora "karê dûr" piçekî sist bû, pirraniya rêveberan peywira gihîştina dûr a karmendan ji tora pargîdanî bi dest xist, ew dem e ku ez ezmûna xweya demdirêj di baştirkirina ewlehiya VPN de parve bikim. Dê ev gotar naha ne moda be IPSec IKEv2 û xAuth. Ew li ser avakirina sîstemek e. erêkirina du-faktorî (2FA) Bikarhênerên VPN gava ku MikroTik wekî serverek VPN tevdigere. Ango, dema ku protokolên "klasîk" ên wekî PPP têne bikar anîn.

Nasnameya du-faktorî ya bikarhênerên VPN bi MikroTik û SMS

Îro ez ê ji we re vebêjim ka meriv çawa MikroTik PPP-VPN-ê biparêze jî heke hesabê bikarhêner "hêz" be jî. Dema ku ev nexşe bi yek ji xerîdarên min re hate nas kirin, wî bi kurtî ew wekî "baş e, naha ew mîna bankek e!".

Rêbaz karûbarên erêkerê derveyî bikar nayîne. Karên hundurîn ji hêla routerê bixwe ve têne kirin. Ji bo xerîdarê girêdanê mesref tune. Rêbaz hem ji bo xerîdarên PC û hem jî ji bo cîhazên mobîl dixebite.

Plana parastina giştî wiha ye:

  1. Navnîşana IP-ya navxweyî ya bikarhênerek ku bi serfirazî bi servera VPN-ê ve hatî girêdan bixweber tête navnîşa gewr.
  2. Bûyera girêdanê bixweber kodek yek-car çêdike ku bi karanîna yek ji awayên berdest ji bikarhêner re tê şandin.
  3. Navnîşanên di vê navnîşê de xwedan gihandina çavkaniyên torê yên herêmî sînordar in, ji bilî karûbarê "authenticator", ku li benda wergirtina şîfreyek yek-car e.
  4. Piştî pêşkêşkirina kodê, bikarhêner gihîştina çavkaniyên navxweyî yên torê heye.

Yekem Pirsgirêka herî piçûk a ku min pê re rû bi rû ma ev bû ku agahdariya pêwendiyê di derheqê bikarhêner de hilanîn da ku koda 2FA jê re bişînim. Ji ber ku ne mimkûn e ku li Mikrotik zeviyên daneyên keyfî yên ku bi bikarhêneran re têkildar in biafirînin, qada "şîrove" ya heyî hate bikar anîn:

/ppp razên lê zêde bike name=Petrov şîfreya=4M@ngr! şîrove = "89876543210"

Duyem Pirsgirêk cidîtir derket - bijartina rê û rêbaza radestkirina kodê. Sê nexşe niha têne bicîh kirin: a) SMS bi rêya USB-modem b) e-nameyê c) SMS bi e-nameyê ku ji bo xerîdarên pargîdanî yên operatorê hucreya sor heye.

Erê, nexşeyên SMS lêçûnên xwe tîne. Lê heke hûn lê binêrin, "ewlehî her gav bi drav e" (c).
Ez bi xwe ji nexşeya bi e-nameyê hez nakim. Ne ji ber ku ew hewce dike ku servera e-nameyê ji bo xerîdar were pejirandin peyda bibe - dabeşkirina seyrûseferê ne pirsgirêk e. Lêbelê, heke xerîdarek bi xemsarî hem şîfreyên vpn û hem jî e-nameyê di gerokek de tomar bike û dûv re laptopa xwe winda bike, êrîşkar dê ji wê gihîştina tevnvîsa pargîdanî bi dest bixe.

Ji ber vê yekê, biryar e - em bi karanîna peyamên SMS-ê kodek yek carî radigihînin.

Sisiyan Pirsgirêk li ku bû meriv çawa di MikroTik de ji bo 2FA kodek pseudo-random biafirîne. Di zimanê nivîsandina RouterOS-ê de analoga fonksiyona random() tune, û min berê jî çend çêkerên jimareyên pseudo-random ên skrîpta krîp dîtine. Ji ber sedemên cuda min ji yek ji wan hez nekir.

Di rastiyê de, di MikroTik de jeneratorek rêzikên pseudo-random heye! Ew di çarçoveyek / sertîfîkayên scep-server de ji awirek rûkal ve tê veşartin. Ya yekemîn wergirtina şîfreyek yek-car hêsan û hêsan e - bi fermanê / sertîfîkayên scep-server otp diafirîne. Ger em xebatek tayînkirina guhêrbar a hêsan pêk bînin, em ê nirxek arrayiyê bistînin ku paşê di nivîsan de were bikar anîn.

Riya duyem bidestxistina şîfreyek yek-carî ku di heman demê de karanîna wê hêsan e - karanîna karûbarek derveyî random.org ji bo afirandina rêzika xwestinê ya hejmarên pseudo-random. Li vir hêsankirî ye qantirkirî mînaka girtina daneyan di nav guherbarekê de:

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

Daxwazek ku ji bo konsolê hatî formatkirin (dê di laşê skrîptê de ji karakterên taybetî birevin pêdivî ye) xêzek ji şeş reqeman di guhêrbara $rnd1 de distîne. Fermana jêrîn "put" tenê guhêrbar di konsolê MikroTik de nîşan dide.

Pirsgirêka çaremîn ya ku diviyabû zû were çareser kirin - bi vî rengî û li ku derê xerîdar dê koda xweya yek-carî di qonaxa duyemîn a rastkirinê de veguhezîne.

Nasnameya du-faktorî ya bikarhênerên VPN bi MikroTik û SMS

Pêdivî ye ku karûbarek li ser routerê MikroTik hebe ku karibe kodê qebûl bike û bi xerîdarek taybetî re hevber bike. Ger koda peydakirî bi ya hêvîkirî re têkildar be, navnîşana xerîdar divê di navnîşek "spî" ya diyarkirî de were danîn, navnîşanên ku ji wan têne destûr kirin ku bigihîjin tora hundurê pargîdaniyê.

Ji ber bijartina nebaş a karûbaran, biryar hate girtin ku kodên bi http-ê bi karanîna webproxy-ya ku di Mikrotik de hatî çêkirin qebûl bikin. Û ji ber ku firewall dikare bi navnîşên dînamîkî yên navnîşanên IP-ê re bixebite, ew firewall e ku lêgerîna kodê dike, wê bi IP-ya xerîdar re hevaheng dike û bi karanîna Layer7 regexp li navnîşa "spî" zêde dike. Ji routerê xwe re navek DNS-ya şertî "gw.local" hatî dayîn, ji bo ku ji xerîdarên PPP-ê re were şandin, tomarek A-ya statîk li ser hatiye afirandin:

DNS
/ip dns statîk lê zêde bike name=gw.adresa herêmî=172.31.1.1

Girtina seyrûsefera xerîdarên nerastkirî li ser 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

Di vê rewşê de, proxy du fonksiyon hene.

1. Têkiliyên tcp bi xerîdaran re vekin;

2. Di doza destûrnameya serketî de, geroka xerîdar beralî bike rûpelek an wêneyek ku di derbarê rastkirina serketî de agahdar dike:

Veavakirina proxy
/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

Ez ê hêmanên mîhengê yên girîng navnîş bikim:

  1. navnîşa navbeynkar "2fa" - navnîşek dînamîkî ya navbeynkarên xerîdar, seyrûsefera ku jê re pêvajo di nav 2FA de hewce dike;
  2. navnîş-lîsteya "2fa_jailed" - navnîşa "gewr" navnîşanên IP-ya tunelê yên xerîdarên VPN;
  3. navnîşa_adresa "2fa_pejirandin" - navnîşa "spî" ya navnîşanên IP-ya tunelê yên xerîdarên VPN ku bi serfirazî pejirandina du-faktorî derbas kirine.
  4. zincîra dîwarê dîwarê "input_2fa" - ew pakêtên tcp ji bo hebûna kodek destûrnameyê kontrol dike û navnîşana IP-ya şîfreya kodê bi ya pêwîst re li hev dike. Qaîdeyên di zincîrê de bi dînamîk têne zêdekirin û rakirin.

Nexşeya pêvek a hêsankirî ya pêvajoya paketê wiha xuya dike:

Nasnameya du-faktorî ya bikarhênerên VPN bi MikroTik û SMS

Ji bo ku hûn bikevin kontrola Layer7 ya seyrûsefera ji xerîdarên ji navnîşa "gewr" a ku hîn qonaxa duyemîn a erêkirinê derbaz nekiriye, di zincîra standard "input" de qaîdeyek hate afirandin:

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

Naha em dest pê bikin ku hemî vê dewlemendiyê bi karûbarê PPP ve girêbidin. MikroTik destûrê dide te ku hûn di profîlan de (ppp-profile) nivîsan bikar bînin û wan ji bûyerên damezrandin û qutkirina pêwendiyek ppp re veqetînin. Mîhengên profîla ppp dikare li ser servera PPP-ê bi tevahî an ji bo bikarhênerên kesane were sepandin. Di heman demê de, profîla ku ji bikarhêner re hatî veqetandin xwedan pêşanî ye, ku pîvanên profîla ku ji bo serverê bi tevahî hatî hilbijartin bi pîvanên wê yên diyarkirî re derbas dike.

Wekî encamek vê nêzîkbûnê, em dikarin ji bo piştrastkirina du-faktor profîlek taybetî biafirînin û wê ne ji hemî bikarhêneran re, lê tenê ji yên ku hewcedar dibînin ku wiya bikin. Ger hûn karûbarên PPP-ê ne tenê ji bo girêdana bikarhênerên dawîn, lê di heman demê de ji bo avakirina girêdanên malper-malperê bikar bînin ev dibe ku têkildar be.

Di profîla taybetî ya nû hatî afirandin de, em lêzêdekirina dînamîkî ya navnîşan û navgîniya bikarhênerê girêdayî navnîşên navnîşan û navbeynkaran "gewr" bikar tînin:

winbox
Nasnameya du-faktorî ya bikarhênerên VPN bi MikroTik û SMS

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

Pêdivî ye ku meriv hem lîsteyên "navnîşan-lîste" û "lîsteya navrû" bikar bîne da ku seyrûsefera ji xerîdarên VPN yên ne-duyemîn ên di zincîra dstnat (pêşbirêk) de were dîtin û bigire.

Dema ku amadekarî qediya, zincîreyên din ên firewall û profîlek têne afirandin, em ê skrîptek ku berpirsiyarê hilberîna otomatîkî ya koda 2FA û qaîdeyên ferdî yên dîwarê agir binivîsin.

Belgekirin wiki.mikrotik.com li ser PPP-Profila me bi agahdariya di derheqê guhêrbarên ku bi bûyerên pevgirêdan-veqetandina muwekîlê PPP-ê re têkildar in dewlemend dike "Skrîpta li ser têketin-bûyera bikarhêner bicîh bîne. Vana guhêrbarên berdest in ku ji bo skrîpta bûyerê têne gihîştin: bikarhêner, navnîşana herêmî, navnîşana-dûr, navnîşana-lêder, navê-id, navbeynkar". Hin ji wan ji bo me pir bikêr in.

Koda ku di profîlê de ji bo bûyera pêwendiya PPP-a-up-ê tê bikar anîn

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

Bi taybetî ji bo kesên ku hez dikin ku bi bêhiş kopî-paste bikin, ez we hişyar dikim - kod ji guhertoya ceribandinê hatî girtin û dibe ku xeletiyên piçûk jî hebe. Ji bo mirovek têgihîştî dê ne dijwar be ku tam li ku derê bifikire.

Dema ku bikarhênerek qut dibe, bûyerek "On-Down" tê çêkirin û skrîpta têkildar a bi parametreyan tê gazî kirin. Armanca vê skrîptê paqijkirina qaîdeyên firewall e ku ji bo bikarhênerê veqetandî hatine afirandin.

Koda ku di profîlê de ji bo bûyera pêwendiya PPP-a-xwarê tê bikar anîn

: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]
Dûv re hûn dikarin bikarhêneran biafirînin û hemî an hin ji wan bi profîlek rastkirina du-faktorî veqetînin.

winbox
Nasnameya du-faktorî ya bikarhênerên VPN bi MikroTik û SMS

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

Çawa ew li aliyê muwekîlê xuya dike.

Dema ku pêwendiyek VPN saz bibe, têlefonek Android / iOS / tabletek bi SIM karta SMSek weha distîne:

SMS
Nasnameya du-faktorî ya bikarhênerên VPN bi MikroTik û SMS

Ger pêwendiya rasterast ji têlefonê / tabletê ve hatî saz kirin, wê hingê hûn dikarin bi tenê bi tikandina li ser zencîreya ji peyamê re derbasî 2FA bibin. Rehet e.

Ger pêwendiya VPN ji PC-ê were saz kirin, wê hingê pêdivî ye ku bikarhêner formek şîfreyek hindiktirîn têkeve. Dema sazkirina VPN-ê formek piçûk di forma pelek HTML-ê de ji bikarhêner re tê dayîn. Pelê dikare bi nameyê jî were şandin da ku bikarhêner wê hilîne û li cîhek hêsan kurtebirek çêbike. Wusa xuya dike:

Labelê ser maseyê
Nasnameya du-faktorî ya bikarhênerên VPN bi MikroTik û SMS

Bikarhêner li ser kurtebirê bitikîne, formek têketina kodê ya hêsan vedibe, ku dê kodê di URL-ya vekirî de bihêle:

Forma ekranê
Nasnameya du-faktorî ya bikarhênerên VPN bi MikroTik û SMS

Forma herî primitive wek mînak tê dayîn. Kesên ku bixwazin dikarin ji bo xwe biguherînin.

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>

Ger destûr serketî bû, bikarhêner dê logoya MikroTik di gerokê de bibîne, ku divê piştrastkirina serfiraz nîşan bide:

Nasnameya du-faktorî ya bikarhênerên VPN bi MikroTik û SMS

Bala xwe bidinê ku wêne ji servera malperê ya MikroTik-ya çêkirî bi karanîna WebProxy Redirect Redirect vegere.

Ez texmîn dikim ku wêne dikare bi karanîna amûra "hotspot" were xweş kirin, guhertoya xweya xwe li wir bar bike û URL-ya Redirect Redirect bi WebProxy-ê re saz bike.

Daxwazek mezin ji wan kesên ku hewl didin "lîstika" ya herî erzan Mikrotik bi 20 dolaran bikirin û routerek 500 dolarî jê re biguhezînin - wiya nekin. Amûrên mîna "hAP Lite" / "hAP mini" (nûçeya gihîştina malê) xwedan CPU (smips) pir qels in, û îhtîmal e ku ew ê di beşê karsaziyê de bi barkirinê re rûbirû nebin.

Gazî! Vê çareseriyê yek kêmasiyek heye: dema ku xerîdar bi hev ve girêdidin an jê vediqetînin, guhertinên mîhengê çêdibin, ku router hewl dide ku di bîranîna xweya ne-hilweşîn de hilîne. Digel hejmareke mezin a xerîdar û girêdan û veqetandinên pir caran, ev dikare bibe sedema xerabûna hilana hundurîn a di routerê de.

PS: Rêbazên radestkirina kodê ji xerîdar re heya ku kapasîteyên bernamesaziya we têr in dikarin werin berfireh kirin û zêdekirin. Mînakî, hûn dikarin ji telegramê re peyaman bişînin an ... vebijarkan pêşniyar bikin!

Ez hêvî dikim ku gotar dê ji we re kêrhatî be û dê bibe alîkar ku torên karsaziyên piçûk û navîn hinekî ewledartir bikin.

Source: www.habr.com