Дистанционна работа в офиса. RDP, Port Knocking, Mikrotik: просто и сигурно

Поради пандемията от вируса covid-19 и общата карантина в много страни, единственият начин за много компании да продължат да работят е отдалеченият достъп до работните места през интернет. Има много относително безопасни методи за дистанционна работа - но предвид мащаба на проблема е необходим прост метод за дистанционно свързване на всеки потребител с офиса и без необходимост от допълнителни настройки, обяснения, досадни консултации и дълги инструкции. Този метод е обичан от много администратори RDP (протокол за отдалечен работен плот). Свързването директно към работното място чрез RDP идеално решава проблема ни, с изключение на една голяма муха в мехлема - поддържането на RDP порта отворен за интернет е много опасно. Ето защо по-долу предлагам прост, но надежден метод за защита.Дистанционна работа в офиса. RDP, Port Knocking, Mikrotik: просто и сигурно

Тъй като често попадам на малки организации, където устройствата на Mikrotik се използват за достъп до интернет, по-долу ще бъде показано как да се приложи това на Mikrotik, но методът за защита на Port Knocking лесно се прилага на други устройства от по-висок клас с подобни настройки на входния рутер и защитна стена .

Накратко за Port Knocking. Идеалната външна защита на мрежа, свързана с интернет, е когато всички ресурси и портове са затворени отвън със защитна стена. И въпреки че рутер с така конфигурирана защитна стена не реагира по никакъв начин на пакети, идващи отвън, той ги слуша. Следователно можете да конфигурирате рутера така, че когато определена (кодова) последователност от мрежови пакети бъде получена на различни портове, той (рутерът) за IP, откъдето са дошли пакетите, прекъсва достъпа до определени ресурси (портове, протоколи, и т.н.).

Сега към бизнеса. Няма да правя подробно описание на настройките на защитната стена на Mikrotik - Интернет е пълен с висококачествени източници за това. В идеалния случай защитната стена блокира всички входящи пакети, но

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

Позволява входящ трафик от установени свързани връзки.
Сега настройваме Port Knocking на Mikrotik:

/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

премества нашите правила нагоре по веригата за обработка на защитната стена, тъй като най-вероятно вече ще имаме различни конфигурирани правила за отказ, които ще попречат на нашите новосъздадени да работят. Първото правило в Mikrotik започва от нула, но на моето устройство нулата беше заета от вградено правило и беше невъзможно да я преместя - преместих я на 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 сървъра.

Сега нашият Mikrotik е конфигуриран и се нуждаем от проста процедура за потребителя да се свърже с нашия вътрешен 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 - ние вземаме този адрес от системата Mikrotik DDNS, след като го активираме в нашия Mikrotik: отидете в менюто IP-> Cloud - поставете отметка в квадратчето DDNS Enabled, щракнете върху Приложи и копирайте 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 - това включва използването на множество монитори - някои имат нужда от това, но самите те няма да се сетят да го включат.

тип връзка: i: 6 и networkautodetect: i: 0 - тъй като по-голямата част от интернет е над 10 Mbps, тогава включете тип връзка 6 (локална мрежа 10 Mbps и повече) и изключете networkautodetect, защото ако по подразбиране (автоматично) , тогава дори рядко малко забавяне на мрежата автоматично настройва сесията ни на ниска скорост за дълго време, което може да създаде забележими забавяния в работата, особено в графичните програми.

деактивиране на тапета: 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.

Източник: www.habr.com

Добавяне на нов коментар