Отдалена работа в офиса. RDP, Port Knocking, Mikrotik: просто и безопасно

Възходът на пандемията от COVID-19 и общото карантинно положение в много държави принуди много компании да преминат към дистанционен достъп до работните си места през интернет. Съществуват множество относително безопасни методи за дистанционна работа, но предвид мащабите на проблема е необходим прост метод за свързване към офиса, без да е нужно допълнително настройване, обяснения, досадни консултации и дълги инструкции. Такъв метод е любимият на много администратори RDP (Remote Desktop Protocol). Свързването директно към работното място чрез RDP идеално решава задачата, с едно голямо но — да държите RDP порта отворен за интернет е изключително небезопасно. Ето защо предлагам прост, но надежден метод за защита.Отдалена работа в офиса. RDP, Port Knocking, Mikrotik: просто и безопасно

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

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

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

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

Разрешава входящия трафик от вече установени (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 — този адрес вземаме от системата DDNS на MikroTik, като предварително го включим в нашия MikroTik: влизаме в менюто IP->Cloud — поставяме отметка на DDNS Enabled, натискаме Apply и копираме DNS името на нашия рутер. Но това е задължително само когато външният IP на рутера е динамичен или при конфигурация с няколко интернет доставчика.

Портът в първата връзка :19000 съответства на първия порт, по който трябва да се свържем, а във втората – съответно на втория. Между връзките има кратка инструкция, която показва какво да правим, ако връзката ни внезапно прекъсне поради малки проблеми с мрежата — обновяваме страницата, RDP портът отново се отваря за 1 минута и нашата сесия се възстановява. Освен това текстът между таговете създава за браузъра микрозабавяне, което намалява вероятността за бързо доставяне на първия пакет на втория порт (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 Mbit, включваме тип на свързване 6 (локална мрежа 10Mbit и повече) и изключваме 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, а отдалеченото PC е Windows 10, RDP ще работи, използвайки версия на протокола 7.0. Но за щастие, може да се обновяват версиите на RDP до по-нови версии - например може да се повиши версията на протокола от 7.0 (Windows 7) до 8.1. Затова за удобство на клиентите е необходимо максимално да се повишат версиите на сървърната част, както и да се предоставят връзки за обновление до новите версии на клиентите на протокола RDP.

В крайна сметка имаме проста и относително безопасна технология за отдалечен достъп до работен PC или терминален сървър. Но за по-безопасен достъп, нашият метод Port Knocking може да се усложнява за атака с няколко реда, чрез добавяне на портове за проверка - по същата логика можем да добавим 3, 4, 5, 6… порта и в такъв случай пряко нахлуване във вашата мрежа ще бъде почти невъзможно.

Шаблони на файлове за създаване на отдалечен достъп до RDP.

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

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster