Nginx HttpLimitReqModule

7 réponses
AuteurMessage

devlop78 |
Membre

 

Inscrit le : 02/07/2011

# Le 29/07/2011 à 21:14

Bonjour à tous,

En lisant la doc de HttpLimitReqModule, j'ai l'impression qu'il s'agit de définir un débit maximum pour l'acceptation des requêtes. L'utilisation du sceau percé surtout utilisé pour les bandes passantes vont dans ce sens.

En gros, si je dis rate=60req/s il ne va pas limiter à 60 requêtes par secondes, mais va calculer que l'espace temporel entre deux requête est de 1 seconde ?

Que pensez-vous de HttpLimitZoneModule ? En fait je cherche un équivalent à Mod_evasive de Apache, que j'implémenterai dans un premier temps uniquement aux PHP, en configurant en gros maximum 3 pages php par seconde pour le même client, mais avec la possibilité de faire 3 pages "simultanément". Par exemple, si une page PHP renvoie un header de redirection et que le navigateur refait donc une requête quasi tout de suite, je ne veux pas que sa demande commence à être traitée seulement au bout de 1/3 de secondes après la première. Je veux juste essayer de détecter les attaques DOS de type F5 et agir seulement à la détection (et non pas pénaliser tout le monde en limitant ou en mettant des ratio).

Vos avis m'intéressent ;)

Cordialement,

Bool | Olivier
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 29/07/2011 à 22:23

Hello,

toujours le même problème avec les outils travaillant par IP : quid des proxies des FAI, des universités, des entreprises et des cybercafés ? Ca fait quand même pas mal de personnes potentiellement sanctionnées, non ?

daevel : infogérance et conseilOuvrir dans une nouvelle fenetre || moiOuvrir dans une nouvelle fenetre

devlop78 | AUBIN
Membre

 

Inscrit le : 02/07/2011

# Le 30/07/2011 à 00:51

J'ai un tout petit serveur virtuel, je n'ai aucune prétention en matière de quantité de contenus et de visiteurs. Je m'étais complétement remis en question en saturant mon serveur en restant appuyer sur F5 du navigateurs, le problème est toujours là Nginx ou pas Nginx (si ce n'est que maintenant, le serveur ne bouffe plus la swap mais est juste inaccessible).

Aucun problème pour proxies, ce sera tant pis pour ceux qui changent d'IP, je ne cherche pas à me défendre contre les DDOS, mais à pouvoir instaurer des règles contre des abus. En admettant même qu'un groupe accède à un de mes sites, par exemple 3 personnes en même temps, si je fixe une limite large de max 10 pages dynamiques pouvant être vues par intervalle de 3 secondes, ça ne posera pas de problèmes. Il ne s'agit pas de bannir pendant 2 heures la personne, mais soit ne pas répondre aux requêtes excédentaires, soit ne pas répondre pendant 10 secondes.

J'avoue que déjà, contrôler mes ressources est déjà une des meilleures protection, même si le DOS peut avoir lieu. La réflexion est intéressante mais une réponse technique m'intéresse aussi.

Cordialement,

Akarys | Thierry
Membre

Photo de Akarys

Inscrit le : 19/01/2008

# Le 30/07/2011 à 05:12

Bonjour,
Je ne connais pas HttpLimitReqModule pour Nginx, mais perso j'utilise ceci :

limit_req_zone  $binary_remote_addr  zone=MZK:10m  rate=30r/m;
...
limit_req zone=MZK burst=10;

Ça limite donc "sur le long terme" à 30 requêtes/minute (en fait ~2s entre chaque req)
tout en autorisant un "burst" de 10 requêtes (typiquement la 1ère page avec +css, +js, +logo)

J'avais couplé ça à fail2ban sur détection du "limiting requests, excess" dans /logs/error.log
pour lutter contre les aspirations globales abusives. (c'était utile pour un site de paroles).

cerise | Gaël
Modérateur

Photo de cerise

Inscrit le : 31/10/2008

# Le 30/07/2011 à 08:12

on utilise un petit script assez efficace et très simple à mettre en place : http://deflate.medialayer.com/Ouvrir dans une nouvelle fenetre

devlop78 | AUBIN
Membre

 

Inscrit le : 02/07/2011

# Le 30/07/2011 à 14:48

Ah ! Le burst serait donc une autorisation particulière ? J'avais compris que c'était la taille du seau avant élimination des demandes. La doc n'est pas très claire et difficile à traduire, il y a des erreurs de traduction (certainement à l'origine Russe).

Mais si tu utilises limit_req c'est du module HttpLimitReqModule ...

Akarys | Thierry
Membre

Photo de Akarys

Inscrit le : 19/01/2008

# Le 31/07/2011 à 04:20

Ooops. Oui en effet c'est le nom de ce module. Trop loin déjà, et je n'avais pas percuté
Un coup de Google me donne ça : http://wiki.nginx.org/HttpLimitReqModuleOuvrir dans une nouvelle fenetre et http://forum.nginx.org/read.php?2,178326Ouvrir dans une nouvelle fenetre
Ça explique assez bien que le burst permet de juste temporiser un peu les requêtes rapides
alors que celles qui dépassent le "débit moyen + burst" seront rejetées via un 503

A savoir qu'il est possible de bidouiller un peu pour permettre par exemple à Google
de ne pas être impacté par cette limitation si trop sévère pour lui

devlop78 | AUBIN
Membre

 

Inscrit le : 02/07/2011

# Le 31/07/2011 à 15:00

Oui, la temporisation est le remplissage du seau, et les autres sont rejetées. Dans cette logique, il y a donc un écart entre les différentes requêtes. Je ne souhaite pas avoir de système de débit mais bel et bien un outil de détection des abus.

Répondre

Vous ne pouvez pas participer au forum, car votre inscription n'a pas été validée. Pour vous faire valider en tant que Membre, cliquez ici.

© MHN - Tous droits réservés | CNIL N°844440 | 23/11/2024 18:14:10 | Généré en 4.53ms | Contacts | Mentions légales |