Настройка RDP сервера Windows (RDP Wrapper), XRDP в Ubuntu и клиентов

RDP (Remote Desktop Protocol — протокол удалённого рабочего стола) — протокол прикладного уровня, разработанный Майкрософт, использующийся для обеспечения удалённой работы пользователя с сервером, на котором запущен сервис терминальных подключений. Клиенты существуют практически для всех версий Windows (включая Windows CE и Mobile), Linux, FreeBSD, Mac OS X. По умолчанию используется порт TCP 3389. Официальное название Майкрософт для клиентского ПО — Remote Desktop Connection или Terminal Services Client (TSC), в частности, клиент в Windows 2k/XP/2003/Vista/2008/7 называется mstsc.exe.

  • Утилита командной строки Linux rdesktop (grdesktop)
    apt install rdesktop
    rdesktop 192.202.123.123:50009

    Для подключения к Microsoft Azure правильно укажите внешний порт

  • remmina более удобный выбор, чем rdesktop
    apt install remmina

Программа RdpGuard защищает от brute-force атак. Защищаемые протоколы и службы: RDP, FTP, IMAP, POP3, SMTP, MySQL, MS-SQL, IIS Web Login, ASP.NET Web Forms, MS Exchange, RD Web Access, VoIP/SIP, и т.д.

Поддерживаемые ОС: Windows Vista/7/8/10/11 and Windows Server 2008/2012/2016/2019/2022

Программа получает события из стандартного журнала Windows, и если количество неудачных попыток входа в систему с одного IP-адреса достигает установленного предела, IP-адрес злоумышленника будет заблокирован на указанный в настройках период времени. Блокирование IP-адреса осуществляется с помощью стандартного встроенного Windows Firewall.

Все операции реализованы стандартными средствами Windows, а программа только автоматически добавляет/удаляет IP-адреса в брандмауэр, благодаря чему поддерживается высокая производительность, совместимость и стабильность. Для конфигурирования имеется как GUI, так и интерфейс командной строки. Приложение написано на .Net 4, при отсутствии его необходимо будет установить. При блокировании/разблокировании/отказе входа можно назначить дополнительное действие. В программе можно задавать белые списки, например, для интрасети или удаленных офисов. Ввиду того, что brute-force атаки теперь производятся не только по стандартным, но и по всем открытым портам, актуальность использования данной программы очень высока.

Установка RDP Wrapper с автообновлением

Что такое RDP Wrapper?

RDP Wrapper - программа, являющаяся альтернативой службе удаленных рабочих столов. Она может понадобится по причине того, что Вас не устраивают ограничения в плане работы удаленного рабочего стола, вводимые Microsoft на различные редакции Windows Благодаря данной программе, на любой версии Windows можно реализовать:

  • Полноценный RDP сервер (который отсутствует в домашних редакциях Windows);
  • Возможность одновременной работы нескольких пользователей через удаленный рабочий стол;
  • Поддержка работы по удаленному рабочему столу с использованием нескольких мониторов.

Итак приступи к установке, англоязычная документацию читайте по ссылке https://github.com/asmtron/rdpwrap/blob/master/binary-download.md.

  1. Загрузите RDPWrap-v1.6.2.zip по ссылке https://github.com/stascorp/rdpwrap/releases и распакуйте в директорию "%ProgramFiles%\RDP Wrapper". Для установки RDPWrap вы должны использовать только эту директорию "%ProgramFiles%\RDP Wrapper" (обычно C:\Program Files\RDP Wrapper), иначе автообновление работать не будет.
  2. Загрузите autoupdate.zip и распакуйте в директорию "%ProgramFiles%\RDP Wrapper".
  3. Чтобы включить в автозапуск Windows 10 файл autoupdate.bat при запуске системы, запустите следующий вспомогательный пакетный файл от имени администратора: "%ProgramFiles%\RDP Wrapper\helper\autoupdate__enable_autorun_on_startup.bat"
  4. Установите в своем антивирусе или Защитнике Windows исключение для папки «% ProgramFiles% \ RDP Wrapper», чтобы предотвратить удаление файлов RDP Wrapper.
  5. Для ручного обновления RDP Wrapper (файла rdpwrap.ini) запустите командный файл автообновления autoupdate.bat от имени администратора: "%ProgramFiles%\RDP Wrapper\autoupdate.bat"

Для того чтобы проверить правильность настроек утилиты RDP Wrapper запустите файл RDPConf и вы должны увидеть

Установка XRDP сервера в Ubuntu 20.04

XRDP – это реализация протокола удалённого рабочего стола Microsoft (RDP) с открытым исходным кодом, которая позволяет графически управлять удалённой системой. В отличие от коммерческого продукта, XRDP в Linux позволяет работать одновременно с одним компьютером или виртуальной машиной неограниченному числу пользователей, что позволяет активно использовать XRDP для разворачивания терминальных серверов на базе Ubuntu 20.04.

Какой порт использует xRDP? xRDP принимает соединения по порту 3389/tcp.

apt update
apt install xrdp

При установке генерируется сертификат, который необходим для функционирования RDP протокола, строка ниже указывает, что сертификат успешно создан:

ssl_gen_key_xrdp1 ok

Необходимо ввести пользователя xrdp, от имени которого работает XRDP в системе, в группу ssl-cert. Выполните команду:

adduser xrdp ssl-cert

Затем добавьте службу xrdp в автозапуск и перезапустите её для применения изменений:

systemctl enable xrdp
systemctl restart xrdp

В конце настройте файрволл, для UFW, это будет выглядеть так:

ufw allow from 192.168.2.0/24 to any port 3389

Стандартный клиент RDP для Windows называется "Подключение к удалённому рабочему столу". В нем необходимо ввести IP-адрес или имя сервера, можно указать логин и пароль для входа в удалённую машину, настроить различные параметры взаимодействия. Клиенты RDP существуют для любого устройства: телефона, планшета, ноутбука, любого компьютера.

Для смены раскладки клавиатуры в Ubuntu 20.04 используется комбинация клавиш Super+Пробел. Если в окне раскладка не меняется, и вводится пароль не на том языке, то необходимо отключить клиент RDP, закрыть его, поменять язык в Windows на нужный и снова подключиться к удалённой машине.

  • XRDP откроет новый сеанс, поэтому у вас могут возникнуть проблемы, если сеанс уже открыт на удаленном компьютере. Если это так, тогда измените startwm.sh, чтобы сбросить существующий сеанс.
nano /etc/xrdp/startwm.sh

Добавьте эти строки в начале файла:

unset DBUS_SESSION_BUS_ADDRESS
unset XDG_RUNTIME_DIR
  • Ошибка Failed to execute child process "dbus-launch" Для решения нужно установить пакет dbus-x11 и перезапустить xrdp
apt install dbus-x11

FAQ RDP PowerShell

Эти команды используются для Windows и Windows сервер.

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f
netsh firewall set service remotedesktop enable
# Активируем пользователя
$adminUser = "Administrator"
 
#Проверяем если пользователь Administrator/Admin существует
$existingUser = Get-WmiObject -Class Win32_UserAccount | Where-Object { $_.Name -eq $adminUser }
 
if ($existingUser) {
    net user Administrator /active:yes
    net user Administrator /expires:never
} else {
    net user admin /active:yes
    net user admin /expires:never
}
 
# Меняем порт в regedit
$portRDP=(Get-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp\").PortNumber
if ($portRDP -eq 3389) {
 
Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp\" -Name PortNumber -Value 1239
 
# добавляем правило для нового порта
netsh advfirewall firewall add rule name=”RDP 1239dir=in action=allow protocol=TCP localport=1239
 
# Отключаем существующие правила для RDP которые у нас по умолчанию
$array = @('Remote Desktop - Shadow (TCP-In)','Remote Desktop - User Mode (UDP-In)','Remote Desktop - User Mode (TCP-In)')
foreach ($i in $array) {
 
$Params = @{
"DisplayName" = $i
}
 
Disable-NetFirewallRule  @Params
}
 
 
#Собираем лог по брутфорсу в файл C:\bruteforce.txt
$timeout = 5 # Время задержки в секундах
 
# Get-WinEvent Security -FilterXPath "*[System[EventID=4625] and EventData[Data[@Name='LogonType']=3]]" | Select TimeCreated,@{n="UserName";e={$_.properties[5].value}},@{n="IP";e={$_.properties[19].value}} > 'C:\bruteforce.txt'
 
$eventLog = Get-WinEvent -FilterHashtable @{
    LogName = 'Security'
    ID = 4625
}
 
foreach ($event in $eventLog) {
    $ipAddress = $event.Properties[19].Value
    $username = $event.Properties[5].Value
 
#    Write-Host "IP: $ipAddress, Username: $username"
}
 
$eventLog > C:/bruteforce.txt
 
$timer = [System.Diagnostics.Stopwatch]::StartNew()
 
while ($timer.Elapsed.TotalSeconds -lt $timeout) {
    # Ожидание выполнения задержки
    Start-Sleep -Milliseconds 100
}
$timer.Stop()
# ребутаем сервер чтобы приминились изменения 
shutdown /r /t 0
}
else {
Write-Output "Порт уже 1239"
}
netsh advfirewall firewall add rule name=”RDP 3389dir=in action=allow protocol=TCP localport=3389
PQ VPS сервера в 28+ странах.