RDP соединение VPS
Подключаюсь через RDP на OC Windows 10 к VPS-серверу на OC Linux.
Вопрос. По умолчанию RDP-соединение в OC Windows 10 шифруется или нет? Смотрел настройки в "удаленный рабочий стол" - но там таких значений, не найдено.
Ответы (1 шт):
О том, как защищать данные, клиент и сервер договариваются во время установления соединения. Главная роль в этом процессе отводится серверу. Файл с настройками сервера 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без шифрованияmedium40-битный потоковый шифрhighAES-128fips- не используйте. Это опция была придумана для того, что 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:
Клиент покажет предупреждение
Проверьте, что это именно тот сертификат, который установлен у вас в системе:
- на сервере выполните команду
openssl x509 -text -noout -in /etc/xrdp/cert.pem
Вуа-ля: TLS включено
[INFO ] TLS connection established from ::ffff:127.0.0.1 port 55732: TLSv1.3 with cipher TLS_AES_256_GCM_SHA384

