Самое верное решение — использовать виртуальную приватную сеть (VPN) на основе популярных протоколов как WireGuard или OpenVPN.
Но бывают условия, когда нет возможности применить VPN туннель и приходится открывать прямое подключение к терминальному серверу RDP.

Протокол удаленного рабочего стола (RDP) — это технология, разработанная Microsoft, которая позволяет пользователям подключаться и управлять удаленным компьютером через сетевое соединение. RDP-сервер «слушает» эти входящие запросы на подключение. По умолчанию он работает на TCP-порту 3389. Этот сервис крайне быстрый и удобен для удаленной работы.
Основная проблема заключается не в самом протоколе, а в том, как он развёртывается и защищается. RDP становится уязвимым для атак перебором при публикации прямым доступом в интернет. Злоумышленники используют автоматизированные сканеры для поиска таких открытых серверов.
Как узнать, что ваш RDP-сервер уже под атакой?
Ваш сервер сам расскажет об этом в своих логах. Для этого не нужны сложные программы — достаточно встроенных инструментов Windows.

Шаг 1. Открываем «Просмотр событий» (Event Viewer).
Сделать это проще всего через поиск в меню «Пуск» или командой eventvwr.msc в окне «Выполнить» (Win+R).

Шаг 2. В Приложении «Просмотр событий» (Event Viewer) раскрыть ветку «Журналы Windows» и выбрать журнал «Безопасность».
В правой панели нажмите «Фильтр текущего журнала…».
В поле «Все коды событий» введите: 4625 (это код неуспешного входа). Нажмите ОК.
Если Вас атакуют, то и фильтрация журнала не понадобиться.

Шаг 3. Смотрим на статистику. Несколько ошибки за день — это нормально, пользователи могли промахнуться по кнопкам или забыть пароль.
Внимание! Если Вы видите сотни записей «код событий» 4625 за минуту и с частотой каждую секунду — это уже классический признак брутфорс-атаки.

Выбрав одно из событий 4625, Вы увидите подробности причины появления события отказа входа в систему.
Имя учётной записи, Домен учетной записи, Причина ошибки, Сетевой адрес источника, Имя ПК.
Переключаясь между событиями будет всегда указан другой логин.
Так работает автоматически перебор комбинаций, пытаясь подобрать Логин\Пароль к вашему серверу.
Программа брутфорс-атаки не генерирует случайные Логин\Пароль. Она пользуется справочником созданном на основе самых популярных паролей и логинов из скомпрометированных баз данных.
Мы узнали, что ваш RDP-сервер уже под атакой. Что дальше?

Если Вы уверены в своих силах и не боитесь навредить серверу или просто хотите делать всё своими руками — Добро пожаловать в практическую часть.
Далее Я детально, по шагам, покажу:
- Короткий чек-лист перед настройкой.
- Как написать PowerShell-скрипт для автоматического бана IP.
- Как создать правило для отслеживания события 4625 через Планировщик задач.
- Как привязать это к брандмауэру Windows.
Короткий чек-лист перед настройкой.
- Измените стандартный RDP-порт (3389 → другой)
Большинство атак начинаются с автоматического сканирования интернета на открытый порт 3389. Если вы смените порт, например, на 33890 или 50001, часть старых ботов просто пройдут мимо, даже не попытавшись подключиться.
Измените параметрPortNumberв реестре (HKLM\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp) и добавьте новое правило в брандмауэр. - Используйте сложные пароли для учётных записей пользователей. От 8 символов и более. Придумать пароль и запомнить его не сложно.
Например : «КажетсяДождьСобирается!» будет хорошим паролем. @Rf;tnczLj;lmCj,bhftncz!@ Так он будет выглядеть в английской раскладке. - Не используйте стандартные имена учётных записей (например, admin, administrator, user1). И вообще отключите их! Это первое, что перебирает брутфорс-скрипт.
Создайте учётные записи с уникальными, нестандартными именами, которые невозможно угадать (например, ivankrylov_adm или backup_operator_2025).
Пишем PowerShell-скрипт для автоматического бана IP.
Готовый скрипт который можно поправить под свой сервер.
$Last_n_Hours = [DateTime]::Now.AddHours(-5)
$log = «C:\PS\blocked_ip_rdp.txt«
$badRDPlogons = Get-EventLog -LogName ‘Security’ -after $Last_n_Hours -InstanceId 4625 | ?{$_.Message -match ‘Тип входа:\s+(3)\s’} | Select-Object @{n=’IpAddress’;e={$_.ReplacementStrings[-2]} }
$getip = $badRDPlogons | group-object -property IpAddress | where {$_.Count -gt 5} | Select -property Name
$current_ips = (Get-NetFirewallRule -DisplayName «BlockRDPBruteForce» | Get-NetFirewallAddressFilter ).RemoteAddress -split(«,»)
foreach ($ip in $getip)
{
if ($ip.name -and $ip.name -ne «-» -and !($current_ips -contains $ip.Name)) {
$current_ips += $ip.name
(Get-Date).ToString() + ‘ ‘ + $ip.name + ‘ IP заблокирован за ‘ + ($badRDPlogons | where {$_.IpAddress -eq $ip.name}).count + ‘ попыток за 5 часов’>> $log # запись события блокировки IP адреса в лог файл
}
}
Set-NetFirewallRule -DisplayName «BlockRDPBruteForce» -RemoteAddress $current_ips
Для его внедрения без редактирования, необходимо будет создать рабочую директорию «PS» на системном диске. Обычно это выглядит так C:/PS
Создайте текстовый документ и скопируйте в него полностью текс готового скрипта. Сохраните данный документ как «blockIP.ps1» в папку C:/PS
Готово! У Вас теперь есть скрипт который будет добавлять IP адрес в чёрный список брандмауэра Windows всех кто более 6 раз в течении 5 часов ввёл не верно комбинацию Логин\Пароль.
Так же, для удобства, извлечения IP адресов невнимательных пользователей из списка блокировок, предусмотрено логирование. Оно выполнено обычным текстовым документом в который записываются: Дата время IP адрес количество попыток за определённый период. Этот лог blocked_ip_rdp.txt будет записываться в той же рабочей директории где и скрипт.
Создаём правило для отслеживания события 4625 через Планировщик заданий.
PowerShell-скрипт сам по себе — только исполняемый код. Для его автоматического исполнения, необходимо создать в планировщике заданий Windows задачу на активацию скрипта при появлении в журнале Windows события 4625.
Запускаем планировщик заданий. Нажимаем «Создать простую задачу…». Называем «blockip» (описание по желанию) Далее. На вопрос «Когда вы хотите запускать задачу?» выбираем пункт «При занесении в журнал указанного события» Далее. Журнал: «Безопасность», Источник: «Microsoft Windows security auditing.», Код события: «4625» Далее.

Выбираем действие для задачи: «Запустить программу» Далее. Программа или сценарий, жмём кнопку Обзор… и выбираем созданный нами PowerShell-скрипт «blockIP.ps1» в папке C:/PS Открыть и Далее. В завершении жмём кнопку Готово.
В планировщике заданий Windows появится созданная задача. Необходимо зайти в неё для смены Параметра безопасности при выполнении задачи использовать следующую учётную запись пользователя и Изменить её на СИСТЕМА. Так же необходимо установить пункт Выполнять с наивысшими правами ОК.

На этом мы закончили создавать правило для отслеживания события 4625.
Сейчас будем привязывать это к брандмауэру Windows.
Мы создали PowerShell-скрипт и автоматизировали его срабатывание. Теперь мы создадим правило в брандмауэре Windows в которое будут добавляться блокировки выполняемые скриптом.
Заходим в Брандмауэр Windows. В нём выбираем «Дополнительные параметры». В «Правилах для входящий подключений» Создаём правило…
Откроется «Мастер создания правила для нового входящего подключения». На вопрос «Правило какого типа вы хотите создать» выбираем пункт «Для порта» Далее. Укажите «Протокол ТСР» (в дальнейшем его поменяем на любой) и «Определенные локальные порты:» необходимо указать выбранный вами RDP порт Далее. По умолчанию это 3389 порт.


Указываем действие, которое должно выполняться, когда подключение удовлетворяет указанным условиям. «Разрешить подключение» Далее.
Выбираем все профили для применения правила Далее. Имя указываем «BlockRDPBruteForce». Именно к этому имени правила будет обращаться PowerShell-скрипт и добавлять в него адреса. Описание: по желанию. Готово. В правилах для входящих подключений появится созданное правило «BlockRDPBruteForce».
Открываем свойства этого правила. Переходим во вкладку «Область». В разделе Удалённый IP-адрес ставим Указанные IP-Адреса: Добавить…
Указываем IP-адрес для соответствия:
В строке IP-адрес или подсеть: прописываем 8.8.8.8 Это адрес Google. Они будут первыми, кому вы закроете доступ к Вашему серверу.
Переходим во вкладку «Протоколы и порты». Выбираем Тип протокола: Любой. Переходим во вкладку «Общие» и в разделе Действие, переводим на «Блокировать подключение» ОК.
Вы ВЕЛИКОЛЕПНЫ! Теперь Ваш сервер RDP сам блокирует атакующих.
В папке C:\PS появился текстовый документ blocked_ip_rdp.txt. В нём записаны те кто уже давно пытается проникнуть на сервер.
Пример первых записей в логе blocked_ip_rdp.txt
08.05.2024 10:57:18 92.51.2.2 IP заблокирован за 1845 попыток за 5 часов
08.05.2024 10:57:19 37.112.57.41 IP заблокирован за 675 попыток за 5 часов
08.05.2024 10:57:19 176.197.55.178 IP заблокирован за 388 попыток за 5 часов
08.05.2024 10:57:19 95.131.178.58 IP заблокирован за 568 попыток за 5 часов
08.05.2024 10:57:19 94.126.201.222 IP заблокирован за 503 попыток за 5 часов
08.05.2024 10:57:19 87.244.37.102 IP заблокирован за 406 попыток за 5 часов
08.05.2024 10:57:19 5.165.7.211 IP заблокирован за 348 попыток за 5 часов
В свойствах правила «BlockRDPBruteForce» во вкладку «Область» раздела Удалённый IP-адрес: будут прописаны IP-адрес тех кто более 6 раз в течении 5 часов ввёл не верно комбинацию Логин\Пароль. В этом же разделе, можно будет удалять Адреса «Рассеянных пользователей».
