Аутентификатсияи ду омили корбарони VPN тавассути MikroTik ва SMS

Салом ҳамкорон! Имрӯз, вақте ки шиддати ҳавасҳо дар атрофи "кори дурдаст" каме паст шуд, аксарияти маъмурон вазифаи дастрасии фосилавии кормандон ба шабакаи корпоративиро ба даст оварданд, вақти он расидааст, ки таҷрибаи деринаи ман дар беҳтар кардани амнияти VPN мубодила кунам. Ин мақола ҳоло IPSec IKEv2 ва xAuth мӯд нахоҳад шуд. Ин дар бораи сохтани система меравад. аутентификатсияи ду омил (2FA) Корбарони VPN вақте ки MikroTik ҳамчун сервери VPN амал мекунад. Маҳз, вақте ки протоколҳои "классикӣ" ба монанди PPP истифода мешаванд.

Аутентификатсияи ду омили корбарони VPN тавассути MikroTik ва SMS

Имрӯз ман ба шумо мегӯям, ки чӣ тавр MikroTik PPP-VPN-ро ҳатто дар сурати "рабуда шудани" ҳисоби корбар муҳофизат кардан мумкин аст. Вақте ки ин схема ба яке аз муштариёни ман муаррифӣ шуд, ӯ ба таври мухтасар онро тавсиф кард, ки "хуб, ҳоло он мисли бонк аст!".

Ин усул хидматҳои аутентификатори беруниро истифода намебарад. Вазифаҳо дар дохили худи роутер иҷро карда мешаванд. Барои муштарии пайвастшавӣ хароҷот нест. Ин усул ҳам барои муштариёни компютер ва ҳам барои дастгоҳҳои мобилӣ кор мекунад.

Нақшаи умумии муҳофизат чунин аст:

  1. Суроғаи IP-и дохилии корбаре, ки бомуваффақият ба сервери VPN пайваст шудааст, ба таври худкор ба рӯйхати хокистарӣ дохил мешавад.
  2. Ҳодисаи пайвастшавӣ ба таври худкор рамзи якдафъаинаро тавлид мекунад, ки бо истифода аз яке аз усулҳои дастрас ба корбар фиристода мешавад.
  3. Суроғаҳо дар ин рӯйхат дастрасии маҳдуд ба захираҳои шабакаи маҳаллӣ доранд, ба истиснои хидмати "аутентификатор", ки интизори гирифтани рамзи яквақта аст.
  4. Пас аз пешниҳоди код, корбар ба захираҳои дохилии шабака дастрасӣ пайдо мекунад.

Аввал хурдтарин мушкилоте, ки ман дучор шудам, нигоҳ доштани маълумоти тамос дар бораи корбар барои фиристодани рамзи 2FA буд. Азбаски дар Mikrotik майдонҳои ихтиёрии маълумоти мувофиқро ба корбарон эҷод кардан ғайриимкон аст, майдони мавҷудаи "шарҳ" истифода шудааст:

Сирри /ppp илова кардани ном = пароли Петров = 4M@ngr! шарҳ = "89876543210"

Дуюм масъала чиддитар шуд — интихоби рох ва усули расондани код. Дар айни замон се схема амалӣ карда мешавад: а) SMS тавассути USB-модем б) почтаи электронӣ в) SMS тавассути почтаи электронӣ барои муштариёни корпоративии оператори мобилии сурх дастрас.

Бале, схемаҳои SMS хароҷотро ба бор меоранд. Аммо агар шумо назар кунед, "амният ҳамеша дар бораи пул аст" (в).
Ман шахсан нақшаи бо почтаи электронӣ маъқул нест. На аз он сабаб, ки он талаб мекунад, ки сервери почта барои муштарии тасдиқшуда дастрас бошад - тақсим кардани трафик мушкил нест. Аммо, агар муштарӣ беэҳтиётӣ ҳам паролҳои VPN ва ҳам почтаи электрониро дар браузер захира кунад ва сипас ноутбуки худро гум кунад, ҳамлагар аз он ба шабакаи корпоративӣ дастрасии пурра пайдо мекунад.

Ҳамин тавр, қарор дода шуд - мо рамзи якдафъаинаро тавассути SMS паёмҳо мерасонем.

Сеюм Мушкилот дар куҷо буд Чӣ тавр тавлид кардани рамзи псевдо-тасодуфӣ барои 2FA дар MikroTik. Дар забони скрипти RouterOS ягон аналоги функсияи random() вуҷуд надорад ва ман қаблан якчанд генераторҳои рақамҳои псевдотасодуфӣ дида будам. Бо сабабҳои гуногун ба ман ҳеҷ яке аз онҳо маъқул набуд.

Дар асл, дар MikroTik як генератори пайдарпайии псевдо-тасодуфӣ мавҷуд аст! Он аз назари рӯякӣ дар заминаи /certificates scep-server пинҳон аст. Роҳи аввал гирифтани пароли якдафъаина осон ва содда аст - бо фармон / сертификатҳои sep-server otp тавлид мекунанд. Агар мо амалиёти оддии таъини тағирёбандаро иҷро кунем, мо арзиши массив мегирем, ки онро баъдтар дар скриптҳо истифода бурдан мумкин аст.

Роҳи дуюм гирифтани гузарвожаи якдафъаина, ки онро низ истифода бурдан осон аст - бо истифода аз хидмати беруна random.org барои тавлиди намуди дилхоҳи пайдарпаии рақамҳои псевдо-тасодуфӣ. Дар ин ҷо як соддакардашуда аст консол мисоли гирифтани маълумот ба тағирёбанда:

рамз
: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

Дархосте, ки барои консол формат карда шудааст (дар бадани скрипт фирор кардани аломатҳои махсус талаб карда мешавад) сатри шаш рақамро ба тағирёбандаи $rnd1 мегирад. Фармони зерини "гузоштан" танҳо тағирёбандаро дар консоли MikroTik нишон медиҳад.

Масъалаи чорум ки бояд зуд ҳал карда мешуд - ҳамин тавр ва дар куҷо муштарии пайвастшуда рамзи якдафъаинаи худро дар марҳилаи дуюми аутентификатсия интиқол медиҳад.

Аутентификатсияи ду омили корбарони VPN тавассути MikroTik ва SMS

Дар роутери MikroTik бояд хидмате мавҷуд бошад, ки метавонад кодро қабул кунад ва онро бо муштарии мушаххас мувофиқ кунад. Агар рамзи пешниҳодшуда ба рамзи пешбинишуда мувофиқат кунад, суроғаи муштарӣ бояд ба рӯйхати муайяни "сафед" дохил карда шавад, ки аз он суроғаҳо ба шабакаи дохилии ширкат дастрасӣ доранд.

Аз сабаби интихоби нодурусти хидматҳо, тасмим гирифта шуд, ки кодҳоро тавассути http бо истифода аз вебпрокси дар Mikrotik сохташуда қабул кунад. Ва азбаски брандмауэр метавонад бо рӯйхатҳои динамикии суроғаҳои IP кор кунад, маҳз брандмауэр аст, ки ҷустуҷӯи кодро анҷом дода, онро бо IP муштарӣ мувофиқат мекунад ва бо истифода аз regexp Layer7 ба рӯйхати "сафед" илова мекунад. Ба худи роутер номи шартии DNS "gw.local" дода шудааст, дар он сабти статикии A барои додани муштариёни PPP сохта шудааст:

DNS
/ip dns статикӣ илова номи = gw.суроғаи маҳаллӣ = 172.31.1.1

Гирифтани трафики муштариёни тасдиқнашуда дар прокси:
/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

Дар ин ҳолат прокси ду вазифа дорад.

1. Пайвастҳои tcp бо муштариёнро кушоед;

2. Дар сурати бомуваффақият авторизатсия, браузери муштариро ба саҳифа ё расме равона кунед, ки дар бораи аутентификатсия бомуваффақият огоҳ мекунад:

Конфигуратсияи прокси
/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

Ман унсурҳои муҳими конфигуратсияро номбар мекунам:

  1. интерфейс-рӯйхати "2fa" - рӯйхати динамикии интерфейсҳои муштарӣ, ки трафик аз онҳо коркардро дар доираи 2FA талаб мекунад;
  2. суроға-рӯйхати "2fa_jailed" - рӯйхати "хокистарии" суроғаҳои IP нақби муштариёни VPN;
  3. address_list "2fa_approved" - рӯйхати "сафед"-и суроғаҳои IP нақби муштариёни VPN, ки бомуваффақият аз аутентификатсияи ду-омилӣ гузаштаанд.
  4. занҷири брандмауэр "input_2fa" - он бастаҳои tcp-ро барои мавҷудияти рамзи авторизатсия тафтиш мекунад ва суроғаи IP-и ирсолкунандаи кодро бо суроғаи лозимӣ мувофиқ мекунад. Қоидаҳо дар занҷир ба таври динамикӣ илова ва хориҷ карда мешаванд.

Схемаи соддакардашудаи коркарди бастаҳо чунин менамояд:

Аутентификатсияи ду омили корбарони VPN тавассути MikroTik ва SMS

Барои ворид шудан ба санҷиши Layer7 трафики муштариён аз рӯйхати "хокистарӣ", ки то ҳол аз марҳилаи дуюми аутентификатсия нагузаштаанд, дар занҷири стандартии "ворид" қоида сохта шудааст:

рамз
/ip firewall filter add chain=input !src-address-list=2fa_approved action=jump jump-target=input_2fa

Акнун биёед ба бастани тамоми ин сарват ба хидмати ШДБХ шурӯъ кунем. MikroTik ба шумо имкон медиҳад, ки скриптҳоро дар профилҳо (ppp-profile) истифода баред ва онҳоро ба ҳодисаҳои таъсис ва қатъи пайвасти ppp таъин кунед. Танзимоти профили ppp метавонад ба сервери PPP дар маҷмӯъ ё ба корбарони инфиродӣ татбиқ карда шавад. Ҳамзамон профили ба корбар таъиншуда афзалият дорад, ки параметрҳои профили барои сервер дар маҷмӯъ интихобшударо бо параметрҳои муайянкардаи он барҳам медиҳад.

Дар натиҷаи ин равиш, мо метавонем профили махсусро барои аутентификатсияи ду-омилӣ эҷод кунем ва онро на ба ҳамаи корбарон, балки танҳо ба онҳое, ки зарур мешуморанд, таъин кунем. Ин метавонад мувофиқ бошад, агар шумо хидматҳои PPP на танҳо барои пайваст кардани корбарони ниҳоӣ, балки ҳамзамон барои сохтани пайвастшавӣ ба сайт истифода баред.

Дар профили махсуси навтаъсис, мо иловаи динамикии суроға ва интерфейси корбари пайвастшударо ба рӯйхати "хокистарии" суроғаҳо ва интерфейсҳо истифода мебарем:

winbox
Аутентификатсияи ду омили корбарони VPN тавассути MikroTik ва SMS

рамз
/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

Барои ошкор ва гирифтани трафик аз муштариёни VPN-и ғайри дуюмдараҷа дар занҷири dstnat (маршрутҳои пешакӣ) ҳам рӯйхати "адрес-рӯйхат" ва ҳам "интерфейс-рӯйхат"-ро истифода бурдан лозим аст.

Вақте ки омодагӣ ба итмом мерасад, занҷирҳои иловагии брандмауэр ва профил сохта мешаванд, мо скрипте менависем, ки барои тавлиди худкори рамзи 2FA ва қоидаҳои инфиродии брандмауэр масъул аст.

Ҳуҷҷатҳо wiki.mikrotik.com дар PPP-Profile моро бо маълумот дар бораи тағирёбандаҳои марбут ба рӯйдодҳои муштарии PPP ғанӣ мегардонад. "Иҷро кардани скрипт дар вуруди корбар. Инҳо тағирёбандаҳои дастрас мебошанд, ки барои скрипти рӯйдод дастрасанд: корбар, суроғаи маҳаллӣ, суроғаи дурдаст, ID-и зангзананда, ID-id, интерфейс". Баъзеи онҳо барои мо хеле муфиданд.

Рамзи дар профил барои ҳодисаи пайвастшавӣ ба 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

Махсусан барои онҳое, ки бемаънӣ нусхабардорӣ ва часбонданро дӯст медоранд, ман шуморо огоҳ мекунам - код аз версияи санҷишӣ гирифта шудааст ва метавонад хатогиҳои хурдро дар бар гирад. Барои шахси фаҳмиш аниқ фаҳмидани он, ки дар куҷост, душвор нахоҳад буд.

Вақте ки корбар ҷудо мешавад, ҳодисаи "Дар бораи-Поён" тавлид мешавад ва скрипти мувофиқ бо параметрҳо даъват карда мешавад. Ҳадафи ин скрипт тоза кардани қоидаҳои брандмауэр мебошад, ки барои корбари ҷудошуда сохта шудааст.

Рамзи дар профил барои ҳодисаи пайвастшавӣ ба поёни 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]
Пас шумо метавонед корбаронро эҷод кунед ва ҳама ё баъзеи онҳоро ба профили аутентификатсияи ду омил таъин кунед.

winbox
Аутентификатсияи ду омили корбарони VPN тавассути MikroTik ва SMS

рамз
/ppp secrets set [find name=Petrov] profile=2FA

Он дар тарафи муштарӣ чӣ гуна ба назар мерасад.

Вақте ки пайвасти VPN муқаррар карда мешавад, телефони Android/iOS/таблет бо SIM корт чунин SMS мегирад:

СМС
Аутентификатсияи ду омили корбарони VPN тавассути MikroTik ва SMS

Агар пайвастшавӣ мустақиман аз телефон / планшет муқаррар карда шавад, шумо метавонед тавассути клик кардани истиноди паём тавассути 2FA гузаред. Ин бароҳат аст.

Агар пайвасти VPN аз компютер муқаррар карда шавад, аз корбар талаб карда мешавад, ки шакли ҳадди ақали паролро ворид кунад. Ҳангоми насб кардани VPN ба корбар шакли хурд дар шакли файли HTML дода мешавад. Файлро ҳатто тавассути почта фиристодан мумкин аст, то корбар онро захира кунад ва дар ҷои мувофиқ миёнабур созад. Чунин ба назар мерасад:

Нишон дар рӯи миз
Аутентификатсияи ду омили корбарони VPN тавассути MikroTik ва SMS

Истифодабаранда миёнабурро клик мекунад, варақаи оддии вуруди код кушода мешавад, ки кодро ба URL-и кушодашуда часбонад:

Шакли экран
Аутентификатсияи ду омили корбарони VPN тавассути MikroTik ва SMS

Шакли ибтидоӣ ҳамчун мисол оварда шудааст. Хоҳишмандон метавонанд худашон тағир диҳанд.

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>

Агар авторизатсия муваффақ бошад, корбар логотипи MikroTik-ро дар браузер мебинад, ки он бояд тасдиқи бомуваффақиятро нишон диҳад:

Аутентификатсияи ду омили корбарони VPN тавассути MikroTik ва SMS

Дар хотир доред, ки тасвир аз веб-сервери дарунсохташудаи MikroTik бо истифода аз WebProxy Deny Redirect баргардонида мешавад.

Ман гумон мекунам, ки тасвирро метавон бо истифода аз абзори "хотс" танзим кард, версияи шахсии худро дар он ҷо бор кунед ва URL-и Redirect-ро ба он бо WebProxy насб кунед.

Дархости калон ба онҳое, ки кӯшиш мекунанд, ки арзонтарин "бозича"-и Микротикро бо нархи 20 доллар бихаранд ва роутери 500 доллариро бо он иваз кунанд - ин корро накунед. Дастгоҳҳо ба монанди "hAP Lite" / "hAP mini" (нуқтаи дастрасии хона) дорои CPU хеле заиф мебошанд (smips) ва эҳтимол дорад, ки онҳо сарбории сегменти тиҷоратро тоб наоваранд.

Огоҳӣ! Ин ҳалли як нуқсон дорад: вақте ки муштариён пайваст мешаванд ё ҷудо мешаванд, тағироти конфигуратсия ба амал меоянд, ки роутер кӯшиш мекунад, ки дар хотираи доимии худ нигоҳ дорад. Бо шумораи зиёди муштариён ва пайвастагиҳо ва ҷудошавии зуд-зуд, ин метавонад боиси таназзули нигаҳдории дохилӣ дар роутер гардад.

PS: Усулҳои интиқоли код ба муштарӣ метавонанд то он даме ки қобилиятҳои барномасозии шумо кофӣ бошанд, васеъ ва пурра карда шаванд. Масалан, шумо метавонед ба телеграм паём фиристед ё ... вариантҳоро пешниҳод кунед!

Ман умедворам, ки мақола барои шумо муфид хоҳад буд ва барои каме бехатар кардани шабакаҳои тиҷорати хурд ва миёна кӯмак хоҳад кард.

Манбаъ: will.com