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 vooral op de Benelux, dan kun je besluiten je website enkel daarvoor toegankelijk te maken. Dit kan met behulp van het .htaccess-bestand en GeoIP. Lees snel hoe!
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.
Inhoudsopgave
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.
.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 daar in en klik links in het menu op Systeeminfo en bestanden → Bestandsbeheer.
Klik vervolgens op de map met de naam public_html. Dit is de locatie waar je website staat. Klik nu met de rechtermuisknop op het bestand met de naam .htaccess en kies voor Bewerken.
Je ziet dan de inhoud van het bestand en kunt aan de slag om het aan te passen. Merk op dat eventuele aanpassingen direct werkzaam zijn na het opslaan.
Je kunt ook de inhoud van het bestand kopiëren en in een tekstverwerker naar keuze plakken. Denk aan Kladblok, Notepad++, TextEdit of Visual Studio Code. Gebruik geen Word, dat is niet geschikt voor code. Ben je klaar met aanpassen, dan open je het bestand via Bestandsbeheer, 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 werkt, starten we met wat je waarschijnlijk niet wilt bereiken: verkeer blokkeren uit Nederland, België en Luxemburg. Dat ziet er als volgt uit.
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
Deny from env=DenyCountry
Laten we deze code nu ontleden, zodat we ook precies weten wat we nou eigenlijk hebben opgeschreven. Het begint met de landen op die we willen blokkeren.
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.
Deny from env=DenyCountry
Daarmee vertel je de webserver dat je alle bezoekers toegang geeft, behalve van de landen die je in de regels erboven hebt aangegeven.
Enkel verkeer toestaan uit de Benelux
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.
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.
De regels moeten 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 deny,allow
deny from 255.0.0.0
deny from 198.51.100.
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 deny,allow
deny from all
allow from 198.51.100.2
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!
Goed artikel. Dit kan erg handig zijn. Vraag me wel af hoe de Google Crawler hierop gaat reageren. Wordt die ook niet uitgesloten dan?
Bedankt! De helppagina van Google waar MVF hieronder naar linkt, is nuttig Op basis daarvan lijkt de conclusie: blokkeer je de VS niet, dan gaat het waarschijnlijk goed. Ze zeggen ook te crawlen met IP-adressen buiten de VS, maar vertellen niet duidelijk welke.
Ik heb precies dezelfde vraag als Frank 🙂
Hier staat wel min of meer het antwoord: https://support.google.com/webmasters/answer/6144055?hl=nl
We hebben je beide reacties even samengevoegd voor het overzicht. Die helppagina van Google legt het inderdaad uit! 🙂
Dus met deze code blokkeer ik China?:
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.
dank je!
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.
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
Je zou met een allow from kunnen proberen de IP-adressen van de Facebook crawler toe te staan.
Voor een lijst met IP-adressen van de crawler, zie: https://gist.github.com/JosephBlythe/bbb7e4e03e2bf24a43b1e20054186a43
Het onderste gedeelte in je code wordt dan:
order allow,deny
allow from …
allow from …
deny from all
De puntjes vervang je met een IP-adres uit de lijst. Merk op dat je voor ieder IP-adres een nieuwe regel moet maken.
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..
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).
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.
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.
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.
Wat ziet een ander land eigenlijk die geblockt is van je website?
En hoe kan je zelf checken of het gelukt is?
Is daar een tool voor, zoals Gtmetrix om dat te checken?
Diegene krijgt de standaard 403 Forbidden-pagina van de gebruikte browser te zien. Er zijn tools, waarmee je een website vanuit een ander land kunt bezoeken om te checken of het is gelukt. Bijvoorbeeld: https://www.locabrowser.com/
Het volgende stukje in het artikel is onvolledig:
order deny,allow
allow from 198.51.100.2
Tussen deze regels moet nl. volgens mij, na een test, nog het volgende worden toegevoegd:
deny from all
Bedankt voor je feedback, Edwin! Daar ook ‘deny from all’ gebruiken, is inderdaad netter. We hebben dit in het artikel geüpdatet.
Ik heb dit in mijn .htaccess gezet:
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
Maar ik krijg een 500 Internal Server Error en mijn website is niet meer te zien. Wat doe ik fout
Doorgaans duidt dat op een syntaxfout. Je kunt in het foutenlogboek van DirectAdmin dan vaak terugvinden op welke regel het mis gaat. Lees hierover meer op: https://www.antagonist.nl/blog/logboek-bekijken/
Lukt het je zo niet om de oorzaak te achterhalen, haal dan de betreffende regels uit het .htaccess-bestand weg. Je website moet dan weer benaderbaar zijn. Neem vervolgens contact op met Support. Als je daarin benoemt om welk domein het gaan, dan kijken we graag even met je mee!
Ik heb de code in mijn .htaccess toegevoegd, maar krijg een 500 error.
Ik heb mijn provider gevraagd om hulp, dit is zijn antwoord:
Dit gaat niet werken omdat wij die module niet gebruiken en niet bijhouden welke IP reeksen horen bij welke landen. Mochten er nog verdere vragen zijn, dan horen we deze altijd graag van je!
Bedankt voor de reactie, Pieter! Begrijp ik correct dat je momenteel klant ben bij een andere hostingprovider? We kunnen je hier dan verder helaas niet bij helpen. Zij zouden deze module namelijk in moeten schakelen om het werkend te krijgen en daar hebben wij geen invloed op.
RSFirewall heeft ook blokkade opties aan boord o.a. Geoip en ip-adres
Check https://extensions.joomla.org/extension/rsfirewall/
Bedankt voor de tip, Wim! Handig voor Joomla-gebruikers.
ok je kan dus in de .htaccess veel instellen maar hoe stel je die dan in om bijvoorbeeld googlebot fout dubbele pagina’s weg te krijgen.
mijn site http://www.solarcleaningvdw.be kan je met verscheidene varianten benaderen en daardoor geeft google die fout.
VB
je kan door het intypen van één van volgende regels steeds op de site
http://www.solarcleaningvdw.be
https://www.solarcleaningvdw.be
http://www.solarcleaningvdw.be
…
ik zou eigenlijk dus willen dat google rechtstreeks en enkel en alleen een indexering doet van mijn index.htm
dus dat je door http://www.solarcleaningvdw.be of een andere ingave altijd komt op
http://www.solarcleaningvdw.be/index.htm
kan dat via .htaccess zo ingesteld worden