MikroTik жана SMS аркылуу VPN колдонуучуларынын эки фактордук аутентификациясы

Салам кесиптештер! Бүгүн, "алыстан иштөөгө" болгон кумарлардын интенсивдүүлүгү бир аз басаңдаганда, администраторлордун көпчүлүгү кызматкерлердин корпоративдик тармакка алыстан кирүү тапшырмасын жеңип алышты, VPN коопсуздугун жакшыртуу боюнча көп жылдык тажрыйбам менен бөлүшүүгө убакыт келди. Бул макала азыр IPSec IKEv2 жана xAuth мода болбойт. Бул системаны куруу жөнүндө. эки фактордук аутентификация (2FA) MikroTik VPN серверинин ролун аткарганда VPN колдонуучулары. Тактап айтканда, МЖӨ сыяктуу "классикалык" протоколдор колдонулганда.

MikroTik жана SMS аркылуу VPN колдонуучуларынын эки фактордук аутентификациясы

Бүгүн мен сизге микроТик PPP-VPN кантип коргоону айтып берем, атүгүл колдонуучу аккаунтун "уурдап алган" учурда да. Бул схема менин кардарларымдын бирине тааныштырганда, ал кыскача аны "жакшы, азыр банктагыдай эле!" деп мүнөздөдү.

Бул ыкма тышкы аутентификация кызматтарын колдонбойт. Тапшырмалар роутердин өзү тарабынан ички аткарылат. Туташкан кардар үчүн эч кандай чыгым жок. Бул ыкма PC кардарлары жана мобилдик түзмөктөр үчүн иштейт.

Жалпы коргоо схемасы төмөнкүдөй:

  1. VPN серверине ийгиликтүү кошулган колдонуучунун ички IP дареги автоматтык түрдө боз тизмеге киргизилет.
  2. Туташуу окуясы автоматтык түрдө жеткиликтүү ыкмалардын бирин колдонуу менен колдонуучуга жөнөтүлгөн бир жолку кодду жаратат.
  3. Бул тизмедеги даректер бир жолку өткөрүүчү кодду алууну күтүп жаткан “аныктыгын текшерүүчү” кызматын кошпогондо, локалдык тармак ресурстарына кирүү мүмкүнчүлүгү чектелген.
  4. Кодду көрсөткөндөн кийин колдонуучу тармактын ички ресурстарына кире алат.

биринчи Мен туш болгон эң кичинекей көйгөй колдонуучуга 2FA кодун жөнөтүү үчүн байланыш маалыматын сактоо болду. Микротикте колдонуучуларга туура келген ыктыярдуу маалымат талааларын түзүү мүмкүн болбогондуктан, учурдагы "комментарий" талаасы колдонулган:

/ppp сырлары кошуу аты = Петров сырсөз = 4M@ngr! comment="89876543210"

экинчи көйгөй кыйла олуттуу болуп чыкты - кодду жеткирүү жолун жана ыкмасын тандоо. Учурда үч схема ишке ашырылууда: а) USB-модем аркылуу SMS б) электрондук почта в) кызыл уюлдук оператордун корпоративдик кардарлары үчүн электрондук почта аркылуу SMS.

Ооба, SMS схемалар чыгымдарды алып келет. Бирок карасаңыз, "коопсуздук дайыма акчага байланыштуу" (c).
Жеке мага электрондук почта менен схема жакпайт. Бул почта серверинин аныктыгы текшерилип жаткан кардар үчүн жеткиликтүү болушун талап кылгандыктан эмес - трафикти бөлүү көйгөй эмес. Бирок, эгерде кардар этиятсыздык менен браузерде VPN жана электрондук почтанын сырсөздөрүн сактап, анан ноутбукун жоготсо, чабуулчу андан корпоративдик тармакка толук кирүү мүмкүнчүлүгүн алат.

Ошентип, чечим кабыл алынды - биз SMS билдирүүлөр аркылуу бир жолку кодду жеткиребиз.

үчүнчү Маселе кайда эле MikroTikте 2FA үчүн псевдококустук кодду кантип түзүү керек. RouterOS скрипт тилинде random() функциясынын аналогу жок жана мен буга чейин бир нече балдак скриптинин псевдококустук сан генераторлорун көрдүм. Алардын бирин да ар кандай себептер менен жактырчу эмесмин.

Чынында, MikroTikте псевдо-кокустук ырааттуулук генератору бар! Ал /certificates sep-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 консолундагы өзгөрмөнү көрсөтөт.

Төртүнчү маселе аны тез арада чечүү керек болчу - бул туташкан кардар аутентификациянын экинчи этабында өзүнүн бир жолку кодун кантип жана кайда өткөрүп берет.

MikroTik жана SMS аркылуу VPN колдонуучуларынын эки фактордук аутентификациясы

MikroTik роутеринде кодду кабыл алып, аны белгилүү бир кардар менен дал келтире турган кызмат болушу керек. Эгерде берилген код күтүлгөн кодго дал келсе, кардардын дареги белгилүү бир "ак" тизмеге киргизилиши керек, анын даректери компаниянын ички тармагына кирүүгө уруксат берилет.

Кызматтарды тандоо начар болгондуктан, микротикке орнотулган webproxy аркылуу http аркылуу коддорду кабыл алуу чечими кабыл алынды. Жана брандмауэр IP даректеринин динамикалык тизмелери менен иштей алгандыктан, дал ушул брандмауэр кодду издөөнү, аны кардар IP менен далдаштырууну жана Layer7 regexp аркылуу "ак" тизмеге кошууну жүзөгө ашырат. Маршрутизатордун өзүнө шарттуу DNS аталышы "gw.local" ыйгарылган, анда PPP кардарларына берүү үчүн статикалык A-жазуусу түзүлгөн:

DNS
/ip dns static add name=gw.local address=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. address-list "2fa_jailed" - VPN кардарларынын туннелинин IP даректеринин "боз" тизмеси;
  3. address_list "2fa_approved" - эки факторлуу аутентификациядан ийгиликтүү өткөн VPN кардарларынын туннелдик IP даректеринин "ак" тизмеси.
  4. брандмауэр чынжыр "input_2fa" - ал tcp пакеттерин авторизациялык коддун бар-жоктугун текшерет жана код жөнөтүүчүнүн IP дарегин талап кылынганга дал келтирет. Чынжырдагы эрежелер динамикалык түрдө кошулат жана алынып салынат.

Пакеттерди иштетүүнүн жөнөкөйлөштүрүлгөн схемасы төмөнкүдөй көрүнөт:

MikroTik жана SMS аркылуу VPN колдонуучуларынын эки фактордук аутентификациясы

Аутентификациянын экинчи этабынан өтө элек "серый" тизмедеги кардарлардын трафиктин Layer7 текшерүүсүнө кирүү үчүн стандарттык "киргизүү" чынжырында эреже түзүлдү:

коду
/ip firewall filter add chain=input !src-address-list=2fa_approved action=jump jump-target=input_2fa

Эми бул байлыктын баарын МЖӨ кызматына бекитип баштайлы. MikroTik профайлдарда (ppp-профил) скрипттерди колдонууга жана аларды ppp байланышын орнотуу жана үзүү окуяларына дайындоого мүмкүндүк берет. PPP-профилинин орнотуулары бүтүндөй PPP серверине же жеке колдонуучуларга колдонулушу мүмкүн. Ошол эле учурда, колдонуучуга ыйгарылган профиль артыкчылыкка ээ, бүтүндөй сервер үчүн тандалган профилдин параметрлерин анын көрсөтүлгөн параметрлери менен жокко чыгарат.

Мындай мамиленин натыйжасында биз эки факторлуу аутентификация үчүн атайын профилди түзүп, аны бардык колдонуучуларга эмес, муну зарыл деп эсептегендерге гана дайындай алабыз. Бул МЖӨ кызматтарын акыркы колдонуучуларды туташтыруу үчүн гана эмес, ошол эле учурда сайттан сайтка байланыштарды куруу үчүн колдонсоңуз актуалдуу болушу мүмкүн.

Жаңы түзүлгөн атайын профилде биз туташкан колдонуучунун дарегин жана интерфейсин даректердин жана интерфейстердин "боз" тизмесине динамикалык кошууну колдонобуз:

winbox
MikroTik жана SMS аркылуу VPN колдонуучуларынын эки фактордук аутентификациясы

коду
/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

Dstnat (алдын ала багыттоо) чынжырындагы экинчи эмес VPN кардарларынан трафикти аныктоо жана тартуу үчүн "даректер тизмеси" жана "интерфейс тизмеси" тизмелерин тең колдонуу керек.

Даярдоо аяктагандан кийин, кошумча брандмауэр чынжырлары жана профиль түзүлгөндө, биз 2FA кодун жана жеке брандмауэр эрежелерин автоматтык түрдө түзүү үчүн жооптуу скрипт жазабыз.

Документация wiki.mikrotik.com PPP-Profile боюнча бизди PPP кардарын туташтыруу-ажыратуу окуялары менен байланышкан өзгөрмөлөр жөнүндө маалымат менен байытат "Колдонуучунун кирүү окуясында сценарийди аткарыңыз. Булар окуянын скриптине жеткиликтүү өзгөрмөлөр: колдонуучу, жергиликтүү дарек, алыскы дарек, чалуучунун идентификатору, чалуучу идентификатор, интерфейс". Алардын айрымдары бизге абдан пайдалуу.

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

Айрыкча, ойлонбой көчүрүп чаптаганды жакшы көргөндөр үчүн, мен сизге эскертем - код сыноо версиясынан алынган жана кичине каталарды камтышы мүмкүн. Түшүнгөн адам үчүн так кайда экенин аныктоо кыйынга турбайт.

Колдонуучу ажыратылганда, "On-Down" окуясы түзүлөт жана параметрлери бар тиешелүү скрипт чакырылат. Бул скрипттин максаты - ажыратылган колдонуучу үчүн түзүлгөн брандмауэр эрежелерин тазалоо.

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
MikroTik жана SMS аркылуу VPN колдонуучуларынын эки фактордук аутентификациясы

коду
/ppp secrets set [find name=Petrov] profile=2FA

Бул кардар тараптан кандай көрүнөт.

VPN туташуусу орнотулганда, SIM картасы бар Android/iOS телефону/планшети төмөнкүдөй SMS алат:

SMS
MikroTik жана SMS аркылуу VPN колдонуучуларынын эки фактордук аутентификациясы

Эгер байланыш түз телефондон/планшеттен түзүлсө, анда сиз жөн гана билдирүүдөгү шилтемени басуу менен 2FA аркылуу өтө аласыз. Бул ыңгайлуу.

Эгерде VPN байланышы компьютерден орнотулган болсо, анда колдонуучудан минималдуу сырсөз формасын киргизүү талап кылынат. HTML файлы түрүндөгү кичинекей форма VPNди орнотууда колдонуучуга берилет. Колдонуучу аны сактап, ыңгайлуу жерде жарлык жаратышы үчүн файлды почта аркылуу да жөнөтсө болот. Бул төмөнкүдөй көрүнөт:

Столдун үстүндө этикетка
MikroTik жана SMS аркылуу VPN колдонуучуларынын эки фактордук аутентификациясы

Колдонуучу жарлыкты чыкылдатат, жөнөкөй код киргизүү формасы ачылат, ал кодду ачылган URL дарегине чаптайт:

Экран формасы
MikroTik жана SMS аркылуу VPN колдонуучуларынын эки фактордук аутентификациясы

Мисал катары эң примитивдүү түрү келтирилген. Каалоочулар өздөрү өзгөртсө болот.

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 логотибин көрөт, ал ийгиликтүү аутентификациядан кабар берет:

MikroTik жана SMS аркылуу VPN колдонуучуларынын эки фактордук аутентификациясы

Сүрөт камтылган MikroTik веб-серверинен WebProxy Deny Redirect аркылуу кайтарылганын эске алыңыз.

Менимче, сүрөттү "хотспот" куралы аркылуу ыңгайлаштырса болот, ал жерге өз версияңызды жүктөп, ага WebProxy менен Redirect URL дарегин жокко чыгарса болот.

Эң арзан "оюнчук" Микротикти 20 долларга сатып алып, ага 500 долларлык роутерди алмаштырууга аракет кылгандарга чоң өтүнүч - андай кылбаңыз. "HAP Lite" / "hAP mini" (үйгө кирүү чекити) сыяктуу түзмөктөр өтө начар CPU (smips) бар жана алар бизнес сегментиндеги жүктү көтөрө алышпайт.

Эскертүү! Бул чечимдин бир кемчилиги бар: кардарлар туташканда же ажыратканда, роутер өзүнүн туруксуз эстутумунда сактоого аракет кылган конфигурация өзгөрөт. Көптөгөн кардарлар жана тез-тез туташуу жана ажыратуу менен бул роутердеги ички сактагычтын деградациясына алып келиши мүмкүн.

PS: Кардарга кодду жеткирүү ыкмалары сиздин программалоо мүмкүнчүлүктөрүңүз жетиштүү болсо, кеңейтилип жана толукталышы мүмкүн. Мисалы, сиз телеграмга билдирүүлөрдү жөнөтө аласыз же ... варианттарды сунуштай аласыз!

Мен макала сиз үчүн пайдалуу жана чакан жана орто бизнес тармактарын бир аз коопсуз кылууга жардам берет деп үмүттөнөм.

Source: www.habr.com