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.
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.
- Anwani ya ndani ya IP ya mtumiaji ambaye amefanikiwa kuunganisha kwenye seva ya VPN huorodheshwa kijivu kiotomatiki.
- Tukio la uunganisho huzalisha kiotomati msimbo wa wakati mmoja ambao hutumwa kwa mtumiaji kwa kutumia mojawapo ya mbinu zilizopo.
- Anwani katika orodha hii zina ufikiaji mdogo wa rasilimali za mtandao wa ndani, isipokuwa huduma ya "kithibitishaji", ambayo inasubiri kupokea nenosiri la wakati mmoja.
- 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
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.
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:
- interface-orodha "2fa" - orodha yenye nguvu ya miingiliano ya mteja, trafiki ambayo inahitaji usindikaji ndani ya 2FA;
- orodha ya anwani "2fa_jailed" - orodha ya "kijivu" ya anwani za IP za handaki za wateja wa VPN;
- address_list "2fa_approved" - orodha "nyeupe" ya anwani za IP za handaki za wateja wa VPN ambazo zimefaulu kupitisha uthibitishaji wa vipengele viwili.
- 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:
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:
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.
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
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
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
Mtumiaji anabofya kwenye njia ya mkato, fomu rahisi ya kuingiza msimbo inafungua, ambayo itabandika msimbo kwenye URL iliyofunguliwa:
Fomu ya skrini
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:
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