تنظیمات دیواره آتش (Firewall)
فایروال وب CDN ستون، یک دیواره آتش لایه هفت محسوب میشود که به شما امکان کنترل ترافیک ورودی/خروجی روی شبکه توزیع محتوایتان را میدهد. شما میتوانید با استفاده از قوانینی که برای این فایروال تعریف میکنید، تصمیم بگیرید که چه نوع ترافیکی را به سرورهای پشتی خود بفرستید و یا به چه کاربرانی اجازه بازدید از سایت خود را بدهید.
در این فایروال، میتوانید با استفاده از ترکیبی از شرطها که بر اساس متغیرهای درخواست/پاسخ (مثل کشور بازدیدکننده، محدوده IP، آدرس و پارامترهای ورودی مثل Query Strings و …) تعیین میشوند قوانینی تعریف کنید و تصمیم بگیرید که کدام ترافیک را عبور دهید، کدام را متوقف کنید و یا چالشی برای آن طرح کنید.
برای اینکه فایروال را برای سرویس CDN خود فعال کنید، ابتدا در صفحهی مرتبط با CDN به قسمت فایروال رفته و آن را فعال کنید. سپس با کلیک بر روی گزینهی ساخت قانون فایروال میتوانید قوانین مد نظر خود را بر روی فایروال پیکربندی کنید.
ما در اینجا به این کارها، عملیات(action) میگوییم و در ادامه به معرفی انواع عملیات در نظر گرفته شده در دیواره آتش وب CDN ستون خواهیم پرداخت.
در این حالت براساس درستی قوانین تعریف شده، اجازه عبور درخواست مورد نظر داده میشود.
در این حالت کاربر با چالش کپچا مواجه میشود و برای دسترسی به محتوای سایت نیاز است که این چالش را حل کند. در حال حاضر فقط امکان انتخاب Google reCAPTCHA فراهم است.
۱. ساخت کلید reCAPTCHA
برای فعال سازی reCAPTCHA مراحل زیر را انجام دهید:
- به اکانت Google خود وارد شوید.
- صفحهی Google reCAPTCHA را باز کنید.
- در قسمت Label یک نام دلخواه برای سایت خود انتخاب کنید.
- در قسمت reCAPTCHA type گزینه Challenge و سپس گزینه "I'm not a robot" را انتخاب کنید.
- در قسمت Domains آدرس دامنه سایت خود را وارد کنید.
- روی دکمهی Submit کلیک کنید.
۴. مقادیر Site Key و Secret Key را از این صفحه کپی کنید.
۲. ایجاد قانون فایروال
- وارد پنل CDN خود در ستون شوید.
- قانون فایروال جدیدی ایجاد کنید.
- محدودیتهای مورد نیاز را اضافه کنید.
- عملیات «Captcha» را انتخاب کنید.
- در فیلدهای نمایش دادهشده Site Key و Secret Key مقادیر کپیشده را جایگذاری کنید.
- روی دکمهی «تأیید» کلیک کنید.
مقدار TTL نشان دهنده زمان تکرار چالش Captcha است. پس از گذشت این زمان کاربر نیاز به حل دوباره چالش خواهد داشت. واحد زمانی این مقدار ثانیه است.
چالش JS، یک روش دیگر برای تشخیص انسان از ربات است که البته به اندازه کپچا دقیق نیست ولی میتواند در مقابله با رباتهای ساده کارساز باشد. در این روش به درخواستدهنده یک صفحه حاوی کد Javascript خاصی ارسال میشود تا با انجام یک کار مشخص مدتی صبر کرده و صفحه را دوباره بارگذاری کند.
این روش یک روش سادهتر (نسبت به JS و کپچا) برای تشخیص مرورگر از سایر انواع کلاینت است که کوکی خاصی را در پاسخ به کاربر برمیگرداند و از مرورگر میخواهد که دوباره همان صفحه را باز کند و انتظار دارد که دوباره مرورگر صفحه جدید را با مقداری که برای کوکی ست شده است باز کند.
این عملیات فایروال تعداد درخواست مجاز کاربران را محدود میکند. برای مثال، میتوانید مشخص کنید تا هر IP بتواند حداکثر ۱۰ درخواست در ثانیه داشته باشد. برای تعداد درخواستهای بالاتر از حد مجاز، کاربر با پاسخ خطای 429 مواجه خواهد شد.
برای فعال کردن این اکشن برای CDN خود، در قسمت «عملیات» یک قانون فایروال، گزینه Ratelimit را انتخاب کنید.
در فیلد «نوع شناسه» نحوه شناسایی کاربران منحصربفرد را برای اعمال محدودیت دسترسی انتخاب کنید:
نوع شناسه IP: با انتخاب این گزینه کاربران بر اساس IP از هم متمایز میشوند و محدودیت دسترسی برای همه کسانی که پشت یک IP باشند به صورت واحد اعمال خواهد شد.
نوع شناسه JWT: با انتخاب این گزینه کاربران بر اساس توکن JWT از هم متمایز میشوند. در فیلد «Header name» نام هدری را وارد کنید که توکن JWT در آن قرار دارد (معمولا، هدر Authorization). در فیلد «Payload key» نام کلیدی از بخش Payload توکن را وارد کنید که میخواهید کاربران بر اساس مقدار آن متمایز شوند. در فیلد «Secret»، مقدار Secret مورد استفاده برای امضای توکن JWT را وارد کنید. در صورتی که یک توکن بر اساس Secret وارد شده معتبر نباشد، کاربر با پاسخ خطای 412 مواجه خواهد شد.
دو حالت برای محدود کردن تعداد درخواستها وجود دارد:
حالت ساده:
- تعداد مجاز درخواست به ازای هر کاربر را در فیلد «نرخ» وارد کنید.
- دوره زمانی تعداد درخواست a را با واحد ثانیه در فیلد «دوره» وارد کنید.
برای مثال اگر قصد دارید کاربران را با 10 درخواست در دقیقه محدود کنید، مقدار فیلد «نرخ» را روی 10 و مقدار فیلد «دوره» را روی 60 تنظیم کنید.
حالت پیشرفته:
در این حالت، در هر ثانیه و برای هر درخواست، یکی از این سه حالت پیش خواهد آمد:
- کمتر از a درخواست در ثانیه رسیده است: درخواست با موفقیت عبور میکند؛
- بیش از a درخواست ولی کمتر از a+b درخواست در ثانیه رسیده است: پاسخ کاربر با تاخیر عمدی مواجه میشود، بطوریکه پس از اعمال تاخیر، درخواست گفته شده از نرخ مجاز a درخواست در ثانیه پیروی کند؛
بیش از a+b درخواست در ثانیه رسیده است: درخواست مسدود میشود و کاربر با پاسخ خطای 429 مواجه خواهد شد.
برای مثال، فرض کنید مقدار فیلد «نرخ» روی 10 و مقدار فیلد «نرخ اضافه (با تاخیر)» روی 5 تنظیم شده باشد. در اینصورت، 10 درخواست اول در ثانیه اول با موفقیت پاسخ داده خواهد شد، 5 درخواست بعدی در همان ثانیه با تاخیر عمدی 1 ثانیه ای مواجه میشوند و درخواستهای بعدی در همان ثانیه، مسدود شده و با پاسخ خطای 429 مواجه خواهند شد.
فارغ از حالت انتخابی، میتوانید در فیلد «جریمه زمانی» مدت زمان جریمه یک کاربر که درخواستش مسدود شده را با واحد ثانیه وارد کنید (که میتواند بسیار بیشتر از دوره زمانی ذکر شده در حالت سختگیرانه باشد). این مقدار بصورت پیشفرض صفر است.
در صورتی که فرایند ریت لیمیت (Ratelimit) با خطای داخلی یا خطای تنظیمات مواجه شود، هیچ درخواستی مسدود نخواهد شد.
برای پیکربندی این عملیات، لازم است تا فیلدهای زیر را براساس نیاز خود کامل کنید:
target: آدرسی که کاربر باید به آن ریدایرکت شود.
preserveQueryString: با فعال کردن این گزینه مشخص میکنید که آیا QueryString های درخواست اصلی به آدرس ریدایرکتشده ارسال شود؟
referrer: با فعال کردن این گزینه مشخص میکنید که آیا آدرس ریکوئست اصلی به صورت QueryString به آدرس ریدایرکت شده اضافه شود؟
extraQueryString: حداکثر ۱۰ QueryString به صورت پیشفرض میتواند به آدرس ریدایرکت شده اضافه شود.
preservePath: مقدار پیشفرض این فیلد false است.
قوانین بر اساس عملیاتی که برای آنها انتخاب شده است، نسبت به هم اولویت دارند. ترتیب اولویت به صورت زیر است:
- Allow
- Captcha Challenge
- JS Challenge
- Cookie Challenge
- Block
- Ratelimit
براساس این اولویت قانونی که عملیات Allow دارد نسبت به قانونی که عملیات Block دارد زودتر بررسی میشود.
در قوانینی که عملیات مشابهی برای آنها در نظر گرفته شده است، اولویت با قانونیست که در لیست، بالاتر باشد.