Soru Giden HTTP daraltma çözümleri nelerdir?


Giden HTTP / HTTPS trafiğini site politikalarına uygun bir şekilde esnek bir şekilde yönetmenin ve veri merkezi ağımızın "kenarına" yerleştirilebilmenin bir yolunu arıyorum.

Örneğin, vs. "saniyede en fazla 4 istekleri" gibi daraltma bilgisi birkaç Web API'leri veya "günlük maksimum 50K istekleri", kullanmak Biz bu yüzden Yapamam, bunlar gibi çeşitli hizmetleri kullanmak şirkette birçok kişi Yazılımdaki tüm istekleri merkezi olarak yönetir. İnsanlar bu şeyleri farklı programlarda ve farklı yoğunluklarda çalıştırırlar. Biz bununla yetiniyoruz (iç ihtiyaçlara cevap veriyor), fakat biz - toplamda - çok fazla eşzamanlı trafik ürettiğimiz durumlara, bir site tarafından engellendiğimize varabiliriz. (istenmediği halde)

Beklediğim / umduğum şey, ağ donanım dünyasında zaten mevcut olan bant genişliği yönetimi / trafik şekillendirme çözümlerinden yararlanabileceğimiz ve daha sonra veri merkezi ağımızın kenarına böyle bir şeyi dağıtabileceğimizdir.

İdeal olarak, veri merkezimiz tarafından - örneğin - 4 req / sn'den daha fazla olmamak için bize izin veren L4 veya L7 yönlendirme kuralları yazabilirim. Taleplerin geri kalanı, ideal olarak, donanım tarafından makul bir süre için kuyruğa alınacak ve kuyruk kapasitesi fazlalığı basitçe reddedilecektir. Özgür bir öğle yemeği olmadığını ve bu kısıtlamanın temel bir iç talep (talepler) ile tedarik (site politikaları) problemini çözmeyeceğini biliyorum. Ancak, kısıtlama, bir pencereden, bir güne kadar talepleri "düzleştirmemize" izin verecek, böylece bir dış hizmeti uygun şekilde kısıtlanmış bir şekilde kullanabileceğiz, ancak kullanımımızı en üst düzeye çıkarabileceğiz.

Böyle bir ağ düzeyinde bant genişliği yönetimi çözümü bilen var mı? Öyleyse, yalnızca HTTP isteğindeki URL’ye değil, bazı ek HTTP başlıklarına da dayanan kuralları destekliyor mu?


5
2018-03-01 17:47


Menşei




Cevaplar:


Yetenekleri netfilter neredeyse sınırsız. Bunun üzerine iptables'de limit modülünü kullanırdım. Dikkat edin: Paketleri düşürmeden TCP / IP'deki hızları sınırlamanın bir yolu yoktur. Paketleri sıraya alabilirsiniz, ancak sıra tam sırada paketler düştüğünde. Yani SYN paketlerini düşüreceğiz. Bunu şimdiye kadar denemedim, muhtemelen çok uzun bir deneme zaman aşımından dolayı kimse bunu yapmıyor, yani bir tarayıcı kilitlenebilir.

sınır

Bu modül sınırlı bir oranda eşleşir   jetonlu bir kova filtresi kullanarak. Kural   Bu uzantıyı kullanana kadar eşleşecek   bu sınıra ulaşılır ('!'   bayrak kullanılır). Kullanılabilir   LOG hedefiyle kombinasyon   Örneğin, sınırlı bir günlüğe kaydetme.

--limit oranı Maksimum ortalama eşleşme oranı: bir sayı ile belirtilir.   İsteğe bağlı '/ saniye', '/ dakika',   '/ saat' veya '/ gün' son eki; varsayılan   3 / saattir.

--limit-burst number Eşleşecek paketlerin maksimum başlangıç ​​sayısı: bu   sayı her biri tarafından yeniden şarj edilir   zaman yukarıda belirtilen limit değildir   bu sayıya kadar ulaştı;   varsayılan 5'dir.

  1. Bağlantıyı sınırlayan yeni bir zincir kuruyoruz. 4 / sn için arayan zincirine dönecek, gerisi bırakılacak.
  2. Bağlantı noktasına 80 yeni bağlantılar bu yeni zincire gönderilir.
iptables -N CONNRATELIMIT
iptables -A CONNRATELIMIT -m limit --limit 4/sec -j RETURN
iptables -A CONNRATELIMIT -j DROP

iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j CONNRATELIMIT

Kavramı göstermek için ikincil zinciri kullandım. Bunu bir yönlendiricide de yapabilirsiniz, daha sonra sınırlamak istediğiniz sunucu veya varlık başına bir zincir oluşturmanız gerekir. Ve INPUT yerine FORWARD kullanın.

kuyruk

Bu çözümde "uzun zamandır" kuyruğu yoktur. İle oynayabilirsiniz sınır ve Limit-patlama parametreleri. SYN paketlerini bir Queuing Disipline'a göndermek de mümkün olacaktır: kurulum çok daha karmaşıktır ve SYN paketlerinin düşürülmesiyle ilgili işleri nasıl daha iyi hale getirdiğini göremiyorum.

URL eşleşmesi

URL eşleşmesi de mümkündür, bu durumda bu paketi düşürdünüz ve yeniden iletimi bekleyerek bağlantıyı erteleyecekseniz, modülde böyle şeyler yaptım son, Ama kaba kuvvet saldırıları ve portscanning önlemek için kullandım. Bu yüzden sınırlandırdığım bağlantıları umursamıyorum. Bağlantıların doğru şekilde ele alınması zorlaşacaktır!


4
2018-03-11 08:31