Apache optimisation et sécurisation (attaques DoS)

Nouveau WRInaute
bonjour à tous,

voila ont a un Dédié chez Dedibox "PRO R210 4x 1.86GHz, 64 Bits, 16 Go DDR3 ECC",

quelques stats : environs 7 000 visiteurs / jours, jusqu'à 230 visiteurs simultané
CPU load averages : 0.12(1 mins) , 0.15 (5 mins) , 0.09 (15 mins)

1) voila ma configuration Apache, pensez-vous quelle est bien adapté ?

Timeout 120
KeepAlive Off
MaxKeepAliveRequests 100
KeepAliveTimeout 15

<IfModule prefork.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000
</IfModule>

<IfModule worker.c>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>

2) Ont a connu des gros ralentissement du systeme surement du à des attaques et je voulais installer le mod_evasive est ce une bonne idée sur une boutique en ligne ?


Merci à tous pour vos remarques !
 
WRInaute occasionnel
Salut,

De mon point de vue la conf' apache importe peu par rapport à la conf mysql et l’optimisation du code alliée à la mise en cache d'un maximum de chose. Concernant ton extrait de conf, il me semble que apache est compilé en prefork ou en worker mais pas les deux donc tu ne peux jouer que sur l'un des deux tableaux.
 
Nouveau WRInaute
en fait si j'attire l'attention sur apache c'est que lorsque qu'on a connu des plantages KeepAlive était sur On et les Process Apache explosaient jusqu'a occuper toutes les ressources machine, et Mysql ne fermait plus ses Proccess, (un Pb souvent évoqué sur le Web, mais sans vrai Soluces...) j'ai deja rencontré le PB à 8h00 du matin avec 25 visiteurs, et sans souci avec 200, c'est pour cela que j'essai de verouiller tous ca...
 
WRInaute occasionnel
KeepAlive à On permet généralement d'améliorer les performances mais peut-être un goulet d'étranglement en cas de forte charge, à mon avis, si ton site tourne sans, c'est bien comme ça. (d'autant que ton "top" montre que le serveur est serein) sinon, avec KeepAlive à On tu devrais baisser timeout de 15s qui est le temps par défaut mais qui peut-être ramené à 5 par exemple
 
WRInaute accro
Avant de changer quelque chose, il serait utile de déterminer quel est le problème. Si un serveur est lent, ça peut venir de plusieurs choses différentes:
- tu n'as pas assez de RAM, ça swappe (cf top)
- tu as trop d'accès à tes disques durs et ils saturent
- tu est bloqué par des limites "soft" (nombre de processus...)

Pas assez de RAM c'est en général lié à un problème de config Apache. Trop d'accès disque c'est en général lié à des requêtes SQL mal optimisées. Les limites "soft" c'est lié essentiellement à la config Apache, éventuellement des paramètres système.

S'il y avait une config Apache idéale, il n'y aurait pas de fichier de config :)

Les valeurs idéales des paramètres que tu indiques dépendent beaucoup du reste de ta config Apache, en particulier la façon dont php est configuré (mod_php, suphp, etc.).

Les deux problèmes les plus classiques concernant le nombre de processus et les keep-alives sont:
- que tu te retrouves avec Apache+php qui bouffe plus de RAM que tu n'en as dans ta machine
- que tu satures le nombre de processus à cause des keep-alives.

Pour configurer Apache de façon idéale, il te faut:
- un top complet
- un ps axl
- un statut Apache (il faut que mod_status soit activé)
Il te faut ces infos "en temps normal" et au moment où ton serveur te semble le plus chargé.

Top t'indiquera tout plein d'autres paramètres que juste le load average, en particulier la RAM utilisée, si la machine swappe, etc. top et ps te permettent de mesurer le nombre de processus et surtout leur taille. Le statut Apache te permettra de voir l'utilisation des processus.

Si la machine swappe, la première chose à faire consiste à limiter le nombre de processus total en fonction de la RAM dispo (en n'oubliant pas de garder de la marge pour l'OS, mysql, le cache de l'OS, etc.) et de la taille des processus (Apache + php). Si par exemples tu utilises mod_php et que chaque processus Apache fait 100 Mo après quelques requêtes, alors 256 processus c'est 256 x 100 = 25.6 Go, ce qui ne rentre pas dans 16 Go. C'est plus ou moins compliqué dans les autres cas (suphp etc.).

Si tu satures ta table de processus Apache, ça peut venir des keepalives qui risquent de "bloquer" un slot pendant de longues secondes pour rien. Plutôt que de désactiver complètement, il suffit souvent de réduire le KeepAliveTimeout (15 secondes c'est très long).

Dans certains cas de figure, il peut être pertinent d'avoir deux serveurs http: l'un pour servir les requêtes dynamiques (gros processus, nombre limité, pas de keepalives), l'autre pour les requêtes statiques (processus allégé au maximum, nombre plus élevé, keepalives).

Evidemment, il peut y avoir beaucoup d'autres problèmes possibles (mysql, attaques...), mais sans plus d'infos, c'est difficile voire impossible à diagnostiquer.

Jacques.
 
Nouveau WRInaute
Merci pour cette réponse qui donne des pistes...,
comme tu l'indiques les PB peuvent etres lié à bcp de choses diffierentes et surtout qu'il n'y pas de conf Apache idéal :).

s'il y a un prochain plantage je ferais un copier collé du Top.


Merci,

Franck
 
WRInaute accro
Le top complet c'est important, mais un ps axl complet et surtout le statut apache aussi. Et les observer même "en temps normal" permet déjà d'avoir des indications...

Jacques.
 
WRInaute impliqué
Salut,

Ce serais pas plus simple de stopper l'attaque avant la couche logicielle, c'est à dire avec les iptables? Il y a moyen de limite le nombre de requête par ip ;) Apache est beaucoup plus lent et c'est pas vraiment les même ressources utilisé. Sinon, au pire prend un firewall mais ça va te coûter relativement cher...
 
WRInaute accro
Avant de chercher à se protéger contre des attaques, il faudrait commencer par être sûr qu'il y en a... Il y a quelque chose dans les logs qui confirme ces attaques?

Jacques.
 
Nouveau WRInaute
je n'ai pas la preuve que ces plantages sont dû à des attacks, rien de particulier des les logs à ces moments la...
Mais tres souvent je vois des tentatives ds les log erreur apache avec des Ip de Roumanie, Pologne Chine....

et comment un serveur peux tourner comme une horologe pendant des jours avec le même trafic et les même requetes Sql,

et planter(machine très occuper presque inaccessible) pendant 5 minutes à 8h00 du matin ? il se passe forcement des choses louche et ce n'est pas les taches Crons :wink:
 
WRInaute impliqué
Une attaque (D)Dos, sa dure pas 5min et ça mettrais ton serveur en rade à mon avis.

Il y a des softs -sous linux- de détection de faille sur un site (le tiens légalement ^^), je te conseille de rechercher un peu sur google, il y en a un en 4 lettres avec 1 chiffre qui fonctionne plutôt bien :)

Sinon avant que ça plante tu peux nous faire voir les logs en bouillant les ips s'tu veux.
 
Discussions similaires
Haut