Záplava scraperů na bezplatném tarifu Cloudflare: co ji zastavilo a co jsme nechali vypnuté

Provoz

Jednoho rána se náš web s výčty produktů přestal otevírat. Cloudflare návštěvníkům zobrazoval chybu 524, origin server potřeboval dvě až šest minut na načtení jedné stránky a asi deset hodin nám nic neřeklo. Příčinou byl scraper procházející rezidenčními proxy přibližně rychlostí 225 požadavků za sekundu.

Průběh záplavy

Každá stránka se vykreslovala pro každý požadavek, takže každý worker měl ve frontě stovky vykreslování a narážel na limit CPU.

Proč limity na adresu nepomohly

Omezení rychlosti počítá požadavky na adresu. Při jednom až třech požadavcích z každé z tisíců adres se žádná jednotlivá adresa k limitu ani nepřiblíží. Blokování zemí by zablokovalo naše návštěvníky. Co scraper nemohl levně zfalšovat, bylo chovat se jako prohlížeč, který už na webu byl.

Na okraji Cloudflare: tři bezplatná pravidla

Bezplatný tarif umožňuje pět vlastních pravidel WAF na zónu. Použili jsme tři, všechna s řízenou výzvou místo blokování, aby člověk, který je zachycen omylem, mohl projít kliknutím:

Všechny tři propouštějí ověřené boty Cloudflare, user agenty, které se samy označují jako roboti, naše vlastní adresy, cesty k API a webhookům a soubory, které nejsou stránkami. O dva dny později záplava stále pokračovala: během jedné hodiny pravidlo pro falešné prohlížeče vyžádalo ověření u více než 10 000 požadavků. 10 000 událostí, které Cloudflare vrátí na jeden dotaz, pocházelo z 9 627 adres, žádná z nich neměla více než 4.

Na zdroji: brána v aplikaci

Headless polovina má úplné hlavičky prohlížeče, takže samotná pravidla na okraji ji nezachytí, když je nouzové pravidlo vypnuté. V samotné aplikaci jsme před vykreslování stránek umístili malý middleware:

Během první minuty brána odmítla přibližně 6 700 falešných prohlížečů a odmítla přibližně 6 700 cizích návštěvníků, přičemž cizím návštěvníkům obsloužila přibližně 9 stránek za sekundu. Pomalé požadavky klesly na nulu, CPU workerů kleslo z jejich limitu na 12 až 15 procent a jejich paměť z 4 až 5 GB na každého na 0,65 GB.

Co jsme nechali vypnuté

Shrnutí

Záplavu přes rezidenční proxy je snadné poznat podle toho, co jí chybí: hlavičky fetch prohlížeče, cookies a Referery. Vyzvěte ji na okraji, udržujte cizí návštěvníky v rámci toho, co vaši workers dokážou vykreslit, a ujistěte se, že něco mimo server pozná, když se stránka přestane otevírat. Night Watch balíček obsahuje vše tři: hlídač, pravidla s automatickým přepínačem pro to nouzové a bránu pro webové aplikace v Pythonu.

Aktualizováno: