Selamlar arkadaşlar bu yazımda sizlere HAProxy içerisinde gelen istekleri Rate Limit ve Body Size kuralları ile gelen isteği kısıtlarken, ayrıca belli bir MB üstü dosyaların gönderilmemesini de sağlıyor olacağız.
Bu ortamda bir adet HAProxy için bir adette HTTP Server için Ubuntu 20.04 sunucum bulunmakta. Tiny Server çalıştırıyorum bu serverda sizde kurulum işlemlerine buraya tıklayarak ulaşabilirsiniz.
İsteklerin çok fazla gelmesini engellemek için bu ayarları kullanacağız arkadaşlar. Body Size’a yapacağımız müdahale ile ise HTTP Server’ımıza çok yüksek boyutlu dosya atmalarını engelliyor olacağız. Bu sayede servislerimizin tüm kullanıcılar tarafından adil olarak kullanılacaktır. DDoS’larında önüne geçmiş olacaksınız arkadaşlar.
– HAProxy Conf. Dosyamızın düzenlenmesi ile başlayabiliriz :
> stick-table type ip size 100k expire 30s store http_req_rate(10s)
> http-request track-sc0 src
> http-request deny deny_status 429 if { sc_http_req_rate(0) gt 3 }
> http-request deny deny_status 500 if { req.body_size gt 1000000 }
Stick-Table, istemci başına HTTP Request Rate’ini bilgisini depolamak için kullanılır. Key ise Client ip adresidir. Type alanında ayarlandığı gibi, Client’in istek sayısını tutar. 30s boyunca 100K’lık istek yapılabilir. Bunuda 10sn’de bir sıfırlar.
2. satırda bulunan track-sc0 alanı ise Client’ı tabloya ekleyen kısımdır. Tabloya bir ip eklendiği an işlemler başlar.
sc_http_req_rate(0) komutumuz ise kaç adet isteğin geleceğini belirlediğimiz alandır. 3 isteği geçtikten sonra 429 Too Many Request hatasını verecektir.
req.body_size komutu ile ise dosya boyutunu geçmesi durumunda 500 Internal Server Error hatası verecektir.
Servisimize 80 portundan ulaşıyoruz.
3 İstekten fazlasını yapmaya çalıştığımızda aldığımız hata.
Daha sonra belirlediğimiz değerden büyük bir dosya girmemiz durumunda Connection Failed hatası verecektir.
> tail -f /var/log/haproxy.log
Dosyasına baktığımızda ise 500 HTTP Error aldığını göreceksiniz.
Bir yazımın daha sonuna geldim arkadaşlar. Yorum ve görüşlerinizi aşağıda bulunan yorumlar alanından bana iletebilirsiniz. Destek vermek isterseniz’de Youtube kanalıma abone olabilirsiniz. Kolaylıklar dilerim.
Hi,
Thank you so much for this great and accurate information. I was struggling with this the whole day. But finally your effort was fruitful.
Great Job!
Thank you. 🙂