Duha ka hinungdan nga panghimatuud sa mga tiggamit sa VPN pinaagi sa MikroTik ug SMS

Hello mga kauban! Karon, kung ang kakusog sa mga hilig sa palibot sa "hilit nga trabaho" mihubas gamay, ang kadaghanan sa mga admin nakadaog sa tahas sa hilit nga pag-access sa mga empleyado sa network sa korporasyon, panahon na nga ipaambit ang akong dugay na nga kasinatian sa pagpaayo sa seguridad sa VPN. Kini nga artikulo dili na uso karon IPSec IKEv2 ug xAuth. Kini mahitungod sa pagtukod og sistema. two-factor authentication (2FA) Ang mga tiggamit sa VPN kung ang MikroTik naglihok isip usa ka VPN server. Sa ato pa, kung ang "classic" nga mga protocol sama sa PPP gigamit.

Duha ka hinungdan nga panghimatuud sa mga tiggamit sa VPN pinaagi sa MikroTik ug SMS

Karon isulti ko kanimo kung giunsa pagpanalipod ang MikroTik PPP-VPN bisan kung ang account sa gumagamit "gi-hijack". Sa dihang kini nga laraw gipaila-ila ngadto sa usa sa akong mga kustomer, iya kining gihulagway sa makadiyot nga "maayo, karon kini sama sa usa ka bangko!".

Ang pamaagi wala mogamit sa mga serbisyo sa eksternal nga authenticator. Ang mga buluhaton gihimo sa sulod sa router mismo. Walay gasto alang sa nagkonektar nga kliyente. Ang pamaagi magamit alang sa mga kliyente sa PC ug mga mobile device.

Ang kinatibuk-ang pamaagi sa pagpanalipod mao ang mosunod:

  1. Ang internal nga IP address sa usa ka tiggamit nga malampuson nga nakakonekta sa VPN server awtomatik nga na-greylist.
  2. Ang panghitabo sa koneksyon awtomatik nga nagmugna og usa ka higayon nga code nga gipadala ngadto sa user gamit ang usa sa anaa nga mga pamaagi.
  3. Ang mga adres sa kini nga lista adunay limitado nga pag-access sa mga kapanguhaan sa lokal nga network, gawas sa serbisyo nga "authenticator", nga naghulat nga makadawat usa ka higayon nga passcode.
  4. Human sa pagpresentar sa code, ang user adunay access sa internal nga mga kapanguhaan sa network.

Ang una ang pinakagamay nga problema nga akong atubangon mao ang pagtipig sa impormasyon sa pagkontak bahin sa user aron ipadala kaniya ang 2FA code. Tungod kay imposible ang paghimo sa arbitraryong mga natad sa datos nga katumbas sa mga tiggamit sa Mikrotik, ang kasamtangan nga "komento" nga natad gigamit:

/ppp nga mga sekreto idugang ang ngalan=Petrov password=4M@ngr! comment="89876543210"

Ang ikaduha ang problema nahimong mas seryoso - ang pagpili sa dalan ug pamaagi sa paghatud sa code. Tulo ka mga laraw ang gipatuman karon: a) SMS pinaagi sa USB-modem b) e-mail c) SMS pinaagi sa e-mail nga magamit alang sa mga kliyente sa korporasyon sa red cellular operator.

Oo, ang mga laraw sa SMS nagdala mga gasto. Apan kung imong tan-awon, "ang seguridad kanunay bahin sa salapi" (c).
Ako sa personal dili ganahan sa laraw sa e-mail. Dili tungod kay gikinahanglan ang mail server nga magamit alang sa kliyente nga gipamatud-an - dili problema ang pagbahin sa trapiko. Bisan pa, kung ang usa ka kliyente wala’y pagtagad nga nagtipig sa mga password sa vpn ug email sa usa ka browser ug unya nawala ang ilang laptop, ang tig-atake makakuha og bug-os nga pag-access sa corporate network gikan niini.

Mao nga, nakahukom na - naghatud kami usa ka higayon nga code gamit ang mga mensahe sa SMS.

Ang ikatulo Ang problema kay asa unsaon paghimo og pseudo-random code para sa 2FA sa MikroTik. Walay analogue sa random() function sa RouterOS scripting language, ug nakakita kog daghang crutch script pseudo-random number generators kaniadto. Dili ko ganahan ni bisan kinsa kanila tungod sa lain-laing mga rason.

Sa tinuud, adunay usa ka pseudo-random sequence generator sa MikroTik! Gitago kini gikan sa usa ka taphaw nga pagtan-aw sa konteksto sa /certificate scep-server. Ang una nga paagi Ang pagkuha sa usa ka higayon nga password dali ug yano - uban ang mando /certificate scep-server otp makamugna. Kung maghimo kami usa ka yano nga variable nga operasyon sa assignment, makakuha kami usa ka kantidad nga tipo sa array nga magamit sa ulahi sa mga script.

Ang ikaduha nga paagi pag-angkon og usa ka higayon nga password nga sayon ​​usab nga magamit - gamit ang usa ka eksternal nga serbisyo random.org aron makamugna ang gitinguha nga matang sa han-ay sa pseudo-random nga mga numero. Ania ang usa ka gipasimple cantilevered pananglitan sa pagkuha sa datos ngadto sa usa ka variable:

code
: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

Usa ka hangyo nga gi-format para sa console (ang pag-eskapo sa mga espesyal nga karakter gikinahanglan sa script nga lawas) makadawat og usa ka string nga unom ka digit ngadto sa $rnd1 variable. Ang mosunod nga "butang" nga sugo nagpakita lamang sa variable sa MikroTik console.

Ang ikaupat nga problema nga kinahanglan nga dali nga masulbad - kini kung giunsa ug diin ang konektado nga kliyente ibalhin ang usa ka higayon nga code sa ikaduhang yugto sa pag-authenticate.

Duha ka hinungdan nga panghimatuud sa mga tiggamit sa VPN pinaagi sa MikroTik ug SMS

Kinahanglan adunay usa ka serbisyo sa MikroTik router nga makadawat sa code ug ipares kini sa usa ka piho nga kliyente. Kung ang gihatag nga code motakdo sa gipaabut, ang adres sa kliyente kinahanglan nga ilakip sa usa ka piho nga "puti" nga lista, mga adres diin gitugotan ang pag-access sa internal nga network sa kompanya.

Tungod sa dili maayo nga pagpili sa mga serbisyo, nakahukom nga modawat sa mga code pinaagi sa http gamit ang webproxy nga gitukod sa Mikrotik. Ug tungod kay ang firewall mahimo’g molihok uban ang dinamikong mga lista sa mga adres sa IP, kini ang firewall nga naghimo sa pagpangita alang sa code, pagpares niini sa IP kliyente ug idugang kini sa lista nga "puti" gamit ang Layer7 regexp. Ang router mismo gihatagan ug conditional DNS nga ngalan nga "gw.local", usa ka static nga A-record ang gihimo niini alang sa pag-isyu sa mga kliyente sa PPP:

DNS
/ip dns static add name=gw.local address=172.31.1.1

Pagkuha sa trapiko sa wala mapamatud-an nga mga kliyente sa proxy:
/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

Sa kini nga kaso, ang proxy adunay duha ka mga gimbuhaton.

1. Ablihi ang tcp koneksyon sa mga kliyente;

2. Sa kaso sa malampuson nga pagtugot, i-redirect ang browser sa kliyente sa usa ka panid o litrato nga nagpahibalo bahin sa malampuson nga pag-authenticate:

Pag-configure sa proxy
/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

Akong ilista ang importante nga mga elemento sa pag-configure:

  1. interface-list "2fa" - usa ka dinamikong lista sa mga interface sa kliyente, ang trapiko gikan diin nanginahanglan pagproseso sulod sa 2FA;
  2. address-list "2fa_jailed" - "gray" nga lista sa tunnel IP address sa mga kliyente sa VPN;
  3. address_list "2fa_approved" - "puti" nga lista sa tunnel IP address sa mga kliyente sa VPN nga malampusong nakapasar sa two-factor authentication.
  4. kadena sa firewall "input_2fa" - gisusi niini ang mga pakete sa tcp alang sa presensya sa usa ka kodigo sa pagtugot ug gipares ang IP address sa nagpadala sa code sa gikinahanglan. Ang mga lagda sa kadena gidugang ug gitangtang sa dinamikong paagi.

Ang usa ka gipasimple nga flowchart sa pagproseso sa packet ingon niini:

Duha ka hinungdan nga panghimatuud sa mga tiggamit sa VPN pinaagi sa MikroTik ug SMS

Aron makasulod sa Layer7 check sa trapiko gikan sa mga kliyente gikan sa "gray" nga lista nga wala pa makapasar sa ikaduhang yugto sa pag-authentication, usa ka lagda ang gihimo sa standard nga "input" chain:

code
/ip firewall filter add chain=input !src-address-list=2fa_approved action=jump jump-target=input_2fa

Karon sugdan na nato ang pagpahigot niining tanang bahandi sa serbisyo sa PPP. Gitugotan ka sa MikroTik nga mogamit mga script sa mga profile (ppp-profile) ug i-assign kini sa mga panghitabo sa pag-establisar ug pagbungkag sa koneksyon sa ppp. Ang mga setting sa ppp-profile mahimong magamit sa PPP server sa kinatibuk-an o sa indibidwal nga mga tiggamit. Sa parehas nga oras, ang profile nga gi-assign sa user adunay prayoridad, nga nag-override sa mga parameter sa profile nga gipili alang sa server sa kinatibuk-an nga adunay gitakda nga mga parameter.

Ingon usa ka sangputanan sa kini nga pamaagi, makahimo kami usa ka espesyal nga profile alang sa pag-authenticate sa duha ka hinungdan ug i-assign kini dili sa tanan nga tiggamit, apan sa mga nag-isip nga kinahanglan nga buhaton kini. Mahimong may kalabotan kini kung mogamit ka sa mga serbisyo sa PPP dili lamang aron makonektar ang mga tiggamit sa katapusan, apan sa samang higayon maghimo mga koneksyon sa site-to-site.

Sa bag-ong gihimo nga espesyal nga profile, gigamit namon ang dinamikong pagdugang sa adres ug interface sa konektado nga tiggamit sa "gray" nga mga lista sa mga adres ug interface:

winbox
Duha ka hinungdan nga panghimatuud sa mga tiggamit sa VPN pinaagi sa MikroTik ug SMS

code
/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

Kinahanglan nga gamiton ang duha nga "address-list" ug "interface-list" nga mga lista aron mahibal-an ug makuha ang trapiko gikan sa dili sekundaryong mga kliyente sa VPN sa dstnat (prerouting) nga kadena.

Kung nahuman na ang pag-andam, gihimo ang dugang nga mga kadena sa firewall ug usa ka profile, magsulat kami usa ka script nga responsable alang sa auto-generation sa 2FA code ug indibidwal nga mga lagda sa firewall.

Dokumentasyon wiki.mikrotik.com sa PPP-Profile nagpadato kanamo sa kasayuran bahin sa mga variable nga nalambigit sa mga panghitabo sa koneksyon-disconnect sa kliyente sa PPP "Ipatuman ang script sa user login-event. Kini ang magamit nga mga variable nga magamit alang sa script sa panghitabo: user, lokal nga adres, hilit nga adres, caller-id, gitawag nga id, interface". Ang uban niini mapuslanon kaayo kanato.

Ang code nga gigamit sa profile para sa PPP on-up nga panghitabo sa koneksyon

#Логируем для отладки полученные переменные 
: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

Ilabi na sa mga gusto nga wala’y hunahuna nga pagkopya-paste, gipasidan-an ko ikaw - ang code gikuha gikan sa bersyon sa pagsulay ug mahimo’g adunay gamay nga typo. Dili lisud alang sa usa ka masinabtanon nga tawo nga mahibal-an kung diin gyud.

Kung ang usa ka user madiskonekta, usa ka "On-Down" nga panghitabo ang mabuhat ug ang katugbang nga script nga adunay mga parameter gitawag. Ang katuyoan niini nga script mao ang paglimpyo sa mga lagda sa firewall nga gihimo alang sa nadiskonekta nga tiggamit.

Ang code nga gigamit sa profile para sa PPP on-down nga panghitabo sa koneksyon

: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]
Mahimo nimong maghimo ang mga tiggamit ug i-assign ang tanan o pipila niini sa usa ka profile sa pag-authenticate nga duha ka hinungdan.

winbox
Duha ka hinungdan nga panghimatuud sa mga tiggamit sa VPN pinaagi sa MikroTik ug SMS

code
/ppp secrets set [find name=Petrov] profile=2FA

Giunsa kini tan-awon sa bahin sa kliyente.

Kung natukod ang koneksyon sa VPN, ang Android/iOS nga telepono/tablet nga adunay SIM card makadawat og SMS nga sama niini:

SMS
Duha ka hinungdan nga panghimatuud sa mga tiggamit sa VPN pinaagi sa MikroTik ug SMS

Kung ang koneksyon direkta nga natukod gikan sa telepono / tablet, mahimo ka makaagi sa 2FA pinaagi lang sa pag-klik sa link gikan sa mensahe. Kini komportable.

Kung ang koneksyon sa VPN natukod gikan sa usa ka PC, nan ang tiggamit kinahanglan nga mosulod sa usa ka gamay nga porma sa password. Ang usa ka gamay nga porma sa porma sa usa ka HTML file gihatag sa user sa dihang nag-set up sa VPN. Ang file mahimo pa nga ipadala pinaagi sa koreo aron ang tiggamit makatipig niini ug maghimo usa ka shortcut sa usa ka kombenyente nga lugar. Murag mao ni:

Label sa lamesa
Duha ka hinungdan nga panghimatuud sa mga tiggamit sa VPN pinaagi sa MikroTik ug SMS

Ang tiggamit nag-klik sa shortcut, usa ka yano nga porma sa pagsulod sa code ang giablihan, nga idikit ang code sa giablihan nga URL:

Porma sa screen
Duha ka hinungdan nga panghimatuud sa mga tiggamit sa VPN pinaagi sa MikroTik ug SMS

Ang labing karaan nga porma gihatag isip usa ka pananglitan. Kadtong gusto makabag-o alang sa ilang kaugalingon.

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>

Kung nagmalampuson ang pagtugot, makita sa tiggamit ang logo sa MikroTik sa browser, nga kinahanglan magpahibalo sa malampuson nga pag-authenticate:

Duha ka hinungdan nga panghimatuud sa mga tiggamit sa VPN pinaagi sa MikroTik ug SMS

Timan-i nga ang imahe gibalik gikan sa built-in nga MikroTik web server gamit ang WebProxy Deny Redirect.

Nagtuo ko nga ang imahe mahimong ipasadya gamit ang "hotspot" nga himan, pag-upload sa imong kaugalingon nga bersyon didto ug ibutang ang Deny Redirect URL niini gamit ang WebProxy.

Usa ka dako nga hangyo sa mga naningkamot sa pagpalit sa labing barato nga "dulaan" Mikrotik sa $20 ug pulihan ang usa ka $500 nga router niini - ayaw kana buhata. Ang mga aparato sama sa "hAP Lite" / "hAP mini" (home access point) adunay huyang kaayo nga CPU (smips), ug lagmit nga dili nila makaya ang karga sa bahin sa negosyo.

Pasidaan! Kini nga solusyon adunay usa ka disbentaha: kung ang mga kliyente magkonektar o mag-disconnect, mahitabo ang mga pagbag-o sa pag-configure, nga gisulayan sa router nga i-save sa dili dali nga panumduman niini. Uban sa daghang mga kliyente ug kanunay nga mga koneksyon ug pagkadiskonekta, mahimo’g mosangput kini sa pagkadaot sa internal nga pagtipig sa router.

PS: ang mga pamaagi sa paghatud sa code sa kliyente mahimong madugangan ug madugangan kung igo ang imong mga kapabilidad sa pagprograma. Pananglitan, mahimo nimong ipadala ang mga mensahe sa telegrama o ... isugyot ang mga kapilian!

Nanghinaut ko nga ang artikulo mahimong mapuslanon kanimo ug makatabang sa paghimo sa mga network sa gagmay ug medium-kadako nga mga negosyo nga mas luwas.

Source: www.habr.com