Referrer SPAM #2

Ik heb een tijdje geleden een filter ingebouwd in de referrerpagina van de ICT in het Onderwijs Wiki (zie ook deze post). Die filter wordt nu (ik neem overigens aan onbewust) tegen me gebruikt en maakt de server van tijd tot tijd haast onbereikbaar.
Waarschuwing

Nadat ik meer geheugen geïnstalleerd had, heb ik een tijdje het taakbeheer van de server laten meelopen om te kijken hoe hij zich tijdens een dag zou gedragen. Normaal gesproken staat die server niets te doen, en als er een bezoeker langs komt dan zie je een korte piek in de belasting van de processor (CPU Usage). De duur van die piek is een beetje afhankelijk van of de pagina in de cache zit of niet.

Een paar dagen geleden zag ik ’s ochtends dat de processor gedurende een lange tijd op 100% belasting bleef hangen.

Processorbelasting op 100% - Klik voor grotere versie
Zoeken naar oorzaken

Ik dacht eerst dat de cache op deze site van streek was, maar kwam er al snel achter dat het de gosoftonline.com website was die gek deed. Omdat het verschijnsel zich de dagen daarop nog een paar keer voor deed kon ik steeds meer informatie verzamelen. Blijkbaar had de MySql server (de database) het op de momenten van de hoge processorbelasting ontzettend druk. Een dag later kon ik zien wat dat veroorzaakte: er werd een query uitgevoerd die een delete-actie uitvoerde op de referrer tabel.

De filter

De spam-filter filtert niet bij het opslaan van referrers (dat gebeurt namelijk heel vaak), maar bij het opvragen van de referrerpagina (gebeurt namelijk veel minder). Wat er dan gebeurt is dat het script de referrers in de database vergelijkt met een lijst van bijna 60 bekende spam-sites. Dat is tijdelijk een intensieve actie voor MySQL omdat er bijna 60 individuele queries worden uitgevoerd (er wordt 60 keer een delete opdracht gegeven voor steeds één spam-website).

De spammer

Het probleem is dat de spammers juist die referrerpagina steeds aanroepen. Ik weet niet of het toeval is, maar het zijn steeds twee IP-nummers tegelijkertijd die met minder dan 10 seconden interval de referrerpagina voor steeds een andere wiki-pagina opvragen. En dat kan de server niet aan.

IP-block

Natuurlijk zou een IP-block ook een optie zijn, maar bij IIS is dat nog niet zo eenvoudig, ik kan niet snel even een tekstbestand ergens neerzetten, maar moet ze één voor één invoeren.

IP block in IIS - Klik voor grotere versie

Het vervelende hiervan vind ik dat ik, als ik een typefout maak een gewone gebruiker zou blocken, terwijl het achteraf opruimen van de rotzooi in ieder geval niet voorkomt dat mensen de sites kunnen bereiken. Toch ben ik het maar even zo aan het doen. Ook vervelend is dat ik die lijst handmatig moet gaan opbouwen, ik die lijst niet kan delen of van anderen kan importeren. Het zal dus even duren voordat ik ze weer alle 60 heb.

Voorlopig staan de spammers voor, maar de wedstrijd is nog lang niet voorbij.