Apache: IP Başına İstek Sayısı / Trafik Sınırlansın mı?


12

Yalnızca bir IP'nin günde 1 GB'a kadar trafik kullanmasına izin vermek istiyorum ve bu sınır aşılırsa, bu IP'den gelen tüm istekler ertesi güne kadar bırakılır. Bununla birlikte, belirli bir miktarda talepten sonra bağlantının kesildiği daha basit bir çözüm yeterli olacaktır.

Bunu yapabilen bir çeşit modül var mı? Veya bunu iptables gibi bir şeyle başarabilir miyim?

Teşekkürler


Apache sürümü?
pehrs

2.2

Yanıtlar:


5

Apache 2.0 için bw_mod ve Apache 1.3 için mod_bandwidth gibi saf bir Apache çözümü istiyorsanız. Bant genişliği kullanımını sınırlamak için sunucunuzun bant genişliğini daraltabilirler.

Ayrıca, bir kullanıcının sunucunuzla çok sayıda bağlantı kurmasını engelleyen mod_limitipconn da vardır. mod_cband başka bir seçenek, ama ben hiç kullanmadım.

Apache kurulumunuzla uğraşmak istemiyorsanız, Apache'nin önüne kalamar proxy'si koyabilirsiniz. Kısma üzerinde de daha fazla kontrol sağlar.

Bununla birlikte, çoğu durumda sorun, IP başına bant genişliğini sınırlamak istediğinizde ve kullanıcı çok fazla veri çektiğinde ve onu engellediğinizde aklı başında bir hata mesajı vermek istediğinizde birkaç büyük nesnedir. Bu durumda, bir PHP betiği yazmak ve erişim bilgilerini veritabanındaki geçici bir tabloda saklamak daha kolay olabilir.


2
Önerileriniz için teşekkürler. Ben zaten bw_mod ve mod_limitipconn içine baktım, ama hiçbiri (anlatabildiğim kadarıyla) ne istediğimi yapıyorum. mod_limitipconn bunları tek seferde tek bir bağlantıyla sınırlar ve bw_mod sadece IP başına indirme hızını sınırlamama izin verir. Belli bir miktarda veri aktarımı / isteği sonrasında bunları engellemek istiyorum. Aslında tüm sitemi taramaya ve her şeyi indirmeye ihtiyaç duyan belirli kullanıcılara karşı savunmaya çalışıyorum. Kalamar proxy'sine bir göz atacağım, kulağa ilginç geliyor. Bu işe yaramazsa, bw_mod kaynağını değiştirmeye başvuracağımı düşünüyorum.

Robots.txt dosyanızı örümceklere izin vermeyecek şekilde ayarladınız mı?
pehrs

1
Robots.txt ile ilgili sorun, (RFC 3514 gibi) sadece güzel robotların buna saygı duymasıdır.
Scott Pack

Doğru, ancak sitenizi örten kişilerin çoğunun standart araçlar kullandığını göreceksiniz. Ve wget gibi birçoğu robots.txt dosyasına saygı duyuyor. Robots.txt, kullanıcılarınızı örümcek istemelerini istemediğinizin doğru yoludur.
pehrs

1
Bunu denedim. İlk başta, robots.txt yeterliydi, sonra Wget'e robots.txt'yi yoksaymasını söylediler, bu yüzden "tanınmayan" kullanıcı aracılarını engellemeye başvurdum, ancak daha sonra kullanıcı aracısını taklit ettiler. Çok sayıda kafa isteği yapma eğilimindedirler, ancak meşru tarayıcılar bunu yapmaz, bu nedenle kafa isteklerini sınırlamaya veya tamamen devre dışı bırakmaya bakabilirim (daha az arzu edilir).

5

Bu tür bir sorun için benim iptables çözümü. --seconds --hitcountİhtiyacınız olan şekilde ayarlayın , ayrıca masa tablası.

iptables -A FORWARD -m state --state NEW -m recent --rcheck --seconds 600 --hitcount 5 --name ATACK --rsource -j REJECT --reject-with icmp-port-unreachable
iptables -A FORWARD -d 192.168.0.113/32 -o eth1 -p tcp -m tcp --dport 80 -m recent --set --name ATACK --rsource -j ACCEPT

Açıklaması:

  1. iptablesKaynak IP'nin / proc / net / ipt_recent / ATACK dosyasında 600 saniye aralıklarla 5 veya daha fazla kez listelenip listelenmediğini ve YENİ bir istek olup olmadığını kontrol edin. Eğer öyleyse, reddetme yapın; Başka

  2. iptables isteğin bağlantı noktası 80'e yönlendirilip hedeflenmediğini kontrol edin. Öyleyse, IP ve zaman damgasını / proc / net / ipt_recent / ATACK ve ilet paketine yazdırın.

Benim ihtiyaçlarım için iyi çalışıyor.


3

Fail2ban gibi bir araca baktınız mı? Size biraz ağır gelebilir, ancak herhangi bir IP'ye izin verilen istek sayısını sınırlamanıza izin verir. Günlüklere bakarak çalışır ve zaman başına kaç ihlale izin verildiğine ilişkin kurallar ayarlarsınız, bu nedenle sizin için günlük istekler olabilir. Bir kez onlar üzerinden geçmek onlar ipchains kullanarak onları engellemek gibi şeyler yapabilirsiniz.

Bir posta sunucusuna DDoS saldırılarını çok başarılı bir şekilde engellemek için kullandım. Yine de önemli miktarda işlemci gücü tüketebilir.


mevcut; bunu kendim uygulamak üzereyim. Umarım çalışır
Dark Star1

1

dene mod_dosevasiveya damod_security

mod_dosevasive belirli bir sayı veya sayfa istekte bulunduktan sonra belirli bir zaman dilimi içinde bir IP'yi yasaklayacak şekilde yapılandırılabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.