Սքրեյպերի հարձակում Cloudflare-ի Free պլանում. ինչը կանգնեցրեց այն և ինչը մենք անջատված թողեցինք

Օպերացիաներ

Մի առավոտ մեր նկարագրությունների կայքերից մեկը դադարեց բացվելուց։ Cloudflare-ը այցելուներին ցույց էր տալիս 524 սխալ, սկզբնական սերվերը յուրաքանչյուր էջ բեռնում էր երկուսից վեց րոպեում, և մենք մոտ տասը ժամ ոչինչ չգիտեինք։ Պատճառը սքրեյպեր էր, որն անցնում էր բնակչության պրոքսիների միջով՝ վայրկյանում մոտ 225 հարցում կատարելով։

Հարձակման բնույթը

Յուրաքանչյուր հարցման համար էջը վերարտադրվում էր, ուստի յուրաքանչյուր worker հերթ էր դնում հարյուրավոր վերարտադրումներ և հասնում իր CPU սահմանաչափին։

Ինչու հասցեների սահմանաչափերը չէին կարողանում օգնել

Rate limit-ը հաշվում է հարցումները ըստ հասցեի։ Հազարավոր հասցեներից յուրաքանչյուրից մեկից երեք հարցումների դեպքում ոչ մի առանձին հասցե երբեք չի մոտենում սահմանաչափին։ Երկրները արգելափակելը կարգելափակեր էր մեր այցելուներին։ Այն, ինչ սքրեյպերը չէր կարողանում էժան կեղծել, այն էր, որ վարվեր այնպես, ինչպես կայք այցելած browser-ը։

Cloudflare-ի եզրում. երեք անվճար կանոն

Free պլանը թույլ է տալիս յուրաքանչյուր zone-ի համար հինգ WAF custom rule։ Մենք օգտագործեցինք երեքը, բոլորը՝ managed challenge-ով, ոչ թե block-ով, որպեսզի սխալմամբ բռնված մարդը կարողանա անցնել։

Երեքն էլ բաց են թողնում Cloudflare-ի հաստատված բոտերը, իրենց ռոբոտ անվանող user agent-ները, մեր սեփական հասցեները, API-ի և webhook-ի ուղիները, ինչպես նաև էջ չհանդիսացող ֆայլերը։ Երկու օր անց հեղեղը դեռ շարունակվում էր. մեկ ժամում կեղծ բրաուզերի կանոնը ավելի քան 10,000 հարցում էր ենթարկել ստուգման։ Cloudflare-ի կողմից մեկ հարցմամբ վերադարձված 10,000 իրադարձությունները գալիս էին 9,627 հասցեներից, որոնցից ոչ մեկը 4-ից ավելի չուներ։

Աղբյուրում՝ դարպասը հավելվածում

Առանց գլխի մասը ունի ամբողջական բրաուզերային headers, ուստի եզրային կանոնները միայնակ չեն բռնում այն, երբ արտակարգ կանոնը անջատված է։ Հավելվածի մեջ մենք էջի ռենդերերի առջև դրել ենք փոքրիկ middleware.

Առաջին րոպեին դարպասը մերժել էր մոտ 6,700 կեղծ բրաուզեր և հետ էր մղել մոտ 6,700 անծանոթի, միաժամանակ անծանոթներին մատուցելով վայրկյանում մոտ 9 էջ։ Դանդաղ հարցումները զրոյացել էին, worker-ների CPU-ն նվազել էր առավելագույնից մինչև 12-15 տոկոս, իսկ հիշողությունը՝ յուրաքանչյուրի մոտ 4-5 ԳԲ-ից մինչև 0.65 ԳԲ։

Ինչը մենք անջատված թողեցինք

Հիմնական եզրակացությունը

Բնակչական proxy-ների միջով հեղեղը հեշտ է նկատել նրանով, թե ինչ է պակասում. բրաուզերային fetch headers, cookies և Referers։ Ստուգեք դա եզրում, պահեք անծանոթները worker-ների ռենդերման հզորության սահմաններում, և համոզվեք, որ սերվերից դուրս ինչ-որ բան նկատում է, երբ էջը դադարում է բացվել։ Night Watch-ը փաթեթավորում է երեքն էլ. վոչդոգը, կանոնները՝ արտակարգի համար ավտոմատ անջատիչով, և դարպասը Python web app-երի համար։

Թարմացված է: