Ana içeriğe geç

Hız Sınırlama

Unrestricted resource consumption, en ciddi API güvenlik risklerinin listelendiği OWASP API Top 10 2023 listesinde yer almaktadır. Hız sınırlamanın olmaması, bu riskin başlıca nedenlerinden biridir. Uygun hız sınırlama önlemleri olmadan, API’ler hizmet engelleme (DoS), kaba kuvvet (brute force) ve API’nin aşırı kullanımına yönelik saldırılara karşı savunmasızdır. Bu makale, Wallarm’ın hız sınırlama düzenleme kuralı ile API’nizi ve kullanıcılarınızı nasıl koruyacağınızı açıklar.

Wallarm, API’nize aşırı trafiği önlemeye yardımcı olmak için Advanced rate limiting kuralını sağlar. Bu kural, belirli bir kapsama yapılabilecek maksimum bağlantı sayısını belirtmenizi ve gelen isteklerin eşit şekilde dağıtılmasını sağlar. Bir istek tanımlanan limiti aşarsa, Wallarm isteği reddeder ve kuralda seçtiğiniz kodu döndürür.

Wallarm, çerezler veya JSON alanları gibi çeşitli istek parametrelerini inceler; bu sayede bağlantıları yalnızca kaynak IP adresine göre değil, aynı zamanda oturum tanımlayıcıları, kullanıcı adları veya e-posta adreslerine göre de sınırlayabilirsiniz. Bu ek ayrıntı düzeyi, herhangi bir kaynak verisine dayanarak platformun genel güvenliğini artırmanızı sağlar.

Bu makalede açıklanan hız sınırlamanın Wallarm tarafından sağlanan yük kontrolü yöntemlerinden sadece biri olduğunu unutmayın - alternatif olarak brute force korumasını uygulayabilirsiniz. Gelen trafiği yavaşlatmak için hız sınırlamayı, saldırganı tamamen engellemek için ise brute force korumasını kullanın.

Kuralı oluşturma ve uygulama

Hız limitini ayarlamak ve uygulamak için:

  1. Proceed to Wallarm Console:

    • RulesAdd rule or your branch → Add rule.
    • Attacks / Incidents → attack/incident → hit → Rule.
    • API Discovery (if enabled) → your endpoint → Create rule.
  2. Mitigation controlsAdvanced rate limiting seçin.

  3. If request is içinde, kuralın uygulanacağı kapsamı tanımlayın.

  4. Kapsamınıza yapılacak bağlantılar için istenen limiti belirleyin:

    • Saniye başına veya dakika başına istekler için maksimum sayı.
    • Burst - belirtilen RPS/RPM aşıldığında arabelleğe alınacak aşırı isteklerin maksimum sayısı ve oran normale döndüğünde işlenecek olanlar. Varsayılan olarak 0.

      Değer 0’dan farklıysa, arabelleğe alınmış aşırı isteklerin yürütülmesi sırasında tanımlanan RPS/RPM’in korunup korunmayacağını kontrol edebilirsiniz.

      No delay, tüm arabelleğe alınmış aşırı isteklerin, hız limiti gecikmesi olmaksızın eşzamanlı olarak işlenmesini ifade eder. Delay, belirtilen sayıda aşırı isteğin eşzamanlı işlenmesini, diğerlerinin ise RPS/RPM’de ayarlanan gecikme ile işlenmesini ifade eder.

    • Response code - reddedilen isteklere yanıt olarak döndürülecek kod. Varsayılan 503.

      Aşağıda limitin 5 r/s, burst 12 ve delay 8 olduğu hız sınırlama davranışı örneği yer almaktadır.

      Hız sınırlamanın çalışma şekli

      İlk 8 istek (Delay değerinin) Wallarm düğümü tarafından gecikme olmadan iletilir. Sonraki 4 istek (burst - delay), tanımlı 5 r/s oranı aşılmayacak şekilde geciktirilir. Sonraki 3 istek, toplam burst boyutu aşıldığı için reddedilir. Takip eden istekler geciktirilir.

  5. In this part of request içinde, limit uygulamak istediğiniz istek noktalarını belirtin. Wallarm, seçilen istek parametreleri için aynı değerlere sahip istekleri kısıtlayacaktır.

    Tüm mevcut noktalar burada açıklanmıştır, belirli kullanım senaryonuza uyanları seçebilirsiniz, örn.:

    • remote_addr ile bağlantıları kaynak IP’ye göre sınırlamak
    • api_key JSON gövde parametresine göre bağlantıları sınırlamak için json → json_doc → hash → api_key

    Değer uzunluğuna ilişkin kısıtlamalar

    Limitleri ölçtüğünüz parametre değerlerinin izin verilen azami uzunluğu 8000 karakterdir.

  6. Kuralın derlenmesinin ve filtreleme düğümüne yüklenmesinin tamamlanmasını bekleyin.

Kural örnekleri

API yüksek erişilebilirliğini sağlamak için IP’ye göre bağlantıları sınırlama

Bir sağlık şirketinin, doktorların https://example-host.com ana makinesinin /patients uç noktasına POST isteği ile hasta bilgilerini göndermesine izin veren bir REST API’si olduğunu varsayalım. Bu uç noktanın erişilebilirliği kritik önemdedir, dolayısıyla çok sayıda istekle boğulmamalıdır.

Özellikle /patients uç noktası için belirli bir zaman dilimi içinde IP’ye göre bağlantıları sınırlamak bunu önleyebilir. Bu, uç noktanın tüm doktorlar için stabilitesini ve erişilebilirliğini sağlar, ayrıca DoS saldırılarını engelleyerek hasta bilgilerinin güvenliğini korur.

Örneğin, her IP adresi için dakikada 5 POST isteği olarak aşağıdaki gibi bir limit belirlenebilir:

Örnek

Kimlik doğrulama parametrelerine yönelik kaba kuvvet (brute force) saldırılarını önlemek için oturuma göre bağlantıları sınırlama

Kullanıcı oturumlarına hız sınırlama uygulayarak, korunan kaynaklara yetkisiz erişim sağlamak için gerçek JWT’leri veya diğer kimlik doğrulama parametrelerini bulmaya yönelik brute force girişimlerini kısıtlayabilirsiniz. Örneğin, hız limiti bir oturum altında dakikada yalnızca 10 isteğe izin verecek şekilde ayarlanırsa, farklı jeton değerleriyle çoklu istekler yaparak geçerli bir JWT bulmaya çalışan bir saldırgan hız limitine hızla takılır ve hız limiti süresi dolana kadar istekleri reddedilir.

Uygulamanızın her kullanıcı oturumuna benzersiz bir kimlik atadığını ve bunu X-SESSION-ID başlığında yansıttığını varsayalım. https://example.com/api/login URL’sindeki API uç noktası, Authorization başlığında Bearer JWT içeren POST isteklerini kabul eder. Bu senaryoda, oturuma göre bağlantıları sınırlayan kural aşağıdaki gibi görünecektir:

Örnek

Authorization değeri için kullanılan düzenli ifade `^Bearer\s+([a-zA-Z0-9-_]+[.][a-zA-Z0-9-_]+[.][a-zA-Z0-9-_]+)$ şeklindedir.

Kullanıcı oturumlarını yönetmek için JWT (JSON Web Tokens) kullanıyorsanız, oturum kimliğini yükünden çıkarmak için JWT’nin şifresini çözmek üzere kuralı aşağıdaki gibi ayarlayabilirsiniz:

Örnek

Sunucunun aşırı yüklenmesini önlemek için müşteri kimliklerine göre bağlantıları sınırlama

Bir web servisinin, bir e-ticaret platformu için müşteri sipariş verilerine erişim sağladığını düşünelim. Müşteri kimliğine göre hız sınırlaması, müşterilerin kısa sürede çok fazla sipariş vermesini önlemeye yardımcı olabilir; bu da stok yönetimi ve sipariş karşılama üzerinde baskı oluşturabilir.

Örneğin, her müşteri için https://example-domain.com/orders adresine dakikada 10 POST isteği ile sınırlayan kural aşağıdaki gibi görünebilir. Bu örnekte, müşteri kimliğinin data.customer_id JSON gövde nesnesinde iletildiği varsayılmaktadır.

Örnek

Sınırlamalar ve özellikler

Hız sınırlama işlevinin aşağıdaki sınırlamaları ve özellikleri vardır:

  • Hız sınırlama kuralı, aşağıdakiler hariç olmak üzere tüm Security Edge ve kendi barındırılan dağıtım biçimleri tarafından desteklenir:

    • OOB Wallarm dağıtımı
    • MuleSoft, Amazon CloudFront, Cloudflare, Broadcom Layer7 API Gateway, Fastly bağlayıcıları
  • Limitleri ölçtüğünüz parametre değerlerinin izin verilen azami uzunluğu 8000 karakterdir.

  • Birden fazla Wallarm düğümünüz varsa ve her düğüme gelen trafik hız sınırlama kuralını sağlıyorsa, bunlar birbirinden bağımsız olarak sınırlandırılır.

  • Gelen isteklere birden fazla hız sınırlama kuralı uygulanıyorsa, istekleri sınırlamak için en düşük hız limitine sahip kural kullanılır.

  • Gelen bir istek, kuralın In this part of request bölümünde belirtilen noktayı içermiyorsa, bu kural o istek için bir sınırlama olarak uygulanmaz.

  • Web sunucunuz bağlantıları sınırlayacak şekilde yapılandırılmışsa (ör. ngx_http_limit_req_module NGINX modülünü kullanarak) ve ayrıca Wallarm kuralını da uygularsanız, web sunucusu yapılandırılmış kurallara göre istekleri reddeder ancak Wallarm reddetmez.

  • Wallarm, hız limitini aşan istekleri kaydetmez; yalnızca kuralda seçilen kodu döndürerek bunları reddeder. İstisna, saldırı işaretleri taşıyan isteklere yöneliktir - bunlar, hız sınırlama kuralı tarafından reddedilmiş olsalar bile Wallarm tarafından kaydedilir.

Rate abuse protection ile farkı

Kaynak kullanımını kısıtlamak ve çok sayıda istek kullanılarak gerçekleştirilen saldırıları önlemek için, burada açıklanan hız sınırlamanın yanı sıra Wallarm rate abuse protection sağlar.

Hız sınırlama, oran çok yüksek olduğunda bazı istekleri geciktirir (arabelleğe alır) ve arabellek dolduğunda kalanları reddeder; oran normale döndüğünde arabelleğe alınan istekler teslim edilir, IP veya oturuma göre bir engelleme uygulanmaz; oysa rate abuse protection saldırganları bir süreliğine IP’lerine veya oturumlarına göre engeller.