Выдаленая праца ў офісе. RDP, Port Knocking, Mikrotik: проста і бяспечна

У сувязі з пандэміяй віруса covid-19 і ўсеагульным каранцінам у многіх краінах адзіным выхадам многіх кампаній, каб працягваць працу – выдалены доступ да працоўных месцаў праз інтэрнэт. Ёсць шмат адносна бяспечных метадаў для выдаленай працы - але улічваючы маштаб праблемы, неабходны просты для любых карыстачоў метад выдаленага падлучэння да офіса і без неабходнасці дадатковых налад, тлумачэнняў, стомных кансультацый і доўгіх інструкцый. Такім метадам ёсць каханы шматлікімі адмінамі RDP (Remote Desktop Protocol). Падключэнне напрамую да працоўнага месца па RDP ідэальна вырашае нашу задачу, акрамя адной вялікай лыжкі дзёгцю - трымаць адкапаным для інтэрнэту порт RDP вельмі небяспечна. Таму ніжэй прапаную просты, але надзейны метад абароны.Выдаленая праца ў офісе. RDP, Port Knocking, Mikrotik: проста і бяспечна

Так як часта я сутыкаюся з невялікімі арганізацыямі, дзе ў якасці выхаду ў інтэрнэт выкарыстоўваюць прылады Mikrotik, то ніжэй будзе паказана, як гэта рэалізаваць на мікратыку, але метад абароны Port Knocking лёгка рэалізуем і на іншых прыладах больш высокага класа пры аналагічных наладах уваходнага маршрутызатара і firewall.

Коратка аб Port Knocking. Ідэальная знешняя абарона сеткі падлучанай да інтэрнэту - гэта калі ўсе рэсурсы і парты зачыненыя звонку фаервалам. І хоць роўтэр з такім настроеным фаервалам ніяк не рэагуе пакеты, якія прыходзяць звонку, ён іх праслухоўвае. Таму можна роўтэр наладзіць так, што пры атрыманні вызначанай (кодавай) паслядоўнасці сеткавых пакетаў на розныя порты, ён (роўтэр) для IP адкуль дашлі пакеты адрывае доступ да вызначаных рэсурсаў (партам, пратаколам і інш).

Цяпер да справы. Дэталёвага апісання налады фаервала на мікратыку рабіць не буду - у інтэрнэце для гэтага досыць якасных крыніц. У ідэале firewall блакуе ўсе ўваходныя пакеты, але

/ip firewall filter
add action=accept chain=input comment="established and related accept" connection-state=established,related

Дазваляе ўваходны трафік ад ужо ўсталяваных (established, related) злучэнняў.
Цяпер наладжваем Port Knocking на Мікратыцы:

/ip firewall filter
add action=drop chain=input dst-port=19000 protocol=tcp src-address-list="Black_scanners" comment=RemoteRules
add action=drop chain=input dst-port=16000 protocol=tcp src-address-list="Black_scanners" comment=RemoteRules
add action=add-src-to-address-list address-list="remote_port_1" address-list-timeout=1m chain=input dst-port=19000 protocol=tcp comment=RemoteRules
add action=add-src-to-address-list address-list="Black_scanners" address-list-timeout=60m chain=input dst-port=19001 protocol=tcp src-address-list="remote_port_1" comment=RemoteRules
add action=add-src-to-address-list address-list="Black_scanners" address-list-timeout=60m chain=input dst-port=18999 protocol=tcp src-address-list="remote_port_1" comment=RemoteRules
add action=add-src-to-address-list address-list="Black_scanners" address-list-timeout=60m chain=input dst-port=16001 protocol=tcp src-address-list="remote_port_1" comment=RemoteRules
add action=add-src-to-address-list address-list="Black_scanners" address-list-timeout=60m chain=input dst-port=15999 protocol=tcp src-address-list="remote_port_1" comment=RemoteRules
add action=add-src-to-address-list address-list="allow_remote_users" address-list-timeout=1m chain=input dst-port=16000 protocol=tcp src-address-list="remote_port_1" comment=RemoteRules
move [/ip firewall filter find comment=RemoteRules] 1
/ip firewall nat
add action=dst-nat chain=dstnat comment="remote_rdp" src-address-list="allow_remote_users" dst-port=33890 in-interface-list=WAN protocol=tcp to-addresses=192.168.1.33 to-ports=3389

Цяпер падрабязней:

першыя два правілы

/ip firewall filter
add action=drop chain=input dst-port=19000 protocol=tcp src-address-list="Black_scanners" comment=RemoteRules
add action=drop chain=input dst-port=16000 protocol=tcp src-address-list="Black_scanners" comment=RemoteRules

забараняюць уваходныя пакеты з IP адрасоў, якія патрапілі ў чорны спіс пры сканаванні партоў;

Трэцяе правіла:

add action=add-src-to-address-list address-list="remote_port_1" address-list-timeout=1m chain=input dst-port=19000 protocol=tcp comment=RemoteRules

дадае ip у спіс хастоў, якія зрабілі правільны першы стук на патрэбны порт (19000);
Наступныя чатыры правілы:

add action=add-src-to-address-list address-list="Black_scanners" address-list-timeout=60m chain=input dst-port=19001 protocol=tcp src-address-list="remote_port_1" comment=RemoteRules
add action=add-src-to-address-list address-list="Black_scanners" address-list-timeout=60m chain=input dst-port=18999 protocol=tcp src-address-list="remote_port_1" comment=RemoteRules
add action=add-src-to-address-list address-list="Black_scanners" address-list-timeout=60m chain=input dst-port=16001 protocol=tcp src-address-list="remote_port_1" comment=RemoteRules
add action=add-src-to-address-list address-list="Black_scanners" address-list-timeout=60m chain=input dst-port=15999 protocol=tcp src-address-list="remote_port_1" comment=RemoteRules

ствараюць парты пасткі для жадаючых прасканаваць вашы парты, і пры выяўленні такіх спроб заносяць іх ip у чорны спіс на 60 хвілін, на працягу якіх першыя два правілы не дадуць такім хастам магчымасці пастукацца ў правільныя парты;

Наступнае правіла:

add action=add-src-to-address-list address-list="allow_remote_users" address-list-timeout=1m chain=input dst-port=16000 protocol=tcp src-address-list="remote_port_1" comment=RemoteRules

змяшчае ip у спіс дазволеных на 1 хвіліну (досыць для ўсталявання злучэння), бо зроблены другі правільны стук у патрэбны порт(16000);

Следующая команда:

move [/ip firewall filter find comment=RemoteRules] 1

перамяшчае нашы правілы ўверх па ланцужкі апрацоўкі фаервалам, бо хутчэй за ўсё ў нас ужо будуць настроены розныя забараняльныя правілы, якія не дадуць спрацаваць нашым ізноў створаным. Самае першае правіла ў мікратыку пачынаецца з нуля, але ў мяне на прыладзе нуль быль заняты ўбудаваным правілам і немагчыма было перамясціць - я перамясціў на 1. Таму глядзім па нашых налад - куды можна перамясціць і паказваем патрэбны нумар.

Наступная настройка:

/ip firewall nat
add action=dst-nat chain=dstnat comment="remote_rdp_to_33" src-address-list="allow_remote_users" dst-port=33890 in-interface-list=WAN protocol=tcp to-addresses=192.168.1.33 to-ports=3389

ажыццяўляе пракід адвольна абранага порта 33890 на звычайны RDP порт 3389 і ip патрэбнага нам кампутара ці тэрмінальнага сервера. Такіх правіл мы ствараем для ўсіх неабходных унутраных рэсурсаў, пажадана выстаўляючы нестандартныя (і розныя) вонкавыя порты. Натуральна, што ip унутраных рэсурсаў павінны быць альбо статычнымі альбо замацаваныя на DHCP серверы.

Цяпер наш мікратык настроены і нам патрэбна простая для карыстальніка працэдура падключэння да нашага ўнутранага RDP. Так як у нас гэта ў асноўным Windows карыстачы, то ствараем просты bat файл і назавем яго StartRDP.bat:

1.htm
1.rdp

адпаведна 1.htm змяшчае наступны код:

<img src="http://my_router.sn.mynetname.net:19000/1.jpg">
нажмите обновить страницу для повторного захода по RDP
<img src="http://my_router.sn.mynetname.net:16000/2.jpg">

тут утрымоўваецца дзве спасылкі на ўяўныя малюнкі якія знаходзяцца па адрасе my_router.sn.mynetname.net - гэты адрас мы бярэм з сістэмы DDNS мікратыка папярэдне ўлучыўшы гэта ў нашым мікратыку: заходзім у меню IP->Cloud - ставім галачку DDNS Enabled, націскаем Apply і капіюем dns імя нашага роўтара. Але гэта абавязкова толькі калі вонкавы ip роўтара дынамічны ці выкарыстоўваецца канфігурацыя з некалькімі правайдэрамі інтэрнэту.

Порт у першай спасылцы :19000 адпавядае першаму порце па якім трэба стукацца, у другой адпаведна другому. Паміж спасылкамі кароткая інструкцыя, якая паказвае, што рабіць калі раптам наша злучэнне з-за кароткіх непаладак у сетцы абарвалася - абнаўляем старонку, порт RDP для нас ізноў адчыняецца на 1 мін хвіліну і наш сеанс аднаўляецца. Таксама тэкст паміж тэгамі img утворыць для браўзэра мікразатрымку, якая зніжае верагоднасць дастаўкі першым пакета на другі порт (16000) – пакуль за два тыдні карыстання (30 чалавек) такіх выпадкаў не было.

Далей ідзе файл 1.rdp, які мы можам наладзіць адзін для ўсіх ці асобна для кожнага карыстальніка (я так і зрабіў - лягчэй выдаткаваць дадаткова 15 хвілін, чым некалькі гадзін на кансультацыі тых, хто не змог разабрацца)

screen mode id:i:2
use multimon:i:1
.....
connection type:i:6
networkautodetect:i:0
.....
disable wallpaper:i:1
.....
full address:s:my_router.sn.mynetname.net:33890
.....
username:s:myuserlogin
domain:s:mydomain

з цікавых налад тут use multimon:i:1 - гэта ўключае выкарыстанне некалькіх манітораў - некаторым гэта неабходна, а ўключыць самі не дадумаюцца.

connection type:i:6 і networkautodetect:i:0 — так інтэрнэт у большасці вышэй за 10 мбіт, то ўключаем тып злучэння 6(лакальная сетка 10Мбіт і вышэй) і адключаем networkautodetect, бо калі па змаўчанні(auto), то нават рэдкая невялікая затрымка ў сетцы аўтаматычна надоўга ўстанаўлівае заніжаную хуткасць для нашага сеансу, што можа ствараць прыкметныя затрымкі ў працы, асабліва ў графічных праграмах.

disable wallpaper:i:1 — адключаем карцінку працоўнага стала
username:s:myuserlogin — лагін карыстальніка паказваем, бо значная частка нашых карыстальнікаў не ведае свайго лагіна
domain:s:mydomain — паказваем дамен ці імя кампутара

Але калі мы жадаем спрасціць сабе задачу па стварэнні працэдуры падлучэння, то можам скарыстацца і PowerShell - StartRDP.ps1

Test-NetConnection -ComputerName my_router.sn.mynetname.net -Port 19000
Test-NetConnection -ComputerName my_router.sn.mynetname.net -Port 16000
mstsc /v:my_router.sn.mynetname.net:33890

Таксама крыху пра RDP кліент у Windows: MS прайшла доўгі шлях аптымізацыі пратаколу і яго сервернай і кліенцкай часткі, рэалізавала шмат карысных фіч – такіх як праца з апаратным 3D, аптымізацыя дазволу экрана пад ваш манітор, мультыэкран і іншае. Але натуральна, усё рэалізавана ў рэжыме зваротнай сумяшчальнасці і калі кліент Windows 7, а выдалены ПК Windows 10, то RDP працаваць будзе выкарыстоўваючы пратакол версіі 7.0. Але балазе можна абнаўляць версіі RDP да свежых версій - напрыклад можна падвысіць версію пратаколу з 7.0(Windows 7) да 8.1. Таму для зручнасці кліентаў трэба максімальна павысіць версіі сервернай часткі, а таксама скінуць спасылкі на абнаўленне да новых версій кліентаў пратакола RDP.

У выніку мы маем простую і адносна бяспечную тэхналогію выдаленага падлучэння да працоўнага ПК ці тэрмінальнага сервера. Але для больш бяспечнага падлучэння наш спосаб Port Knocking можна ўскладняць для нападу на некалькі парадкаў, шляхам дадання портаў для праверкі - можна па той жа логіцы дадаць 3,4,5,6… порт і ў такім разе прамое ўварванне ў вашу сетку будзе амаль няздзейсным .

Нарыхтоўкі файлаў для стварэння выдаленага падлучэння да RDP.

Крыніца: habr.com

Дадаць каментар