- مستندات
- شبکه توزیع محتوا
- انواع عملیات برای قوانین فایروال
انواع عملیات برای قوانین فایروال
همانطور که گفتیم در فایروال ستون، براساس ترکیبی از شرطها، قوانینی طرح میکنیم و سپس تصمیم میگیریم که براساس قوانین چه کاری انجام شود. ما در اینجا به این کارها، عملیات(action) میگوییم و در ادامه به معرفی انواع عملیات در نظر گرفته شده در دیواره آتش وب CDN ستون خواهیم پرداخت.
در این حالت براساس درستی قوانین تعریف شده، اجازه عبور درخواست مورد نظر داده میشود.
در این حالت کاربر با چالش کپچا مواجه میشود و برای دسترسی به محتوای سایت نیاز است که این چالش را حل کند. در حال حاضر فقط امکان انتخاب Google Recaptcha فراهم است. کاربر باید در سایت Recaptcha ثبتنام کرده و مقادیر secret را در پنل وارد کند.
چالش JS، یک روش دیگر برای تشخیص انسان از ربات است که البته به اندازه کپچا دقیق نیست ولی میتواند در مقابله با رباتهای ساده کارساز باشد. در این روش به درخواستدهنده یک صفحه حاوی کد Javascript خاصی ارسال میشود تا با انجام یک کار مشخص مدتی صبر کرده و صفحه را دوباره بارگذاری کند.
این روش یک روش سادهتر (نسبت به JS و کپچا) برای تشخیص مرورگر از سایر انواع کلاینت است که کوکی خاصی را در پاسخ به کاربر برمیگرداند و از مرورگر میخواهد که دوباره همان صفحه را باز کند و انتظار دارد که دوباره مرورگر صفحه جدید را با مقداری که برای کوکی ست شده است باز کند.
این روش برای محدود کردن تعداد درخواست کاربران به آپاستریم مورد استفاه قرار میگیرد. برای مثال میتوانید مشخص کنید تا هر IP نتواند بیشتر از ۱۰ درخواست در دقیقه داشته باشد. برای تعداد درخواستهای بالاتر از حد مجاز کاربر با پاسخ خطای 429 مواجه خواهد شد.
برای فعال کردن Ratelimit در پنل ستون، وارد صفحه مربوط به CDN مورد نظر خود شده و تب فایروال را انتخاب کنید. سپس روی دکمه «ساخت قانون فایروال» کلیک کنید تا قانون جدیدی برای Ratelimit بسازید. سپس برای فیلد «عملیات» گزینه Ratelimit را انتخاب کنید.
تعداد مجاز درخواست به ازای هر کاربر را در فیلد «نرخ» وارد کنید. در فیلد «دوره» فاصله زمانی برای اعمال دسترسی مجاز را به ثانیه وارد کنید. در این فیلد اعداد بین ۱ تا ۶۰ ثانیه را میتوانید وارد کنید. برای مثال اگر قصد دارید کاربران را با ۱۰ درخواست در دقیقه محدود کنید، مقدار فیلد نرخ را روی 10 و مقدار فیلد دوره را روی 60 تنظیم کنید.
در فیلد «نوع شناسه» نحوه شناسایی کاربران را برای اعمال محدودیت دسترسی انتخاب کنید:
نوع شناسه IP: با انتخاب این گزینه کاربران بر اساس IP از هم متمایز میشوند و محدودیت دسترسی برای همه کسانی که پشت یک IP باشند به صورت واحد اعمال خواهد شد.
نوع شناسه JWT: با انتخاب این گزینه کاربران بر اساس توکن JWT از هم متمایز میشوند. در صورتی که قصد دارید روی API سرویس خود محدودیت دسترسی تعریف کنید، این گزینه از انتخاب شناسه IP موثرتر خواهد بود. برای استفاده از این شناسه لازم است که Secret مورد استفاده در JWT را وارد کنید. درصورتی که یک توکن بر اساس Secret وارد شده معتبر نباشد، کاربر با پاسخ خطای 412 مواجه خواهد شد. در فیلد «Header name» نام هدری را که توکن JWT در آن قرار دارد وارد کنید. معمولا این توکن در هدر Authorization نوشته میشود. در فیلد «Payload key» نام کلیدی را که بر اساس مقدار آن کاربران متمایز میشوند، وارد کنید. این کلید باید در بخش Payload توکن وجود داشته باشد.
حالت سختگیرانه (Strict mode): برای توضیح عملکرد این گزینه مثال زیر را در نظر بگیرید:
فرض کنید مشتری انتخاب کرده است که هر کاربر در هر ثانیه ۱۰ درخواست داشته باشد و یک مهاجم پشت سر هم و بدون وقفه هر ثانیه ۱۰۰ درخواست ارسال کند. در این صورت:
۱- اگر حالت سختگیرانه فعال نباشد (حالت پیشفرض): در ثانیهی اول ۱۰ درخواست عبور میکند و ۹۰ درخواست دیگر مسدود خواهد شد و به همین ترتیب در هر ثانیه این اتفاق تکرار میشود. (دقیقا مشابه تنظیماتی که مشتری در نظر گرفته است)
۲- اگر حالت سختگیرانه فعال باشد: در ثانیهی اول ۱۰ درخواست عبور میکند و ۹۰ درخواست دیگر مسدود میشود، اما این بار در ثانیههای بعدی همهی درخواستهای کاربر مسدود خواهد شد تا کاربر حتما یک زمان مشخص (بر اساس مقدار period) وقفه ایجاد کند و بعد از این وقفه میتواند دوباره ۱۰ درخواست عبور کرده داشته باشد.
در صورتی که فرایند Ratelimit با خطای داخلی یا خطای تنظیمات مواجه شود، درخواست کاربران بدون تغییر به سمت آپاستریم ارسال میشود.
برای پیکربندی این عملیات، لازم است تا فیلدهای زیر را براساس نیاز خود کامل کنید:
target: آدرسی که کاربر باید به آن ریدایرکت شود.
preserveQueryString: با فعال کردن این گزینه مشخص میکنید که آیا QueryString های درخواست اصلی به آدرس ریدایرکتشده ارسال شود؟
referrer: با فعال کردن این گزینه مشخص میکنید که آیا آدرس ریکوئست اصلی به صورت QueryString به آدرس ریدایرکت شده اضافه شود؟
extraQueryString: حداکثر ۱۰ QueryString به صورت پیشفرض میتواند به آدرس ریدایرکت شده اضافه شود.
preservePath: مقدار پیشفرض این فیلد false است.
قوانین بر اساس عملیاتی که برای آنها انتخاب شده است، نسبت به هم اولویت دارند. ترتیب اولویت به صورت زیر است:
- Allow
- Captcha Challenge
- JS Challenge
- Cookie Challenge
- Block
- Ratelimit
براساس این اولویت قانونی که عملیات Allow دارد نسبت به قانونی که عملیات Block دارد زودتر بررسی میشود.
در قوانینی که عملیات مشابهی برای آنها در نظر گرفته شده است، اولویت با قانونیست که در لیست، بالاتر باشد.