Hoe je ‘bad bots’ kunt blokkeren in je apps en webservers (zonder goed verkeer te verliezen)

Titel: Hoe je je Website kunt Beschermen tegen Slechte Bots: Een Praktische Gids

Inleiding

Bots zijn overal aanwezig op het internet. Terwijl sommige bots zoals Googlebot en Bingbot essentieel zijn voor het indexeren van websites, zorgen andere voor vertraging, verbruiken ze bandbreedte, schrapen ze inhoud voor AI-modellen of zoeken ze naar kwetsbaarheden. Voor webbeheerders en API-beheerders is het cruciaal om de kwaliteit van het verkeer te waarborgen: legitieme bots toestaan en misbruik blokkeren voordat het op je server aankomt. Dit artikel biedt een praktische gids vol voorbeelden en tools om een technologische website te beschermen zonder de SEO of gebruiksvriendelijkheid te schaden.


1) Identificeer Verdacht Verkeer

Voordat je gaat blokkeren, is het belangrijk om eerst te meten:

  • Serverlogs (Apache/Nginx): Zoek naar pieken in verzoeken naar dezelfde URL, verdachte patronen zoals /wp-login.php of /xmlrpc.php, lege of valse user-agents en nachtelijke pieken.

  • Analytics (GA4/Matomo): Controleer op abnormale bounce rates, sessies van 0 seconden en landen waar je geen publiek hebt.

  • Latentie en bandbreedte: Als 80/20 niet opgaat (hoog verbruik met weinig waarde), kan er sprake zijn van ruis.

Typische aanwijzingen:

  • Piekverkeer bij inlog- en zoekpagina’s.
  • Massale downloads van afbeeldingen of PDF-bestanden.
  • User-agents die Google imiteren met IP’s die niet naar Google verwijzen.

2) Robots.txt: Nuttig voor Goede Bots, Irrelevant voor Slechte

Het robots.txt bestand blokkeert geen schadelijke bots; het leidt alleen de bots die zich aan de regels houden. Toch is het verstandig om het in te stellen om onnodig crawlen te verminderen:

plaintext
User-agent: *
Disallow: /wp-admin/
Disallow: /cgi-bin/
Disallow: /search
Allow: /wp-admin/admin-ajax.php

Sitemap: https://jouw-domein.com/sitemap.xml

Belangrijk: Plaats geen gevoelige paden in robots.txt als ze niet op een andere manier zijn beveiligd.


3) Blokkeren via .htaccess of Nginx: Specifiek en Doeltreffend

Om specifieke IP’s of user-agents in Apache te blokkeren:

plaintext

.htaccess



Require all granted
Require not ip 203.0.113.0/24

Blokkeren op basis van user-agent

BrowserMatchNoCase “curl|python-requests|scrapy|wget” badbot
Order Allow,Deny
Allow from all
Deny from env=badbot

In Nginx:

plaintext
map $http_user_agent $badbot {
default 0;
~*(curl|python-requests|scrapy|wget) 1;
}

server {
if ($badbot) { return 403; }
deny 203.0.113.0/24;
}

Beperkingen: Handmatige lijsten bijhouden kan kostbaar zijn, en scrapers wisselen vaak IP’s. Gebruik deze methode voor gerichte gevallen.


4) Web Application Firewall (WAF): Filtreer voor je App

Een WAF past bekende regels toe om kwaadaardige patronen te blokkeren (zoals SQL-injecties, XSS, etc.). Er zijn twee benaderingen:

4.1 Zelfbeheerde WAF (ModSecurity + OWASP CRS)

  • ModSecurity in combinatie met de OWASP ModSecurity Core Rule Set biedt een beproefde methode.

  • Pas het Paranoia Level aan en stel de Anomaly Threshold in om een balans tussen beveiliging en valse positieven te vinden.

4.2 Cloud WAF (zoals Cloudflare)

  • Voordelen: Filteren van verkeer voordat het je server bereikt.

  • Regels op basis van IP-reputatie, land, user-agent, en meer.


5) Rate Limiting en “Menselijke Tests” zonder UX te Breken

  • Rate Limit: Beperk verzoeken per IP of sleutel bij kritieke endpoints.

  • Challenge: Gebruik JavaScript-uitdagingen of lichte Proof of Work om de kosten voor bots te verhogen.

  • Toegankelijke CAPTCHA: Vermijd opdringerige visuele uitdagingen.


6) Goed Omgaan met “Goede Bots”: Verificatie en Toegangsbeheer

  • Verifieer IP’s van zoekmachines met reverse DNS.

  • Onderhoud een allowlist voor M2M-integraties.

  • Zorg voor geactualiseerde sitemaps en blokkeer geen essentiële CSS/JS.


7) Bescherming van API’s en Dure Endpoints

  • Gebruik tokens met korte vervaltijden.

  • Implementeer rate limiting per consument.

  • HMAC-handtekeningen en mutual TLS waar mogelijk.


8) Implementatie via een Beheerde WAF (Bijvoorbeeld met RunCloud + ModSecurity)

  • Ga naar het dashboard, pas het Paranoia Level aan en voeg aangepaste regels toe.

  • Activeer meldingen en controleer logs voor blokkeringen.


9) Continue Monitoring en Afstemming

  • KPIs: Blokkeerverzoeken, valse positieven en bandbreedteverbruik.

  • Maandelijkse herziening: Actualiseer regels en controleer gevoelige endpoints.


10) Voorbeelden om te Kopiëren

Bied enkele praktische codevoorbeelden aan, zoals het blokkeren van toegang tot /wp-login.php op basis van land of het gebruik van ModSecurity om xmlrpc.php te beperken.


Checklist “Snel”

  • Logs gecontroleerd.
  • robots.txt bijgewerkt.
  • Rate limiting geïmplementeerd.
  • WAF actief.
  • Allowlist voor goede bots.
  • Toegankelijke uitdagingen toegepast.
  • API-beveiliging.
  • Monitoring en periodieke herziening ingesteld.

Veelgestelde Vragen

  1. Kan ik alle bots in één keer blokkeren?
    Nee, dat zou je SEO schaden. Het is essentieel om te differentiëren.

  2. Is robots.txt effectief tegen slechte bots?
    Nee, het is voornamelijk een richtlijn voor legitieme crawlers.

  3. Biedt blokkeren op IP voldoende bescherming?
    Het is tijdelijk en niet voldoende. Combineer met andere strategieën.

  4. Hoe voorkom ik SEO-schade?
    Gebruik een allowlist en blokkeer geen essentiële bestanden voor bots.


Conclusie

Het blokkeren van slechte bots is geen eenvoudige oplossing; het vereist een gelaagde aanpak. Begin met monitoring, pas WAF en rate limiting toe, gebruik uitdagingen waar nodig en bescherm API’s en dure endpoints. Met voortdurende monitoring en aanpassingen kun je ruis verminderen zonder de SEO of legitieme gebruikerservaringen op te offeren.

Scroll naar boven