CDN ابری

Rate Limiting چیست و چه کاربردی دارد؟

shahin شاهین نوعی
22 بازدید | 0 دیدگاه | 30 تیر 1401
/storage/post-images/1654284471_2022-06-03_blog_post_13-8.png
سرفصل های مهم
Rate Limiting چیست و چه کاربردی دارد؟

Rate limiting یک استراتژی خاص برای محدود سازی ترافیک شبکه است. به عبارت دیگر این روش تعداد دفعاتی که یک کاربر می تواند اقدامی را در یک بازه زمانی تکرار کند، محدود می کند؛ مثل زمانی که قصد ورود به یک حساب کاربری در سایتی را داریم. از این ابزار برای جلوگیری از انواع فعالیت های ربات محور مخرب استفاده می شود. علاوه بر این می تواند آسیب پذیری سرورهای وب را نیز کاهش دهد.

به بیانی دیگر،

Rate limiting برای کنترل میزبان ترافیک ورودی و خروجی از / به یک شبکه مورد استفاده قرار می گیرد. برای مثال، فرض کنید قصد استفاده از API سرویسی را دارید که  طوری پیکربندی شده تا تنها 100 درخواست در ثانیه را مجاز بداند. اگر تعداد درخواست هایی که شما ارسال می کنید از این بازه بیشتر باشد، با یک ارور مواجه خواهید شد.

دلیل پیاده سازی چنین محدودیتی این است که به ترافیک و موج داده های سالم تر اجازه ورود و خروج داده و امنیت را با دفاع در مقابل حملاتی مانند DDoS ارتقا دهیم.

Rate Limiting کاربردهای دیگری هم دارد، مثل زمانی که یک کاربر درون شبکه در ارسال درخواست خود اشتباهی انجام دهد؛ و سپس از سرور بخواهد تا هزاران اطلاعات را بررسی و پیدا کند که ممکن است شبکه را برای سایرین از کار بیاندازد.

اما با فعال داشتن قابلیت rate limiting مدیریت چنین حملات یا اشتباهاتی بسیار آسان تر خواهد بود.

چه نوع حملاتی را می تواند با rate limiting  محدود کرد؟

اغلب اوقات از rate limiting برای متوقف سازی بات های مخرب از تأثیرگذاری بر یک وب سایت با اپلیکیشن استفاده می شود. حملات بات محوری که rate limiting می تواند جلوی آنها بیاستد عبارتند از:

  • حملات brute force
  • حملات DoS و DDoS
  • Web scraping

علاوه بر این محدودسازی نرخ، برای مقابله با استفاده بیش از حد از API نیز مورد استفاده قرار می گیرد که لزوماً مخرب یا عملی ربات گونه نیستند؛ اما با این حال باید با آنها مقابله کرد.

در ادامه به انواع روش های rate limiting ،  مثال های پیکربندی و نحوه عملکرد آن اشاره خواهیم کرد.

انواع rate limits

زمانی که قصد تنظیم چنین محدودیت هایی برای ارسال درخواست ها در مدت زمان مشخصی مثل یک ثانیه ( که در کل به آن "نرخ" یا rate می گوییم ) را داشته باشید، پارامترها و روش های متعددی را می توانید پیاده کنید.

انتخاب متد یا روش محدودسازی به هدف شما و میزان سخت گیری تان بستگی دارد. در ادامه به سه نوع از روش های محدودسازی نرخ یا rate limit اشاره می کنیم:

  1. محدودسازی نرخ کاربر یا user rate limiting: این مورد از متداول ترین روش هاست که به تعداد درخواست های که یک کاربر مجاز به ارسال است اشاره دارد. بنابراین، اگر کاربری از حد تعریف شده عبور کند، تمام درخواست های بعدی وی رد خواهند شد؛ تا زمانی که به توسعه دهنده مراجعه کرده و درخواست افزایش نرخ دهد، یا تا زمان ریست شدن بازه زمانی تعریف شده، صبر کند.
  2. محدودسازی نرخ بر اساس موقعیت: برای ارتقای امنیت در یک منطقه یا محدوده جغرافیایی، توسعه دهندگان می توانند از rate limiting برای محدودسازی یک ناحیه در یک بازه زمانی استفاده کنند. برای مثال اگر توسعه دهنده ای بداند که از نیمه شب تا 8 صبح کاربران در یک منطقه خاص فعالیت چندانی ندارند، می تواند برای آنها در این بازه زمانی نرخ کمتری را در نظر بگیرد. چنین کاری می تواند احتمال وقوع حملات و فعالیت های مشکوک را کاهش دهد و به عنوان یک عامل پیشگیرانه در نظر گرفته شود.
  3. محدودسازی نرخ بر اساس سرور: اگر توسعه دهنده ای  بخواهد اینطور تعریف کند که سرورهای مشخصی مسئول اداره جنبه های معینی از اپلیکیشن یا وبسایت وی باشند، می تواند از rate limit برای اینکار استفاده کند. این کار به توسعه دهنده آزادی عمل بیشتری برای کاهش مشکلات ترافیکی روی یک سرور خواهد داد، چراکه  بار را بین سرورهای دیگر پخش خواهد کرد.

Rate Limiting چطور عمل می کند؟

Rate limiting درون یک وب اپلیکیشن راه اندازی شده و اغلب آدرس های IP ارسال کننده درخواست ها را رصد می کند؛ بعلاوه گذر زمان هر درخواست را نیز اندازه می گیرد. یک IP address اصلی ترین راهی است که یک وب اپلیکیشن می تواند از طریق آن مشخص کند که چه کسی با ارسال چه درخواستی در پی چه چیزی است.

در کنار مدت زمان تعامل هر درخواست، rate limiting تعداد درخواست های ارسال شده در یک بازه زمانی را نیز اندازه می گیرد. در صورتی که از یک آدرس IP در بازه زمانی مشخص تعداد زیادی درخواست ارسال شود، دیگر وب اپلیکیشن به درخواست های پیرو آن پاسخی نخواهد داد.

در کنار تمام این موارد، یک وب سایت یا اپلیکیشن محدود شده، به کاربری که با نرخ بالایی و با سرعت زیادی، درخواست های بی شماری را ارسال کند، پیامی مبتنی بر انتظار یا "X دقیقه صبر کنید و مجدداً تلاش کنید"  ارسال خواهد کرد.

دقیقاً شبیه به زمانی که یک پلیس راهنمایی رانندگی، از یک راننده ای که از حد سرعت مجاز عبور می کند، می خواهد تا کنار زده و او را به کاهش سرعت دعوت می کند.

با فعال سازی Rate limit ممکن است زمانی که کاربران نمی توانند وارد حساب کاربری خود شده و  در یک بازه زمانی کوتاه چندین بار برای ورود تلاش  می کنند، پیغامی ارسال کرده و جلوی ارسال درخواست های مکرر آنها را بگیرد.

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

در صورت فعال بودن محدود ساز، چنین باتی پس از 3 یا 4 تلاش برای ورود ناموفق، مجبور از تا ساعت بعد صبر کند. که کل پروسه حمله ناموفق خواهند ماند.

محدود سازی یک صفحه ورود می تواند بر مبنای آدرس IP کاربرانی که قصد ورود دارند، اعمال شود، یا حتی بر اساس یوزرنیم آنها. بهترین حالت استفاده از هر دوی این پارامترهاست. چراکه:

اگر محدود سازی تنها بر مبنای IP باشد، مهاجمین brute force برای حمله می توانند از چندین آدرس IP مختلف استفاده کنند ( مثل یک بات نت ).

یا اگر محدود سازی تنها بر اساس نام کاربری باشد، هر مهاجمی که لیستی از یوزرنیم های ناشناس داشته باشد، می تواند از پسوردهای متداولی که اکثراً از آن استفاده می کنند، برای ورود کمک بگیرد.

بنابراین ترکیب هر دو می تواند کار را تمام کند.

از آنجا که فعال سازی Rate Limiting برای جلوگیری از حملات brute force لازم  و ضروری است، ممکن است گاهاً کاربرانی که رمز عبورشان را فراموش کرده اند نیز همراه با بات های مخرب محدود شوند؛ در اکثر اوقات کاربران با چنین پیامی مواجه می شوند:

too many login attempts

اما می توانید برای جلوگیری از نا امید شدن و ترک کاربرانتان این پیغام ها را شخصی سازی کرده و انها را متوجه فرآیند و ساز و کار کلی کنید.

پیاده سازی Rate Limiting

راه های زیادی وجود دارد که می توانید از طریق آنها rate limiting را فعال کنید. یکی از این روشها پیاده سازی تغییراتی در سطح سرور است که می تواند با یک زبان برنامه نویسی یا حتی یک مکانیزم کشینگ اعمال گردد. در زیر به دو مثال پیاده سازی rate limit به وسیله Nginx  و Apache را بررسی خواهیم کرد.

  • پیکربندی rate limits به کمک Nginx

اگر از Nginx به عنوان وب سرور خود استفاده می کنید و می خواهید محدود سازی نرخ بر اساس سرور را پیاده کنید، می توانید از ماژول   ngx_http_limit_req_moduleبهره گیرید. این کار را می توانید مستقیما از طریق فایل پیکربندی Nginx تان انجام دهید. در نتیجه نرخ Nginx شما بر اساس آدرس IP کاربر محدود خواهد شد.

کد:

http {

    limit_req_zone $binary_remote_addr zone=one:10m rate=2r/s;

    ...

 

server {

    ...

    location /promotion/ {

        limit_req zone=one burst=5;

    }

}

 

اسنیپت بالا به طور میانگین در هر ثانیه به بیش از دو درخواست اجازه ورود نمی دهد و در خصوص burst نیز اجازه عبور از 5 درخواست را نمی دهد.

  • پیکربندی rate limits به کمک Apache

دقیقاً مثل مدل بالا، کاربران Apache نیز می توانند از طریق فایل پیکربندی Apache خود با کمی تغییر نسبت به Nginx از قابلیت های محدودسازی بهره مند شوند. در آپاچی برای محود سازی پهنای باند کلاینت باید از ماژول mod_ratelimit استفاده کرد.

علاوه بر این، بجای متراکم سازی در سطح IP کلاینت،  از Throttling برای هر پاسخ HTTP استفاده می شود.

کد:

<Location "/promotion">
    SetOutputFilter RATE_LIMIT
    SetEnv rate-limit 400
    SetEnv rate-initial-burst 512
</Location>

 

مقدارهای اسنیپت بالا بر حسب KiB/s تعریف شده اند؛ بنابراین متغیر محیطی rate limit، برای مشخص کردن سرعت اتصال KiB/s 400 است در حالی که میزان داده های اولیه burst،  KiB/s 512 است.

شبکه های اجتماعی نظیر توییتر یا اینستاگرام چطور از rate limiting استفاده می کنند؟

ریت لیمیتینگ در پلتفرم های شبکه های اجتماعی اساساً API Rate limiting محسوب می شود. بعنوان مثال، هر اپلیکیشن شخص ثالثی که به توییتر متصل می شود، تنها قادر است تا چند بار در یک بازه زمانی صفحه فید یا توییت های جدید را رفرش کند.

اینستاگرام نیز از چنین قابلیتی برای محدودسازی اپ های شخص ثالث استفاده می کند؛ به همین دلیل است که ممکن است کاربران زیادی با چنین پیغامی مواجه شوند:

rate limit exceeded

البته این محدودیت ها برای کاربرانی که به صورت مستقیم از پلتفرم استفاده کنند رخ نخواهد داد. منظور از اپلیکیشن ها یا ابزارهای شخص ثالث، ابزارهایی مثل  hootsuit یا ابزارهای داخلی مثل نوین هاب است که به صورت اتوماتیک پست های کسب و کارها یا سایت ها را در این پلتفرم ها ارسال می کنند.

تفاوت بین مدیریت بات و rate limiting چیست؟

Rate limiting تقریباً تک بعدی است؛ با اینکه کاربردی و مفید است، اما تنها می تواند برخی از انواع فعالیت های بات محور را متوقف کند. بعلاوه، rate limiting تنها برای محدود سازی  بات ها تعبیه نشده، بلکه هدفش محدود سازی میزان استفاده در کل است.

برای مثال rate limiting میزبان کلود، ابزاری ایده آل برای مقابله با حملات DDoS، استفاده نامناسب از API و یا حملات Brute force است. اما لزوماً سایر انواع و مدل های فعالیت های مخرب بات ها را خنثی نمی کند.

در طرف مقابل، مدیریت بات یا bot management کاملاً فعالیت های بات ها را شناسایی می کند. البته برای مدیریت و دفع انواع حملات راهکارهای زیادی وجود دارد که می توانید برای ارتقای سطوح امنیتی خود از شبکه تا اپلیکیشن، از سرویس های امنیت ابری میزبان کلود استفاده کنید.

راهکار برقراری امنیت در میزبان کلود

میزبان کلود در کنار ارائه خدماتی نظیر پلتفرم پخش ویدیو ، سرورهای ابری و CDN ابری، برای برقراری امنیت تمام این سرویس ها، قابلیت های امنیتی بی نظیری را در نظر گرفته است.

به کمک میزبان کلود شما می توانید از ابزارهایی مثل DDoS protection، WAF، Rate limiting و غیره برای دفع لحظه ای انواع حملات در سطوح مختلف استفاده کنید.

برای بهره مندی از چنین قابلیت هایی تنها کافیست در میزبان کلود یک حساب کاربری ساخته و سپس دامنه سایت یا اپلیکیشن خود را به سرویس های میزبان کلود متصل کنید. در صورت داشتن هر گونه سوال در خصوص سرویس های امنیتی و ویژگی های سیستم rate limit میزبان کلود، می توانید با کارشناسان ما تماس گرفته و یا صفحه امنیت ابری میزبان کلود را مشاهده کنید.

جمع بندی

محدودسازی نرخ یا rate limiting می تواند راهی عالی برای مقابله با حملات زیرساختی بوده و سایر فعالیت های مشکوک و مخرب را بلاک یا مسدود کند. همانطور که در این پست گفته شد، می توان از محدود سازی در سطوح سرور، کاربر و یا لوکیشن استفاده کرده و درخواست های نا مشروع و پر تعداد به سمت وب اپلیکیشن را محدود کرد. برای بهره مندی از این قابلیت کافیست با برنامه نویسان خود هماهنگ کرده و آن را بر روی سرورهای خود فعال کنید، و یا از سرویس ساده شده و پنل کاربری بی نظیر میزبان کلود برای اینکار استفاده کنید. امیدواریم این مطلب برای شما مفید واقع شده باشد.




پیشنهاد ویژه

CDN ابری میزبان کلود

سرعت در بارگذاری و تحویل محتوای سایت

سرعت در بارگذاری و تحویل محتوای سایت

سرعت در بارگذاری و تحویل محتوای سایت

سرعت در بارگذاری و تحویل محتوای سایت

مشاهده پلانها
برچسب ها :
نویسنده مطلب شاهین نوعی

Hi everyone, my name is Shahin Noei; I'm so glad to be sharing with you my latest knowledge of IT infrastructure and I warmly invite you to ask any of your questions in my linkedin page. I've been working in digital marketing field for the last 5 years and I've been in touch with some IT businesses long enough to get the most out of the newest technologies in this modern era.

Rate Limiting چیست و چه کاربردی دارد؟ 0 دیدگاه

مطالب را قبل از دیگران مطالعه کنید

دریافت جدیدترین مطالب در ایمیل شما

ایمیل شما به صورت کاملا محرمانه نزد ما محفوظ است
ما برای شما هرزنامه ارسال نمی کنیم