2 votos

Problema con el script de Powershell que no se filtra por fecha

He creado este powershell función, básicamente, de tirar de eventos desde el registro NPS (Específicamente niega los intentos de autenticación) desde el último punto de la secuencia de comandos se ejecuta (el $fecha variable), a ordenar la IP y la fecha de registro de entrada fue escrita y agregar un array ($matriz) y exportar a un archivo CSV de registro.

Entonces yo uso el mismo array ($matriz) para ordenar los registros de la última hora, a ver si 10 o más existen y mover cualquier que cumplan con los criterios para una nueva matriz ($getip). (Algo así como una configuración de fail2ban pero para windows)

Funciona todo excepto al final de la función no es la línea que yo estoy usando la ordenación y recuento de los registros, me cuenta bien, pero no va a eliminar realmente los registros que están después de 1 hora.

Nadie puede ver nada de lo que me estoy perdiendo? Agradezco cualquier ayuda.

function Get-DeniedIP {
$denied = 'C:\bin\denied.csv' #CSV log of IP's that have been linked to denied auth attempts
$whitelist = Import-Csv 'C:\bin\whitelist.csv' #Location of whitelist csv
$datepath = 'C:\bin\cache' #If it does not exist that is fine
$bannedip = 'C:\bin\banned.csv' #CSV log of IP's that have reached the max failed auth and are banned
$check = [System.IO.File]::Exists($datepath)
if ($check -like '*False*') {
    (get-date).ToString() | Out-File $datepath
    $date = Get-Date
}
else {
    $date = Get-Content $datepath
    $date = Get-Date -Date $date
}
$log = Get-EventLog -LogName Security -Message "*Network Policy Server denied*" -After $date
$array = @()
foreach ($message in $log) {
    $address = ($message.message |  Select-String -Pattern "Calling Station Identifier:\s*\d{1,3}(\.\d{1,3}){3}" -AllMatches).Matches.Value
    $address = ($address |  Select-String -Pattern "\d{1,3}(\.\d{1,3}){3}" -AllMatches).Matches.Value
    $object = New-Object -TypeName PSObject
    $object | Add-Member -Name 'IP' -MemberType Noteproperty -Value $address
    $object | Add-Member -Name 'Date' -MemberType NoteProperty -Value $message.TimeWritten
    $array += $object
}
$final = $array | where {$whitelist.IP -notcontains $_.IP}
if ($final -eq $null) {}
else {$final | Export-Csv $denied -Append}
$final

$DT = [DateTime]::Now.AddHours(-1)
$getip = $array | group-object -property IP  | where {$_.Count -gt 10 -and 

$array.Date -ge $DT} | Select -Property Name | Export-Csv $bannedip -Append

}

1voto

Davidw Puntos 421

$DT = [DateTime]::Now.AddHours(-1) contiene la fecha y hora completas, sugeriría eliminar todo excepto la hora, ya que eso puede evitar que el script coincida con los registros en función de la hora.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: