2009-06-22 5 views
17

Cela pourrait être quelque chose de mieux adapté à Serverfault, mais de nombreux développeurs web qui viennent seulement ici vont probablement bénéficier des réponses possibles à cette question.Protégez-vous contre les attaques DOS

La question est: Comment vous protéger efficacement contre les attaques de déni de service contre votre serveur web?

Je me suis demandé après avoir lu ce article

Pour ceux qui ne connaissent pas, voici ce que je me souviens à ce sujet: une attaque DoS tentera d'occuper toutes vos connexions en envoyant à plusieurs reprises les en-têtes de faux à vos serveurs. Ce faisant, votre serveur atteindra la limite des connexions simultanées possibles et, par conséquent, les utilisateurs normaux ne pourront plus accéder à votre site.

Wikipedia fournit quelques informations supplémentaires: http://en.wikipedia.org/wiki/Denial_of_service

Répondre

43

Il n'y a pas une panacée, mais vous pouvez faire des attaques DoS plus difficile en faisant certains des éléments suivants:

  • Ne pas (ou limiter votre volonté de) faire des opérations coûteuses pour le compte de clients non authentifiés
  • Tentatives d'authentification de l'accélérateur
  • Opérations d'accélération effectuées pour le compte de chaque client authentifié et placez leur compte sur un verrouillage temporaire si elles font trop de choses en trop peu de temps
  • Avoir une accélération globale similaire pour tout unauthentica Avoir un drapeau que vous pouvez utiliser lors d'une attaque pour désactiver tous les accès non authentifiés
  • Ne pas stocker des choses pour le compte de clients non authentifiés et utiliser un quota pour limiter le stockage pour chaque client authentifié
  • en général, rejeter toutes les requêtes malformées, déraisonnablement compliquées, ou de façon déraisonnable d'énormes aussi rapidement que possible (et les journaux pour aider à la détection d'une attaque)
  • ne pas utiliser un cache LRU pur si des requêtes provenant de clients non authentifiés peuvent entraîner l'expulsion d'éléments de ce cache, car vous serez soumis à des attaques d'empoisonnement du cache (lorsqu'un client malveillant demande beaucoup de différent rarement utilisé des choses, vous obligeant d'expulser toutes les choses utiles de votre cache et le besoin de faire beaucoup plus de travail pour répondre à vos clients légitimes)

Rappelez-vous, il est important de purement et simplement rejeter les demandes étranglés (par exemple, avec un Réponse HTTP 503: Service Unavailable ou une réponse similaire appropriée à tout protocole que vous utilisez) plutôt que de mettre en file d'attente des demandes limitées. Si vous les mettez en file d'attente, la file d'attente ne fera que consommer toute votre mémoire et l'attaque DoS sera au moins aussi efficace qu'elle l'aurait été sans la limitation.

conseils Un peu plus spécifique pour les serveurs HTTP:

  • Assurez-vous que votre serveur Web est configuré pour rejeter POST messages sans tête Content-Length d'accompagnement et de rejeter les demandes (et étrangle le client fautif) qui dépassent la a déclaré Content-Length, et de rejeter les demandes avec un Content-Length qui est déraisonnable pour le service que le POST (ou PUT) vise à
0

Réponse courte:

Vous ne pouvez pas vous protéger contre un déni de service.

Et je ne suis d'accord, il appartient à serverfault depuis DoS est classé comme un problème de sécurité et est definetly liée à la programmation

+0

Tout simplement parce que c'est un problème de sécurité ne Cela ne signifie pas qu'il n'appartient pas à ServerFault. La programmation n'aborde qu'une petite partie de ces problèmes de sécurité. – ProfK

+0

Bien sûr, vous pouvez protéger contre DoS, il suffit d'utiliser un pare-feu et le taux limite les connexions par adresse IP. Cependant, il est beaucoup plus difficile de se protéger contre une attaque DDoS. –

1

Pour cette attaque spécifique (tant que la demande est GET) sur la base d'un équilibreur de charge ou d'un WAF qui ne base que les requêtes complètes sur le serveur web fonctionnerait. Les problèmes commencent quand GET POST est utilisé (ce qui est facile) parce que vous ne pouvez pas savoir s'il s'agit d'un POST malveillant ou juste d'un téléchargement très lent d'un utilisateur. De DoS en soi, vous ne pouvez pas vraiment protéger votre webapp pour un simple fait. Vos ressources sont limitées tandis que l'attaquant dispose potentiellement d'un temps et de ressources illimités pour effectuer le DoS. Et la plupart du temps, il est bon marché pour l'attaquant d'effectuer les étapes requises. par exemple. cette attaque mentionnée ci-dessus quelques 100 connexions lent-fonctionnement -> aucun problème

1

Les serveurs asynchrones, pour un, sont plus ou moins immunisés contre cette forme particulière d'attaque. Par exemple, je sers mes applications Django en utilisant un proxy inverse Nginx, et l'attaque ne semble pas affecter son fonctionnement. Un autre serveur asynchrone populaire est lighttpd.

Notez que cette attaque est dangereuse car elle peut être effectuée même par une seule machine avec une connexion lente. Cependant, les attaques DDoS courantes opposent votre serveur à une armée de machines, et vous ne pouvez pas faire grand-chose pour vous en protéger.

Questions connexes