د MikroTik او SMS له لارې د VPN کاروونکو دوه فکتور تصدیق

سلام همکارانو! نن ورځ ، کله چې د "ریموټ کار" په شاوخوا کې د لیوالتیا شدت یو څه کم شو ، ډیری مدیرانو کارپوریټ شبکې ته د کارمندانو لرې لاسرسي دنده وګټله ، ​​دا وخت دی چې د VPN امنیت ښه کولو کې زما اوږدمهاله تجربه شریکه کړم. دا مقاله به اوس فیشن نه وي IPSec IKEv2 او xAuth. دا د سیسټم جوړولو په اړه دی. دوه فکتور تصدیق (2FA) د VPN کاروونکي کله چې MikroTik د VPN سرور په توګه کار کوي. د مثال په توګه، کله چې "کلاسیک" پروتوکولونه لکه PPP کارول کیږي.

د MikroTik او SMS له لارې د VPN کاروونکو دوه فکتور تصدیق

نن ورځ زه به تاسو ته ووایم چې څنګه د مایکرو ټیک PPP-VPN ساتنه وکړئ حتی د کارونکي حساب "هیک کولو" په صورت کې. کله چې دا سکیم زما یو پیرودونکي ته معرفي شو، هغه په ​​لنډ ډول دا تشریح کړه "ښه، اوس دا د بانک په څیر دی!".

دا طریقه د بهرني تصدیق کونکي خدمتونه نه کاروي. دندې پخپله د روټر لخوا په داخلي توګه ترسره کیږي. د نښلونکي پیرودونکي لپاره هیڅ لګښت نشته. میتود د کمپیوټر پیرودونکو او ګرځنده وسیلو لپاره کار کوي.

عمومي محافظت سکیم په لاندې ډول دی:

  1. د یو کارونکي داخلي IP پته چې په بریالیتوب سره د VPN سرور سره وصل شوی په اوتومات ډول خړ لیست شوی.
  2. د پیوستون پیښه په اوتومات ډول یو ځل کوډ رامینځته کوي چې کارونکي ته د یوې موجودې میتود په کارولو سره لیږل کیږي.
  3. په دې لیست کې پتې د محلي شبکې سرچینو ته محدود لاسرسی لري، د "مستند کونکي" خدمت استثنا سره، کوم چې د یو ځل پاس کوډ ترلاسه کولو ته انتظار باسي.
  4. د کوډ وړاندې کولو وروسته، کاروونکي د شبکې داخلي سرچینو ته لاسرسی لري.

لومړی ترټولو کوچنۍ ستونزه چې زه ورسره مخ وم د کارونکي په اړه د اړیکو معلوماتو ذخیره کول و ترڅو هغه ته د 2FA کوډ واستوي. څرنګه چې په مایکروټیک کې د کاروونکو سره په مطابقت کې د خپل سري معلوماتو ساحې رامینځته کول ناممکن دي ، نو موجوده "تبصره" ساحه کارول شوې وه:

/ppp رازونه اضافه کړئ نوم = پیټروف پاسورډ = 4M@ngr! تبصره="89876543210"

دوهم ستونزه ډیره جدي شوه - د کوډ وړاندې کولو لاره او میتود انتخاب. اوس مهال درې سکیمونه پلي شوي دي: الف) د USB-موډیم له لارې SMS ب) بریښنالیک ج) د بریښنالیک له لارې SMS د ریډ سیلولر آپریټر کارپوریټ پیرودونکو لپاره شتون لري.

هو، د SMS سکیمونه لګښتونه راوړي. مګر که تاسو وګورئ، "امنیت تل د پیسو په اړه دی" (ج).
زه په شخصي توګه د بریښنالیک سره سکیم نه خوښوم. نه دا چې دا د بریښنالیک سرور ته اړتیا لري چې د پیرودونکي تصدیق کولو لپاره شتون ولري - دا د ترافیک ویشلو ستونزه نده. په هرصورت، که چیرې یو پیرودونکي په بې پروایی سره په براوزر کې د vpn او بریښنالیک پاسورډونه خوندي کړي او بیا یې خپل لپ ټاپ له لاسه ورکړي، برید کونکی به له دې څخه کارپوریټ شبکې ته بشپړ لاسرسی ومومي.

نو، پریکړه وشوه - موږ د SMS پیغامونو په کارولو سره یو ځل کوډ وړاندې کوو.

دریم ستونزه چیرته وه په MikroTik کې د 2FA لپاره د سیډو - تصادفي کوډ رامینځته کولو څرنګوالی. په RouterOS سکریپټینګ ژبه کې د تصادفي() فنکشن هیڅ انالوګ شتون نلري ، او ما دمخه څو کرچ سکریپټ سیډو - تصادفي شمیر جنراتورونه لیدلي دي. ما د مختلفو دلایلو له امله دوی نه خوښول.

په حقیقت کې ، په مایکرو ټیک کې د سیډو - تصادفي ترتیب جنراتور شتون لري! دا د / سندونو سکیپ سرور په شرایطو کې له سطحي نظر څخه پټ دی. لومړی لاره د یو وخت پاسورډ ترلاسه کول اسانه او ساده دي - د کمانډ سره / سندونه scep-server otp تولیدوي. که موږ د ساده متغیر دندې عملیات ترسره کړو، موږ به د سرې ارزښت ترلاسه کړو چې وروسته په سکریپټونو کې کارول کیدی شي.

دوهم لاره د یو ځل پاسورډ ترلاسه کول کوم چې پلي کول هم اسانه دي - د بهرني خدمت په کارولو سره ناټاکله د pseudo-random شمیرو مطلوب ډول ترتیب رامینځته کول. دلته یو ساده دی کانټیلیور شوی په متغیر کې د معلوماتو ترلاسه کولو مثال:

کوډ
: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 او SMS له لارې د VPN کاروونکو دوه فکتور تصدیق

په مایکرو ټیک روټر کې باید یو خدمت شتون ولري چې کوډ ومني او د ځانګړي پیرودونکي سره یې میچ کړي. که چمتو شوی کوډ د تمه شوي سره سمون ولري، د پیرودونکي پته باید په یو ځانګړي "سپینه" لیست کې شامل شي، هغه پتې چې د شرکت داخلي شبکې ته د لاسرسي اجازه لري.

د خدماتو د ضعیف انتخاب له امله، پریکړه وشوه چې په مایکروټیک کې جوړ شوي ویب پراکسي په کارولو سره د HTTP له لارې کوډونه ومني. او له هغه ځایه چې فایر وال کولی شي د IP پتې متحرک لیستونو سره کار وکړي ، دا فایر وال دی چې د کوډ لټون ترسره کوي ، دا د پیرودونکي IP سره سمون لري او د Layer7 regexp په کارولو سره یې د "سپینې" لیست کې اضافه کوي. روټر پخپله د مشروط DNS نوم "gw.local" ګمارل شوی ، د PPP پیرودونکو ته د جاري کولو لپاره پدې کې یو مستحکم A-ریکارډ رامینځته شوی:

ډی
/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. پته_لست "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 خدمتونه نه یوازې د پای کاروونکو سره وصل کولو لپاره کاروئ ، مګر په ورته وخت کې د سایټ څخه سایټ اړیکې رامینځته کولو لپاره.

په نوي جوړ شوي ځانګړي پروفایل کې، موږ د ادرسونو او انٹرفیسونو "خړ" لیستونو کې د وصل شوي کارونکي پته او انٹرفیس متحرک اضافه کاروو:

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 (prerouting) سلسله کې د غیر ثانوي 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

په ځانګړي توګه د هغو کسانو لپاره چې په بې پروایی سره کاپي پیسټ کول خوښوي ، زه تاسو ته خبرداری درکوم - کوډ د ازموینې نسخه څخه اخیستل شوی او ممکن کوچني ټایپونه ولري. دا به ستونزمن نه وي چې د پوهه لرونکي کس لپاره دقیقا معلومه کړي چې چیرته.

کله چې یو کاروونکي منحل شي، یو "آن-ډاون" پیښه رامینځته کیږي او د پیرامیټونو سره ورته سکریپټ ویل کیږي. د دې سکریپټ دنده د منحل شوي کارونکي لپاره رامینځته شوي د فایر وال مقرراتو پاکول دي.

کوډ په پروفایل کې د 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 تلیفون / ټابلیټ د دې په څیر یو 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 او SMS له لارې د VPN کاروونکو دوه فکتور تصدیق

په یاد ولرئ چې عکس د جوړ شوي MikroTik ویب سرور څخه د WebProxy Deny Redirect په کارولو سره بیرته راستانه شوی.

زه فکر کوم چې عکس د "هاټ سپټ" وسیلې په کارولو سره دودیز کیدی شي ، هلته خپله نسخه اپلوډ کړئ او د WebProxy سره دې ته د انکار ریډیریک URL تنظیم کړئ.

د هغو کسانو لپاره یوه لویه غوښتنه چې هڅه کوي ترټولو ارزانه "لوبۍ" مایکروټیک په 20 ډالرو واخلي او د $ 500 ډالرو روټر یې بدل کړي - دا کار مه کوئ. وسیلې لکه "hAP Lite" / "hAP mini" (د کور د لاسرسي نقطه) خورا ضعیف CPU (smips) لري او احتمال لري چې دوی به د سوداګرۍ برخه کې د بار سره مقابله ونه کړي.

خبرداری! دا حل یو نیمګړتیا لري: کله چې پیرودونکي وصل یا منحل شي ، د تشکیلاتو بدلونونه رامینځته کیږي ، کوم چې روټر هڅه کوي په خپل غیر متزلزل حافظه کې خوندي کړي. د ډیری پیرودونکو او پرله پسې اړیکو او منحل کیدو سره ، دا کولی شي په روټر کې د داخلي ذخیره تخریب لامل شي.

PS: پیرودونکي ته د کوډ سپارلو میتودونه پراخه کیدی شي او ضمیمه کیدی شي تر هغه چې ستاسو د برنامه کولو وړتیاوې کافي وي. د مثال په توګه، تاسو کولی شئ ټیلیګرام ته پیغامونه واستوئ یا ... اختیارونه وړاندیز کړئ!

زه امید لرم چې مقاله به ستاسو لپاره ګټوره وي او د کوچني او متوسط ​​​​سوداګریزو شبکو په جوړولو کې به مرسته وکړي یو څه ډیر خوندي.

سرچینه: www.habr.com