Раз мы более - менее разобрались с тем, как важны пароли и логины (ссылка на первую часть ЗДЕСЬ), предлагаю ещё больше обезопасить наш открыто висящий RDP в сети Интернет буквально за полчаса максимум.

В поисках самого простого и бесплатного (или максимально дешевого) способа защиты RDP предлагаю добавить известный многим IPBAN от Jeff Johnson: https://github.com/jjxtra. Единственный замеченный минус - у меня, почему-то, не зависимо от того указываю я 3 попытки для блокировки или 5 - всё равно начинает блокировать где-то с пятой попытки (а может это проблема используемой мной версии - 1.8.0), хотя потом я решил, может это и к лучшему - если предположить что у нас до блокировки учетной записи даётся 3 попытки, то оставшиеся две вполне сгодятся для звонка системному администратору с просьбой сбросить пароль. В общем, для начала нужно скачать саму программу в соответствии с используемой у вас ОС:

https://github.com/DigitalRuby/IPBan/releases

Пока скачивается архив надо настроить локальную политику безопасности: щелкаем на значок поиска в панели задач так и вводим "локаль..." или "secpol.msc" (если нет значка поиска жмем WIN+R,вводим secpol.msc и жмем Enter), затем переходим во вкладку Локальная политика и Политика аудита. В локальных политиках включаем аудит входа в систему и аудит СОБЫТИЙ входа в систему, ставим галки как на скрине - Успех и Отказ для обеих политик и нажимаем ОК:

Архив уже должен скачаться, разахивируем его на любой диск, лучше в корень диска чтобы был проще путь к установке, я извлек в папку ipb на диск C:

Теперь запускаем командную строку от имени администратора вставляем команду:

sc.exe create IPBAN type=own start=delayed-auto binPath=c:\ipb\DigitalRuby.IPBan.exe DisplayName=IPBAN


! Я настраивал на Windows Server 2019, IPBAN корректно работает на Server 2012 и новее, если у вас 2008/2008R2, то всё сложнее, да и вообще на 2008 оно работает не всегда адекватно, но если сильно хочется... (и ещё кое-что: я проверить это не могу, так как самый старый сервер у меня на 2012, так что на свой страх и риск. Ах, да, на старых клиентах с XP и не обновлённой семеркой пропадёт путь к сетевым папкам после запрета NTLM, так что ещё раз: IPBAN ставим на 2008 если только очень хочется)

! ещё раз, текст ниже курсивом - ЭТО ТОЛЬКО ДЛЯ 2008/2008R2, не вздумайте запрещать NTLM на новых версиях ОС Windows Server !

! перед тем как начать вносить изменения настоятельно рекомендую или иметь физический доступ к серверу или проверить работоспособность сторонних программ для удаленного подключения - Anydesk, Rudesktop и т.д.

В командной строке от администратора вводим команду:

sc create IPBAN binPath= c:\ipb\DigitalRuby.IPBan.exe DisplayName= "IPBAN"

Дальше нужно запретить всё NTLM (а заодно и доступ к общим папкам на сервере для WinXp и Win7):

Открываем редактор групповых политик (gpedit.msc) и идём по пути:

Конфигурация компьютера > Конфигурация Windows > Политики безопасности > Локальные политики > Параметры безопасности > Сетевая безопасность: ограничения NTLM: входящий трафик

Выбираем Запретить все учетные записи и надеемся что ничего не отвалится.

Всё, возвращаемся к более "свежим ОС" или продолжаем настройку "старого" сервера:


и жмем Enter, должно выйти так (не забываем путь указать свой, у меня C:\ipb):

Если всё ок, пишет Успех
Если всё ок, пишет Успех

Теперь надо сконфигурировать настройки IPBAN под наши нужды, открываем в текстовом редакторе файл ipban.config (C:\ipb\ipban.config), нажимаем CTRL+F5 и по порядку:

1) добавим в исключения нашу локальную сеть (например, у нас сеть 192.168.1.*), ищем <add key="Whitelist" value= и пишем:

<add key="Whitelist" value="192.168.1.0/24"/>

2) указываем количество попыток залогиниться - я указал 3 попытки (почему-то у меня по факту 6, но кто любит четкость работы - всегда есть идеально работающие платные программы с хорошей тех. поддержкой), ищем FailedLoginAttemptsBeforeBan и пишем число попыток 3 до блокировки:

<add key="FailedLoginAttemptsBeforeBanUserNameWhitelist" value="3"/>

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

<add key="ExpireTime" value="00:10:00:00"/>

Сохраняем наш файл, осталось запустить нашу службу и при необходимости добавить её в автозапуск. Перед запуском убедитесь что у вас работает именно брандмауэр Windows, если используется сторонний, например от антивируса, то работать IPBAN не будет.

Открываем службы, находим службу IPBan и для первого раза я рекомендую её просто запустить, и проверить всё ли работает как надо, если за несколько дней проблем не будет можно выбрать автозапуск:

После успешного запуска автоматически создадутся правила в брандмауэре Windows. Там можно просмотреть заблокированные IP адреса и удалить ненужный на случай "особого работника", чтобы не ждать пока снимется блокировка:

Надеюсь, эта статья поможет Вам избавиться от многих проблем с не очень хорошими людьми, которые любят жить за ваш счёт.

Комментарии (18)


  1. litos
    08.11.2022 04:20
    +6

    В интернет выставлять RDP вообще не лучшее решение, лучше организовать инфраструктуру так, чтобы пользователи подключались к внутренней сети через VPN и дальше уже к нужным ресурсам


    1. aik
      08.11.2022 08:40

      Это если делать всё красиво. Но, к сожалению, пользователь в основной своей массе туповат и не сможет настроить подключение по VPN. Потому временами приходится выставлять rdp наружу.

      Само собой, не голым задом - закрыть все лишние порты, не использовать стандартные имена пользователей, использовать длинные случайные пароли, вовремя ставить обновления, банить ботов...


      1. Rsa97
        08.11.2022 09:26

        Минимальная настройка VPN для L2TP или IKEv2 в Windows 8 и выше — одна строчка PowerShell, которую можно выложить на корпоративной wiki, отправить пользователю в мессенджере или по почте, ввести самому в сеансе удалённой поддержки…
        После этого пользователю остаётся сделать три клика мыши и ввести свои корпоративные логин/пароль.


        1. aik
          08.11.2022 09:37
          +1

          Не все такие уж «корпоративные».
          Для l2tp иногда приходится править реестр.
          Куча мест, где я настраивал rdp-сервера, не предполагают дальнейшей поддержки пользователей. То есть поломки чиню, если требуется, но вот каждому помогать настраивать подключение не собираюсь.

          Чем больше накрутишь безопасности, тем менее удобно всем этим пользоваться.
          И тем больше пользователи будут пытаться её обойти, делая всякие дыры в заборе.

          Потому необходимо соблюдать баланс. Одно — когда вы большая контора с соответствующими оборотами, кучей сотрудников и уязвимых мест. Тут на вас будет и промышленный шпионаж наезжать, и власти, и вообще кто попало в надежде поживиться.
          И другое — когда вы небольшой магазинчик с сервером на три-пять юзеров. Тут ваши враги — только боты да сами юзеры. От ботов — всё вышеописанное помогает, от юзеров — запреты на запуск программ (а в идеале — вообще удалённо отдавать одну только 1С, без доступа к рабочему столу).


        1. avelor
          08.11.2022 09:41

          Или можно вспомнить старый-добрый cmak:) но я бы конечно рекомендовал ssl vpn (вроде sstp, anyconnect, openvpn в конце концов) - минимальны проблемы с прохождением трафика у разных провайдеров и домашних роутеров


          1. aik
            08.11.2022 11:06

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

            Доходит до того, что сидя с ноутом в офисе они по привычке всё равно заходят на сервер терминалов через vpn.


      1. NikaLapka
        08.11.2022 10:39
        +1

        Можете начать с "дефолтного", каждый пользователь устанавливает https://openvpn.net/client-connect-vpn-for-windows/ путём скачать - нажать "далее" - "далее" - "далее" - "готово". Затем открывает свою почту и прямо из письма перетягивает иконку единственного, вложенного .ovpn файла в окошко с программой, где всего одна кнопка Вкл\Выкл, всё, никаких настроек со стороны пользователя, доверие к приложению OpenVPN Inc. значительно больше, чем к .exe с гитхаба, секьюрность по взрослому, порт сервера защищён "tls-auth", каждый пользователь "уникален", при необходимости можно управлять маршрутизацией у самого клиента "push route". "Чего ж тебе еще надо, собака? К\ф Иван Васильевич меняет профессию"


        1. aik
          08.11.2022 11:04

          каждый пользователь устанавливает

          Самостоятельно пользователь способен установить только вируса. :) Это раз.
          Админить этот openvpn кто будет? Это два. Создать пользователя на сервере терминалов обычно может и тот мальчик, который ходит 1С обслуживать. А вот добавить пользователя в openvpn?

          Я не говорю, что vpn надо избегать — наоборот, это самое правильное решение. Выдать пользователю служебный ноутбук, отобрать все права, настроить трёхфакторную аутентификацию. Это всё правильно и красиво. И я тоже пытаюсь такой вариант сделать. Но это я могу сделать только у «своих» пользователей, которые у меня на поддержке. А вот одноразовым нужно максимально простое и дубовое решение.


          1. Fitrager
            08.11.2022 12:00

            Я использую VeeamPN - там пользователи просто создаются и просто отключаются. Программа бесплатна.


            1. aik
              08.11.2022 12:47

              Интересно, но для "просто и дубово" не катит. Это к ней надо виртуалку запускать, дополнительные инструкции писать...


              1. Fitrager
                08.11.2022 16:13

                Я разворачиваю из .ova шаблона и прописываю в настройках маршруты и DNS сервера. Все. За 20 минут можно настроить.


                1. aik
                  08.11.2022 16:50

                  Я разворачиваю из .ova шаблона

                  Разворачиваете где? На сервере виртуальных машин наверняка.
                  Для этого его надо иметь. Уметь настраивать. И т.п.


                  1. Fitrager
                    08.11.2022 17:08

                    На гипервизоре esxi. Да там все довольно просто по сравнению с Kubernetes, который я сейчас изучаю.


                    1. aik
                      08.11.2022 17:23

                      Далеко не каждая мелкая контора держит у себя гипервизоры. Их сервер-то обычно из себя представляет десктопный комп, в который побольше памяти напихали.


  1. aik
    08.11.2022 08:37
    +1

    Есть IDDS от Cyberarms. Старенькая, но зато работает под 2008 без лишних танцев с бубнами.


    1. avelor
      08.11.2022 09:37

      Аналогично rdp defender. Только что код закрыт.. в отличие от решния ТС один ip забаненый - одно правило в фаерволе


  1. alex-open-plc
    08.11.2022 12:12

    Использую ssh, проброс порта. В частности набор: Bitvise SSH Server + PuTTY
    Bitvise SSH Server для некоммерческого использования - бесплатен. Брандмауэр - маршрутизатор.


  1. savostin
    08.11.2022 22:11
    +1

    Украдено подсмотрено здесь (10-летней давности, но у меня работает):

    #Checks for IP addresses that used incorrect password more than 10 times
    #within 24 hours and blocks them using a firewall rule 'fail2ban'
    
    #Check only last 24 hours
    $DT = [DateTime]::Now.AddHours(-24)
    
    #Select Ip addresses that has audit failure
    $l = Get-EventLog -LogName 'Security' -InstanceId 4625 -After $DT | Select-Object @{n='IpAddress';e={$_.ReplacementStrings[-2]} }
    
    #Get ip adresses, that have more than 10 wrong logins
    $g = $l | group-object -property IpAddress | where {$_.Count -gt 10} | Select -property Name
    
    #Get firewall object
    $fw = New-Object -ComObject hnetcfg.fwpolicy2
    
    #Get firewall rule named 'BlockAttackers' (must be created manually)
    $ar = $fw.rules | where {$_.name -eq 'fail2ban'}
    
    #Split the existing IPs into an array so we can search it for existing IPs
    $arRemote = $ar.RemoteAddresses -split(',')
    
    #Only collect IPs that aren't already in the firewall rule
    $w = $g | where {$_.Name.Length -gt 1 -and !($arRemote -contains $_.Name + '/255.255.255.255') }
    
    #Add the new IPs to firewall rule
    $w| %{
      if ($ar.RemoteAddresses -eq '*') {
        $ar.remoteaddresses = $_.Name
      }else{
        $ar.remoteaddresses += ',' + $_.Name
      }
    }
    
    #Write to logfile
    if ($w.length -gt 1) {
      $w| %{(Get-Date).ToString() + ' ' + $_.Name >> '.\blocked.txt'}
    }