MikroTik болон SMS-ээр дамжуулан VPN хэрэглэгчдийн хоёр хүчин зүйлийн баталгаажуулалт

Сайн байна уу хамт олон! Өнөөдөр алсын зайнаас ажиллах хүсэл тэмүүлэл бага зэрэг буурч, ихэнх администраторууд ажилтнуудаа корпорацийн сүлжээнд алсаас нэвтрэх даалгаврыг даван туулсан тул VPN-ийн аюулгүй байдлыг сайжруулах олон жилийн туршлагаа хуваалцах цаг болжээ. Энэ нийтлэлд одоогоор загварлаг IPSec IKEv2 болон xAuth-ийг хамрахгүй. Энэ нь системийг бий болгох тухай юм Хоёр хүчин зүйлийн баталгаажуулалт (2FA) MikroTik нь VPN серверийн үүрэг гүйцэтгэх үед VPN хэрэглэгчид. Тухайлбал, PPP гэх мэт "сонгодог" протоколуудыг ашиглах үед.

MikroTik болон SMS-ээр дамжуулан VPN хэрэглэгчдийн хоёр хүчин зүйлийн баталгаажуулалт

Өнөөдөр би таны хэрэглэгчийн бүртгэл хулгайлагдсан байсан ч MikroTik PPP-VPN-ийг хэрхэн хамгаалах талаар танд хэлэх болно. Энэ схемийг миний үйлчлүүлэгчдийн нэгэнд танилцуулах үед тэр үүнийг товчхон тайлбарлав: "За одоо яг л банкинд байгаа юм шиг байна!"

Энэ арга нь гадны баталгаажуулагч үйлчилгээг ашигладаггүй. Даалгавруудыг чиглүүлэгч өөрөө дотооддоо гүйцэтгэдэг. Холбогдсон үйлчлүүлэгчид ямар ч зардал гарахгүй. Энэ арга нь компьютерийн үйлчлүүлэгчид болон хөдөлгөөнт төхөөрөмжүүдийн аль алинд нь ажилладаг.

Хамгаалалтын ерөнхий схем нь дараах байдалтай байна.

  1. VPN серверт амжилттай холбогдсон хэрэглэгчийн дотоод IP хаяг автоматаар саарал жагсаалтад нэмэгддэг.
  2. Холболтын үйл явдал нь боломжтой аргуудын аль нэгийг ашиглан хэрэглэгч рүү илгээсэн нэг удаагийн кодыг автоматаар үүсгэдэг.
  3. Энэ жагсаалтад байгаа хаягууд нь нэг удаагийн нууц үгийн код хүлээн авахаар хүлээгдэж буй "баталгаажуулагч" үйлчилгээг эс тооцвол дотоод сүлжээний нөөцөд хязгаарлагдмал хандалттай байдаг.
  4. Кодоо танилцуулсны дараа хэрэглэгч дотоод сүлжээний нөөцөд хандах эрхтэй болно.

Эхнийх нь Бидэнд тулгарсан хамгийн жижиг асуудал бол хэрэглэгчийн холбоо барих мэдээллийг хадгалах, түүнд 2FA код илгээх явдал байв. Mikrotik-д хэрэглэгчдэд тохирох өгөгдлийн талбарыг дур зоргоороо үүсгэх боломжгүй тул одоо байгаа "тайлбар" талбарыг ашигласан болно.

/ppp нууц нэмэх нэр=Петровын нууц үг=4M@ngr! comment="89876543210"

Хоёр дахь нь Асуудал илүү ноцтой болж хувирав - кодыг хүргэх зам, аргыг сонгох. Одоогийн байдлаар гурван схем хэрэгжиж байна: a) USB модемоор SMS илгээх b) и-мэйл в) Улаан гар утасны операторын корпорацийн үйлчлүүлэгчдэд имэйлээр SMS илгээх боломжтой.

Тийм ээ, SMS схемүүд зардал гаргадаг. Гэхдээ хэрэв та үүнийг харвал "аюулгүй байдал үргэлж мөнгөтэй холбоотой" (c).
Би хувьдаа имэйлийн схемд дургүй. Энэ нь шуудангийн серверийг баталгаажуулж байгаа үйлчлүүлэгчид ашиглах боломжтой байхыг шаарддаг учраас биш - энэ нь траффикийг хуваахад асуудал биш юм. Гэсэн хэдий ч, хэрэв үйлчлүүлэгч VPN болон цахим шуудангийн нууц үгийг хөтчид хайхрамжгүй хадгалаад, дараа нь зөөврийн компьютерээ алдсан бол халдагчид үүнээс корпорацийн сүлжээнд бүрэн нэвтрэх боломжтой болно.

Тиймээс бид SMS мессеж ашиглан нэг удаагийн кодыг хүргэхээр шийдсэн.

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

Үнэн хэрэгтээ MikroTik-д псевдо санамсаргүй дарааллын генератор байдаг! Энэ нь /certificates scep-server-ийн хүрээнд өнгөцхөн харцнаас далдлагдсан. Эхний арга нэг удаагийн нууц үг авах нь хялбар бөгөөд энгийн - тушаалаар /сертификатууд scep-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 хувьсагч руу зургаан тоон тэмдэгтийн мөрийг хүлээн авдаг. Дараах "put" команд нь хувьсагчийг MikroTik консол дээр харуулдаг.

Дөрөв дэх асуудал Баталгаажуулалтын хоёр дахь шатанд холбогдсон үйлчлүүлэгч нэг удаагийн кодыг хэрхэн, хаана дамжуулах вэ гэдгийг хурдан шийдэх ёстой байв.

MikroTik болон SMS-ээр дамжуулан VPN хэрэглэгчдийн хоёр хүчин зүйлийн баталгаажуулалт

MikroTik чиглүүлэгч дээр кодыг хүлээн авч, тодорхой үйлчлүүлэгчтэй тааруулах үйлчилгээ байх ёстой. Хэрэв өгсөн код нь хүлээгдэж буй кодтой таарч байвал үйлчлүүлэгчийн хаягийг компанийн дотоод сүлжээнд нэвтрэх эрхтэй тодорхой "цагаан" жагсаалтад оруулах ёстой.

Үйлчилгээний сонголт хязгаарлагдмал байсан тул Mikrotik-д суулгасан webproxy ашиглан http-ээр код хүлээн авахаар шийдсэн. Галт хана нь IP хаягуудын динамик жагсаалттай ажиллах боломжтой тул кодыг хайж, үйлчлүүлэгчийн IP-тэй тааруулж, Layer7 regexp ашиглан "цагаан" жагсаалтад нэмдэг галт хана юм. Чиглүүлэгч нь өөрөө "gw.local" гэсэн нөхцөлт DNS нэрийг оноосон бөгөөд үүн дээр PPP үйлчлүүлэгчдэд олгох статик А бичлэгийг үүсгэсэн:

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. хаягийн жагсаалт "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-profile) дахь скриптүүдийг ашиглах, тэдгээрийг 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 клиентийн холболт болон салгах үйл явдлуудтай холбоотой хувьсагчдын талаарх мэдээллээр биднийг баяжуулдаг. "Хэрэглэгчийн нэвтрэх үйл явдал дээр скриптийг ажиллуул. Эдгээр нь үйл явдлын скриптэд хандах боломжтой хувьсагчууд юм: хэрэглэгч, дотоод хаяг, алсын хаяг, дуудагч-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

Ухаангүйгээр хуулж буулгах дуртай хүмүүст би анхааруулж байна - кодыг туршилтын хувилбараас авсан бөгөөд бага зэргийн алдаатай байж магадгүй юм. Ойлгомжтой хүнд яг хаана байгааг олоход хэцүү биш байх болно.

Хэрэглэгчийг салгах үед "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 холболт үүсгэх үед таны Android/iOS утас/таблет руу SIM карттай ойролцоогоор иймэрхүү SMS илгээгдэнэ.

SMS
MikroTik болон SMS-ээр дамжуулан VPN хэрэглэгчдийн хоёр хүчин зүйлийн баталгаажуулалт

Хэрэв холболт таны утас/таблетаас шууд хийгдсэн бол мессежийн холбоос дээр дарснаар та 2FA-г дамжуулж болно. Энэ нь тухтай.

Хэрэв компьютерээс VPN холболт хийгдсэн бол хэрэглэгч хамгийн бага нууц үг оруулах шаардлагатай болно. VPN-г тохируулахдаа HTML файл хэлбэрээр жижиг маягтыг хэрэглэгч рүү илгээдэг. Файлыг шуудангаар илгээх боломжтой бөгөөд ингэснээр хэрэглэгч үүнийг хадгалж, тохиромжтой газар товчлол үүсгэх боломжтой. Энэ нь ойролцоогоор иймэрхүү харагдаж байна:

Ширээн дээрх шошго
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 хэрэглэгчдийн хоёр хүчин зүйлийн баталгаажуулалт

Зургийг WebProxy Deny Redirect ашиглан суулгасан MikroTik вэб серверээс буцаана гэдгийг анхаарна уу.

Зургийг "hotspot" хэрэглүүрийг ашиглан өөрчилж, тэнд өөрийн хувилбарыг байршуулж, WebProxy ашиглан Redirect Redirect URL-г тохируулах боломжтой гэдэгт би итгэдэг.

Хамгийн хямд "тоглоом" Микротикийг 20 доллараар худалдаж аваад 500 долларын чиглүүлэгчээр солих гэж байгаа хүмүүст хандаж байгаа том хүсэлт - үүнийг бүү хий. "HAP Lite"/"hAP мини" (гэрийн хандалтын цэг) зэрэг төхөөрөмжүүд нь маш сул CPU (smips)-тэй бөгөөд бизнесийн сегмент дэх ачааллыг даван туулахгүй байх магадлалтай.

Анхааруулга! Энэ шийдэл нь нэг сул талтай: үйлчлүүлэгчид холбогдох эсвэл салгах үед чиглүүлэгч нь тогтворгүй санах ойд хадгалахыг оролддог тохиргооны өөрчлөлтүүд гарч ирдэг. Олон тооны үйлчлүүлэгчидтэй, байнга холбогдож, салгагддаг тул энэ нь чиглүүлэгчийн дотоод санах ойн доройтолд хүргэж болзошгүй юм.

Жич: Үйлчлүүлэгчид код хүргэх аргуудыг таны програмчлалын чадамжаас хамааран өргөжүүлж, нэмж болно. Жишээлбэл, та telegram дээр мессеж илгээх эсвэл ... сонголтуудыг санал болгож болно!

Энэ нийтлэл танд хэрэг болж, жижиг дунд бизнесийн сүлжээг бага зэрэг аюулгүй болгоход тусална гэж найдаж байна.

Эх сурвалж: www.habr.com