RDP соединение VPS

Подключаюсь через RDP на OC Windows 10 к VPS-серверу на OC Linux.

Вопрос. По умолчанию RDP-соединение в OC Windows 10 шифруется или нет? Смотрел настройки в "удаленный рабочий стол" - но там таких значений, не найдено.


Ответы (1 шт):

Автор решения: Pak Uula

О том, как защищать данные, клиент и сервер договариваются во время установления соединения. Главная роль в этом процессе отводится серверу. Файл с настройками сервера xrdp находится в /etc/xrdp/xrdp.ini.

RDP клиент в Windows поддерживает два разных механизма конфиденциальности:

  • встроенные в RDP механизмы шифрования
  • защиту соединения средствами TLS.

RDP-безопасность чуть проще настраивать, плюс она поддерживает несколько уровней, которые различаются алгоритмами шифрования и нагрузкой на процессор. Так как в этом протоколе не предусмотрена аутентификация сервера, есть риск атаки "человек посередине".

TLS использует сторонние библиотеки для защиты трафика, поэтому при своевременном обновлении таких библиотек представляет самые современные и действенные механизмы. Кроме того, в ходе TLS handshake проверяется сертификат сервера для защиты от "человека посередине".

Параметр security_layer=[tls|rdp|negotiate] определяет, что будет использоваться для защиты трафика. Если это negotiate, то клиент с сервером будут договариваться, что использовать tls или rdp.

Я никогда не пользовался TLS, мне всегда хватало встроенных в RDP средств.

Уровень защиты RDP определяется параметром crypt_level=[low|medium|high|fips]

  • low без шифрования
  • medium 40-битный потоковый шифр
  • high AES-128
  • fips - не используйте. Это опция была придумана для того, что RDP можно было использовать в госучереждениях США.

Значения по-умолчанию

; security layer can be 'tls', 'rdp' or 'negotiate'
; for client compatible layer
security_layer=negotiate

; minimum security level allowed for client for classic RDP encryption
; use tls_ciphers to configure TLS encryption
; can be 'none', 'low', 'medium', 'high', 'fips'
crypt_level=high

; X.509 certificate and private key
; openssl req -x509 -newkey rsa:2048 -nodes -keyout key.pem -out cert.pem -days 365
; note this needs the user xrdp to be a member of the ssl-cert group, do with e.g.
;$ sudo adduser xrdp ssl-cert
certificate=
key_file=

; set SSL protocols
; can be comma separated list of 'SSLv3', 'TLSv1', 'TLSv1.1', 'TLSv1.2', 'TLSv1.3'
ssl_protocols=TLSv1.2, TLSv1.3
; set TLS cipher suites
#tls_ciphers=HIGH

Итак, по-умолчанию XRDP даёт клиенту и серверу согласовать протокол защиты. Если будет выбран протокол шифрования RDP, то трафик будет шифроваться AES с ключом 128 бит.

Когда вы поставите xrdp, появятся файлы /etc/xrdp/cert.pem /etc/xrdp/key.pem. Именно их по-умолчанию будет использовать XRDP для защиты входящих соединений. НО! на самом деле это символические ссылки на файлы

  • /etc/ssl/private/ssl-cert-snakeoil.key
  • /etc/ssl/certs/ssl-cert-snakeoil.pem

Эти файлы генерирует инсталлятор Убунты/Дебиана. В каком-то смысле это уникальные идентификаторы вашего сервера.

Однако из-коробки XRDP использует шифрование RDP. Причина в том, что сервис XRDP работает от имени пользователя xrdp, а этот пользователь не имеет доступа к папке /etc/ssl/private/:

[ERROR] Cannot read private key file /etc/xrdp/key.pem: Permission denied
...
[INFO ] Non-TLS connection established from ::ffff:127.0.0.1 port 45676: encrypted with standard RDP security

Нужно сделать дополнительное телодвижение, чтобы использовать этот приватный ключ:

sudo adduser xrdp ssl-cert
sudo service xrdp restart

После этого включится TLS:

  1. Клиент покажет предупреждение

    certificate warning

  2. Проверьте, что это именно тот сертификат, который установлен у вас в системе:

    • на сервере выполните команду
    openssl x509 -text -noout -in /etc/xrdp/cert.pem
    
    • в клиенте кликните View Certificate
    • и сравните поля Serial Number : они должны совпадать. введите сюда описание изображения

Вуа-ля: TLS включено

[INFO ] TLS connection established from ::ffff:127.0.0.1 port 55732: TLSv1.3 with cipher TLS_AES_256_GCM_SHA384
→ Ссылка