Welkom terug bij Verkeer op de reverse proxy, de dagelijkse rondleiding langs alles wat de afgelopen 24 uur tegen mijn nginx aanbotste. En reken maar dat er weer geramd is. De poortwachter heeft een drukke dienst gehad, vooral omdat hij het overgrote deel van de bezoekers met een vriendelijk-maar-stellig “even niet” naar huis stuurde. Pak een bak koffie, we duiken erin.
Hoeveel verkeer was het eigenlijk?
In totaal kwamen er 4638 logregels binnen, waarvan er 4396 netjes als access-log te parsen waren. Goed voor zo’n 27,3 MiB aan verstuurde bytes — geen Netflix, maar voor een handvol kleine WordPress-sites alleszins respectabel. Die requests kwamen van 786 unieke IP-adressen, wat klinkt als een gezellige drukte tot je doorhebt dat een flink deel daarvan geen mensen waren maar geautomatiseerde gasten.
Het verkeer was bovendien allesbehalve gelijkmatig verdeeld over de dag. De grote uitschieter zat rond 06:00 UTC met 919 verzoeken in één uur, gevolgd door een tweede golf rond 23:00 (587) en een derde piek om 08:00 (396). Tussendoor, rond 10:00 en 11:00, was het juist akelig stil met amper 22 en 26 verzoeken. Dat ochtendpiekje van 06:00 is het soort patroon dat zelden van échte lezers komt; mensen drinken om die tijd koffie, scanners niet.
Mens versus bot: de strijd is niet eerlijk
De automatische telling zet 755 verzoeken in het hokje “bot” en 3641 in het hokje “overig/mens”. Klinkt geruststellend, tot je naar de user-agents kijkt. De absolute koploper is namelijk een lege user-agent (906 keer simpelweg “-“), op de voet gevolgd door curl/8.7.1 met 777 verzoeken. Dat zijn geen mensen die toevallig je blog ontdekken; dat zijn scripts die hun handtekening niet eens fatsoenlijk invullen. De kolom “mens” mag je dus met een flinke korrel zout nemen.
Verder in de lijst herken je de bekende, eerlijke kruimeldieven van het web: Bytespider (284, de crawler van ByteDance/TikTok), meta-externalagent (83, Facebook), Applebot (75) en ClaudeBot (74). Die houden zich netjes aan de regels en vertellen gewoon wie ze zijn. Met de rest van het gezelschap wordt het minder gezellig — daarover zo meer.
Opvallende statuscodes: een troon vol 503’jes
Als je gisteren dacht dat de 503 wel zou wegtrekken: helaas. De statuscode die “Service Unavailable” betekent regeerde opnieuw met 2824 verzoeken — ruim zestig procent van al het verkeer. Daarmee zijn de 5xx-fouten in z’n eentje groter dan al het succesvolle verkeer bij elkaar. Ter vergelijking: er waren 983 keer een nette 200 (OK) en 100 keer een 304 (Not Modified, oftewel “je had ‘m al, scheelt bytes”).
De 4xx-hoek vertelt het verhaal van de zoekende bezoeker die nul keer beet had: 215 keer een 404 (pagina bestaat niet) en 158 keer een 400 (Bad Request — vaak rommelige of moedwillig misvormde verzoeken). Daarnaast 35 keer een 403 (verboden toegang) en eenmaal een eenzame 504. Kortom: de backend stond een groot deel van de dag te puffen, en de reverse proxy deed braaf z’n werk door iedereen een 503 te overhandigen in plaats van de boel te laten omvallen.
De drukste paden
Bovenaan staat zoals altijd de homepage / met 209 verzoeken. Daarna volgt meteen iets veelzeggends: /robots.txt (64) — het bestand dat alleen bots opvragen om te kijken wat ze mogen (en vervolgens negeren). Op plek drie /wp-cron.php (38), het kloppend hart van WordPress’ geplande taken, en daarna /SDK/webLanguage (35), dat hier helemaal niet thuishoort — dat is een scannerpad, geen WordPress-pad.
De rest van de top 15 is heerlijk voorspelbaar voor wie het MoreNews-thema draait: de gebruikelijke theme-scripts, /favicon.ico, /feed/, de /wp-sitemap.xml en de css voor het Oswald-lettertype. En leuk om te zien: ook de blogpost van gisteren over de eigenwijze 503 werd 16 keer opgevraagd. Iemand leest dus mee — of in elk geval een bot met gevoel voor ironie.
Qua hosts wint www.kroonwijk.nl (1351) nipt van beerenko.nl (1142), met daarachter een opmerkelijk grote stapel verzoeken die niet eens een nette domeinnaam meestuurde maar gewoon mijn kale home-IP als Host-header gebruikte (samen ruim 980 keer). Echte browsers doen dat niet; die kennen je domeinnaam. Wie rechtstreeks op het IP aanklopt, is vrijwel altijd op zoek naar een willekeurige server om te misbruiken — niet naar jouw kattenfoto’s.
De verdachte hoek: script kiddies en kwetsbaarheidsscanners
En dan het deel waar deze serie eigenlijk om draait. De probing-pogingen waren weer rijk vertegenwoordigd, en ze laten mooi zien welk gereedschap er rondzwerft op het internet.
Op jacht naar geheimen: de .env-jagers
Een klassieker keert terug: /.env (15 keer), plus de varianten /.env.production, /.env.prod en /.env.local (elk 9 keer). In dat soort bestanden bewaren slordige ontwikkelaars wel eens databasewachtwoorden, API-sleutels en andere geheimen. Een geslaagde greep hier is voor een aanvaller goud waard. Bij mij staan ze er niet — maar de hoop sterft blijkbaar nooit.
PHP-webshells en de “even kijken of het werkt”-lijst
De 4xx-paden lezen als een boodschappenlijstje van geautomatiseerde exploitkits: /admin.php, /file.php, /info.php, /goods.php, /about.php, /classwithtostring.php, /adminfuns.php en het altijd grappige /wp-content/admin.php. Stuk voor stuk pogingen om een eerder geplante webshell te vinden of een bekende kwetsbaarheid aan te spreken. Bijzonder brutaal is /wp-content/plugins/hellopress/wp_filemanager.php — dat mikt op een beruchte file-manager-plugin waarmee je in één klap bestanden op de server kunt uploaden. Allemaal kregen ze hetzelfde antwoord: een 4xx of een 503, en verder niets.
/SDK/webLanguage: niet jouw WordPress
Die 35 verzoeken naar /SDK/webLanguage verdienen een aparte vermelding. Dat pad hoort bij bepaalde netwerkapparatuur en VPN-/camera-achtige toestellen, niet bij een blog. Het is het soort verzoek dat een botnet wijdverspreid afvuurt op álle IP-adressen die het tegenkomt, in de hoop per ongeluk een kwetsbaar apparaat te raken. Bij mij landde het netjes in de 5xx-bak.
Het gereedschap verraadt de inbreker
De user-agents maken de bedoelingen extra duidelijk. l9explore/1.2.2 (204 verzoeken) is de scanner van LeakIX, die actief het internet afspeurt naar blootgestelde diensten en lekkende configuraties. libredtail-http (88) is eveneens een geautomatiseerde verkenner. En dan de pareltjes uit de “ik doe net of ik een browser ben”-categorie: “Mozlila/5.0 … Moblie Safari … Team Anon Force” (376 keer) — let op de spelfouten in Mozlila en Moblie, plus de stoere groetnaam erachter — en een “MSIE 6.0; Windows CE; Opera 8.65” (263 keer), een user-agent uit het stenen tijdperk die geen enkel echt apparaat anno 2026 nog gebruikt. Wie zo’n nepkenteken opplakt, heeft zelden goede bedoelingen.
Verzoeken die niet eens HTTP wíllen zijn
Het curieuze randje zit in de methodekolom. Naast de gewone GET (4270) en POST (75) staan er regels die helemaal geen HTTP-methode zijn: een rits \x16\x03…-bytes (een TLS-handshake die op de platte HTTP-poort werd losgelaten), \x03\x00\x00\x13… (dat ruikt naar een RDP-probe), een eenzame PRI (het begin van een HTTP/2-verbindingspreface) en tweemaal MGLNDD_…_443 — de vingerafdruk van een banner-grabbende poortscanner die simpelweg wil weten wélke dienst hier draait. Allemaal verkeerd geadresseerd, allemaal afgewimpeld.
De grootverbruikers
Qua volume voert 185.177.72.66 de ranglijst aan met maar liefst 792 verzoeken — bijna een vijfde van alles. Maar de échte stoorzender qua verdachte verzoeken is 45.148.10.200: van de 215 verzoeken waren er 176 verdacht, oftewel vrijwel niets anders dan probing. Daarachter een groepje adressen uit het 20.x-bereik (waar veel cloudgehoste scanners vandaan komen) dat samen honderden verkenningspogingen op z’n naam heeft staan.
Conclusie van de dag
27 juni was vooral een dag van weigeren. De 503 bleef stevig op de troon zitten, wat betekent dat de backend het zwaar had — maar de reverse proxy deed precies waarvoor hij in dienst is: het kaf van het koren scheiden en de horde scanners, .env-jagers en nepbrowsers met lege handen wegsturen. Geen geheimen gelekt, geen shell gevonden, geen Team Anon Force-overwinning. Wel een berg ruis, een handvol creatieve probepogingen en het geruststellende beeld dat de poortwachter klaarwakker was. Tot morgen, als we weer kijken wie er aan de deur rammelt.