فيضان من أدوات الاستخراج على خطة Cloudflare المجانية: ما الذي أوقفه، وما الذي تركناه مغلقًا

العمليات

في أحد الصباحات، توقّع أحد مواقعنا لعرض القوائم عن العمل. أظهرت Cloudflare للزوار خطأ 524، واستغرق الخادم الأصلي من دقيقتين إلى ست دقائق لكل صفحة، ولم يخبرنا شيء عن ذلك لمدة عشر ساعات تقريباً. كان السبب برنامج سحب بيانات (scraper) يمر عبر بروكسيات سكنية بمعدل 225 طلباً في الثانية.

شكل الطوفان

كانت كل صفحة تُعرض عند كل طلب، لذا كان كل عامل يضع مئات عمليات العرض في قائمة الانتظار ويبلغ حدّ المعالج.

لماذا لم تنجح حدود الحد الأقصى لكل عنوان

يحتسب حدّ المعدّل الطلبات لكلّ عنوان. ومع طلب واحد إلى ثلاثة من كلّ عنوان من آلاف العناوين، لا يقترب أيّ عنوان منفرد من الحدّ. وكان حظر الدول سيحجب زوّارنا. وما لم يستطع الناسخ تزويره بتكلفة زهيدة هو التصرّف كمتصفّح سبق له زيارة الموقع.

على حافة Cloudflare: ثلاث قواعد مجانية

تتيح الخطة المجانية خمس قواعد مخصّصة لـ WAF لكل منطقة. استخدمنا ثلاثًا منها، جميعها بتحدٍّ مُدار (managed challenge) بدلاً من الحظر، حتى يتمكن الشخص الذي يقع في الفخ عن طريق الخطأ من تجاوزها بالنقر:

تسمح جميعها بمرور بوتات Cloudflare الموثّقة، ووكلاء المستخدم الذين يسمّون أنفسهم روبوتات، وعناويننا الخاصة، ومسارات API وwebhook، والملفات التي ليست صفحات. وبعد يومين، كان الفيضان لا يزال مستمراً: خلال ساعة واحدة، خضعت أكثر من 10,000 طلب لقاعدة المتصفح المزيف. جاءت أحداث الـ 10,000 التي تعيدها Cloudflare لكل استعلام من 9,627 عنواناً، ولم يتجاوز أي منها 4.

في المصدر: بوابة داخل التطبيق

النصف غير المرئي (headless) يحمل ترويسات متصفح كاملة، لذا لا تلتقطه قواعد الحافة وحدها أثناء إيقاف القاعدة الطارئة. وفي التطبيق نفسه، وضعنا وسيطاً (middleware) صغيراً أمام عارض الصفحة:

في الدقيقة الأولى، رفضت البوابة حوالي 6,700 متصفح مزيف وصرفت حوالي 6,700 غريب، بينما خدمت الغرباء بمعدل حوالي 9 صفحات في الثانية. انخفضت الطلبات البطيئة إلى الصفر، وهبطت وحدة المعالجة المركزية للعاملين من الحد الأقصى إلى 12 إلى 15 بالمئة، وهبطت ذاكرتهم من 4 إلى 5 جيجابايت لكل عامل إلى 0.65 جيجابايت.

ما تركناه مطفأً

الخلاصة

من السهل التعرف على فيضان عبر بروكسيات سكنية بما ينقصه: ترويسات جلب المتصفح، وملفات تعريف الارتباط، وعناوين Referer. خضع ذلك للتحدي عند الحافة، وحافظ على الغرباء ضمن ما يمكن للعاملين عرضه، وتأكد من أن شيئاً خارج الخادم يلاحظ عندما تتوقف الصفحة عن الفتح. Night Watch يجمع الثلاثة في حزمة واحدة: المراقب، والقواعد مع تبديل تلقائي للقاعدة الطارئة، والبوابة لتطبيقات الويب بـ Python.

محدّث: