Uthibitishaji wa vipengele viwili vya watumiaji wa VPN kupitia MikroTik na SMS

Habari wenzangu! Leo, wakati nguvu ya shauku kuzunguka "kazi ya mbali" ilipopungua kidogo, wasimamizi wengi walishinda jukumu la ufikiaji wa mbali wa wafanyikazi kwenye mtandao wa shirika, ni wakati wa kushiriki uzoefu wangu wa muda mrefu katika kuboresha usalama wa VPN. Nakala hii haitakuwa ya mtindo sasa IPSec IKEv2 na xAuth. Ni juu ya kujenga mfumo. uthibitishaji wa mambo mawili (2FA) Watumiaji wa VPN wakati MikroTik hufanya kama seva ya VPN. Yaani, wakati itifaki za "classic" kama vile PPP zinatumiwa.

Uthibitishaji wa vipengele viwili vya watumiaji wa VPN kupitia MikroTik na SMS

Leo nitakuambia jinsi ya kulinda MikroTik PPP-VPN hata kama akaunti ya mtumiaji "imetekwa nyara". Mpango huu ulipotambulishwa kwa mmoja wa wateja wangu, alielezea kwa ufupi kama "vizuri, sasa ni kama katika benki!".

Njia haitumii huduma za uthibitishaji wa nje. Kazi zinafanywa ndani na router yenyewe. Hakuna gharama kwa mteja wa kuunganisha. Njia hiyo inafanya kazi kwa wateja wa PC na vifaa vya rununu.

Mpango wa ulinzi wa jumla ni kama ifuatavyo.

  1. Anwani ya ndani ya IP ya mtumiaji ambaye amefanikiwa kuunganisha kwenye seva ya VPN huorodheshwa kijivu kiotomatiki.
  2. Tukio la uunganisho huzalisha kiotomati msimbo wa wakati mmoja ambao hutumwa kwa mtumiaji kwa kutumia mojawapo ya mbinu zilizopo.
  3. Anwani katika orodha hii zina ufikiaji mdogo wa rasilimali za mtandao wa ndani, isipokuwa huduma ya "kithibitishaji", ambayo inasubiri kupokea nenosiri la wakati mmoja.
  4. Baada ya kuwasilisha msimbo, mtumiaji anapata rasilimali za ndani za mtandao.

Kwanza tatizo dogo nililokabiliana nalo lilikuwa ni kuhifadhi taarifa za mawasiliano kuhusu mtumiaji ili kumtumia msimbo wa 2FA. Kwa kuwa haiwezekani kuunda sehemu za data za kiholela zinazolingana na watumiaji katika Mikrotik, sehemu ya "maoni" iliyopo ilitumiwa:

/ppp siri ongeza jina=Petrov password=4M@ngr! maoni="89876543210"

Ya pili tatizo liligeuka kuwa kubwa zaidi - uchaguzi wa njia na njia ya kutoa kanuni. Miradi mitatu inatekelezwa kwa sasa: a) SMS kupitia USB-modemu b) barua pepe c) SMS kupitia barua-pepe zinazopatikana kwa wateja wa kampuni wa opereta nyekundu ya simu.

Ndiyo, mipango ya SMS huleta gharama. Lakini ukiangalia, "usalama daima ni juu ya pesa" (c).
Binafsi sipendi mpango huo wa barua pepe. Sio kwa sababu inahitaji seva ya barua kupatikana kwa mteja kuthibitishwa - sio shida kugawa trafiki. Hata hivyo, ikiwa mteja alihifadhi bila uangalifu manenosiri ya vpn na barua pepe kwenye kivinjari na kisha kupoteza kompyuta yake ya mkononi, mshambuliaji atapata ufikiaji kamili wa mtandao wa shirika kutoka kwayo.

Kwa hivyo, imeamuliwa - tunawasilisha msimbo wa mara moja kwa kutumia ujumbe wa SMS.

Tatu Tatizo lilikuwa wapi jinsi ya kutengeneza msimbo wa bahati nasibu wa 2FA katika MikroTik. Hakuna mlinganisho wa kazi ya nasibu() katika lugha ya uandishi ya RouterOS, na nimeona jenereta kadhaa za nambari za uwongo za nasibu hapo awali. Sikumpenda hata mmoja wao kwa sababu mbalimbali.

Kwa kweli, kuna jenereta ya mlolongo wa pseudo-random katika MikroTik! Imefichwa kutokana na mtazamo wa juu juu katika muktadha wa /vyeti scep-server. Njia ya kwanza kupata nenosiri la wakati mmoja ni rahisi na rahisi - kwa amri /vyeti scep-server otp kuzalisha. Ikiwa tutafanya operesheni rahisi ya mgawo wa kutofautiana, tutapata thamani ya safu ambayo inaweza kutumika baadaye katika hati.

Njia ya pili kupata nenosiri la wakati mmoja ambalo pia ni rahisi kutumia - kwa kutumia huduma ya nje random.org kutengeneza aina inayotakikana ya mlolongo wa nambari bandia-nasibu. Hapa kuna kilichorahisishwa cantilevered mfano wa kupata data katika kutofautisha:

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

Ombi lililoumbizwa kwa dashibodi (kuepuka herufi maalum kutahitajika katika muundo wa hati) hupokea mfuatano wa tarakimu sita kwenye kigezo cha $rnd1. Amri ifuatayo ya "kuweka" inaonyesha tu kutofautisha kwenye koni ya MikroTik.

Tatizo la nne ambayo ilibidi kutatuliwa haraka - hii ndio jinsi na ambapo mteja aliyeunganishwa atahamisha msimbo wake wa wakati mmoja katika hatua ya pili ya uthibitishaji.

Uthibitishaji wa vipengele viwili vya watumiaji wa VPN kupitia MikroTik na SMS

Lazima kuwe na huduma kwenye kipanga njia cha MikroTik ambacho kinaweza kukubali msimbo na kuulinganisha na mteja maalum. Ikiwa nambari iliyotolewa inalingana na inayotarajiwa, anwani ya mteja inapaswa kujumuishwa katika orodha fulani "nyeupe", anwani ambazo zinaruhusiwa kufikia mtandao wa ndani wa kampuni.

Kwa sababu ya uchaguzi mbaya wa huduma, iliamuliwa kukubali misimbo kupitia http kwa kutumia proksi ya wavuti iliyojengwa ndani ya Mikrotik. Na kwa kuwa firewall inaweza kufanya kazi na orodha zenye nguvu za anwani za IP, ni firewall ambayo hufanya utafutaji wa msimbo, unaofanana na IP ya mteja na kuiongeza kwenye orodha "nyeupe" kwa kutumia Layer7 regexp. Kipanga njia chenyewe kimepewa jina la masharti la DNS "gw.local", rekodi tuli ya A imeundwa juu yake ili kutolewa kwa wateja wa PPP:

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

Inakamata trafiki ya wateja ambao hawajathibitishwa kwenye seva mbadala:
/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

Katika kesi hii, wakala ana kazi mbili.

1. Fungua miunganisho ya tcp na wateja;

2. Iwapo uidhinishaji utafaulu, elekeza upya kivinjari cha mteja kwenye ukurasa au picha inayoarifu kuhusu uthibitishaji uliofaulu:

Mipangilio ya seva mbadala
/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

Nitaorodhesha vitu muhimu vya usanidi:

  1. interface-orodha "2fa" - orodha yenye nguvu ya miingiliano ya mteja, trafiki ambayo inahitaji usindikaji ndani ya 2FA;
  2. orodha ya anwani "2fa_jailed" - orodha ya "kijivu" ya anwani za IP za handaki za wateja wa VPN;
  3. address_list "2fa_approved" - orodha "nyeupe" ya anwani za IP za handaki za wateja wa VPN ambazo zimefaulu kupitisha uthibitishaji wa vipengele viwili.
  4. mnyororo wa firewall "input_2fa" - hukagua pakiti za tcp kwa uwepo wa nambari ya uidhinishaji na inalingana na anwani ya IP ya mtumaji wa nambari na inayohitajika. Sheria katika mlolongo huongezwa na kuondolewa kwa nguvu.

Mtiririko uliorahisishwa wa usindikaji wa pakiti unaonekana kama hii:

Uthibitishaji wa vipengele viwili vya watumiaji wa VPN kupitia MikroTik na SMS

Ili kuingia kwenye ukaguzi wa Layer7 wa trafiki kutoka kwa wateja kutoka kwa orodha ya "kijivu" ambayo bado haijapitisha hatua ya pili ya uthibitishaji, sheria imeundwa katika mlolongo wa kawaida wa "pembejeo":

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

Sasa hebu tuanze kufunga utajiri huu wote kwenye huduma ya PPP. MikroTik hukuruhusu kutumia hati katika profaili (ppp-profile) na kuzikabidhi kwa matukio ya kuanzisha na kuvunja muunganisho wa ppp. Mipangilio ya wasifu wa ppp inaweza kutumika kwa seva ya PPP kwa ujumla na kwa watumiaji binafsi. Wakati huo huo, wasifu uliopewa mtumiaji una kipaumbele, ukizidi vigezo vya wasifu uliochaguliwa kwa seva kwa ujumla na vigezo vyake maalum.

Kama matokeo ya mbinu hii, tunaweza kuunda wasifu maalum kwa uthibitishaji wa sababu mbili na kuwapa sio watumiaji wote, lakini kwa wale tu wanaona kuwa ni muhimu kufanya hivyo. Hii inaweza kuwa muhimu ikiwa unatumia huduma za PPP sio tu kuunganisha watumiaji wa mwisho, lakini wakati huo huo kuunda miunganisho ya tovuti hadi tovuti.

Katika wasifu maalum ulioundwa mpya, tunatumia nyongeza ya nguvu ya anwani na kiolesura cha mtumiaji aliyeunganishwa kwenye orodha za "kijivu" za anwani na miingiliano:

winbox
Uthibitishaji wa vipengele viwili vya watumiaji wa VPN kupitia MikroTik na SMS

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

Ni muhimu kutumia orodha zote mbili za "orodha ya anwani" na "orodha ya kiolesura" ili kugundua na kunasa trafiki kutoka kwa wateja wasio wa sekondari wa VPN katika msururu wa dstnat (prerouting).

Wakati maandalizi yamekamilika, minyororo ya ziada ya firewall na wasifu huundwa, tutaandika hati inayohusika na uzalishaji wa kiotomatiki wa kanuni ya 2FA na sheria za kibinafsi za firewall.

Nyaraka wiki.mikrotik.com kwenye PPP-Profaili hutuongezea taarifa kuhusu vigeuzo vinavyohusishwa na matukio ya muunganisho wa mteja wa PPP "Tekeleza hati kwenye tukio la kuingia kwa mtumiaji. Hizi ni anuwai zinazopatikana ambazo zinaweza kufikiwa kwa hati ya tukio: mtumiaji, anwani ya karibu, anwani ya mbali, kitambulisho cha mpigaji simu, kitambulisho kinachoitwa, kiolesura". Baadhi yao ni muhimu sana kwetu.

Msimbo unaotumika katika wasifu kwa tukio la muunganisho wa 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

Hasa kwa wale ambao wanapenda kunakili-kubandika bila akili, ninakuonya - nambari imechukuliwa kutoka kwa toleo la jaribio na inaweza kuwa na makosa madogo ya kuandika. Haitakuwa ngumu kwa mtu anayeelewa kujua ni wapi haswa.

Mtumiaji anapokata muunganisho, tukio la "On-Down" linatolewa na hati inayolingana na vigezo inaitwa. Kazi ya hati hii ni kusafisha sheria za ngome iliyoundwa kwa mtumiaji aliyekatwa.

Msimbo unaotumika katika wasifu kwa tukio la muunganisho wa chini-chini la 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]
Kisha unaweza kuunda watumiaji na kuwapa wote au baadhi yao kwa wasifu wa uthibitishaji wa sababu mbili.

winbox
Uthibitishaji wa vipengele viwili vya watumiaji wa VPN kupitia MikroTik na SMS

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

Jinsi inavyoonekana kwa upande wa mteja.

Muunganisho wa VPN unapoanzishwa, simu/kompyuta kibao ya Android/iOS yenye SIM kadi hupokea SMS kama hii:

SMS
Uthibitishaji wa vipengele viwili vya watumiaji wa VPN kupitia MikroTik na SMS

Ikiwa unganisho umeanzishwa moja kwa moja kutoka kwa simu / kompyuta kibao, basi unaweza kupitia 2FA kwa kubonyeza kiunga kutoka kwa ujumbe. Ni vizuri.

Ikiwa uunganisho wa VPN umeanzishwa kutoka kwa PC, basi mtumiaji atahitajika kuingiza fomu ndogo ya nenosiri. Fomu ndogo katika mfumo wa faili ya HTML inatolewa kwa mtumiaji wakati wa kusanidi VPN. Faili inaweza hata kutumwa kwa barua ili mtumiaji aihifadhi na kuunda njia ya mkato mahali pazuri. Inaonekana kama hii:

Weka alama kwenye meza
Uthibitishaji wa vipengele viwili vya watumiaji wa VPN kupitia MikroTik na SMS

Mtumiaji anabofya kwenye njia ya mkato, fomu rahisi ya kuingiza msimbo inafungua, ambayo itabandika msimbo kwenye URL iliyofunguliwa:

Fomu ya skrini
Uthibitishaji wa vipengele viwili vya watumiaji wa VPN kupitia MikroTik na SMS

Fomu ya zamani zaidi imetolewa kama mfano. Wale wanaotaka wanaweza kujirekebisha.

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>

Ikiwa uidhinishaji ulifanikiwa, mtumiaji ataona nembo ya MikroTik kwenye kivinjari, ambayo inapaswa kuashiria uthibitishaji uliofaulu:

Uthibitishaji wa vipengele viwili vya watumiaji wa VPN kupitia MikroTik na SMS

Kumbuka kuwa picha inarejeshwa kutoka kwa seva ya wavuti iliyojengewa ndani ya MikroTik kwa kutumia WebProxy Kataa Uelekezaji Upya.

Nadhani picha inaweza kubinafsishwa kwa kutumia zana ya "hotspot", kupakia toleo lako mwenyewe hapo na kuweka URL ya Kataa Uelekezaji Upya kwake na WebProxy.

Ombi kubwa kwa wale wanaojaribu kununua "toy" ya gharama nafuu Mikrotik kwa $ 20 na kuchukua nafasi ya router $ 500 nayo - usifanye hivyo. Vifaa kama vile "hAP Lite" / "hAP mini" (eneo la kufikia nyumbani) vina CPU dhaifu sana (smips), na kuna uwezekano kwamba havitakabiliana na mzigo katika sehemu ya biashara.

Onyo! Suluhisho hili lina hasara moja: wakati wateja wanaunganisha au kukatwa, mabadiliko ya usanidi hutokea, ambayo router inajaribu kuokoa katika kumbukumbu yake isiyo na tete. Kwa idadi kubwa ya wateja na uunganisho wa mara kwa mara na kukatwa, hii inaweza kusababisha uharibifu wa hifadhi ya ndani katika router.

PS: Mbinu za kuwasilisha msimbo kwa mteja zinaweza kupanuliwa na kuongezewa kadiri uwezo wako wa upangaji unavyotosha. Kwa mfano, unaweza kutuma ujumbe kwa telegram au ... pendekeza chaguo!

Natumaini makala hiyo itakuwa na manufaa kwako na itasaidia kufanya mitandao ya biashara ndogo na za kati kuwa salama zaidi.

Chanzo: mapenzi.com