Все те из нас, кто всё ещё администрирует Windows на серверах, привыкли к протоколу RDP.
Последовательность:
Win+R->mstsc
зашита не то что в мышечной, а наверняка уже в генетической памяти. Но не все занимались изучением протокола RDP. Для нас это данность, которую мы не подвергаем вопросам. А зря. На самом деле протокол RDP менялся на протяжении последних 10 лет, и его использование позволяет создавать достаточно нестандартные системы. В том числе замечательный и прекрасный протокол может стать большой дырой в безопасности внутренней сети компании, если за ним не следить правильно.
В этой статье я расскажу, что происходило с протоколом RDP, куда всё катится и чего надо бояться.
▍ Для начала — немного истории
Протокол RDP недавно обновился до версии 10. Хотя большинство из нас привыкли ещё к версии 5.1 и никогда не замечали изменений.
Краткое описание предыдущих пяти тысяч серий:
- Версия 4 была первой, которую выпустили вместе с Windows NT 4.0
- Версия 5 была добавлена в Windows 2000. Она позволяла работать с принтерами на локальной машине.
- Версия 5.1 была добавлена в Windows XP, позволяя работать с 24х битной палитрой и звуком.
- Версию 5.2 добавили в Windows 2003, и она впервые включала в себя шифрование TLS. Более того, она обзавелась спасительной функцией Console Connection, которая не раз спасала пятую точку автора от поездок в ЦОД в 2 ночи.
- Версия 6 была ключевой для всех тех пользователей-мажорв, которые использовали мульти-мониторные системы. Она вышла с Windows Vista
- Версия 6.1, добавленная в Windows Server 2008 позволяла перенаправлять принтеры с клиентского компьютера. Более того, она позволяла пропускать через RDP только определённые приложения (а не целый рабочий стол).
- Версия 7, выпущенная с Windows 7 позволила ускорить перенаправление всех тех цацок, которые принесла с собой Windows Vista. Красивые анимации, Windows Areo, двунаправленный звук и тому подобные вещи стали доступны именно с этой версией.
- Версия 7.1 позволяла работать с графическим адаптером на сервере через RemoteFX
- Версия 8 позволила наконец-то отключить перенаправление Aero Glass, которое было так нужно в версии 7. Ещё эта версия впервые позволила протягивать RDP соединение через RDP соединение. Помните те замечательные времена, когда нам приходилось играть в Начало (Inception) Кристофера Нолана? Весь фильм о том, что если ты подключаешься к RDP через RDP, то всё начинает работать очень медленно. Ну что же, всё починили. Плюс добавили кучу всяких ненужностей, которые уберут в следующем выпуске.
- Версия 8.1 была такой же ненужной, как и сама Windows 8.1, помимо того что клиент перестал запускаться на всеми тогда любимой Windows 7. Новая версия содержала в себе отличную функцию Restricted Admin, которая позволяла подключиться к админской консоли, зная только хэш пароля, а не сам пароль. Сама Microsoft исправила эту дыру в безопасности, опубликовав 80-ти страничный документ, в котором вам подробно объясняют, что эта дыра — и не дыра вовсе.
- Версия 10 привнесла поддержу High-DPI экранов и добавила всё то, о чём вы никогда не будете заморачиваться.
Ну что же. Вот вам и краткая история RDP. И хотя он и менялся, с виду ничего особого не происходило.
Но как вы видите на самом деле, что-то происходило, и в протоколе появлялись новые возможности, которые вы возможно никогда не использовали.
▍ Пустите, у меня корочка!
Для начала посмотрим на возможность подключения к консоли сервера. Я много лет обучал Windows-администраторов и к своему ужасу часто обнаруживал, что люди не знают про этот полезный флаг самой mstsc.
Итак, при запуске mstsc из консоли или из меню Run… вы можете ввести
mstsc /console
или mstsc /admin
для того, чтобы удалённо подключиться к консоли сервера. Это даёт вам доступ к сессии с идентификатором 0. То есть вы можете “напрямую работать” с монитором и клавиатурой самого сервера. Зачем вам это нужно? Большинство администраторов не знают этой функции, потому что они не занимались администрированием серверов удалённых рабочих столов. И самый неприятный момент наступает, когда вдруг сервер лицензирования решает покинуть этот мир, а вы не можете удалённо подключиться к серверу RDP, чтобы его перенастроить.
Что же, запоминаем, что всегда можно ввести
mstsc /?
и посмотреть на параметры командной строки для клиента. ▍ In shadow I stand
Одно из самых полезных нововведений, как мне показалось в RDP. Возможность удалённой “прослушки” соединений пользователя. При настройке этой опции я рекомендую пользоваться здравым смыслом и Уголовным кодексом страны, в которой вы находитесь. Как минимум проконсультируйтесь с местными юристами и убедитесь, что у особо рьяного любителя клубнички в интернетах не будет возможности написать на вас донос властям за то, что вы его спалили на сайте My Little Pony.
Как видно, даже сами ребята из Microsoft очень долго не знали, что делать с этой функцией. Сначала они её добавили в версии 7, убрали в 7.1, а потом снова добавили в версии 8.Отступление на тему того, как уладить подобные ситуации и не попасть впросак:Как администратор, всегда помните, иногда пользователи используют компьютер не по назначению. Иногда — это практически всегда. Если вы будете открыто говорить о правилах использования компьютеров в сети со своими пользователями, это не обязательно будет большой проблемой. Например, кто-то начинает тянуть гигабайты фильмов через торренты на работе? Не надо просто закрывать порты фаерволлом. Надо договориться с начальством, собрать всех на большую презентацию, и публично объяснить, что скачивать фильмы на рабочем месте — это большое ФИ с оттопыренным мизинцем, и делать так не надо. После этого скажите, что пока что всех прощаете, и все должны почистить все свои диски. А если кто-то будет продолжать лить, ему будет вручена премия в виде штрафа в 1МРОТ или что там у нас в ходу. Будьте открыты со своими пользователями по поводу нарушений, но не срамите их прилюдно. Если кто-то продолжает выкачивать все фильмы с участием Мии Калифы на работе, то разговор с ним должен быть один на один. Помните одну важную вещь — если позволить этому продолжаться без остановки и закрывать на это глаза — в один прекрасный момент вы подставите себя. Проход от My Little Pony -> Весь архив PorhHub -> что-то настолько отвратительное, что можно схлопотать 15 лет за решёткой и это не займет много времени. А отдуваться нужно будет вам. Когда вы закрываете вопрос таких пользователей на первой стадии, то ничего плохого не произойдёт. Когда вы пытаетесь сделать это на последней стадии, то вы работаете с человеком, которого загнали в угол, и которому грозит арест. Он может неправильно отреагировать. Так что ещё раз напоминаю, убедитесь, что использование этой функции может поставить вас в интересное положение.
Для того чтобы включить эту функцию, надо будет покопаться в GPO. На сервере RDP настройте:
Computer Configuration -> Administrative Templates -> Windows components -> Remote Desktop Services -> Remote Session Host -> Connections
.Настройте Set rules for remote control of Remote Desktop Services user sessions по вашему вкусу. Я обычно выбирал Full Control with user’s permission, то есть пользователь будет уведомлен о моём присутствии. Хотя, если ваши корпоративные правила позволяют, можно и не уведомлять :)
После применения этой GPO вы сможете зайти на сервер удалённых рабочих столов и запустить команду qwnsta, которая скинет вам список всех активных соединений на данном сервере. После этого вы можете воспользоваться командой:
mstsc /shadow:{id} /control /noConsentPrompt
/shadow:{id}
позволяет вам подключиться и просматривать сессию с ID из qwinsta./control
позволит вам управлять этой сессией. /noConsentPrompt
позволит вам ввалиться в сессию без того, чтобы пользователь узнал, что кто-то ввалился. (Работа этого флага зависит от того, как вы настроили GPO. Это очень удобный инструмент для обучения пользователей, которые не знают, что делать в жизни. А ещё очень полезно для удалённой поддержки.
▍ Угрозы безопасности
Не будем забывать про маленькую, и очень занудную программку, которая называлась rdp2tcp. Она позволяет пользователям протягивать TCP-мосты через RDP. Для работы на клиентской стороне требуется линукс, так что это не та приблуда, которую будут использовать бухгалтерши. Это для более занудных людей, у которых чешутся руки, только дай что-нить сломать.
Вообще, сам по себе протокол является достаточно уязвимым. Вот, например, в своё время многие администраторы воспользовались подобными уловками, чтобы “по-быстрому” починить отсутствующие сертификаты:
Более того, некоторые администраторы, в попытке ускорить время подключение клиентов, начали изменять настройки NTML
В итоге вы в буквальном смысле получаете систему, в которой логин и пароль не передаются в открытую, разве что только бабушке на базаре!
Теперь можно смело утверждать, что сам по себе RDP не являлся и никогда не будет являться защищённым протоколом. Посему не носитесь с RDP по открытому интернету без VPN — это может угрожать всему живому.
▍ Будущее администрирования
Со всем вышесказанным выглядит так, что RDP не является первым протоколом, к которому все просто бросаются, для того, чтобы администрировать свои сервера. В лучшем случае — предоставлять доступ пользователям к серверу терминалов.
А что же делать нам, системным администраторам?
Ну, во-первых, я очень рекомендую понаслаждаться тем, что Windows в наши дни очень хорошо поддерживает SSH. Если хочется попробовать — можете создать Windows VPS на RUVDS ;)
Windows 2019/Windows 10 отлично из коробки дружат с OpenSSH.Как подключиться к виртуальному серверу Windows по RDP в сервисе RUVDS:Чтобы начать работу на вашем сервере, начните со следующих команд:Пуск -> Программы -> Стандартные -> Подключение к удалённому рабочему столу
.
ИЛИ используйте Win+R (либо щелкните правой кнопкой мыши по кнопке Пуск, выберите Выполнить) наберите mstsc, нажмите ОК:
В появившемся окне впишите IP-адрес своего сервера, в строке — компьютер, он указан в вашем ЛК, в разделе “Мои серверы”:
Далее нажимаем «Подключить» и попадаем на окно с вводом учетных данных:
Во всех создаваемых виртуальных серверах на RUVDS генерируется уникальный пароль. Вводите логин (по умолчанию это Administrator) и пароль, из вашего личного кабинета, который будет виден, если нажать показать пароль, он также дублируется письмом на вашу электронную почту.
Чтобы вы смогли перенести файлы с вашего компьютера на свой виртуальный сервер, нужно подключить передачу данных:
Вот в общем-то и всё.
Если вам ещё не довелось этого испытать, то очень рекомендую его установить. Сразу после, вы сможете настроить Powershell-over-SSH.
В таком состоянии вы можете управлять своим сервером через свой удобный ноутбук с убунтой. Правда, для этого нужно будет установить Powershell на линукс. И хотя, да, это будет выглядеть, как если бы вы взяли всех героев из Звёздных Войн и отправили их во вселенную Стар Трека, но, несмотря на это, вы сможете запускать административные скрипты на вашей Windows машине в RUVDS через Linux. Чем я на самом деле и рекомендую вам заняться.Подробная инструкция, как настроить OpenSSH на Windows Server 2019 или 2022Для того, чтобы установить OpenSSH на Windows Server 2019 или 2022 Найдите и откройте Windows Settings. В новом окне перейдите в раздел «Apps» и выберите « Select Optional Features» в разделе «Apps & Features».
Нажмите «Manage optional features», и выберите OpenSSH Server из полученного списка, затем нажмите «Install».
После установки, запустите PowerShell от Администратора. Вставьте следующую команду для установки OpenSSH Server.
Add-WindowsCapability -Online -Name OpenSSH.Server
Установите OpenSSH Client:
Add-WindowsCapability -Online -Name OpenSSH.Client
Для настроки сервера можно использовать следующую комманду, которая откроет блокнот и можно будет добавить свои изменения
start-process notepad C:\Programdata\ssh\sshd_config
После всех настроек нужно запустить сервис командой:
Start-Service sshd
Далее необходимо будет настроить Firewall
Для этого в меню «Пуск» находим «Server Manager». Там выбираем «Tools» и клацаем на «Windows Defender Firewall with Advanced Security» в выпавшем списке.
Теперь кликаем на «Inbound Rules» в открывшемся окне и создаём новое правило «New Rule». В окне «New Inbound Rule Wizard» выбираем «Protocol and Ports», клацаем «TCP» и указываем порт 22 в «Specific local ports:». После жмём Next, Next даём название правилу и нажимаем Finish.
Теперь всё готово к подключению по ssh.
Подключиться можно с любой машины, как с linux, так и с Windows. Достаточно ввести:
ssh -l Administrator SERVER-IP
Согласиться с парой ключей:
ECDSA key fingerprint is SHA256:Vv2A8NOfzCLR/e35Fm5UyqGeJptrn6ZlY6Vabx0wHXQ. Are you sure you want to continue connecting (yes/no/[fingerprint])?
И вы можете работать на удалённом сервере по ssh, пример подключения с linux-машины.
К счастью или к сожалению, Windows вымирает как ОС (субъективное мнение, да). Даже на домашних ноутбуках я всё чаще вижу разные версии линукса. Администрированием Windows занимаются только те компании, которые застряли в Excel и необходимости работать на RDP. Да и в Microsoft это понимают и пытаются поддержать Windows для разработчиков, путём ввинчивания туда WSL.Как подключиться к виртуальному серверу RUVDS на Windows по RDP из Linux?Для начала установим клиент удалённого доступа — Remmina:
sudo apt-get update sudo apt-get install remmina remmina-plugin-rdp
Либо можно установить всё это через менеджер пакетов:
После установки запускаем Remmina и настраиваем подключение к удалённому серверу:
В поле “Сервер” вписываете IP-адрес вашего сервера, имя пользователя сервера и пароль, который вам выдали при создании (его также можно посмотреть в ЛКв разделе “Мои серверы”.
Параметр “Глубина цвета” нужно задавать таким, чтобы соединение не тормозило. Зачастую возникает ошибка, если поставить его слишком большим.
Вы можете копировать фалы из этой сетевой папки в папки на сервере и обратно. Для того, чтобы файлы возможно было копировать на сервер, можно задать общую папку, в данном примере имя папки “rdpfiles”.
Не забываем сохранить подключение, с соответствующим именем.
После первого подключения, вам предложат принять сертификат. Соглашаемся с этим:
После подключения и всех настроек, можно будет управлять удалённым VPS-сервером. Подключённая папка будет доступна через проводник:
Либо, в случае, если у сервера нет графического интерфейса, то через PowerShell по адресу:
\\TSCLIENT\rdpfiles
Обратите внимание, что имя папки дано для примера. В вашем случае это имя может быть отличное от “rdpfiles”, но в любом случае это будет подпапка папки \\TSCLIENT.
Из обнаруженных проблем, клиента Remmina – иногда некорректно монтируется удалённая папка и сервер её не видит. Для этого необходимо полностью отключить клиент Remmina (в том числе выйти из фоновой версии программы) и перезапустить её. Тогда подключение работает корректно.
Но, как бы то ни было, пока что вы можете комфортно работать с Windows через RDP или SSH. Вопрос только в том, сколько вам понадобится времени на настройку клиентов.
▍ Полезные ссылки
Мощные VPS на SSD со скидками до 53%. Панель ISPmanager в подарок*.