Rate Limiting¶
unrestricted resource consumption durumu, OWASP API Top 10 2023 en ciddi API güvenlik riskleri listesinde yer almaktadır. Rate limiting eksikliği, bu riskin ana sebeplerinden biridir. Uygun rate limiting önlemleri olmadan, API'ler hizmet reddi (DoS) saldırıları, brute force ve API aşırı kullanımı gibi saldırılara karşı savunmasızdır. Bu makale, Wallarm'un rate limit düzenleme kuralı ile API'nizi ve kullanıcılarınızı nasıl koruyacağınızı açıklamaktadır.
Wallarm, API'nize aşırı trafiği önlemek için Set rate limit kuralını sunar. Bu kural, belirli bir kapsam için yapılabilecek maksimum bağlantı sayısını belirtmenize olanak tanır, ayrıca gelen isteklerin eşit şekilde dağıtılmasını sağlar. Tanımlanan limiti aşan bir istek, Wallarm tarafından reddedilir ve kuralda seçtiğiniz kod ile yanıtlanır.
Wallarm, çerezler veya JSON alanları gibi çeşitli istek parametrelerini inceler; bu sayede, yalnızca kaynak IP adresine değil, aynı zamanda oturum tanımlayıcıları, kullanıcı adları veya e-posta adreslerine bağlı olarak bağlantıları sınırlayabilirsiniz. Bu ek ayrıntı seviyesi, herhangi bir orijinal veri temelinde platformun genel güvenliğini artırmanıza olanak tanır.
Bu makalede açıklanan rate limiting, Wallarm tarafından sağlanan yük kontrol yöntemlerinden biridir - alternatif olarak, brute force protection uygulayabilirsiniz. Gelen trafiği yavaşlatmak için rate limiting, saldırganı tamamen engellemek için ise brute-force protection kullanın.
Kuralların Oluşturulması ve Uygulanması¶
Rate limit belirlemek ve uygulamak için:
-
Proceed to Wallarm Console:
- Rules → Add rule or your branch → Add rule.
- Attacks / Incidents → attack/incident → hit → Rule.
- API Discovery (if enabled) → your endpoint → Create rule.
-
Mitigation controls → Advanced rate limiting seçeneğini seçin.
-
If request is alanında, kuralın uygulanacağı kapsamı describe edin.
-
Kapsamınıza yapılacak bağlantılar için istenen bir limit belirleyin:
- Saniyede veya dakikada yapılacak isteklerin maksimum sayısı.
-
Burst - belirli RPS/RPM aşıldığında, tamponlanacak aşırı isteklerin maksimum sayısının, oran normale döndüğünde işlenmesi. Varsayılan değer
0
.Değer
0
'dan farklı ise, tamponlanan aşırı isteklerin çalıştırılması sırasında tanımlı RPS/RPM'nin korunup korunmayacağını kontrol edebilirsiniz.No delay tüm tamponlanmış aşırı isteklerin, rate limit gecikmesi olmaksızın eşzamanlı olarak işlenmesini, Delay ise belirtilen sayıda aşırı isteğin eşzamanlı işlenmesini, diğerlerinin ise RPS/RPM'de belirlenen gecikme ile işlenmesini ifade eder.
-
Response code - reddedilen isteklere yanıt olarak döndürülecek kod. Varsayılan
503
.Aşağıda, 5 r/s limiti, burst değeri 12 ve delay değeri 8 olan rate limiting davranışı örneği verilmiştir.
İlk 8 istek (delay değeri), Wallarm düğümü tarafından gecikme olmaksızın aktarılır. Sonraki 4 istek (burst - delay) tanımlı 5 r/s oranının aşılmaması için geciktirilir. Bir sonraki 3 istek, toplam burst boyutu aşıldığı için reddedilir. Sonraki istekler gecikmeli olarak işlenir.
-
In this part of request bölümünde, limit belirlemek istediğiniz istek noktalarını belirtin. Wallarm, seçilen istek parametreleri için aynı değerlere sahip istekleri sınırlayacaktır.
Tüm mevcut noktalar burada açıklanmıştır; örneğin, belirli kullanım senaryonuza uygun olanları seçebilirsiniz:
remote_addr
orijin IP'si üzerinden bağlantıları sınırlamak içinjson
→json_doc
→hash
→api_key
JSON gövde parametresiapi_key
kullanılarak bağlantıları sınırlamak için
Değer uzunluğu kısıtlamaları
Limit ölçümü yapılan parametre değerlerinin izin verilen maksimum uzunluğu 8000 semboldür.
-
Kural derleme ve filtreleme düğümüne yükleme işleminin tamamlanmasını bekleyin.
Kural Örnekleri¶
Limiting connections by IP to ensure high API availability¶
Diyelim ki, bir sağlık şirketinin REST API'si, doktorların https://example-host.com
ana bilgisayarındaki /patients
uç noktasına POST isteği aracılığıyla hasta bilgisi göndermesine olanak tanıyor. Bu uç noktanın erişilebilirliği kritik önem taşıdığından, aşırı isteklerle boğulmaması gerekmektedir.
Belirli bir süre zarfında /patients
uç noktasına IP bazında bağlantıları sınırlamak bunu önleyebilir. Bu, uç noktanın tüm doktorlara stabil ve erişilebilir olmasını sağlarken, DoS saldırılarını önleyerek hasta bilgilerinin güvenliğini korur.
Örneğin, her IP adresi için dakikada 5 POST isteğine izin verecek şekilde bir limit belirlenebilir:
Limiting connections by sessions to prevent brute force attacks on auth parameters¶
Kullanıcı oturumlarına rate limiting uygulayarak, korunan kaynaklara yetkisiz erişim sağlamak amacıyla gerçek JWT'ler veya diğer kimlik doğrulama parametrelerini bulmaya yönelik brute force girişimlerini engelleyebilirsiniz. Örneğin, eğer bir oturum için dakikada yalnızca 10 isteğe izin verecek şekilde rate limit belirlenmişse, geçerli bir JWT keşfetmeye çalışan bir saldırgan, farklı token değerleriyle birçok istek göndererek hızla rate limit'e takılacak ve limit süresi dolana kadar istekleri reddedilecektir.
Diyelim ki uygulamanız, her kullanıcı oturumuna benzersiz bir ID atıyor ve bunu X-SESSION-ID
başlığında yansıtıyor. https://example.com/api/login
URL'sindeki API uç noktası, Authorization
başlığında Bearer JWT içeren POST isteklerini kabul ediyor. Bu senaryo için, oturum bazında bağlantıları sınırlayan kural aşağıdaki gibi görünecektir:
Authorization
değeri için kullanılan regexp ^Bearer\s+([a-zA-Z0-9-_]+[.][a-zA-Z0-9-_]+[.][a-zA-Z0-9-_]+)$
şeklindedir.
Eğer kullanıcı oturumlarını yönetmek için JWT (JSON Web Tokens) kullanıyorsanız, JWT'yi decrypt ederek yükünden oturum ID'sini çıkarmak için kuralı ayarlayabilirsiniz:
Limiting connections by customer IDs to prevent server overwhelm¶
Diyelim ki, online alışveriş platformu için müşteri sipariş verilerine erişim sağlayan bir web servisi bulunmaktadır. Müşteri ID'sine göre rate limiting, müşterilerin kısa süre içerisinde çok fazla sipariş vermelerini önleyerek envanter yönetimi ve sipariş karşılama süreçlerine aşırı yük binmesini engelleyebilir.
Örneğin, https://example-domain.com/orders
uç noktasına her müşteri için dakikada 10 POST isteği limitini getiren kural aşağıdaki gibi görünebilir. Bu örnekte, müşteri ID'sinin data.customer_id
JSON gövde nesnesinde geçirildiği varsayılmaktadır.
Sınırlamalar ve Özellikler¶
Rate limit işlevselliğinin aşağıdaki sınırlamaları ve özellikleri bulunmaktadır:
-
Rate limiting kuralı, Wallarm deployment forms dışındaki tüm dağıtım formları tarafından desteklenir:
- Envoy tabanlı Docker imajı
- OOB Wallarm dağıtımı
- MuleSoft, Amazon CloudFront, Cloudflare, Broadcom Layer7 API Gateway, Fastly konektörleri
-
Limit ölçümü yapılan parametre değerlerinin izin verilen maksimum uzunluğu 8000 semboldür.
-
Birden fazla Wallarm düğümünüz varsa ve her düğümde gelen trafik rate limit kuralına uyuyorsa, her düğüm bağımsız olarak sınırlama yapar.
-
Gelen isteklere birden fazla rate limit kuralı uygulanıyorsa, en düşük rate limit'e sahip kural istekleri sınırlamak için kullanılır.
-
Gelen istekte In this part of request kural bölümünde belirtilen nokta yoksa, bu kural o istek için sınırlama olarak uygulanmaz.
-
Web sunucunuz, bağlantıları sınırlayacak şekilde (örneğin,
ngx_http_limit_req_module
NGINX modülü kullanarak) yapılandırılmışsa ve siz de Wallarm kuralını uyguluyorsanız, web sunucusu yapılandırılmış kurallara göre istekleri reddeder ama Wallarm yapmaz. -
Wallarm, rate limit'i aşan istekleri kaydetmez; sadece kuralda seçilen kodu döndürerek reddeder. İstisna olarak, attack signs bulunan istekler, rate limiting kuralı tarafından reddedilmiş olsalar bile Wallarm tarafından kaydedilir.