Poplava skrapera na Cloudflare Free planu: šta ju je zaustavilo i šta smo ostavili isključeno

Operacije

Jednog jutra jedna od naših stranica sa oglasima prestala je da se otvara. Cloudflare je posetiocima prikazivao grešku 524, origin serveru je trebalo od dva do šest minuta po stranici, a ništa nas nije upozoravalo oko deset sati. Uzrok je bio skreper koji je prolazio kroz rezidencijalne proksi servere brzinom od oko 225 zahteva u sekundi.

Oblik poplave

Svaka stranica je bila renderovana za svaki zahtev, pa je svaki radni proces (worker) stavio u red čekanja stotine renderovanja i udario u CPU limit.

Zašto ograničenja po adresi nisu pomogla

Ograničenje brzine (rate limit) broji zahteve po adresi. Sa jednim do tri zahteva sa svake od hiljada adresa, nijedna pojedinačna adresa se nikada ne približava limitu. Blokiranje država bi blokiralo naše posetioce. Ono što skreper nije mogao jeftino da simulira bilo je ponašanje kao pregledač koji je već bio na sajtu.

Na Cloudflare ivici: tri besplatna pravila

Free plan dozvoljava pet prilagođenih WAF pravila po zoni. Iskoristili smo tri, sva sa upravljanom proverom (managed challenge) umesto blokiranja, tako da osoba uhvaćena greškom može da klikne i prođe:

Sve tri propuštaju Cloudflare-ove verifikovane botove, korisničke agense koji se sami predstavljaju kao roboti, naše adrese, API i webhook putanje, kao i fajlove koji nisu stranice. Dva dana kasnije poplava je i dalje trajala: u jednom satu pravilo za lažne pretraživače je izazvalo više od 10.000 zahteva. 10.000 događaja koje Cloudflare vraća po upitu dolazilo je sa 9.627 adresa, nijedna od njih nije imala više od 4.

Na izvoru: kapija u aplikaciji

Headless deo ima pune zaglavlja pretraživača, pa ga pravila na ivici ne hvataju dok je hitno pravilo isključeno. U samoj aplikaciji smo postavili mali middleware ispred renderera stranica:

U prvoj minuti kapija je odbila oko 6.700 lažnih pretraživača i odbila oko 6.700 stranaca, dok je strancima servirala oko 9 stranica u sekundi. Spori zahtevi su pali na nulu, CPU radnika je pao sa svog limita na 12 do 15 procenata, a njihova memorija sa 4 do 5 GB po radniku na 0,65 GB.

Šta smo ostavili isključenim

Zaključak

Poplavu kroz rezidencijalne proksi servere lako je uočiti po tome čega joj nedostaje: browser fetch zaglavlja, kolačići i Referer zaglavlja. Izazovite to na ivici, držite strance u okvirima onoga što vaši radnici mogu da renderuju i pobrinite se da nešto van servera primeti kada stranica prestane da se otvara. Night Watch pakuje sve tri stvari: nadzor, pravila sa automatskim prebacivanjem za hitno pravilo i kapiju za Python web aplikacije.

Ažurirano: