Disons que nous avons un équilibreur de charge qui limite également le débit. La limitation du débit semble assez simple pour les utilisateurs connectés - il suffit de regarder le JWT et peut-être d'utiliser un magasin de données en mémoire pour voir combien de demandes au cours des 10 dernières secondes pour cet utilisateur.
Mais qu'en est-il des utilisateurs non connectés (non authentifiés)? Nous ne savons pas avec certitude de qui ils proviennent ni d'où vient la demande. Nous ne pouvons donc pas facilement limiter ces demandes ou ..?
Existe-t-il des solutions intégrées à cela sur AWS et d'autres plates-formes d'hébergement? Il semble que nous devons gérer manuellement la logique de limitation de débit des utilisateurs connectés, mais qu'en est-il des utilisateurs non connectés?
Je suppose / j'espère qu'il pourrait y avoir un mécanisme intégré pour limiter les taux de demandes non authentifiées sur les plates-formes d'hébergement, veuillez nous en informer tous.
Réponses:
Il y a quelques approches que vous pouvez adopter. La première est que vous avez besoin d'un identifiant d'origine raisonnablement fiable, par exemple une adresse IP. Vous pouvez évaluer la limite par adresse IP, de sorte que les attaques sur une seule machine compromise seront limitées. Il s'agit d'une approche assez simple, mais il y a un inconvénient à ce que les grands fournisseurs de réseau ne peuvent utiliser que des adresses IP sortantes uniques pour masquer un très grand nombre d'utilisateurs derrière un NAT.
Une autre approche de limitation de débit que vous pouvez adopter consiste à exiger une preuve de travail pour toute demande non authentifiée. Votre serveur émet un code de défi que tous les clients qui font une demande non authentifiée (par exemple des demandes de connexion) doivent calculer une réponse gourmande en ressources avant le traitement de la demande. Une implémentation courante de cette idée nécessite que les clients calculent une réversion de hachage partielle.
la source
Pour savoir si une demande provient d'un utilisateur authentifié ou d'un utilisateur anonyme, vous devez nécessairement traiter la demande (quoique rapidement). Cela signifie toujours que votre application est vulnérable à une attaque par déni de service.
Vous devriez vérifier le nombre total de demandes par seconde, et si un certain nombre est dépassé, vous ignorez simplement le reste. Ce nombre doit être suffisamment élevé pour ne pas causer de problèmes pendant le fonctionnement normal, mais doit protéger contre de telles attaques.
De plus, en règle générale, vous ne devriez probablement pas supposer qu'une attaque ne proviendrait pas d'un utilisateur authentifié, du moins pour ce qui concerne les attaques DOS. Un mot de passe faible permettrait facilement à quelqu'un de présumer l'identité d'un ancien utilisateur. En supposant que vous puissiez effectuer une telle vérification, vos utilisateurs (humains) ne devraient jamais avoir à effectuer des demandes à de tels taux, non seulement parce que vous avez de nombreux utilisateurs individuels.
la source
L'une des principales offres de Cloudflare est la protection contre les attaques par déni de service en fournissant un proxy intelligent pour votre API / serveur Web. Le service de base est gratuit; ils font de l'argent avec d'autres services connexes comme les services CDN et l'équilibrage de charge. Ils fournissent également des services de limitation de taux plus sophistiqués et contrôlables , actuellement au taux de 0,05 $ US pour 10 000 bonnes demandes (sans frais pour les demandes rejetées), mais vous devez passer à des plans payants pour obtenir plus d'une règle globale.
Vous pouvez utiliser le service Cloudflare avec AWS ou toute autre plate-forme tant que vous contrôlez les serveurs de noms de votre domaine (comme dans, vous pouvez modifier les serveurs de noms enregistrés pour votre domaine).
Vous pouvez fournir des limites de taux distinctes pour les utilisateurs anonymes et connectés en dirigeant les utilisateurs connectés vers différentes URL. Par exemple, vous pouvez simplement préfixer tous vos chemins URL disponibles de manière anonyme avec «/ u» pour créer un point de terminaison qui nécessite toujours une authentification et a une limite de débit différente.
Notez que la limitation de débit de Cloudflare (comme toute limitation de débit commerciale pour les utilisateurs anonymes que je connais) définit un client par son adresse IP. Cela peut causer des problèmes aux personnes utilisant des VPN commerciaux ou Tor, car elles ont tendance à cacher un grand nombre de clients derrière 1 adresse IP pour plus de confidentialité.
la source
Dans AWS, il existe les services associés AWS Shield et AWS WAF . Ils sont principalement destinés à prévenir les attaques DDoS mais offrent également une prise en charge de la limitation de débit basée sur les adresses IP.
Dans WAF, le concept est appelé règles basées sur les taux . La prévention des tentatives de connexion basées sur la force brute est mentionnée comme cas d'utilisation dans l' annonce d'origine :
Les autres fournisseurs de cloud devraient proposer des offres similaires. Voici une comparaison tabulaire: Google Cloud Armor vs AWS WAF vs Cloudflare WAF .
Comme vous utilisez déjà Nginx, l'utilisation de la limitation de débit basée sur IP intégrée peut également être une option simple. Le module est appelé ngx_http_limit_req_module . Ce billet de blog décrit comment il peut être utilisé.
Veuillez noter que la limitation de débit basée sur IP est un concept relativement simple mais il n'est pas parfait:
En général, les adresses IP sont un bon début. Mais si vous avez besoin d'une protection renforcée, vos meilleurs choix dépendront de votre modèle de thread (quel type d'attaques vous souhaitez empêcher).
la source