2013-11-11 1 views
1

Так что я не собираюсь брать кредит на этот скрипт, но мне нужно немного помочь с этим. Я новичок в PS, поэтому, пожалуйста, извините глупые вопросы.Добавить исключение из сценария брандмауэра

Мне нужно добавить исключения к этому скрипту, например, «192.168»./"10.0." ассортимент.

Я знаю, что это будет примерно так: IF remoteaddress = "blah", затем пропустите.

Но я не знаю, как отформатировать его для PowerShell.

Если кто-то может показать мне или указать мне в правильном направлении?

#Checks for IP addresses that used incorrect password more than 10 times 
#within 24 hours and blocks them using a firewall rule 'BlockAttackers' 

#Check only last 24 hours 
$DT = [DateTime]::Now.AddHours(-24) 

#Select Ip addresses that has audit failure 
$l = Get-EventLog -LogName 'Security' -InstanceId 4625 -After $DT | Select-Object @{n='IpAddress';e={$_.ReplacementStrings[-2]} } 

#Get ip adresses, that have more than 10 wrong logins 
$g = $l | group-object -property IpAddress | where {$_.Count -gt 10} | Select -property Name 

#Get firewall object 
$fw = New-Object -ComObject hnetcfg.fwpolicy2 

#Get firewall rule named 'BlockAttackers' 
$ar = $fw.rules | where {$_.name -eq 'BlockAttackers'} 

#Split the existing IPs into an array so we can search it for existing IPs 
$arRemote = $ar.RemoteAddresses -split(',') 

#Only collect IPs that aren't already in the firewall rule 
$w = $g | where {$_.Name.Length -gt 1 -and !($arRemote -contains $_.Name + '/255.255.255.255') } 

#Add the new IPs to firewall rule 
$w| %{ 
    if ($ar.RemoteAddresses -eq '*') { 
    $ar.remoteaddresses = $_.Name 
    }else{ 
    $ar.remoteaddresses += ',' + $_.Name 
    } 
} 

#Write to logfile 
if ($w.length -gt 1) { 
    $w| %{(Get-Date).ToString() + ' ' + $_.Name >> '.\blocked.txt'} 
} 

ответ

1

Что вы хотите - это белый список IP-адресов, которые вы никогда не хотите блокировать.

Тогда это случай, если вы не попали в вашу петлю, если вы столкнулись с белым IP-адресом.

$whitelist = @("10.0.0.1", "192.168.1.1") 
.. 
if ($IP -match $whitelist) { 
    #do nothing, debug here 
} else { 
    #block things 
} 

Это может быть немного сложно для вас на вашем уровне Powershell опыта, но взгляните на wail2ban, а Powershell скрипт, который я создал в качестве решения этой конкретной проблемы.

+0

Эй, спасибо за ответ. Я хотел бы использовать wail2ban, но ограничения GFIMAX не позволят мне развертывать его в массовом масштабе. (50+ серверов), поэтому мы просто хотим сделать очень простой скрипт. как и тот, который был опубликован. потому что мы знаем, какие IP-адреса собираются получить доступ к серверу, как только постоянное раздражение приходить утром и увидеть 5000 попыток на одном сервере. – Tr1cky

+0

Я не уверен, что GFIMAX ограничивает вас, но я создал wail2ban для флота подобного масштаба. Первоначально он просто проверял каждые X минут, если было слишком много событий по параметрам, но я изменил его для прослушивания новых событий журнала, для простоты. В идеале это может быть услуга, но это было не то, что я успел сделать. Если вы прочитаете хотя README, вы сможете хотя бы увидеть логику в том, что она пытается сделать, а затем применить в своем собственном скрипте. – glasnt

Смежные вопросы