Дистанційна робота в офісі. 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

Додати коментар або відгук