Príval scraperov na bezplatnom tarife Cloudflare: čo ho zastavilo a čo sme nechali vypnuté
Prevádzka
Jedného rána sa jedna z našich stránok s popismi produktov prestala otvárať. Cloudflare návštevníkom zobrazil chybu 524, origin serveru trvalo 2 až 6 minút na načítanie každej stránky a asi 10 hodín nám o tom nič nepovedalo. Príčinou bol scraper, ktorý cez rezidenčné proxy posielal približne 225 požiadaviek za sekundu.
Tvar prívalovej vlny
- Tisíce adries, jedna až tri požiadavky na každú. Domáce širokopásmové pripojenia v USA, Španielsku, Francúzsku, Brazílii, Spojenom kráľovstve a inde, taký typ prevádzky, akú prenajíma sieť rezidenčných proxy serverov.
- Užívateľské agentúry prehliadača Chrome na Macu s číslami verzií od 103 do 151.
- Skoro nikdy nie cookie ani Referer. Z 2 697 požiadaviek, ktoré sme na serveri odobrali na vzorku, 4 obsahovali cookie a 4 Referer.
- Dva typy klienta. Približne polovica odosielala žiadne hlavičky
Sec-Fetch-*a žiadne informácie o klientovi: išlo o skript so skopírovaným reťazcom user agentu. Druhá polovica odosielala úplné prehliadačové hlavičky: išlo o headless prehliadač.
Každá stránka sa vykresľovala pri každej požiadavke, takže každý worker zaradil do frontu stovky vykreslení a narazil na limit procesora.
Prečo obmedzenia na jednotlivé adresy nepomohli
Limit frekvencie počíta požiadavky na jednu adresu. Ak z tisícov adries príde jedna až tri požiadavky z každej, žiadna jednotlivá adresa sa k limitu ani len nepriblíži. Blokácia krajín by bola zablokovala našich návštevníkov. Čo scraper nedokázal lacne sfalšovať, bolo správať sa ako prehliadač, ktorý už na stránke bol.
Na okraji siete Cloudflare: tri bezplatné pravidlá
Bezplatný tarif umožňuje päť vlastných pravidiel WAF na zónu. Použili sme tri, všetky s riadenou výzvou namiesto blokovania, takže osoba, ktorá je omylom zachytená, sa preklikne:
- Falošný prehliadač: požiadavka GET, ktorej user agent obsahuje
Chrome/a ktorá nemá hlavičkuSec-Fetch-Mode. Každý Chrome ju od roku 2019 posiela. - Mračné scraper cloudy: požiadavka na stránku zo sietí Alibaba, Tencent a Huawei Cloud, odkiaľ pochádzala väčšina toho, čo sme testovali.
- Núdzový režim, predvolene vypnutý: požiadavka GET bez akýchkoľvek cookies a bez hlavičky Referer. Človek, ktorý už bol na stránke, alebo ktorý prichádza cez odkaz, prejde bez zásahu; scraper, ktorý neuchováva cookies, narazí na výzvu pri každej požiadavke. Zapíname ho len počas návalu, pretože tiež vyzýva aj niekoho, kto zadá adresu do nového prehliadača.
Všetky tri prepúšťajú overené boty Cloudflare, user agenty, ktoré sa označujú ako roboty, naše vlastné adresy, cesty API a webhookov a súbory, ktoré nie sú stránky. O dva dni neskôr bol príval stále v plnom prúde: za jednu hodinu pravidlo falošných prehliadačov vyzvalo viac ako 10 000 požiadaviek. 10 000 udalostí, ktoré Cloudflare vráti na jednu dotaz, pochádzalo z 9 627 adries, žiadna z nich nemala viac ako 4.
Na zdroji: brána v aplikácii
Headless polovica má úplné hlavičky prehliadača, takže samotné pravidlá na okraji ju nezachytia, keď je núdzové pravidlo vypnuté. V samotnej aplikácii sme pred vykresľovač stránok vložili malý middleware:
- user agent Chrome bez
Sec-Fetch-Modeani klientskych hintov dostane 403 skôr, než sa začne akákoľvek práca; - cudzinec bez našich cookies a bez Referer je obsluhovaný len vtedy, keď má worker voľnú kapacitu, niekoľko stránok za sekundu. Nad tým limitu sa zobrazí 400-bajtová stránka 503, nastaví cookie a po dvoch sekundách znova načíta. Človek dostane stránku na druhý pokus; scraper, ktorý neuchováva cookies, nikdy.
V prvej minúte brána odmietla približne 6 700 falošných prehliadačov a vyhnala približne 6 700 cudzincov, pričom cudzincom obsluhovala približne 9 stránok za sekundu. Pomalé požiadavky klesli na nulu, CPU workerov kleslo z ich stropu na 12 až 15 percent a ich pamäť z 4 až 5 GB na každého na 0,65 GB.
Čo sme nechali vypnuté
- Bot Fight Mode. Vyzýva automatizovanú prevádzku a na Free pláne sa nedá obísť vlastným pravidlom, a zachytil webhooky nášho poskytovateľa platieb.
- Under Attack mode pre celú zónu. Všetkých návštevníkov, klientov API a webhooky posielava cez medzistránku. Núdzové pravidlo robí tú istú prácu len pre požiadavky na stránky od cudzincov.
- Pravidlo obmedzenia frekvencie na Free pláne. Počíta na adresu, čo tento príval nikdy nespustí.
- Blokovanie AI crawlerov. Chceme byť nájdení AI vyhľadávacími asistentmi a títo crawler neboli problémom.
Zhrnutie
Príval cez rezidenčné proxy je ľahké odhaliť podľa toho, čo mu chýba: hlavičky fetch prehliadača, cookies a Referery. Vyzvite to na okraji, udržujte cudzincov v rámci toho, čo dokážu vaši workeri vykresliť, a uistite sa, že niečo mimo servera si všimne, keď sa stránka prestane otvárať. Night Watch balí všetko tri: stráž, pravidlá s automatickým prepínačom pre to núdzové a bránu pre Python webové aplikácie.