پیکربندی فایروال CDN

فایروال وب CDN ستون، یک دیواره آتش لایه هفت محسوب می‌شود که به شما امکان کنترل ترافیک ورودی/خروجی روی شبکه توزیع محتوایتان را می‌دهد. شما می‌توانید با استفاده از قوانینی که برای این فایروال تعریف می‌کنید، تصمیم بگیرید که چه نوع ترافیکی را به سرورهای پشتی خود بفرستید و یا به چه کاربرانی اجازه بازدید از سایت خود را بدهید.

در این فایروال، می‌توانید با استفاده از ترکیبی از شرط‌ها که بر اساس متغیرهای  درخواست/پاسخ (مثل کشور بازدیدکننده، محدوده IP، آدرس و پارامترهای ورودی مثل Query Strings و …) تعیین می‌شوند قوانینی تعریف کنید و تصمیم بگیرید که کدام ترافیک را عبور دهید، کدام را متوقف کنید و یا چالشی برای آن طرح کنید.

همانطور که گفتیم در فایروال ستون، براساس ترکیبی از شرط‌ها، قوانینی طرح می‌کنیم و سپس تصمیم می‌گیریم که براساس قوانین چه کاری انجام شود. ما در اینجا به این کارها، عملیات(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 با خطای داخلی یا خطای تنظیمات مواجه شود، درخواست کاربران بدون تغییر به سمت آپ‌استریم ارسال می‌شود.

ratelimit.PNG

برای پیکربندی این عملیات، لازم است تا فیلدهای زیر را براساس نیاز خود کامل کنید:

target: آدرسی که کاربر باید به آن ریدایرکت شود.
preserveQueryString: با فعال کردن این گزینه مشخص می‌کنید که آیا QueryString های درخواست اصلی به آدرس ریدایرکت‌شده ارسال شود؟
referrer: با فعال کردن این گزینه مشخص می‌کنید که آیا آدرس ریکوئست اصلی به صورت QueryString به آدرس ریدایرکت شده اضافه شود؟
extraQueryString: حداکثر ۱۰ QueryString به صورت پیشفرض می‌تواند به آدرس ریدایرکت شده اضافه شود.

cdn- redirect.PNG

قوانین بر اساس عملیاتی که برای آن‌ها انتخاب شده است، نسبت به هم اولویت دارند. ترتیب اولویت به صورت زیر است:

  • Allow
  • Captcha Challenge
  • JS Challenge
  • Cookie Challenge
  • Block
  • Ratelimit

براساس این اولویت قانونی که عملیات Allow دارد نسبت به قانونی که عملیات Block دارد زودتر بررسی می‌شود.

در قوانینی که عملیات مشابهی برای آن‌ها در نظر گرفته شده است، اولویت با قانونی‌ست که در لیست، بالاتر باشد.

عبارتی که در نهایت ارزیابی می‌شود، به صورت زیر است:

(constraint1 && constraint2 && …) or (constraintN && constraintN+1 &&‌ …) or …

در واقع or تعدادی and است که منطق کامل نیست، ولی برای پیاده‌سازی اکثر حالات مدنظر می‌تواند مورد استفاده قرار گیرد.

ویژگی‌های موجود در درخواست HTTP:

  • شماره سامانه خودمختار (ASN)
  • کوکی‌ها
  • کشور
  • IP
  • متد HTTP مثل GET و POST و…
  • URI
  • Path
  • Query Strings (Args)
  • HTTP Version
  • TLS (on/off)
  • Known Bots

در ادامه به‌توضیح هریک از این ویژگی‌های قابل استفاده پرداخته خواهد شد.

هر آدرس IP متعلق به یک سامانه خودمختار یا سازمان است. سامانه‌های خودمختار در پروتکل IP، شماره مخصوص به خود را دارند که ASN یا Autonomous System Number نامیده می‌شود. به طور مثال IP زیر متعلق به شرکت آوای همراه هوشمند هزاردستان است و ASN این شرکت 202319 است. با تنظیم کردن یک شرط بر روی این شماره در فایروال می‌توانید تمامی درخواست‌های ورودی از این شرکت را Allow کنید.

پارامترها:

  • Expected:  لیست ASNهای موردنظر
  • Operator:  یکی از موارد equals ،lesser ،greater

کوکی‌ها اطلاعاتی هستند که با هر بار ارسال درخواست به یک سرور، همراه با درخواست ارسال می‌شوند. این اطلاعات می‌توانند از سمت سرور به کلاینت ارسال شوند (با هدر Set-Cookie در پاسخ) و کلاینت باید در درخواست‌های بعدی آن‌ها را (در هدر Cookie) به سرور ارسال کند.

شما می‌توانید قوانینی تعریف کنید و بر اساس محتویات Cookie‌های ارسالی برای سرنوشت درخواست تصمیم بگیرید.

پارامترها:

  • Name: نام کوکی مورد نظر
  • Expected: لیست مقادیر مورد نظر
  • Operator: یکی از موارد equals، contains، starts_with، ends_with، matches

می‌توانید بر اساس کشوری که درخواست از آن‌ صورت گرفته، برای ریکوئست تصمیم بگیرید.

پارامترها:

  • Expected: لیست کشورهای موردنظر
  • Operator: فقط equals

می‌توانید آدرس IP درخواست را به صورت CIDR با هر IP Rangeی مورد بررسی قرار دهید و برای درخواست تصمیم‌گیری کنید. در حال حاضر فقط IPv4 پشتیبانی می‌شود. منظور از CIDR چیزی مثل 185.166.104.0/24 است که یک محدوده IP مشخص می‌کند. برای مشخص کردن تک IP از /32 استفاده کنید.

پارامترها:

  • Expected: لیست محدوده‌های IP مورد نظر به فرمت CIDR
  • Operator: فقط ip_matches

می‌توانید بر اساس متد درخواست HTTP نیز برای قوانین شرط تعریف کنید.

پارامترها:

  • Exptected: یکی از GET، POST، PURGE، PUT، HEAD، OPTIONS، DELETE، PATCH
  • Operator: فقط equals

منظور از URI در اینجا هر چیزی است که بعد از نام دامنه در URL می‌آید. برای مثال در URL زیر

https://example.com/path/to/a/file?q=p&t=s

منظور از URI قسمت زیر است:

/path/to/a/file?q=p&t=s

پارامترها:

  • Expected: لیست مقادیر مورد نظر
  • Operator: یکی از equals، contains، starts_with، ends_with، matches

منظور از Path آن قسمت از URI است که قبل از ? می‌آید، در مثال قبلی منظور از Path قسمت زیر است:

/path/to/a/file

پارامترها:

  • Expected: لیست مقادیر مورد نظر
  • Operator: یکی از equals، contains، starts_with، ends_with، matches

منظور از query string آن قسمت از URI است که بعد از ? می‌آید و شامل مقادیری به فرمت key=value است. در مثال قبلی:

q=p&t=s

پارامترها:

  • Name: نام query مورد نظر
  • Expected: لیست مقادیر مورد نظر
  • Operator: یکی از موارد equals، contains، starts_with، ends_with، matches

HTTP Version شماره نسخه پروتکل HTTP درخواست است:

پارامترها:

  • Expected: یکی از موارد HTTP/1.0 HTTP/1.1 HTTP/1.2 HTTP/2 HTTP/3
  • Operator: فقط equals

می‌توانید شرطی را فقط برای درخواست‌های با/بدون TLS تعریف کنید

پارامترها:

  • Expected:  True/False
  • Operator:  equals

با استفاده از این قابلیت می‌توانید درخواست‌ها را فقط برای ربات‌های خوب شناخته شده مثل Google Bot، ‌Bingbot و … عبور دهید و برای سایر درخواست‌ها تصمیم دیگری بگیرید.

پارامترها:

  • Expected:  True/False
  • Operator:  equals

پس از انتخاب تنظیمات مورد نظرتان برای فایروال، بر روی دکمه «تایید» کلیک کنید، تا این تنظیمات ذخیره و اعمال شوند.

آیا این مقاله به شما کمک کرد؟

با نظر دادن به بهبود کیفیت مستندات کمک کنید