|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Скрипт блокировки неудачных попыток входа на сервер терминалов. |
|
PowerShell - Скрипт блокировки неудачных попыток входа на сервер терминалов.
|
Новый участник Сообщения: 35 |
Профиль | Отправить PM | Цитировать
Всем привет!
Есть такая проблема: имеется смотрящий в мир сервер-терминалов, куда подключаются сотрудники организации для работы. В журнале событий "Microsoft-Windows-RemoteDesktopServices-RdpCoreTS/Operational" видны эти попытки в таком виде: Get-WinEvent -LogName Microsoft-Windows-RemoteDesktopServices-RdpCoreTS/Operational | Where-Object {$_.ID -eq "140"}
TimeCreated Id LevelDisplayName Message ----------- -- ---------------- ------- 10.12.2018 14:56:41 140 Предупреждение Не удалось подключить клиентский компьютер с IP-адресом 77.222.159.189 из-за неправильного имени пользователя или пароля. 10.12.2018 14:56:52 140 Предупреждение Не удалось подключить клиентский компьютер с IP-адресом 77.222.159.189 из-за неправильного имени пользователя или пароля. Как я это вижу: Если подобное событие появляется с одним и тем же ip-адресом 5 раз подряд - внести во входящие правила файервола Windows запрет на любой коннект на сервер-терминалов с этого ip-адреса. Как я это вижу на практике:
1. В планировщике задач Windows создать задачу, которая будет запускать ps-скрипт по появлению в журнале событий "Microsoft-Windows-RemoteDesktopServices-RdpCoreTS/Operational" события с ID=140. 2. Скрипт после запуска парсит само событие, вытаскивает с него ip-адрес и смотрит, если ли в уже ранее созданном файле этот ip-адрес и его счётчик. Что-то вроде того: 77.222.159.189 3 77.222.159.181 1 77.222.159.189 5 3. Если ip-адрес есть в файле и счётчик не равен 5(неудачным попыткам подключения к серверу терминалов), значит увеличить счётчик напротив этого ip-адреса на единицу. 4. Когда счётчик у ip-адреса увеличивается до 5 - внести этот ip-адрес в список заблокированных ip на файерволе Windows. C пунктом 1 всё предельно ясно. С пунктом 4 тоже: netsh advfirewall firewall add rule name="BlockIP" Dir=In Action=Block RemoteIP=77.222.159.189/32 Затык в п.3. Можете дать направление с примерами, чтобы самому разобраться? Что есть сейчас:
$Event = Get-WinEvent -FilterHashTable @{LogName='Microsoft-Windows-RemoteDesktopServices-RdpCoreTS/Operational';ID='140'} -maxevent 1 $regex = '\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b' $Event | Out-String -Stream | select-string -Pattern $regex -AllMatches | % { $_.Matches } | % { $_.Value } | sort-object | Get-Unique >> D:\blocked_ip.txt |
|
Отправлено: 13:01, 13-12-2018 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать 1. Привязка к событию может вызвать локальный DOS, и ресурсы исчерпаются быстрее, чем будут выполняться скрипты, что приведет к неправильным подсчетам, если несколько скриптов не успели завершиться.
2. Самое простое запускать скрипт, раз в 30/60 или более минут. 3. Создать два файла: первый содержит набор ip-адрессов, второй файл время последнего запуска скрипта 4. Т.к. нет возможни посмотреть, что за событие 140, то посчитайте в какой по порядку с 0 - Properties содержится IP и подставьте вместо X - $Event.Properties[X].Value $Event = Get-WinEvent -FilterHashTable @{LogName='Microsoft-Windows-RemoteDesktopServices-RdpCoreTS/Operational';ID='140'} -maxevent 1 $Event.Properties # Файл с временем $tfile = "time.txt" # Файл с IP $ipfile = "ip.xml" # Время последнего события, если есть, то ставим текущий день try { $ST = [DateTime]::ParseExact( (Get-Content $tfile -Raw).Trim(), "yyyy-MM-dd HH:mm:ss", [System.Globalization.CultureInfo]::InvariantCulture ) } catch { $ST = [DateTime]::ToDay } # Заполняем hashtable try { $ip = Import-CliXML $ipfile } catch { $ip = @{} } $Events = Get-WinEvent -FilterHashTable @{LogName='Microsoft-Windows-RemoteDesktopServices-RdpCoreTS/Operational';ID='140';StartTime=$ST} foreach($Event in $Events) { $event_ip = $Event.Properties[X].Value if($event_ip -as [IPAddress]) { if (-not $ip.ContainsKey($event_ip)) { $ip[$event_ip] = 1 } if($ip[$event_ip] -ne "Block") { if ($ip[$event_ip] -lt 5) { $ip[$event_ip] += 1 } if ($ip[$event_ip] -ge 5) { netsh advfirewall firewall add rule name="BlockIP" Dir=In Action=Block RemoteIP="$event_ip/32" $ip[$event_ip] = "Block" } } } } if($Events) { # Экспортируем список IP $ip | Export-Clixml $ipfile # Сохраняем время последнего события $Events[0].TimeCreated.AddSeconds(1).ToString("yyyy-MM-dd HH:mm:ss") | Out-File $tfile } |
Последний раз редактировалось Kazun, 13-12-2018 в 15:06. Отправлено: 15:01, 13-12-2018 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 75
|
Профиль | Отправить PM | Цитировать После недавних обновлений в Windows 2012 ошибка входа перестала вызывать событие 140. Вообще не появляется предупреждение в журнале Microsoft-Windows-RemoteDesktopServices-RdpCoreTS при неудачном вводе пароля. Просто сброс сеанса без указания IP С 20.08.19 на всех серверах. Ни у кого идей новых не появилось?
|
Отправлено: 15:35, 05-09-2019 | #3 |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать Цитата boot-a:
неудачные попытки соединения блокируются внешним брандмаэром |
|
Отправлено: 11:23, 06-09-2019 | #4 |
Пользователь Сообщения: 75
|
Профиль | Отправить PM | Цитировать Не совсем понял к чему ссылка... Вопрос в том, в каком логе можно сейчас найти ip адрес-источник неудачной попытки входа.
|
|
Отправлено: 10:56, 09-09-2019 | #5 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
2012 R2 - [решено] Неизвестный источник попыток входа на сервер | Candyman | Windows Server 2012/2012 R2 | 7 | 05-12-2018 09:19 | |
2008 R2 - Хитрое сохранение паролей входа на сервер терминалов | TheMatrix | Windows Server 2008/2008 R2 | 5 | 28-03-2012 17:26 | |
[решено] Сервер терминалов и логон-скрипт | mattveiko | Microsoft Windows NT/2000/2003 | 4 | 22-07-2010 13:28 | |
2008 R2 - сервер терминалов и шлюз терминалов на одной машине | macchina | Windows Server 2008/2008 R2 | 0 | 01-12-2009 12:27 | |
[решено] Сервер терминалов, время не активного сеанса до блокировки экрана | bool | Microsoft Windows NT/2000/2003 | 3 | 25-04-2009 21:03 |
|