Bonjour,
Tout a commencé il y a quelques jours, alors que je faisais des F5 sur un site sur mon serveur, site utilisant joomla!
J'ai rapidement constaté un ralentissement pour desservir les pages, et je suis mis donc connecté en SSH à mon Debian pour voir, avec la commande top, comment ça se passait. Je précise, que je consulte régulièrement mon serveur pour voir si tout se passe bien, je vérifie aussi la SWAP, car je n'ai que ... 256 Mo de RAM. Pour situer davantage le contexte, j'ai récemment augmenté la taille de la memoire limite pour les scripts PHP à 15 Mo, car Joomla! ne se contentait pas des 10 Mo que j'allouais (alors que je développe des applications avec moins). Par ailleurs, j'utilise le mode Prefork pour Apache-PHP.
Donc, lors de ces dizaines de F5, les processus Apache se créait et se détruisait (en apparence, d'après les premiers processus listés par top), et la SWAP est monté progressivement jusqu'à plus de 1 Go, jusqu'à ce que j'interromps moi-même Apache pour arrêter ce qui a fini par être un test.
Donc, d'après moi, ma configuration était mauvaise. J'ai successivement eu les réflexions suivantes :
- Possibilité d'attaques DOS volontaires ou non, j'ai installé mod_evasive. Je l'ai testé, et malgré des paramètres qui aurait du bloquer même un visiteur normal, ça ne bloquait même pas mes F5. Cependant, je trouve l'idée bonne, car ça reste, même avec plus de RAM et des bons paramètres, une porte ouverte à de basiques attaques.
- J'ai descendu les valeurs de Apache, MaxClients, etc à 5, et la vie d'un processus à 1000 au lieu de 0. En testant, j'ai "bizarrement" eu un affichage lent des sites. Donc ma première reflexion a été que même le chargement d'une image utilise un processus sur les 5. Pourquoi pas. Mais les processus s'enchainant "sans répis", quelle différence cela fait-il avec plus de processus ... Car en passant la valeur à 10, le problème a disparu. Avec 10, les attaques de F5 montait la SWAP à 65 Mo, mais elle ne semblait pas monter davantage.
- Je n'ai pas trouvé de Doc vraiment clair sur le fonctionnement de Apache, et les choix à prendre. J'avais vu que Nginx était bien meilleur que Apache pour le statique parce que blabla, mais au fond, je n'ai jamais vu qu'un processus était utilisé par une url ... J'ai même vu un site en anglais qui semblait dire qu'un processus allouait x Mo de mémoire, en fonction de la configuration de PHP (c'est du moins mon interprétation cela ma traduction du document en anglais). Au final, j'ai donc réfléchis à passer par nGinx, soit lui tout seul soit en frontal, et à passer Apache en MPM Worker, sans avoir de réponses censées dans tout ce que j'ai pu lire. Je vais pas prendre de risque tant que je ne comprends pas ma propre démarche ...
Parallèlement, en y réfléchissant, si on part du principe que je n'ai que 60 Mo à allouer à Apache pour ses ressources, et qu'un script peut utiliser jusqu'à 15 Mo, On peut donc fixer la valeur à 5. Ceci étant plutôt faux, car en situation réelle, les scripts php prennent moins de 15 Mo. Ceci est totalement faux, car, sauf allocation de mémoire par le processus, le chargement d'une image ne prend rien en RAM ... J'ose imaginer. Donc, je me retrouve avec deux extrêmes de situations qui sont que 5 images sont chargées simultanément (plus n'est pas possible) avec une utilisation nulle de la RAM, par rapport à 5 scripts PHP blindés en même temps. Une moyenne permettrait d'avoir un rapport convenable, et j'ai d'ailleurs actuellement fixé la valeur à 15 processus maximum.
Au final, non seulement j'ai l'impression d'avoir un serveur vulnérable, et ce bêtement (par de simples F5 ...), mais en plus je n'arrive pas à cerner l'ensemble (un processus même pour une image ? Une allocation de mémoire ? différence avec MPM Worker, Utiliser Nginx avec "ressources illimitées" pour statiques et apache juste pour PHP avec du coup un bon contrôle des ressources, etc ...).
Je me sens aussi bête de ne pas avoir réussi à faire tourner mod_evasive ... ^^
Voilà. Avez-vous des tutos bien complets ? Des retours d'expérience ?
Merci, a+
Partager