Question

Nos amis, nous savons tous que la mise en liste noire des adresses IP ne fonctionne pas - les spammeurs peuvent entrer par un proxy, de plus, les utilisateurs légitimes pourraient être affectés ... Cela étant dit, la mise en liste noire me semble être un mécanisme efficace pour arrêter une attaque persistante. attaquant, étant donné que la liste des adresses IP est déterminée de manière dynamique, en fonction des commentaires de l'application et du comportement de l'utilisateur.

Par exemple: - quelqu'un essayant de forcer brutalement votre écran de connexion - un bot mal écrit envoie de très étranges requêtes HTTP à votre site - un script-kiddie utilise un scanner pour rechercher les vulnérabilités de votre application

Je me demande si le mécanisme suivant fonctionnerait et, dans l'affirmative, savez-vous s'il existe des outils pour le faire:

  • Dans une application Web, le développeur dispose d'un crochet pour signaler une "infraction". Une infraction peut être mineure (mot de passe invalide) et il faudrait des dizaines d'infractions de ce type pour figurer sur la liste noire. ou cela peut être majeur, et deux ou trois infractions de ce genre sur une période de 24 heures vous met à l’écart.
  • Une forme de bloc au niveau du serveur Web est activée avant le chargement de chaque page et détermine si l'utilisateur provient d'un "mauvais". IP.
  • Il y a un "pardon" mécanisme intégré: les infractions ne comptent plus dans un IP après un certain temps.

Merci!

Remarque supplémentaire: ce serait génial si la solution fonctionnait en PHP, mais j'aimerais connaître votre avis sur l'approche en général, quelle que soit la langue / la plate-forme

Était-ce utile?

La solution

êtes-vous sur une machine * nix? Ce genre de chose est probablement préférable de laisser au niveau du système d'exploitation, en utilisant quelque chose comme iptables

modifier:

en réponse au commentaire, oui (en quelque sorte). Cependant, l’idée est que iptables peut fonctionner indépendamment. vous pouvez définir un certain seuil de limitation (par exemple, bloquer les demandes sur le port 80 TCP qui dépassent x demandes / minute), et tout cela est géré de manière transparente (votre application n'a donc vraiment pas besoin de savoir quoi que ce soit, le blocage dynamique a lieu).

Je suggérerais la méthode iptables si vous avez le contrôle total de la boîte et préférez laisser votre pare-feu gérer la limitation (vous n'avez pas besoin de créer cette logique dans votre application Web et d'économiser des ressources les demandes étant abandonnées avant d’atteindre votre serveur Web)

sinon, si vous pensez que le blocage ne sera pas un composant énorme (ou que votre application est portable et ne peut pas garantir l'accès à iptables), il serait alors plus logique de construire cette logique dans votre application.

Autres conseils

Consultez fail2ban . Un framework python qui vous permet de créer des blocs de tables IP à partir de fichiers journaux de suivi pour les modèles de comportement errant.

Je pense que cela devrait être une combinaison d'un nom d'utilisateur et d'un bloc IP. Pas seulement IP.

vous recherchez un code de verrouillage personnalisé. Il existe des applications dans le monde open source qui contiennent diverses variantes de ce code. Vous devriez peut-être en examiner quelques-unes, bien que vos exigences soient assez triviales. Marquez donc un combo IP / nom d'utilisateur et utilisez-le pour bloquer une adresse IP pendant x fois. (Remarque: j'ai dit bloquer l'adresse IP, pas l'utilisateur. L'utilisateur peut essayer de se connecter via un combo IP / nom d'utilisateur / pw valide.)

En fait, vous pouvez même garder des traces des identifiants de connexion des utilisateurs. Lorsque vous vous connectez à partir d’une adresse IP inconnue avec une combinaison de 3 noms d’utilisateur / nom incorrect, verrouillez cette adresse IP aussi longtemps que vous le souhaitez pour ce nom d’utilisateur. (Notez que beaucoup de FAI partagent les adresses IP, donc ....)

Vous pouvez également souhaiter retarder l'authentification, de sorte qu'une adresse IP ne puisse pas tenter de se connecter plus d'une fois toutes les "y" secondes.

J'ai mis au point un système pour un client qui gardait trace des hits contre le serveur Web et des adresses IP interdites de manière dynamique au niveau du système d'exploitation / pare-feu pendant des périodes variables pour certaines infractions. Donc, oui, c'est tout à fait possible. Comme l’a dit Owen, les règles de pare-feu sont bien mieux adaptées à ce type de tâche que sur le serveur Web. (Malheureusement, le client a choisi de détenir un copyright strict sur ce code, je ne suis donc pas libre de le partager.)

Je travaille généralement en Perl plutôt qu'en PHP, mais, tant que vous avez une interface en ligne de commande avec votre moteur de règles de pare-feu (comme, par exemple, / sbin / iptables), vous devriez pouvoir le faire assez facilement de toute langue ayant la capacité d'exécuter des commandes système.

err de ce genre de système est facile et commun, je peux vous donner le mien assez facilement

C’est expliqué brièvement et simplement ici http://www.alandoherty.net/info/webservers/

les scripts tels qu'ils sont écrits ne sont pas téléchargeables {car aucun commentaire n'est ajouté} mais envoyez-moi un e-mail, à partir du site ci-dessus, je vous jetterai le code et vous aiderai volontiers à le déboguer / le transférer à votre serveur

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top