Вопрос или проблема
Можно ли заблокировать 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. Вы также должны установить повышенные привилегии на выполнение этого скрипта, иначе он завершится с ошибкой безопасности.
Вы также можете привязать этот скрипт к другим событиям безопасности.
Ответ или решение
Решение проблемы блокировки IP-адресов после X числа неудачных попыток входа в систему на Windows Server требует интеграции действий между журналами событий и средствами управления брандмауэром. Эта необходимость возникает из-за распространенности атак типа «грубой силы», которые могут существенно нагружать серверную инфраструктуру и представлять угрозу безопасности.
Теория
Неудачные попытки входа в систему часто происходят в случае, если злоумышленники используют атаки грубой силы, чтобы попытаться подобрать пароли. Это может негативно сказаться на работе сервера, вызывая чрезмерную нагрузку, а также повышает риск компрометации системы.
Средства обеспечения безопасности Windows Server, такие как журнал событий безопасности и брандмауэр Windows, позволяют отслеживать такие попытки и реагировать на них. Однако из коробки Windows не предоставляет прямого механизма для блокировки IP-адресов на основе неудачных попыток входа на сервер. Поэтому пользователи вынуждены прибегать к скриптовым решениям для автоматизации этого процесса.
Пример
Примером сценария решения описанной задачи может служить использование PowerShell для анализа журнала событий безопасности. Скрипт находит IP-адреса, с которых производились многочисленные неудачные попытки входа, и добавляет их в правило брандмауэра Windows для блокировки. Рассмотрим ключевые этапы создания такого сценария:
-
Получение данных из журнала событий: Скрипт использует командлет
Get-EventLog
для извлечения записей об ошибках аутентификации (событие с ID 4625) за последние 24 часа. -
Агрегация данных: IP-адреса группируются, и идентифицируются те, с которых было больше определенного числа неудачных попыток.
-
Взаимодействие с брандмауэром: Полученный список подозрительных 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-адресов, замеченных в попытках грубой силы. Оно адаптируется к потребностям и особенностям конкретной инфраструктуры, обеспечивая гибкость и надежную защиту.