Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить 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
5. Скрипт
Код: Выделить весь код
# Файл с временем
$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