Egy scraper-áradás a Cloudflare Free csomagján: mi állította meg, és mit hagytunk kikapcsolva

Üzemeltetés

Egy reggel az egyik termékleírásos oldalunk nem nyílt meg többé. A Cloudflare 524-es hibát mutatott a látogatóknak, az origin szerver oldalanként két-hat percet vett igénybe, és körülbelül tíz órán át semmi nem jelezte a problémát. Az ok egy scraper volt, amely lakossági proxykon keresztül másodpercenként kb. 225 kérést küldött.

Az áradás leírása

Minden kéréshez minden oldalt renderelni kellett, így minden worker több száz renderelést sorolt be, és elérte a CPU-korlátját.

Miért nem segített a címenkénti korlátozás

A sebességkorlátozás címenként számolja a kéréseket. Mivel több ezer címről egyenként csak egy-három kérés érkezett, egyetlen cím sem közelítette meg a korlátot. Az országok blokkolása a látogatóinkat is blokkolta volna. Amit a scraper nem tudott olcsón meghamisítani, az az volt, hogy úgy viselkedjen, mint egy böngésző, amely már járt az oldalon.

A Cloudflare peremén: három ingyenes szabály

A Free csomag zónánként öt egyéni WAF-szabályt engedélyez. Hármat használtunk, mindet kezelt kihívással (managed challenge) blokkolás helyett, így egy tévedésből megakadt felhasználó átkattinthat:

Mind a három engedi a Cloudflare ellenőrzött botjait, azokat a felhasználóügynököket, amelyek robotként azonosítják magukat, a saját címeinket, az API- és webhook-útvonalakat, valamint a nem oldal jellegű fájlokat. Két nappal később az özön még mindig tartott: egy óra alatt a hamis böngésző szabály több mint 10 000 kérést ellenőrzött. A Cloudflare által lekérdezésenként visszaadott 10 000 esemény 9 627 címről származott, amelyek közül egyik sem lépte túl a 4-et.

Az eredeti szerveren: kapu az alkalmazásban

A fej nélküli felén teljes böngészőfejlécek vannak, így a peremszabályok önmagukban nem fogják el, amíg a vészhelyzeti szabály ki van kapcsolva. Magában az alkalmazásban egy kis middleware-t tettünk az oldalrenderelő elé:

Az első percben a kapu kb. 6 700 hamis böngészőt utasított el, és kb. 6 700 idegent fordított el, miközben az idegeneknek másodpercenként kb. 9 oldalt szolgált ki. A lassú kérések nullára estek, a munkások CPU-terhelése a limitükről 12–15 százalékra csökkent, a memóriájuk pedig darabonként 4–5 GB-ról 0,65 GB-ra.

Amit kikapcsolva hagytunk

A tanulság

Az otthoni proxykon keresztül érkező özönt könnyű felismerni arról, ami hiányzik belőle: böngésző fetch fejlécek, sütik és Refererek. Ezt ellenőrizd a peremen, tartsd az idegeneket azon a szinten, amit a munkásaid meg tudnak jeleníteni, és gondoskodj róla, hogy a szerveren kívülről is észrevegyék, ha egy oldal nem nyílik meg többé. A Night Watch mind a hármat csomagolja: az őrszemét, a szabályokat az automatikus kapcsolóval a vészhelyzetihez, és a kaput Python webalkalmazásokhoz.

Frissítve: