Met .htaccess grip op je websiteverkeer!

Heb je een website, dan wil je natuurlijk graag bezoekers. Je hebt immers een verhaal te vertellen, kennis te delen of iets te verkopen. Alleen, niet al het verkeer is even waardevol. Richt jij je hoofdzakelijk op de Benelux, dan kun je besluiten jouw website enkel daarvoor toegankelijk te maken. Dit kan met behulp van het .htaccess-bestand en GeoIP. Lees snel hoe!

Met .htaccess grip op je websiteverkeer!

Bij ongewenst verkeer kun je denken aan doelbewuste aanvallen op je site. Dit gebeurt veelal vanaf een specifiek IP-adres uit een bepaald land. Het doel is vaak om zoveel aanvragen te doen, dat je website overbelast raakt. Dat kan er uiteindelijk voor zorgen dat je website tijdelijk onbereikbaar wordt. Iets wat je graag wilt voorkomen dus!

Komt dit verkeer van bijvoorbeeld buiten Europa en is dat niet je doelgroep, dan kun je het missen als kiespijn. Nu kun je via het .htaccess-bestand stuk voor stuk losse IP-adressen gaan blokkeren, maar dat is niet erg efficiënt. Gelukkig kan het gemakkelijker. Je kunt namelijk ook landen in zijn geheel toestaan of weigeren.

Wat is het .htaccess-bestand?

Het .htaccess-bestand is een configuratiebestand die de webserver vertelt dat bepaalde standaardwaarden moeten worden overschreven. Zo weet de server dat je graag uitzonderingen wilt doorvoeren. Ziet de webserver een .htaccess-bestand, dan kijkt hij altijd eerst of hier iets in staat. Dit kan een redirect naar een andere pagina zijn, maar ook het blokkeren van specifiek internetverkeer. Is het .htaccess gecheckt, dan voert hij vervolgens zijn normale functie uit.

Waarom staat er een punt voor htaccess?
De punt zorgt ervoor dat dit bestand verborgen is en niet van buitenaf kan worden benaderd. Zo blijft de code die in dit bestand staat veilig en is deze niet in te lezen voor bezoekers van je website.

Het .htaccess-bestand bewerken

Heb je WordPress of een ander CMS via Installatron geïnstalleerd, dan heeft deze al een .htaccess-bestand aangemaakt. Die staat in de /public_html/-map met de juiste standaardinstellingen voor dat specifieke CMS. Voor WordPress is dat bijvoorbeeld het volgende.

# BEGIN WordPress

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# END WordPress

Je kunt via DirectAdmin eenvoudig het .htaccess-bestand bewerken. Log in op DirectAdmin, klik bovenaan op ‘Files’ en dan op ‘public_html’. Klik vervolgens naast het bestand met de naam .htaccess op ‘Edit’. Je ziet dan de inhoud van het bestand en kunt aan de slag om het aan te passen. Merk op dat na het opslaan de aanpassingen direct werken.

Het .htaccess-bestand vinden in DirectAdmin.

Je kunt ook de inhoud van het bestand kopiëren en in een tekstverwerker naar keuze plakken. Denk aan Kladblok of het meer geavanceerde Notepad++. De macOS-gebruiker kan dit in bijvoorbeeld TextEdit of Atom doen. Gebruik geen Word, dat is niet geschikt voor code. Ben je klaar met aanpassen, dan open je het bestand via de File Manager, plak je de regels erin en sla je het op.

Landen blokkeren met GeoIP

Nu je weet waar het .htaccess-bestand staat en hoe je het aanpast, kunnen we écht aan de slag. Je hoeft geen programmeergod te zijn om een blokkade in te stellen. Veel .htaccess-regels zijn met een beetje zoeken snel op het internet te vinden. Om te snappen hoe de code is opgebouwd, beginnen we met wat je waarschijnlijk niet wilt bereiken: verkeer uit Nederland, België en Luxemburg blokkeren. Dat ziet er als volgt uit.

GeoIPEnable On
SetEnvIf GEOIP_COUNTRY_CODE BE DenyCountry
SetEnvIf GEOIP_COUNTRY_CODE_V6 BE DenyCountry   
SetEnvIf GEOIP_COUNTRY_CODE NL DenyCountry
SetEnvIf GEOIP_COUNTRY_CODE_V6 NL DenyCountry    
SetEnvIf GEOIP_COUNTRY_CODE LU DenyCountry
SetEnvIf GEOIP_COUNTRY_CODE_V6 LU DenyCountry 
  
Allow from all  
Deny from env=DenyCountry

Laten we deze code nu ontleden, zodat we ook precies weten wat we nou eigenlijk hebben opgeschreven. Het begint met het volgende.

GeoIPEnable On

Dit vertelt de Apache-server dat je de module GeoIP aanroept, een handige module binnen Apache. Door het in het .htaccess op ‘On’ te zetten, zeg je dat deze code uitgelezen moet worden. Vervolgens geven we de landen op die we willen blokkeren met behulp van deze onderstaande regel.

SetEnvIf GEOIP_COUNTRY_CODE BE DenyCountry
SetEnvIf GEOIP_COUNTRY_CODE_V6 BE DenyCountry

In het eerste gedeelte geven we aan dat we een invoer willen doen op basis van een landcode. In dit voorbeeld is dat BE (België). Het wordt gevolgd door wat we ermee willen doen. Hier is dat DenyCountry, ofwel toegang blokkeren. De tweede regel met ‘V6’ erin geeft aan dat je ook IPv6-adressen wilt weigeren. We hebben dan nog een klein stukje code over.

Allow from all  
Deny from env=DenyCountry

Hierin vertel je de webserver dat je alle bezoekers toegang geeft, behalve van de landen die je in de regels erboven hebt aangegeven.

Enkel verkeer uit de Benelux toestaan

De lijst met landen die je liever geen toegang tot je website wilt geven, kan erg lang worden als je enkel verkeer vanuit Nederland of de Benelux wilt toestaan. Gelukkig kun je het ook omdraaien en niemand toegang geven, tenzij anders aangegeven. In dat geval zal de code binnen het .htaccess er als volgt uit zien.

GeoIPEnable On 
SetEnvIf GEOIP_COUNTRY_CODE BE AllowCountry
SetEnvIf GEOIP_COUNTRY_CODE_V6 BE AllowCountry    
SetEnvIf GEOIP_COUNTRY_CODE NL AllowCountry
SetEnvIf GEOIP_COUNTRY_CODE_V6 NL AllowCountry  
SetEnvIf GEOIP_COUNTRY_CODE LU AllowCountry
SetEnvIf GEOIP_COUNTRY_CODE_V6 LU AllowCountry  
  
Deny from all  
Allow from env=AllowCountry

Zoals je mogelijk al ziet, geeft deze code precies het tegenovergestelde weer. Het belangrijkste verschil is dat we nu AllowCountry in plaats van DenyCountry gebruiken. Hiermee zeg je dat verkeer uit België, Nederland en Luxemburg mag, maar dat verkeer uit alle andere landen moet worden geblokkeerd. Wil je dit, dan plaats je dit boven de bestaande regels en sla je het op.

Een voorbeeld van .htaccess-regels om landen te blokkeren.

Let op: de regels moeten dus bovenaan in het .htaccess-bestand staan. Doe je dit niet, dan kunnen aanvragen alsnog deels doorkomen.

Land van herkomst achterhalen

Zomaar verkeer blokkeren, is vaak niet verstandig. Je wilt immers zeker weten dat je legitieme bezoekers geen toegang ontzegt. Het is daarom slim om eerst te bekijken waar je bezoekers vandaan komen. Deze informatie vraag je op via de Webalizer Stats binnen DirectAdmin. Hier zie je precies uit welke landen het verkeer van je website komt. Bekijk hier alle landcodes die je kunt gebruiken.

Een specifiek IP-adres blokkeren

Je kunt ook overlast ervaren van specifiek één IP-adres. Die kan voor een piek zorgen in je resourcegebruik, omdat deze vele aanvragen binnen je website doet. Je ziet dan in de usage logs terug vanaf welk IP-adres dit gebeurt. Via AbuseIPDB kun je dan controleren of dit IP-adres bekend staat voor misbruik. Wil je een IP-adres blokkeren, dan ziet dat er bijvoorbeeld als volgt uit.

order allow,deny
deny from 255.0.0.0
deny from 198.51.100.
allow from all

Met order allow,deny vertel je de webserver dat je een regel maakt voor zowel het toestaan als tegenhouden. De regels eronder zijn dan de IP-adressen die je wilt blokkeren. Merk op dat ik het tweede IP-adres bewust niet heb afgemaakt. Dit zegt dat alle IP-adressen die met 198.51.100 beginnen, moeten worden geblokkeerd. Ten slotte vertelt allow from all dat verkeer wordt toegelaten als het niet vanaf de genoemde IP-adressen komt.

Enkel je eigen IP-adres toestaan

Ook dit kun je omdraaien. Wil je enkel jezelf toegang geven, omdat het om bijvoorbeeld een ontwikkelomgeving gaat, dan kun je alleen je eigen IP-adres toestaan. De regels voor in het .htaccess-bestand zijn dan als volgt.

order allow,deny
allow from 198.51.100.2
deny from all

In deze code draaien we eigenlijk alles om. Met allow from geef je aan dat je verkeer wil toestaan van 198.51.100.2 en met deny from all zeg je dat al het ander verkeer moet worden geblokkeerd.

Het is erg belangrijk om deze volgorde aan te houden. Apache leest het .htaccess in chronologische volgorde uit. Geef je eerst deny from all aan, dan wordt de volgende regel voor de uitzondering niet uitgelezen. Al het verkeer zal dan worden tegengehouden. Merk ook op dat veel internetproviders met dynamische IP-adressen werken. Hierdoor kan je eigen IP-adres veranderen.

Wanneer wel en beter niet gebruiken?

Bepaal eerst je doelgroep, voordat je besluit verkeer te weren. Heb je een website voor een internationaal bedrijf, dan is landen blokkeren misschien onwenselijk. Bekijk dan of een specifiek IP-adres blokkeren de betere keuze is. Heb je een website voor een bedrijf die alleen binnen Nederland diensten levert, dan is landen blokkeren vaak een makkelijker besluit.

Merk op dat een ingestelde blokkade ook voor kan jou gelden. Als je verkeer van buiten de Benelux blokkeert en je gaat naar Frankrijk op vakantie, dan kun je vanaf daar je website zelf ook niet benaderen. Hopelijk heb je zo inzicht gekregen in hoe je ongewenst verkeer van je website kan weren! Heb je er vragen over, stuur dan gerust een e-mail naar Support voor hulp.

P.S. Op de hoogte blijven van alle artikelen, updates, tips en trucs die op ons blog verschijnen? Volg ons via Facebook, Twitter, Instagram, RSS en e-mail!

Deel Deel Deel Deel

16 reacties op “Met .htaccess grip op je websiteverkeer!

  1. Frank op zei:

    Goed artikel. Dit kan erg handig zijn. Vraag me wel af hoe de Google Crawler hierop gaat reageren. Wordt die ook niet uitgesloten dan?

  2. Pieter op zei:

    Dus met deze code blokkeer ik China?:

    GeoIPEnable On
    SetEnvIf GEOIP_COUNTRY_CODE CN DenyCountry
    SetEnvIf GEOIP_COUNTRY_CODE_V6 CN DenyCountry

    Allow from all
    Deny from env=DenyCountry

    • Klopt, Pieter! Als je dat bovenaan in je .htaccess-bestand zet, dan blokkeer je het verkeer uit China en sta je de rest van het verkeer toe.

  3. Nienke op zei:

    Mooi om op deze manier landen uit te sluiten/toe te staan. Helaas, zelfs wanneer ik US toesta wordt de FB crawler uitgesloten (linkedIn en andere geen probleem). Tijdelijke oplossing: om de 30 dagen (crawl tijd FB) de block opheffen & de FB debugger gebruiken. Als je pagina’s de weer de juiste Opengraph tags laat zien, block er weer op zetten voor 30 dagen. Neemt alleen wat tijd in beslag wat niet zou hoeven. Hoop dat hier nog oplossing voor is/komt.

    GeoIPEnable On
    SetEnvIf GEOIP_COUNTRY_CODE BE AllowCountry
    SetEnvIf GEOIP_COUNTRY_CODE_V6 BE AllowCountry
    SetEnvIf GEOIP_COUNTRY_CODE NL AllowCountry
    SetEnvIf GEOIP_COUNTRY_CODE_V6 NL AllowCountry
    SetEnvIf GEOIP_COUNTRY_CODE LU AllowCountry
    SetEnvIf GEOIP_COUNTRY_CODE_V6 LU AllowCountry
    SetEnvIf GEOIP_COUNTRY_CODE NO AllowCountry
    SetEnvIf GEOIP_COUNTRY_CODE_V6 NO AllowCountry
    SetEnvIf GEOIP_COUNTRY_CODE US AllowCountry
    SetEnvIf GEOIP_COUNTRY_CODE_V6 US AllowCountry
    SetEnvIf GEOIP_COUNTRY_CODE CA AllowCountry
    SetEnvIf GEOIP_COUNTRY_CODE_V6 CA AllowCountry

    Deny from all
    Allow from env=AllowCountry

    • Nienke op zei:

      thnx. 🙂 gelijk geprobeerd maar ik krijg nu een 403 forbidden foutmelding. Ik heb het voorbeeld hieronder ingekort met de Ips. Volgens mij heb ik het niet goed gedaan. Als ik het nu zo doe..

      GeoIPEnable On
      SetEnvIf GEOIP_COUNTRY_CODE BE AllowCountry
      SetEnvIf GEOIP_COUNTRY_CODE_V6 BE AllowCountry
      SetEnvIf GEOIP_COUNTRY_CODE NL AllowCountry
      SetEnvIf GEOIP_COUNTRY_CODE_V6 NL AllowCountry
      SetEnvIf GEOIP_COUNTRY_CODE LU AllowCountry
      SetEnvIf GEOIP_COUNTRY_CODE_V6 LU AllowCountry
      SetEnvIf GEOIP_COUNTRY_CODE NO AllowCountry
      SetEnvIf GEOIP_COUNTRY_CODE_V6 NO AllowCountry
      SetEnvIf GEOIP_COUNTRY_CODE US AllowCountry
      SetEnvIf GEOIP_COUNTRY_CODE_V6 US AllowCountry

      Deny from all
      Allow from env=AllowCountry

      order allow,deny
      Allow from 204.15.20.0/22
      Allow from 69.63.176.0/20
      Allow from 66.220.144.0/20
      Allow from 66.220.144.0/21
      deny from all

      Krijg ik een 403 foutmelding. Website is niet meer toegankelijk. Sorry ben er niet uber handig mee

    • Vermoedelijk zit het probleem in je eigen IP-adres. Als ik je verhaal zo lees, dan lijkt het erop dat je jezelf door de code buitensluit. Het beste kun je contact opnemen met support@antagonist.nl en je IP-adres doorgeven (check: whatismyip.com).

      Mogelijk is je IP-adres niet Nederlands, Belgisch of Noors. Dit kan vele oorzaken hebben. Bijvoorbeeld een VPN of een recent gewijzigd IP dat voorheen in een ander land gebruikt werd wat nog niet veranderd is in de GeoIP database. Hier kan vertraging in zitten (van soms een paar maanden).

  4. Ik vind het helemaal geen goed idee om bezoekers uit bepaalde landen te blokkeren 🙁 wat als ik als Nederlander in China jouw site bezoeken wil? Allereerst raak ik flink teleurgesteld, want ik zie dat mijn favoriete website ongeoorloofd onderscheid maakt tussen mensen uit verschillende landen. Dat schaadt je imago. Maar ik wil alsnog je pagina lezen dus dan pak ik maar gewoon een VPN. En dat kan iedereen doen, dus daarmee is dat hele gehannes met geoblocking niet eens meer effectief.

    Ik zeg gewoon niet doen.

    • Uiteraard moet iedereen voor zichzelf bepalen wat voor hem of haar het beste werkt.

      Als een website veel last heeft van kwaadwillend verkeer (het gaat hier niet om mensen, maar om netwerkverkeer), bijvoorbeeld uit China, dan kan dit een handige oplossing zijn. Zeker als je je niet richt op de Chinese markt. Je wil kwaadwillend verkeer immers zoveel mogelijk tegengaan. Voorkomen is beter dan genezen. Als je slachtoffer wordt van malware, of je website gaat down, of er wordt spam onder jouw naam verstuurd, dan lijdt dat tot grote imagoschade.

      Natuurlijk kan het voorkomen dat een Nederlandse bezoekers zich in China bevindt (bijvoorbeeld op vakantie is) en daardoor op een netwerk komt waarmee hij of zij moeite heeft om verbinding te krijgen met je website. Maar het is goed om je af te vragen, hoe vaak dat werkelijk voorkomt.

      Daarnaast worden vele buitenlandse websites door China zelf ook geblokkeerd. De kans is dus groot dat jij als bezoeker vanuit China heel veel westerse websites niet kunt bereiken. Het gebruik van een VPN is zodoende een goede oplossing daarvoor.

  5. Hoi Mark, je hebt idd een punt.
    Intussen heb ik ervoor gekozen, omdat de FB-crawler steeds weer werd geblocked, om de Htacces file terug te zetten zonder blokkeringen.

    Naast Wordfence heb ik vervolgens de pluging IThemes Security geïnstalleerd en het werkt 10x beter.

  6. mohamed op zei:

    helaas werkt het bij mij ook niet om alle landen te blokkeren zo geeft bijv PageSpeed Insights de volgende foutmelding

    Lighthouse returned error: ERRORED_DOCUMENT_REQUEST. Lighthouse kan de door jou aangevraagde pagina niet goed laden. Zorg ervoor dat je de juiste URL test en dat de server correct reageert op alle verzoeken. (Statuscode: 403)Sluiten

    • Als je wordt buitengesloten door de instellingen in de .htaccess, dan zal je een 403-melding te zien krijgen. Je kunt het beste je IP-adres nakijken en anders contact opnemen met support, zodat wij jou daarbij kunnen helpen.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *