Je souhaite éviter que les sites de récupération n'accaparent tout mon contenu, à l'exception de Google, Bing et d'autres moteurs de recherche. Je pense aller avec Fail2ban et limiter les hits d'une adresse IP à environ 1000 par jour. Est-ce une bonne idée? Y aurait-il un meilleur moyen?
Cela peut être fait de différentes manières dans Apache à l'aide de Modules. Vous pouvez également configurer des tables IP pour faire le travail, mais personnellement, je n'utilise que les modules.
Personnellement, je l'ai utilisé et il fait bien son travail. On peut trouver un bon article sur la limitation du nombre de demandes ici .
La détection est effectuée en créant une table de hachage dynamique interne des adresses IP et des URI et en refusant toute adresse IP parmi les éléments suivants:
Demander la même page plus de quelques fois par seconde Effectuer plus de 50 demandes simultanées sur le même enfant par seconde Effectuer des demandes n'importe quand sur une liste temporaire (sur une liste de blocage)
Un autre ici:
La version actuelle du module mod_qos implémente des mécanismes de contrôle pour gérer:
Nombre maximal de demandes simultanées adressées à un emplacement/ressource (URL) ou à un hôte virtuel. Limitation de la bande passante, telle que le nombre maximum de requêtes autorisées par seconde pour une URL ou le nombre maximum/minimum de kilo-octets téléchargés par seconde. Limite le nombre d'événements de demande par seconde (conditions de demande spéciales). Il peut également "détecter" des personnes très importantes (VIP) pouvant accéder au serveur Web sans restrictions ou avec moins de restrictions. Ligne de requête générique et filtre d’entête pour refuser les opérations non autorisées. Limitation et filtrage des données du corps de la requête (requiert mod_parp). Limitations sur le niveau de connexion TCP, par exemple, le nombre maximal de connexions autorisées à partir d'une adresse IP source unique ou d'un contrôle de maintien dynamique. Préfère les adresses IP connues lorsque le serveur est à court de connexions libres TCP.
L'adresse IP du client est vérifiée dans la liste noire temporaire de la table de hachage. Si l'adresse IP est répertoriée, l'accès au client est interdit avec un message 403 Forbidden.
Si le client ne figure pas actuellement sur la liste noire, l'adresse IP du client et l'URI (Universal Resource Identifier) demandé sont alors hachés dans une clé. Mod_Dosevasive vérifiera ensuite la table de hachage de l'écouteur pour vérifier si l'un des mêmes hachages existe. Si tel est le cas, il évaluera ensuite le nombre total de hachages mis en correspondance et le délai dans lequel ils ont été demandés par rapport aux seuils spécifiés dans le fichier httpd.conf par les directives Mod_Dosevasive.
Si la requête précédente ne refuse pas la requête, seule l'adresse IP du client est hachée dans une clé. Le module vérifiera ensuite la table de hachage de la même manière que ci-dessus. La seule différence avec cette vérification est qu'elle ne prend pas en compte l'URI vérifiée par le client. Il vérifie si le numéro de demande du client a dépassé le seuil défini pour l'ensemble du site selon l'intervalle de temps spécifié.
Iptables Solution
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 127.0.0.1/32 -o eth1 -p tcp -m tcp --dport 80 -m recent --set --name ATACK --rsource -j ACCEPT
Un service CDN peut s'asseoir devant votre site et filtrer les robots d'exploration connus. ils filtrent également les spammeurs et, comme ils cachent vos images dans des endroits du monde entier, votre site sera plus rapide.
J'utilise CloudFlare depuis environ un mois sur un site pour un client et ils ont constaté une diminution de l'utilisation de la bande passante et une augmentation du trafic. CloudFlare propose également une application gratuite appelée scrapeshield https://www.cloudflare.com/apps/scrapeshield mais le scraping n'est pas un gros problème pour ce site, il n'a donc encore été capturé
Je pense que les moyens les plus efficaces de limiter les hôtes et les adresses IP indésirables sont les suivants:
Le premier nécessite un matériel dédié ou un serveur proxy.
La seconde peut être effectuée via un panneau de configuration (par exemple, cPanel, Plesk, etc.) ou manuellement en créant des règles de filtrage IP/pare-feu (traitées dans d’autres réponses).
La troisième peut être faite dans IIS via son interface graphique, dans Apache à l'aide de modules (traités dans d'autres réponses) ou dans la configuration d'Apache comme ceci:
# Block unwanted Host domains
RewriteEngine on
RewriteCond %{HTTP_REFERER} baddomain01\.com [NC,OR]
RewriteCond %{HTTP_REFERER} baddomain02\.com [NC]
RewriteRule .* - [F]
Cette dernière option est une bonne option car vous ne bannirez pas des adresses IP ou des classes spécifiques, ce qui pourrait empêcher les écoles, les grandes entreprises ou les bibliothèques qui utilisent NAT (une seule adresse IP sortante).
Vous pouvez souvent repérer des hôtes fréquents de robots et de racleurs dans les journaux des accès et des erreurs de votre serveur Web, ce qui est facile à utiliser avec une application de statistiques.
Il existe un module Apache appelé "robotcop" conçu à cet effet particulier.
Malheureusement, le site Web de ce module Apache (www.robotcop.org
) n'est plus en service. Voici un article de slashdot annonçant le lancement du module robotcop .
Le code source (open source - licence Apache) du module est toujours disponible à différents endroits:
Une autre approche pour limiter les racleurs et les robots serait de mettre en place un pot de miel. Mettez une page sur laquelle seuls les robots pourront trouver et empêcher les robots d'y accéder via le fichier robots.txt. Tout bot qui frappe alors cette URL sera mis sur la liste noire.
WPoison est un projet qui fournit le code source permettant de faire exactement cela.