Poplava scraperjev na brezplačnem načrtu Cloudflare: kaj jo je ustavilo in kaj smo pustili izklopljeno

Operacije

Nekega jutra se naša stran z oglasi ni več odpirala. Cloudflare je obiskovalcem prikazoval napako 524, izvirni strežnik je potreboval od dveh do šestih minut na stran, mi pa o tem nismo ničesar vedeli približno deset ur. Vzrok je bil scraper, ki je prek rezidenčnih proxy strežnikov pošiljal približno 225 zahtev na sekundo.

Oblika poplave

Vsaka stran je bila obdelana za vsako zahtevo, zato je vsak delavec čakal v vrsti na na stotine obdelav in dosegel svojo omejitev procesorja.

Zakaj omejitve na naslov niso pomagale

Omejitev hitrosti šteje zahteve na naslov. Ker je vsak od tisočih naslovov poslal le eno do tri zahteve, noben posamezen naslov ni nikoli približal omejitvi. Blokiranje držav bi blokiralo naše obiskovalce. Tega, kar scraper ni mogel poceni ponarediti, je bilo obnašanje, kot da gre za brskalnik, ki je že bil na strani.

Na robu Cloudflare: tri brezplačna pravila

Brezplačni načrt dovoljuje pet pravil po meri WAF na cono. Uporabili smo tri, vsa z upravljanjem izziva namesto blokade, da oseba, ki je po pomoti zajeta, klikne skozi:

Vsi trije prepuščajo preverjene bote storitve Cloudflare, uporabniške agentove, ki se predstavijo kot roboti, naše lastne naslove, poti API in webhook ter datoteke, ki niso strani. Dva dni pozneje je poplava še vedno trajala: v eni uri je pravilo za lažne brskalnike ovrednotilo več kot 10.000 zahtev. 10.000 dogodkov, ki jih Cloudflare vrne po poizvedbi, je prihajalo z 9.627 naslovov, noben z več kot 4.

Na izvornem strežniku: vrata v aplikaciji

Polovica brez glave ima polne glave brskalnika, zato robna pravila same ne ujamejo prometa, ko je nujno pravilo izklopljeno. V sami aplikaciji smo pred izrisovalnik strani postavili majhen vmesni sloj:

V prvi minuti je vrata zavrnila približno 6.700 lažnih brskalnikov in odbila približno 6.700 neznancev, hkrati pa neznancem postregla s približno 9 stranmi na sekundo. Počasne zahteve so padle na nič, poraba CPE delavcev je padla z njihove omejitve na 12 do 15 odstotkov, pomnilnik pa z 4 do 5 GB na osebo na 0,65 GB.

Kaj smo pustili izklopljeno

Ključna ugotovitev

Poplavo prek stanovanjskih proxy strežnikov je enostavno prepoznati po tem, česa manjka: glave fetch brskalnika, piškotki in glave Referer. To ovrednotite na robu, neznance obdržite znotraj zmogljivosti, ki jo lahko izrišejo vaši delavci, ter poskrbite, da nekaj zunaj strežnika opazi, ko se stran neha odpirati. Night Watch pakira vse tri: varuha, pravila s samodejnim preklopom za nujno pravilo in vrata za Python spletne aplikacije.

Posodobljeno: