Задача: Развернуть/Настроить серверную часть на Lubuntu 18.04 Desktop amd64 соединения/взаимодействия посредством RDP в дополнении к уже существующему VNC. XRDP предоставляет графический вход на удаленные компьютеры с помощью RDP (Microsoft Remote Desktop Protocol).

XRDP принимает соединения от различных RDP клиентов: FreeRDP, RDesktop, NeutrinoRDP и Microsoft Remote Desktop Client (для Windows, MacOS, прошивки и Android).

Предварительные действия:

  • В качестве тестового полигона где прорабатываю от и до по реализации задачи использую гипервизор Debian 10 + Proxmox 6
  • Образ Lubuntu 18.04 Desktop был установлен по заметке.

Шаг №1: Обновляю систему Lubuntu 18.04 Desktop до самого актуального состояния по установленным пакетам на текущий момент:

ekzorchik@srv-dbionic:~$ sudo rm -f /var/lib/dpkg/lock-frontend

ekzorchik@srv-dbionic:~$ sudo rm -f /var/lib/dpkg/lock

ekzorchik@srv-dbionic:~$ sudo rm -Rf /var/lib/apt/lists/

ekzorchik@srv-dbionic:~$ sudo apt-get update && sudo apt-get upgrade -y

ekzorchik@srv-dbionic:~$ uname -a && lsb_release -a

Linux srv-dbionic 4.15.0-99-generic #100-Ubuntu SMP Wed Apr 22 20:32:56 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

No LSB modules are available.

Distributor ID: Ubuntu

Description: Ubuntu 18.04.4 LTS

Release: 18.04

Codename: bionic

Шаг №2: Устанавливаю сервер xrdp:

ekzorchik@srv-dbionic:~$ sudo apt-get install -y xrdp
ekzorchik@srv-dbionic:~$ apt-cache show xrdp | grep Version
Version: 0.9.5-2
ekzorchik@srv-dbionic:~$ sudo systemctl status xrdp | head -n3
● xrdp.service - xrdp daemon
Loaded: loaded (/lib/systemd/system/xrdp.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2020-07-31 22:58:17 MSK; 52s ago
ekzorchik@srv-dbionic:~$

Шаг №3: Настройки по умолчанию можно найти в файле /etc/default/xrdp, а все прочие конфигурационные файлы сервера лежат в каталоге /etc/xrdp. Основные параметры находятся в файле xrdp.ini, который можно не менять. Конфиг хорошо документирован, к тому же в комплекте имеется соответствующие manpages: man xrdp.ini & man xrdp

Шаг №4: Осталось только отредактировать скрипт /etc/xrdp/startwm.sh, который исполняется при инициализации пользовательской сессии.

ekzorchik@srv-dbionic:~$ sudo mv /etc/xrdp/startwm.sh /etc/xrdp/startwm.backup
ekzorchik@srv-dbionic:~$ sudo nano /etc/xrdp/startwm.sh
#!/bin/sh
# xrdp X session start script (c) 2015, 2017 mirabilos
# published under The MirOS Licence

if test -r /etc/profile; then
	. /etc/profile
fi

if test -r /etc/default/locale; then
	. /etc/default/locale
	test -z "${LANG+x}" || export LANG
	test -z "${LANGUAGE+x}" || export LANGUAGE
	test -z "${LC_ADDRESS+x}" || export LC_ADDRESS
	test -z "${LC_ALL+x}" || export LC_ALL
	test -z "${LC_COLLATE+x}" || export LC_COLLATE
	test -z "${LC_CTYPE+x}" || export LC_CTYPE
	test -z "${LC_IDENTIFICATION+x}" || export LC_IDENTIFICATION
	test -z "${LC_MEASUREMENT+x}" || export LC_MEASUREMENT
	test -z "${LC_MESSAGES+x}" || export LC_MESSAGES
	test -z "${LC_MONETARY+x}" || export LC_MONETARY
	test -z "${LC_NAME+x}" || export LC_NAME
	test -z "${LC_NUMERIC+x}" || export LC_NUMERIC
	test -z "${LC_PAPER+x}" || export LC_PAPER
	test -z "${LC_TELEPHONE+x}" || export LC_TELEPHONE
	test -z "${LC_TIME+x}" || export LC_TIME
	test -z "${LOCPATH+x}" || export LOCPATH
fi

if test -r /etc/profile; then
	. /etc/profile
fi

#test -x /home/ekzorchik/.xsession && exec /home/ekzorchik/.xsession
#exec /bin/sh /home/ekzorchik/.xsession

lxsession -s Lubuntu -e LXDE

На заметку: В обязательном порядке добавьте в конце пустую строку в файле startwm.sh

Шаг №5: Дабы настройки конфигурационного файла startwm.sh применились нужно систему отправить в перезагрузку, а после проверить, что сервис xrdp поднят:

ekzorchik@srv-dbionic:~$ sudo reboot

ekzorchik@srv-dbionic:~$ sudo netstat -tulpn | grep :3389

tcp6 0 0 :::3389 :::* LISTEN 1109/xrdp

Шаг №6: Проверяю, как выглядит подключение к этой системе Lubuntu 18.04 Desktop amd64 через протокол RDP. В качестве клиентской системы у меня будет выступать моя рабочая система Ubuntu 18.04 Desktop amd64 ноутбука Lenovo E555, а клиент где настраивается подключение — это Remmina (1.2.0-rcgit-29)

Настройки подключения соединения через клиент Remmina

Шаг №7:

Сервер Xrdp запускается с правами пользователя xrdp и по умолчанию берет cертификат /etc/ssl/private/ssl-cert-snakeoil.key, который можно заменить собственным. Для доступа на чтение файла нужно добавить пользователя в группу ssl-cert:

ekzorchik@srv-dbionic:~$ sudo adduser xrdp ssl-cert

Adding user `xrdp' to group `ssl-cert' ...

Adding user xrdp to group ssl-cert

Done.

ekzorchik@srv-dbionic:~$

после нажимаю "Сохранить", а затем по соединению через двойной щелчкок мышью произвожу соединение:

Нажимаю через двойной щелчок мышью на соединении

и вот я успешно подключился к Lubuntu 18.04 Desktop через RDP протокол:

Успешное соединение через клиент Remmina выполнено

Шаг №8: Так, а если подключаться с Windows системы, к примеру Windows 10 Pro (Version 10.0.18362.959) через mstsc /v:172.33.33.115

Win + X - Командная строка -

C:\Users\ekzorchik> mstsc /v:172.33.33.115

или

Win + R -> mstsc /v:172.33.33.115

Подключение из Windows 10 к Lubuntu 18.04 Desktop

В первый раз подключаясь отмечаю галочкой "Больше не выводить запрос о подключениях к этому компьютеру" и нажимаю "Да". Кстати если посмотреть сертификат то видно что он самоподписанный сроком на 10 лет и создался он когда был установлен пакет xrdp.

Сертификат самоподписанный

и вот оно успешное RDP соединение из Windows 10 с Lubuntu 18.04 Desktop

и вот оно успешное RDP соединение из Windows 10 с Lubuntu 18.04 Desktop

Шаг №9: Защита сервера — а защита строится на том если Ваша система Lubuntu 18.04 имеет статический WAN — адрес, то Вам проще — нужно всего лишь установить надстройку над правилами iptables: firewalld (или ufw) и настроить откуда принимать соединения. Я так делаю.

sudo ufw disable
Firewall stopped and disabled on system startup
sudo apt-get install -y firewalld
sudo systemctl enable firewalld
sudo systemctl start firewalld
ip r | awk '{print $5}' | head -n1
eth0
sudo firewall-cmd --zone public --change-interface=eth0 --permanent
sudo firewall-cmd --add-rich-rule 'rule family="ipv4" port port="3389" protocol="tcp" source address="172.33.33.16/32" accept' --permanent
sudo firewall-cmd --remove-service=dhcpv6-client --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --zone=public --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source address="172.33.33.16/32" port port="3389" protocol="tcp" accept
sudo firewall-cmd --state
running

После выше проделанного к серверу/системе можно подключиться откуда угодно через SSH соединение, а по RDP только с системы где IP-адрес — это 172.33.33.16

При подключении с системы не указанной в разрешенных — будет отбивка, что не удалось подключиться к этому компьютеру по одной из следующих причин:

Подключение с других системы запрещено.

Чтобы удалить правило откуда можно подключаться:

sudo firewall-cmd --remove-rich-rule 'rule family="ipv4" port port="3389" protocol="tcp" source address="172.33.33.16/32" accept' --permanent
success
sudo firewall-cmd --add-port=3389/tcp --permanent
success
sudo firewall-cmd --reload

Шаг №10: Если внешний IP у системы Lubuntu 18.04 Desktop динамический (если она в интернете), то просто открываем возможность подключения на порт 3389/tcp. Вот только это очень плохая рекомендация, а потому стоит изменить порт подключения для сервиса xrdp и настроить правило на доступ только через этот новый порт:

ekzorchik@srv-dbionic:~$ sudo nano /etc/xrdp/xrdp.ini
#было: port=3389
#изменить на
port=3389
#остальные параметры оставить не тронутыми
ekzorchik@srv-dbionic:~$ sudo systemctl restart xrdp
ekzorchik@srv-dbionic:~$ sudo netstat -tulpn | grep :33389
tcp6 0 0 :::33389 :::* LISTEN 3131/xrdp
ekzorchik@srv-dbionic:~$ sudo firewall-cmd --remove-port=3389/tcp --permanent
success
ekzorchik@srv-dbionic:~$ sudo firewall-cmd --add-port=33389/tcp --permanent
success
ekzorchik@srv-dbionic:~$ sudo firewall-cmd --reload

Теперь настройки подключения в Remmina будут выглядеть следующим образом:

Измененные настройки подключения в клиенте Remmina

Шаг №11: Кстати если в настройках соединения через клиент Remmina поставить галочку "Общая папка" и указать ее в основной системе, к примеру "Documents"

Используем функционал "Общая папка"

то при подключении к системе Lubuntu 18.04 Desktop посредством протокола RDP на рабочем столе появится ссылка на доступ к общей папке и можно обмениваться файлами между основной системы и подключаемой.

можно обмениваться файлами между основной системы и подключаемой.

Итого, как по мне возможность подключения по RDP существенно быстрее в плане работы чем если бы я использовал x11vnc, как это я описывал в заметке «Настройка x11vnc для Lubuntu 18.04 Desktop» . Но все же я буду использовать оба способа графического взаимодействия. На этом заметка завершена, с уважением автор блога Олло Александр aka ekzorchik.