kijk er is iemand wakker hier
dus hopelijk gaan de moderator's er mee aan de slag
De laatste tijd komt het veelvuldig voor dat tt word overspoeld door ongewenst gedrag. Omdat je er niet blind op kan vertrouwend dat WordPress installaties 100% bugvrij zijn zorg dan liever dat je zoveel mogelijk van dit verkeer blokkeer voordat er PHP code uitgevoerd wordt om de verbinding af te handelen.
De blokkades die je kan in NGINX
•User Agent
•IP adres
•Referrer
•Netwerk subnet
•GeoIP
Blokkeren op User Agent
Ik gebruik deze mogelijkheid voornamelijk om robots buiten de deur te houden die de robots.txt standaard negeren. Verder blokkeer ik ook user agents waar een luchtje aan zit en -gek genoeg- libwww-perl.
1 if ($http_user_agent ~ (Purebot|Lipperhey|MaMa CaSpEr|libwww-perl|Mail.Ru|gold crawler) ) { return 403; }
Ik blokkeer libwww-perl omdat ik de afgelopen jaren eigenlijk niet één GET of POST heb gezien die niet probeerde een softwarelek te exploiten. De overige user agents lijken alleen maar content te scrapen.
Blokkeren op IP adres
IP adressen blokkeer ik als ik rare referrers tegen kom, of als er meerdere malen SPAM wordt gepost vanaf een IP. IP adressen blokkeren is vrij eenvoudig met een deny:
1 deny 85.17.26.68; # spammy comments - Leaseweb deny 85.17.230.23; # spammy comments - Leaseweb deny 173.234.11.105; # junk referrers deny 173.234.31.9; # junk referrers - Ubiquityservers deny 173.234.38.25; # spammy comments deny 173.234.153.30; # junk referrers deny 173.234.153.106; # spammy comments - Ubiquityservers deny 173.234.175.68; # spammy comments deny 190.152.223.27; # junk referrers deny 195.191.54.90; # odd behaviour, Mozilla, doesnt fetch js/css. Ended up doing a POST, prob a spambot deny 195.229.241.174; # spammy comments - United Arab Emirates deny 210.212.194.60; # junk referrers + spammy comments
Ik hou ook graag bij waarom ik een IP adres blokkeer dmv een comment. En ja, ik doe alles in het Engels op mijn server. Vaak kies ik er ook nog voor om een IP adres van de lijst te halen als ik deze niet meer tegen kom in de logs van de afgelopen maand.
Blokkeren op referrer
Het is ook mogelijk om te blokkeren op basis van de referrer informatie die wordt meegegeven.
1 if ($http_referer ~* (viagra|cialis|levitra) ) { return 403; }
Met de ~* doe ik hier een case-insensitive match op de volledige referrer string die in de HTTP headers wordt doorgegeven. Komt er viagra, cialis of levitra in de referrer voor, dan wordt de GET request geweigerd.
Wees voorzichtig met de volgende twee methodes, het is op deze manier heel makkelijk om te veel in één keer te blokkeren.
Blokkeren op subnet
Is het blokkeren van een IP niet genoeg omdat er vanaf een heel subnet rare dingen aan de gang zijn, dan kun je er ook voor kiezen om een heel subnet te blokkeren. Als je in de lijst hierboven kijkt, zul je zien dat Ubiquityservers duidelijk aanwezig is, maar aangezien het om een groot netwerk gaat (173.234.24.0/21) en de IP adressen lijken niet veel met elkaar te maken te hebben. Daarom blokker ik deze IP adressen los, in plaats van het hele netwerk.
Blokkeren op subnet gaat ook met een deny, maar dan geeft je het CIDR netblock op:
1 deny 69.28.58.0/24; # acting weirdly, might be robot without identity deny 79.142.64.0/20; # weird behaviour from different hosts - Altushost INC deny 80.67.0.0/20; # spammy comments deny 88.214.193.0/24; # junk referrers, hosting company, not important
Blokkeren op basis van GeoIP data
Als laatste kun je zelfs hele landen blokkeren op basis van de GeoIP informatie van MaxMind. Je NGINX installatie moet dan natuurlijk wel zijn gecompileerd met ondersteuning voor GeoIP.
Eerst moet in de NGINX configuratie aangegeven worden waar de GeoIP database op de harde schijf staat. DIt gebeurt binnen het http {}; blok:
1 geoip_country /etc/nginx/GeoIP.dat;
Hierna kan met het volgende blok worden opgegeven welke landen moeten worden geblokkeerd.
1 if ($geoip_country_code ~ (BR|CN|KR|RU) ) { return 403; }
In dit geval blokkeer ik Brazilie, China, Korea en Rusland. Deze landen behoren sowieso niet tot mijn doelgroep en ik zie op mijn server bijna alleen maar exploits en ander vreemd gedrag uit deze landen binnenkomen.
Blokkeren vanuit centrale configuratie
Ik heb al deze stukjes configuratie (behalve de regel die aangeeft waar de GeoIP database staat) in een apart bestand staan die ik vanuit de verschillende virtualhost configuraties kan includen binnen het server {}; blok. Dit bestand heb ik /etc/nginx/block.conf genoemd. Per virtualhost is dit een simpele regel:
1 include /etc/nginx/block.conf;
Tot slot
Dit alles geeft je een mooi arsenaal aan methodes om vervelende bots en scriptkiddies buiten de deur te houden. Pas het niet overdadig toe en probeer erop te letten dat je Google niet blokkeert