Блокировать IP-адрес на основе X числа неудачных попыток входа?

Вопрос или проблема

Можно ли заблокировать IP-адрес после X количества неудачных попыток входа в Windows Server? Не для конкретной учетной записи, что я умею делать, а для всей машины.

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

Можно сделать это с помощью PowerShell и диспетчера задач. Это, возможно, не идеальное решение, но оно работает достаточно хорошо, и у меня около 100 заблокированных IP-адресов за два месяца. Я написал скрипт, который выбирает из журнала событий определенные события (“неудачная проверка”). Если есть много неудачных попыток входа с любого IP-адреса, то этот IP-адрес добавляется в правило фаервола (созданное вручную) под названием “BlockAttackers”, которое блокирует любой трафик к указанным IP-адресам.

Скрипт PS1:

$DT = [DateTime]::Now.AddDays(-1) # проверять только последние 24 часа

$l = Get-EventLog -LogName 'Security' -InstanceId 4625 -After $DT | Select-Object @{n='IpAddress';e={$_.ReplacementStrings[-2]} } # выберите IP-адреса, которые имеют неудачные проверки
$g = $l | group-object -property IpAddress  | where {$_.Count -gt 20} | Select -property Name # получить IP-адреса, которые имеют более 20 неверных попыток входа

$fw = New-Object -ComObject hnetcfg.fwpolicy2 # получить объект фаервола

$ar = $fw.rules | where {$_.name -eq 'BlockAttackers'} # получить правило фаервола с именем 'BlockAttackers' (должно быть создано вручную)

$arRemote = $ar.RemoteAddresses -split(',') #разделить существующие IP на массив, чтобы мы могли легко искать существующие IP

$w = $g | where {$_.Name.Length -gt 1 -and  !($arRemote -contains $_.Name + '/255.255.255.255') } # получить IP-адреса, которые еще не включены в правило фаервола. Включите маску подсети, которая автоматически добавляется к удаленному IP-фаерволу.

$w| %{$ar.remoteaddresses += ',' + $_.Name} # добавить IP в правило фаервола

Создайте задачу в планировщике и укажите событие 4625 (вход в Windows, включая терминальные службы). Но вы можете указать выполнение, например, дважды в час, чтобы избежать ненужной загрузки сервера.

Триггер планировщика

и после триггера выполняйте скрипт PowerShell. Вы также должны установить повышенные привилегии на выполнение этого скрипта, иначе он завершится с ошибкой безопасности.

выполнение скрипта PowerShell

Вы также можете привязать этот скрипт к другим событиям безопасности.

Ответ или решение

Решение проблемы блокировки IP-адресов после X числа неудачных попыток входа в систему на Windows Server требует интеграции действий между журналами событий и средствами управления брандмауэром. Эта необходимость возникает из-за распространенности атак типа «грубой силы», которые могут существенно нагружать серверную инфраструктуру и представлять угрозу безопасности.

Теория

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

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

Пример

Примером сценария решения описанной задачи может служить использование PowerShell для анализа журнала событий безопасности. Скрипт находит IP-адреса, с которых производились многочисленные неудачные попытки входа, и добавляет их в правило брандмауэра Windows для блокировки. Рассмотрим ключевые этапы создания такого сценария:

  1. Получение данных из журнала событий: Скрипт использует командлет Get-EventLog для извлечения записей об ошибках аутентификации (событие с ID 4625) за последние 24 часа.

  2. Агрегация данных: IP-адреса группируются, и идентифицируются те, с которых было больше определенного числа неудачных попыток.

  3. Взаимодействие с брандмауэром: Полученный список подозрительных IP-адресов передается в брандмауэр Windows, где они добавляются в существующее или новое правило блокировки трафика.

Пример сценария на PowerShell может выглядеть следующим образом:

$DT = [DateTime]::Now.AddDays(-1)
$logs = Get-EventLog -LogName 'Security' -InstanceId 4625 -After $DT | Select-Object @{n='IpAddress';e={$_.ReplacementStrings[-2]} }
$groupedLogs = $logs | Group-Object -Property IpAddress | Where-Object { $_.Count -gt 20 } | Select-Object -Property Name

$fw = New-Object -ComObject hnetcfg.fwpolicy2
$rule = $fw.Rules | Where-Object { $_.Name -eq 'BlockAttackers' }

if ($null -eq $rule) {
    # Создание правила брандмауэра, если оно отсутствует
    netsh advfirewall firewall add rule name="BlockAttackers" dir=in action=block remoteip=0.0.0.0/255.255.255.255
    $rule = $fw.Rules | Where-Object { $_.Name -eq 'BlockAttackers' }
}

$currentIPs = $rule.RemoteAddresses -split ','
$newIPsToBlock = $groupedLogs | Where-Object { !$currentIPs.Contains($_.Name + '/255.255.255.255') }

foreach ($ip in $newIPsToBlock) {
    $rule.RemoteAddresses += ',' + $ip.Name + '/255.255.255.255'
}

Применение

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

Кроме того, перед включением правила блокировки рекомендуется протестировать работу скрипта в контролируемых условиях, чтобы убедиться, что он не блокирует легитимные адреса. Это можно сделать, зафиксировав сгенерированные IP-адреса в тестовом файле и изучив их до применения их в правило брандмауэра.

Таким образом, это решение позволяет эффективно снизить нагрузку на сервер и повысить уровень безопасности, автоматизируя процесс блокировки IP-адресов, замеченных в попытках грубой силы. Оно адаптируется к потребностям и особенностям конкретной инфраструктуры, обеспечивая гибкость и надежную защиту.

Оцените материал
Добавить комментарий

Капча загружается...