rango13
13-12-2018, 13:01
Всем привет!
Есть такая проблема: имеется смотрящий в мир сервер-терминалов, куда подключаются сотрудники организации для работы. В журнале событий "Microsoft-Windows-RemoteDesktopServices-RdpCoreTS/Operational" видны эти попытки в таком виде:
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
Есть такая проблема: имеется смотрящий в мир сервер-терминалов, куда подключаются сотрудники организации для работы. В журнале событий "Microsoft-Windows-RemoteDesktopServices-RdpCoreTS/Operational" видны эти попытки в таком виде:
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