Как из дома подключиться к рабочему ПК по RDP?

Внутри локальной сети у компьютера есть только локальный IP-адрес вида 192.168.1.2, со стороны Интернета такой компьютер не виден (т.е. к нему напрямую невозможно адресовать пакет по внешнему IP адресу).
Обычно внешний IP-адрес провайдер выдает динамический:
- придется тоже его менять в настройках RDP
- некоторые провайдеры меняют IP один раз в месяц
В крайнем случае (если очень надо) – можно купить услугу “выделенный IP” и адрес от провайдера не будет меняться.
А наш домашний ПК – он там, за интернетом – в свой локальной сети.
Можно подключиться из дома к рабочему компьютеру в локальной сети офиса через RDP:
- не небольшой срок 1-2 недели
- на больших периодах ботнеты найдут порт RDP и сбрутят логин/пароль
- сисадмин в офисе будет недоволен
Высунем маленькую лапку Windows-машины в большой и страшный Интернет (где бродят злые боты), прикроемся портом роутера = и будем надеяться, что за две недели лапку не отгрызут :)
Для долговременной удаленной работы необходимо использовать:
- или создать VPN-тунель и уже внутри него подключаться через RDP
- или использовать профессиональные средства сервер-клиент типа RAdmin
Сетевые настройки
Что бы адресоваться к локальной машине, нам нужно два действия:
- присвоить этой локальной машине постоянный внутренний IP адрес
- сообщить роутеру, что определенные пакеты (которые пришли из большого Интернета) необходимо отправить на эту локальную машину
Постоянный локальный адрес – это просто. Идем в настройки соединения и присваиваем адрес, например, 192.168.1.2

Основной шлюз 192.168.1.1 – это наш роутер
DNS-сервер 8.8.8.8 от Google
Маска подсети 255.255.255.0 – читаем статью
Загадочная “маска подсети” – это просто
Теперь осталось сообщить роутеру, что определенные пакеты, которые пришли на вход (на WAN-порт, куда подключен кабель от провайдера) – нужно отдать по указанному адресу. На примере Keenetic 1010 – “переадресация портов”

Роутер принимает пакеты на вход на порт 55666 (нам так захотелось) и отправляет их на адрес 192.168.1.2 на стандартный порт RDP 3389
Со стороны внешнего интернета виден только порт 55666.
На Windows-машине (внутри локальной сети) стандартный порт 3389 RDP можно не менять. Саму машину не видно из большого Интернета, видно только порт роутера для внешнего коннекта, который мы установили по желанию (в нашем случае 55666). Фактически локальная Windows-машина высунула ту самую лапку в большой Интернет и мы прикрылись портом роутера. Остальные порты на локальной машине извне не доступны.
ВАЖНО: Если Windows-машина напрямую “смотрит” в большой Интернет (у нее есть “белый” IP-адрес) – то номер порта поменять обязательно! Читаем статью
Защищаем порты сервера
Готово. Теперь пакеты будут приходить на нашу локальную машину на нужный порт – но пока ничего еще не работает. Идем дальше.
Настройки RDP
Общие настройки RDP можно посмотреть в статье
Настраиваем RDP (remote desktop protocol)
Кратко.
Разрешаем подключаться к машине по RDP

Проверка подлинности на уровне сети – это такой “костыль” от Microsoft, что бы логин/пароль пользователя запрашивался и проверялся раньше, чем стандартный winlogin при входе в систему. В противном случае – система входа Windows достаточно легко выводится из строя (она все-таки изначально была разработана только для локального входа).
Оно же NLA – Network Level Authentication Локализация названия на русском языке необычная…
Дополнительно надо ОБЯЗАТЕЛЬНО проверить в локальных политиках gpedit.msc:
что бы политика проверки подлинности на уровни сети была там включена
Конфигурация компьютера -> Административные шаблоны —> Компоненты Windows —> Службы удаленных рабочих столов —> Узел сеансов удаленных рабочих столов—> Безопасность

параметр «Требовать проверку подлинности пользователя для удаленных подключений путем проверки подлинности на уровне сети»
и был включен вход с запретом пустых паролей (точнее – пустые пароли только для консоли)
Конфигурация компьютера -> Параметры Windows -> Параметры безопасности -> Локальные политики -> Параметры безопасности

параметр “Учетные записи Разрешить использование пустых паролей только для входа в консоль” должен быть включен
Да, есть элемент неудобства:
- если на ПК работает несколько пользователей – то при переключении придется вводить пароль
- для единственного пользователя можно настроить локальный вход с автологином с сохранением пароля
Настраиваем параметры подключения
Смотрим, какой именно IP присвоил провайдер Вашему доступу в интернет:

Пусть будет 5.228.188.ХХ, тогда в настройках указываем
5.228.188.ХХ:55666 – т.е. IP от провайдера и через двоеточие порт, на котором в роутере мы разрешаем принимать нужные нам пакеты.
Такая матрешка:
- ПК из дома отправит запрос на 5.228.188.ХХ:55666
- запрос придет к роутеру (по этому IP), он посмотрит свои правила
- и на основании “переадресации портов” (оно же – проброс порта) роутер отправит этот пакет на целевой локальный ПК с адресом 192.168.1.2 и на порт 3389
Теперь собственно настройки RDP

Куда подключаться -5.228.188.ХХ:55666
Всю эту красоту можно сохранить в файл и переслать по почте пользователю. Файл, кстати, обычный текстовый и его можно редактировать блокнотом.

Разрешаем фон рабочего стола. Если фон рабочего стола нет (черный экран) – проверяем локальные политики, там может стоять запрет.
Политика Локального Компьютера -> Конфигурация Компьютера -> Административные Шаблоны -> Компоненты Windows -> Службы Удаленных Рабочих Столов -> Узел Сеансов Удаленных Рабочих Столов -> Среда Удаленных Сеансов

Принудительную отмену фонового рисунка отключаем.
И здесь же в разделе “Подключения” можно ограничить число одновременных подключений через RDP.

Если пользователей на удаленке всего два – значит устанавливаем 2.
Уф. Настройки щедро разбросаны по разным модулям. Но подключаться еще рано – настроим шифрование.
Включаем шифрование RDP
Сессии RDP поддерживают четыре типа шифрования
- RDP Low Encryption – по умолчанию (самый старый режим). Может согласовать шифрование на базе 56-ти битового DES или 40-ка битового RC2. Очень плохой вариант. Например, если включить его, то не включится TLS.
- RDP Client Compatible Encryption – Попробует до 128 бит RC4, но сразу согласится на DES/RC2. Очень плохой вариант. Тоже не совместим с TLS.
- RDP High Encryption – Минимально допустимый режим. Потребует хотя бы 128-ми битовый RC4. Работает со всеми серверами, начиная с Windows 2000 Server w/HEP.
- RDP FIPS140-1 Encryption – Будет поддерживать современные симметричные алгоритмы и в явном виде не будет поддерживать RC2, RC4, одиночный DES, а также будет заставлять использовать для вычисления целостности (Message Authentication Code – MAC) алгоритм SHA-1, а не MD5
Но в полном объеме шифрование не заработает:
- нет валидного сертификата SSL (самоподписанный сертификат)
- будет ругаться RDP при подключении
- будет ругаться сисадмин в офисе
Но мы делаем временный доступ на две недели и надеемся, что злые боты нас не найдут за это время.

RDP ругается на сертификат…
Конфигурация компьютера —> Административные шаблоны —> Компоненты Windows —> Службы удаленных рабочих столов —> Узел сеансов удаленных рабочих столов—>Безопасность

«Установить уровень шифрования для клиентских подключений». Включаем и выбираем «Высокий» уровень. Это нам даст 128-битное шифрование.
Включаем параметр «Требовать безопасное RPC-подключение»
Устанавливаем параметр «Требовать использования специального уровня безопасности для удаленных подключений по методу RDP» в значение «Включено» и Уровень безопасности в значение «SSL TLS 1.0»
Самый максимальный уровень шифрования обеспечивается стандартом FIPS 140-1.
Конфигурация компьютера —> Конфигурация Windows —> Параметры безопасности —> Локальные политики —> Параметры безопасности
Чтобы включить использование FIPS 140-1 – включаем параметр «Системная криптография: использовать FIPS-совместимые алгоритмы для шифрования, хэширования и подписывания»
Просмотр логов подключения RDP
Да, Windows ведет подробные логи подключения, только они сильно спрятаны в настройках и немного не очевидны.
Администрирование —> Просмотр событий —> Журналы приложений и служб —> Microsoft —> Windows —> TerminalServices-LocalSessionManager —> Operational
И это общий лог. Для получения списка по конкретным событиям нужно отфильтровать по коду события… Правой клавишей мышки по Operational —> “Фильтр”

- EventID – 21 (Remote Desktop Services: Shell start notification received) означает успешный запуск оболочки Explorer (появление окна рабочего стола в RDP сессии
- EventID – 24 (Remote Desktop Services: Session has been disconnected) – пользователь отключился от RDP сессии.
- EventID – 25 (Remote Desktop Services: Session reconnection succeeded) – пользователь переподключился к своей имеющейся RDP сессии на сервере.
- EventID – 39 (Session <A> has been disconnected by session <B>) – пользователь сам отключился от своей RDP сессии, выбрав соответствующий пункт меню (а не просто закрыл окно RDP клиента). Если идентификаторы сессий разные, значит пользователя отключил другой пользователь (или администратор).
- EventID – 40 (Session <A> has been disconnected, reason code <B>). Здесь нужно смотреть на код причины отключения в событии. Например:
- reason code 0 (No additional information is available)– обычно говорит о том, что пользователь просто закрыл окно RDP клиента.
- reason code 5 (The client’s connection was replaced by another connection) – пользователь переподключился к своей старой сессии.
- reason code 11 (User activity has initiated the disconnect) – пользователь сам нажал на кнопку Disconnect в меню
Что бы посмотреть все входы RDP – в фильтре пишем 21,25
Так, а где IP входа? По умолчанию аудит IP отключен. Идем в настройки политик безопасности secpol.msc

Включаем регистрацию Успеха и Отказа
Вот тут читаем подробнее (+защита от перебора IPBan для Wondows)
Защищаем RDP сервер от перебора паролей с блокировкой по IP