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

Поради пандемията на вируса covid-19 и общото карантинно положение в много страни, единственият вариант на много компании за продължаване на дейността им е дистанционният достъп до работни места през интернет. Има много относително безопасни методи за работа на разстояние, но предвид мащаба на проблема, е необходим прост метод за всички потребители за дистанционно свързване с офиса, без необходимост от допълнителни настройки, обяснения, уморително консултиране и дълги инструкции. Такъв метод е любимият на много администратори RDP (Remote Desktop Protocol). Директното свързване към работното място чрез 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

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

Тест-НетСвързване -КомпютърИме my_router.sn.mynetname.net -Порт 19000
Тест-НетСвързване -КомпютърИме my_router.sn.mynetname.net -Порт 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

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