Het afhandelen van brute-force RDP-aanvallen is behoorlijk irritant, vooral als je niet wilt dat je server of pc om de paar minuten wordt bestookt. Deze handleiding is bedoeld om het blokkeren van die vervelende IP-adressen die steeds maar weer proberen toegang te krijgen tot je Windows-machine te automatiseren. Het idee is om mislukte inlogpogingen (gebeurtenis-ID 4625) te detecteren, te tellen en de ergste overtreders automatisch te blokkeren met een firewallregel. Het is niet perfect, maar het is beter dan niets, zeker als je geen zin hebt om beveiligingssoftware van derden te installeren.
Hoe je RDP-brute-force-aanvallen kunt detecteren en blokkeren met PowerShell
Waarom dit nuttig is
Als uw Windows-logboeken een reeks mislukte RDP-aanmeldpogingen vanaf bepaalde IP-adressen laten zien en u een piek in ongeautoriseerde toegangspogingen ziet, kan dit script helpen om de situatie op te lossen. Het houdt de gebeurtenislogboeken in de gaten en zodra een IP-adres voldoende keren probeert (bijvoorbeeld 5 mislukte pogingen in een paar uur), maakt het een firewallregel aan om die bron te blokkeren. Op die manier hoeft u niet alleen maar te hopen dat ze weggaan, maar blokkeert u actief hun verbinding. Bovendien, omdat alle acties worden gelogd, krijgt u een overzicht van wat er is geblokkeerd.
Wanneer het van toepassing is
Deze methode is handig als je steeds mislukte RDP-aanmeldingspogingen ziet vanaf onbekende IP-adressen, vooral als ze hardnekkig lijken. Als je veel 4625-gebeurtenissen van hetzelfde IP-adres ziet, is de kans groot dat iemand of iets probeert je RDP-gegevens te kraken met een brute-force-aanval. Dus als dat het geval is – en het is een serieuze zaak – kan deze methode je een hoop ellende besparen.
Wat kun je verwachten?
Na de installatie beschikt u over een script dat recente logboeken scant, IP-adressen identificeert die herhaaldelijk mislukte inlogpogingen doen en deze IP-adressen automatisch blokkeert door de firewallregels bij te werken. Het is geen toverkunst – u kunt de drempelwaarde eventueel aanpassen of een geplande taak instellen om dit script periodiek uit te voeren. Houd er ook rekening mee dat vertrouwde IP-adressen (zoals uw interne netwerk- of VPN-IP-adressen) op de whitelist moeten staan, zodat ze niet per ongeluk worden geblokkeerd.
Stapsgewijze installatie
Download het script en installeer het.
- Download eerst het script via deze GitHub-link. Sla het op in een map zoals `C:\PS\` – zorg ervoor dat die map bestaat, of maak hem aan met PowerShell:
New-Item -ItemType Directory -Path 'C:\PS\'. - Gebruik de PowerShell-
Invoke-WebRequestopdracht om het script rechtstreeks van GitHub te downloaden, zodat je niet alles hoeft te kopiëren en plakken. Zoals dit:$path = "C:\PS\"; if(!(Test-Path -Path $path)){ New-Item -ItemType Directory -Path $path} $url = "https://raw.githubusercontent.com/maxbakhub/winposh/main/RDS/block-rdp-brute-force.ps1" $output = "$path\block-rdp-brute-force.ps1" Invoke-WebRequest -Uri $url -OutFile $output - Je kunt dat script nu handmatig uitvoeren wanneer dat nodig is, of, nog beter, automatiseren door een geplande taak aan te maken (daarover later meer).
Configureer automatische blokkering met Taakplanner.
- Open PowerShell als beheerder (dit is nodig voor de geplande taak).Maak vervolgens een nieuwe taak aan die wordt geactiveerd bij elke mislukte RDP-aanmelding (gebeurtenis-ID 4625).Hier is een kort voorbeeld:
$taskname="Block_RDP_Brute_Force_Attacks_PS" $scriptPath="C:\PS\block-rdp-brute-force.ps1" $trigger = New-ScheduledTaskTrigger -AtLogOn $trigger. Subscription = @" <QueryList><Query Id="0" Path="Security"><Select Path="Security">*[System[(EventID=4625)]]</Select></Query></QueryList> "@ $action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-NoProfile -ExecutionPolicy Bypass -File `"$scriptPath`"" Register-ScheduledTask -TaskName $taskname -Trigger $trigger -User "SYSTEM" -Action $action -RunLevel Highest -Force - Dit zorgt ervoor dat het script automatisch wordt uitgevoerd wanneer een RDP-aanmelding mislukt. In één configuratie werkte het, in een andere moest ik de trigger iets aanpassen om het consistent te laten werken.
Drempelwaarden en vertrouwde IP-adressen aanpassen
- Als je merkt dat het script jou of legitieme interne IP-adressen blokkeert, werk dan de array `$trustedIPs` in het script bij met je netwerkadressen. Als je wilt aanpassen na hoeveel pogingen een blokkering plaatsvindt, kun je de waarden voor `$badAttempts` en `$intervalHours` wijzigen.
- Houd het logbestand (`c:\ps\rdp_block.log`) in de gaten om te zien welke IP-adressen zijn geblokkeerd en wanneer. Dit helpt om het proces indien nodig te optimaliseren.
Het is een beetje vreemd, maar nadat je het hebt ingesteld, werkt het script geruisloos op de achtergrond, zonder veel ophef. Op sommige computers duurde het een paar pogingen voordat de hardnekkige overtreders werden opgespoord, maar het is een stap vooruit vergeleken met simpelweg hopen dat ze het opgeven.