Настройке RDP-сервера в Linux (Ubuntu/Debian) для подключения из Windows

Board index Администрирование Операционные системы Linux

Description: Установка, настройка, оптимизация и решение проблем

#1by mexan » 04.12.2025, 22:22

Введение: Зачем RDP в Linux?

В корпоративной среде стандартом де-факто для удаленного рабочего стола является протокол Microsoft RDP. Админу, управляющему Linux-серверами с графическим интерфейсом (или рабочими станциями), часто нужно получить к ним доступ с основной Windows-машины, не меняя клиент. Хотя в мире Linux есть VNC, SSH с X11 Forwarding и другие решения, RDP выигрывает у них в производительности на слабых каналах, интеграции с буфером обмена и локальными ресурсами (дисками, принтерами), а также в привычном интерфейсе клиента (mstsc.exe).

В этом руководстве разберем xrdp — самый популярный и стабильный сервер RDP с открытым исходным кодом для Linux. Мы настроим его на Ubuntu 22.04/Debian 11 и выше, разберем типичные проблемы и вопросы безопасности.

Часть 1: Установка и базовая настройка xrdp

1.1. Обновление системы и установка
Первым делом обновляем списки пакетов и устанавливаем сам xrdp и сервер графической сессии. Xrdp не рисует окна сам, он лишь выступает "переводчиком" между протоколом RDP и вашим рабочим столом (Xorg или Wayland).
Code: Select all
sudo apt update && sudo apt upgrade -y
sudo apt install xrdp -y

1.2. Выбор и настройка окружения рабочего стола
Xrdp лучше всего работает с классическими окружениями: XFCE, MATE, GNOME Flashback (с оговорками). Настоятельно рекомендую XFCE для серверов — оно легкое и стабильное.

Установка XFCE:
Code: Select all
sudo apt install xfce4 xfce4-goodies -y

Указание xrdp использовать XFCE:
Нужно отредактировать файл сессии, который запускается при подключении.
Code: Select all
echo "xfce4-session" > ~/.xsession
# Или, если вы настраиваете для всех пользователей:
sudo echo "xfce4-session" > /etc/xrdp/startwm.sh

Более правильный способ — отредактировать системный файл /etc/xrdp/startwm.sh. Найдите блок в конце файла (после строк fi) и закомментируйте старые вызовы, добавив свой:
Code: Select all
# test -x /etc/X11/Xsession && exec /etc/X11/Xsession
# exec /bin/sh /etc/X11/Xsession
exec startxfce4

1.3. Запуск и добавление в автозагрузку
Code: Select all
sudo systemctl enable xrdp --now
sudo systemctl status xrdp # Проверяем, что служба работает

1.4. Настройка брандмауэра (если используется UFW)
Xrdp по умолчанию слушает порт 3389/tcp, как и Windows RDP.
Code: Select all
sudo ufw allow from any to any port 3389 proto tcp
# ВНИМАНИЕ: Эта команда открывает порт для всех. В Части 3 мы это исправим.

1.5. Первое подключение
На вашей Windows-машине откройте Подключение к удаленному рабочему столу (mstsc.exe), введите IP-адрес вашего Linux-сервера. В появившемся окне xrdp используйте логин и пароль вашего пользователя Linux (не root!).

Уже на этом этапе вы можете столкнуться с первой проблемой: черный экран после ввода пароля. Решение — ниже.
Image
mexan
Администратор
Reputation: 0
Posts: 179
Topics: 138

#2by mexan » 04.12.2025, 22:38

Часть 2: Решение типичных проблем и тонкая настройка

2.1. Черный экран после входа
Самая частая проблема. Причины и решения:
  1. Проблема с правами на .xsession или .xsessionrc в домашней директории.
    Code: Select all
    chmod 644 ~/.xsession
  2. Конфликт с уже запущенным сеансом. Xrdp не может "захватить" существующую сессию. Выйдите из графического интерфейса на самом сервере (если он физический), либо принудительно завершите сессии:
    Code: Select all
    sudo kill -9 $(ps aux | grep 'Xorg' | grep -v grep | awk '{print $2}')
  3. Некорректный файл startwm.sh. Убедитесь, что правки, указанные в п.1.2, сделаны верно. После любых изменений в etc/xrdp/startwm.sh:
    Code: Select all
    sudo systemctl restart xrdp

2.2. Не работает переброс звука с Linux на клиент (Windows)
Xrdp поддерживает это через модуль xrdp-pulseaudio-installer. Установите его:
Code: Select all
sudo apt install xrdp-pulseaudio-installer -y
sudo systemctl restart xrdp
На клиенте Windows в подключении mstsc.exe зайдите во вкладку "Локальные ресурсы" -> "Настройка..." и убедитесь, что галочка "Звук" стоит на "Воспроизводить на удаленном компьютере".

2.3. Не работает копирование файлов (драйвер дисков)
Для работы необходимы две вещи:
  • На клиенте: В окне подключения mstsc.exe перейдите на вкладку "Локальные ресурсы" -> "Подробнее..." и выберите диски, которые хотите "перебросить".
  • На сервере: Должен быть установлен пакет xfce4-session. Иначе точка монтирования не появится. Проверьте установку.

2.4. Проблемы с раскладкой клавиатуры
Если раскладка "прыгает" или не переключается, создайте файл ~/.xsessionrc со следующим содержанием:
Code: Select all
export LANG=ru_RU.UTF-8
export LANGUAGE=ru_RU:ru
export LC_CTYPE=ru_RU.UTF-8
export GTK_IM_MODULE=xim
Image
mexan
Администратор
Reputation: 0
Posts: 179
Topics: 138

#3by mexan » 04.12.2025, 22:46

Часть 3: Безопасность (КРИТИЧЕСКИ ВАЖНЫЙ РАЗДЕЛ)
Открывать порт 3389 напрямую в интернет — очень плохая идея. xrdp, как и любой RDP-сервер, — цель для брутфорс-атак.

3.1. Смена порта (обфускация, не настоящая безопасность)
Отредактируйте конфиг /etc/xrdp/xrdp.ini. Найдите секцию [Globals] и строку port=3389. Смените порт на нестандартный, например:
Code: Select all
port=3390
Не забудьте переоткрыть порт в UFW и перезапустить службу.

3.2. Использование SSH-туннеля (НАСТОЯТЕЛЬНО РЕКОМЕНДУЕТСЯ)
Мы не открываем порт xrdp в интернет. Мы поднимаем туннель через защищенный SSH-канал.
  • На клиенте (Windows) с помощью PuTTY или встроенного OpenSSH создаем туннель:
    Code: Select all
    # В командной строке PowerShell или SSH-клиенте:
    ssh -L 33389:localhost:3389 ваш_пользователь@IP_вашего_сервера -N
  • Теперь в mstsc.exe подключаемся не к IP сервера, а к localhost:33389.
  • Все данные RDP пойдут внутри зашифрованного SSH-соединения.

3.3. Ограничение доступа по IP (Fail2Ban)
  1. Установите Fail2Ban для защиты от брутфорса:
    Code: Select all
    sudo apt install fail2ban -y
  2. Создайте файл конфигурации для xrdp: /etc/fail2ban/jail.d/xrdp.local
    Code: Select all
    [xrdp]
    enabled = true
    port = 3389,3390 # укажите ваш порт
    logpath = /var/log/xrdp-sesman.log
    maxretry = 5
    bantime = 3600
  3. После этого перезапустите fail2ban.

3.4. Использование корпоративного VPN (лучший вариант)
Самый безопасный сценарий — доступ к RDP только из внутренней сети, организованной через VPN (WireGuard, OpenVPN). В этом случае правила UFW можно строго ограничить, например, только для IP-пула VPN.
Image
mexan
Администратор
Reputation: 0
Posts: 179
Topics: 138

#4by mexan » 04.12.2025, 22:49

Часть 4: Полезные команды и логи для диагностики

  • Просмотр активных сессий RDP:
    Code: Select all
    sudo netstat -tnpa | grep ESTAB | grep :3389
  • Основные логи:
    /var/log/xrdp.log — логи сервиса xrdp.
    /var/log/xrdp-sesman.log — логи менеджера сессий (самые важные для отладки входа).
    Перезагрузка службы после любых изменений в конфигах:
    Code: Select all
    sudo systemctl restart xrdp
Image
mexan
Администратор
Reputation: 0
Posts: 179
Topics: 138


Return to Linux

cron