Apache: limiter le nombre de requêtes / trafic par IP?

12

Je voudrais autoriser une seule adresse IP à utiliser jusqu'à, disons, 1 Go de trafic par jour, et si cette limite est dépassée, toutes les demandes de cette adresse IP sont ensuite abandonnées jusqu'au lendemain. Cependant, une solution plus simple où la connexion est interrompue après un certain nombre de demandes suffirait.

Y a-t-il déjà une sorte de module qui peut le faire? Ou peut-être que je peux y parvenir grâce à quelque chose comme iptables?

Merci


la source
Version Apache?
pehrs
2.2 - Remplir la limite de caractères

Réponses:

5

Si vous voulez une solution Apache pure bw_mod pour Apache 2.0 et mod_bandwidth pour Apache 1.3. Ils peuvent limiter la bande passante de votre serveur pour limiter l'utilisation de la bande passante.

Il y a aussi mod_limitipconn, qui empêche un utilisateur de faire beaucoup de connexions à votre serveur. mod_cband est une autre option, mais je ne l'ai jamais utilisée.

Si vous ne voulez pas jouer avec votre installation Apache, vous pouvez mettre un proxy squid devant Apache. Il vous donne également plus de contrôle sur la limitation.

Cependant, dans la plupart des cas, le problème est lié à quelques gros objets lorsque vous souhaitez limiter la bande passante par IP et que vous souhaitez donner un message d'erreur sensé lorsqu'un utilisateur extrait trop de données et que vous le bloquez. Dans ce cas, il pourrait être plus facile d'écrire un script PHP et de stocker les informations d'accès dans une table temporaire dans une base de données.

pehrs
la source
2
Merci pour les suggestions. J'ai déjà examiné bw_mod et mod_limitipconn, mais aucun (pour autant que je sache) ne fait ce que je veux. mod_limitipconn les limite simplement à une connexion à la fois, et bw_mod ne me permet que de limiter le taux de téléchargement par IP. Je veux les bloquer après un certain nombre de transferts / demandes de données. J'essaie en fait de me défendre contre certains utilisateurs qui ressentent le besoin d'explorer tout mon site et de tout télécharger. Je vais jeter un œil au proxy Squid, ça a l'air intéressant. Si cela ne fonctionne pas, je pense que je vais recourir à la modification de la source bw_mod.
Avez-vous configuré votre robots.txt pour interdire les araignées?
pehrs
1
Le problème avec robots.txt, c'est que (tout comme le RFC 3514) seuls les robots sympas le respectent.
Scott Pack
C'est vrai, mais vous constaterez que la majorité des personnes qui explorent votre site utilisent des outils standard. Et beaucoup d'entre eux, comme wget, respectent le fichier robots.txt. Robots.txt est également le bon moyen d'informer vos utilisateurs que vous ne voulez pas qu'ils araignée.
pehrs
1
J'ai essayé ça. Au début, robots.txt était suffisant, puis ils ont dit à Wget d'ignorer robots.txt, alors j'ai eu recours au blocage des agents utilisateurs "non reconnus", mais ils ont ensuite usurpé l'agent utilisateur. Ils ont tendance à faire beaucoup de demandes de tête, contrairement aux navigateurs légitimes, donc je peux chercher à limiter les demandes de tête ou à les désactiver complètement (moins souhaitable).
5

Ceci est ma solution iptables pour ce genre de problème. Ajustez --seconds --hitcountselon vos besoins, également le tableau iptables.

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

Expliqué:

  1. iptablesVérifiez si l'IP source est répertoriée dans le fichier / proc / net / ipt_recent / ATACK pendant 5 fois ou plus dans un intervalle de 600 secondes et s'il s'agit d'une NOUVELLE demande. Si c'est le cas, faites un rejet; autre

  2. iptables vérifiez si la demande est destinée au port 80. Si c'est le cas, imprimez l'IP et l'horodatage dans / proc / net / ipt_recent / ATACK et transférez le paquet.

Cela fonctionne bien pour mes besoins.

Gustavo Feijo
la source
3

Avez-vous regardé un outil comme fail2ban? Si cela peut être un peu dur pour vous, mais cela vous permettrait de limiter le nombre de demandes pour lesquelles une IP donnée est autorisée. Cela fonctionne en examinant les journaux et vous définissez des règles pour le nombre de violations par heure autorisées, donc pour vous, il peut s'agir de demandes par jour. Une fois qu'ils ont terminé, cela peut faire des choses comme les bloquer à l'aide d'ipchains.

Je l'ai utilisé pour bloquer avec succès les attaques DDoS contre un serveur de messagerie. Il peut cependant consommer une quantité importante de puissance processeur.

Peter Bagnall
la source
actuel; y sur le point de le mettre en œuvre moi-même. J'espère que cela fonctionne
Dark Star1
1

essayez mod_dosevasiveoumod_security

mod_dosevasive peut être configuré pour interdire une adresse IP après un nombre spécifié ou des demandes de page à un site dans un délai spécifié.

prophet.six
la source