En scraperflom på Cloudflares gratisplan: hva som stoppet den, og hva vi lot være slått på

Drift

En morgen sluttet en av våre produktbeskrivelsessider å åpne seg. Cloudflare viste besøkende en 524-feil, opprinnelsen tok to til seks minutter per side, og ingenting fortalte oss om det i omtrent ti timer. Årsaken var en scraper som gikk gjennom residential-proxies med omtrent 225 forespørsler i sekundet.

Flomens form

Hver side ble gjengitt for hver forespørsel, så hver worker la seg i kø med hundrevis av gjengivelser og traff sin CPU-grense.

Hvorfor grenser per adresse ikke kunne hjelpe

En hastighetsbegrensning teller forespørsler per adresse. Med én til tre forespørsler fra hver av tusenvis av adresser, kommer ingen enkeltadresse i nærheten av en grense. Å blokkere land ville ha blokkert våre besøkende. Det scraperen ikke kunne forfalske billig, var å oppføre seg som en nettleser som har vært på nettstedet tidligere.

Ved Cloudflares kant: tre gratis regler

Gratisplanen tillater fem WAF-tilpassede regler per sone. Vi brukte tre, alle med en administrert utfordring i stedet for en blokkering, slik at en person som blir tatt ved en feil kan klikke seg gjennom:

Alle tre slipper gjennom Cloudflares verifiserte botter, brukere som kaller seg robotter, våre egne adresser, API- og webhook-stier, og filer som ikke er sider. To dager senere fortsatte flommen: på én time utfordret regelen for falske nettlesere mer enn 10 000 forespørsler. De 10 000 hendelsene Cloudflare returnerer per spørring kom fra 9 627 adresser, ingen med mer enn 4.

Ved opprinnelsen: en port i appen

Den headless-halvdelen har fullstendige nettleseroverskrifter, så kantreglene alene fanger den ikke opp mens nødstilstanden er av. I selve appen setter vi inn en liten mellomvare foran siderendereren:

I det første minuttet nektet porten om lag 6 700 falske nettlesere og avviste om lag 6 700 fremmede, mens den betjente fremmede med om lag 9 sider i sekundet. Treg forespørsler falt til null, arbeiderne CPU falt fra grensen til 12 til 15 prosent, og minnet fra 4 til 5 GB hver til 0,65 GB.

Det vi lot være av

Konklusjonen

En flom gjennom bolignettverk er lett å få øye på ved det som mangler: nettleserfetch-overskrifter, informasjonskapsler og Referer. Utfordre dette ved kanten, hold fremmede innenfor det arbeiderne dine kan render, og sørg for at noe utenfor serveren merker det når en side slutter å åpne. Night Watch pakker alle tre: overvåkeren, reglene med en automatisk bryter for nødstilstanden, og porten for Python-nettapper.

Oppdatert: