Serveur Apache ralenti

WRInaute discret
Bonjour,

J'ai un serveur Apache 2 avec php 5. Le serveur rame parfois avec un grand nombre de process Apache ouverts en même temps. J'ai remarqué qu'à ce moment en faisant "netstat", j'avais une adresse ip (jamais la même) qui apparaît un grand nombre de fois en "ESTABLISHED" (cf exemple ci-dessous) et que ça pouvait ne pas changer pendant pluseirus minutes avant que ces connexions "ESTABLISHED" ne disparaissent.

Je ne sais vraiment à quoi c'est dû. Que peut-on y faire ?
Merci

tcp 0 12960 mon.ip.est.ici:80 41.201.106.206:2620 ESTABLISHED
tcp 0 12960 mon.ip.est.ici:80 41.201.106.206:2657 ESTABLISHED
tcp 0 12960 mon.ip.est.ici:80 41.201.106.206:2707 ESTABLISHED
tcp 0 12960 mon.ip.est.ici:80 41.201.106.206:2739 ESTABLISHED
tcp 0 12960 mon.ip.est.ici:80 41.201.106.206:2737 ESTABLISHED
tcp 0 12960 mon.ip.est.ici:80 41.201.106.206:2709 ESTABLISHED
tcp 0 12960 mon.ip.est.ici:80 41.201.106.206:2669 ESTABLISHED
tcp 0 12960 mon.ip.est.ici:80 41.201.106.206:2659 ESTABLISHED
tcp 0 11520 mon.ip.est.ici:80 41.201.89.249:1312 ESTABLISHED
tcp 0 0 mon.ip.est.ici:80 66.249.72.33:52617 ESTABLISHED
tcp 0 12960 mon.ip.est.ici:80 41.201.106.206:2742 ESTABLISHED
tcp 0 12960 mon.ip.est.ici:80 41.201.106.206:2733 ESTABLISHED
tcp 0 13068 mon.ip.est.ici:80 86.77.144.243:1913 ESTABLISHED
tcp 0 12960 mon.ip.est.ici:80 41.201.106.206:2516 ESTABLISHED
tcp 0 12960 mon.ip.est.ici:80 41.201.106.206:2727 ESTABLISHED
tcp 0 12960 mon.ip.est.ici:80 41.201.106.206:2697 ESTABLISHED
 
WRInaute accro
ça ressemble à un scan externe sur ton serveur, en vue de trouver les services qui tournent, donc les failles possible a exploiter.
 
WRInaute discret
ah oui. Qu'est-ce qui te fait dire ça ?
Ce sont toutes des connexions sur mon port 80 donc je ne pensais pas que c'était un scan.
 
WRInaute impliqué
Et cette adresse Ip tu as fait une recherche sur sa localisation ou ce que cela peut être ?
Voir même tenter un scan dessus pour voir le systeme d'exploitation ou si tu peux avoir des infos.
 
WRInaute accro
davidtennis a dit:
Ce sont toutes des connexions sur mon port 80 donc je ne pensais pas que c'était un scan.
Autant pour moi donc :
tcp 0 12960 mon.ip.est.ici:80 41.201.106.206:2620 ESTABLISHED veux dire que :
mon.ip.est.ici:80 (ton serveur écoutant sur le 80) 41.201.106.206:2620 ESTABLISHED (répond sur le port 2620).

Auquel cas, vue le nombre de connections depuis la même IP c'est plutôt du DOS.
 
WRInaute discret
Effectivement, au début je pensais que c'était du DOS, car effectivement ce sont des IPs qui selon les logs apache des requêtes répétées sur une même page en peu de temps.

Mais il y a plusieurs indices qui me font douter sur le fait que ce soit du DOS:
- ce comportement provient d'IP qui correspondent à des utilisateurs connectés au site (bizarre, a priori quelqu'un qui fait une attaque DOS ne se loggue pas en même temps sur le site)
- j'ai l'impression que ce n'est pas tellement lié à des tas de requêtes simultanées, mais plutôt à des connexions qui restent ouvertes et ne finissent jamais. Le lien "mon.ip.est.ici:80 41.201.106.206:2620" reste en état "ESTABLISHED" très longtemps, parfois pendant plusieurs minutes.

Bref, je n'arrive pas à bien comprendre le problème et je ne sais plus où chercher pour trouver la cause et trouver une parade...
 
WRInaute discret
Tu veux dire que c'est peut-être un script quelque part qui s'exécute indéfiniment ?
Oui c'est pas impossible. Apache ou PHP logguent ce genre de problème de script qui tourne sans fin ? Ou il y a un autre moyen de les détecter ?
 
WRInaute occasionnel
Zeb a bien répondu. C'est un scan du type Intellitamper ou l'équivalent. Un peu de lecture : https://www.google.com/#hl=en&sugexp=ppwl&cp=10&gs_id=1u&xhr=t&q=intell ... 24&bih=636

Un exemple avec une seule connexion:
Time: Mon Feb 21 06:28:58 2011 +0100
IP: 203.81.92.160 (MM/Myanmar/-)
Connections: 493
Blocked: Permanent Block

tcp: 108.59.XXX.XX:1384 -> 207.XXX.XXX.XX:80 (ESTABLISHED)

Une parade ?
Ce firewall ou l'équivalent: http://www.configserver.com/cp/csf.html et ajuster les paramètres de la section suivante:

SECTION:Connection Tracking
###############################################################################
# Connection Tracking. This option enables tracking of all connections from IP
# addresses to the server. If the total number of connections is greater than
# this value then the offending IP address is blocked. This can be used to help
# prevent some types of DOS attack.
#
# Care should be taken with this option. It's entirely possible that you will
# see false-positives. Some protocols can be connection hungry, e.g. FTP, IMAPD
# and HTTP so it could be quite easy to trigger, especially with a lot of
# closed connections in TIME_WAIT. However, for a server that is prone to DOS
# attacks this may be very useful. A reasonable setting for this option might
# be around 300.
#
# To disable this feature, set this to 0
CT_LIMIT = Default: 0 [0 or 10-1000]

# Connection Tracking interval. Set this to the the number of seconds between
# connection tracking scans
CT_INTERVAL = Default: 30 [10-3600]

# Send an email alert if an IP address is blocked due to connection tracking
CT_EMAIL_ALERT = Default: 1 [0-1]

# If you want to make IP blocks permanent then set this to 1, otherwise blocks
# will be temporary and will be cleared after CT_BLOCK_TIME seconds
CT_PERMANENT = Default: 0 [0-1]

# If you opt for temporary IP blocks for CT, then the following is the interval
# in seconds that the IP will remained blocked for (e.g. 1800 = 30 mins)
CT_BLOCK_TIME = Default: 1800 [300-86400]

# If you don't want to count the TIME_WAIT state against the connection count
# then set the following to "1"
CT_SKIP_TIME_WAIT = Default: 0 [0-1]

# If you only want to count specific states (e.g. SYN_RECV) then add the states
# to the following as a comma separated list. E.g. "SYN_RECV,TIME_WAIT"
#
# Leave this option empty to count all states against CT_LIMIT
CT_STATES =

# If you only want to count specific ports (e.g. 80,443) then add the ports
# to the following as a comma separated list. E.g. "80,443"
#
# Leave this option empty to count all ports against CT_LIMIT
CT_PORTS =
 
WRInaute passionné
Déjà un ptit mod evasive ferait peut-être un peu de bien.
Ca pourrait venir aussi de ton keep alive, tu peux tester de le désactiver/diminuer.

Edit: vu la connexion (IP en 41. => AFRINIC) c'est généralement/souvent des connexions lentes :
une théorie : t'as beaucoup d'élément sur ta page, un peu "long" à télécharger avec une connexion assez lente, du coup si tu as 200 éléments sur ta page faisant 100Ko et que ma vitesse de téléchargement est de 200Ko/s, ça ferait 100s par élément pendant lesquels j'aurais du ESTABLISHED.
J'ai prit des valeurs rondes et un peu farfelues pour expliquer, mais c'est une idée. A noter que 200Ko/s est une très bonne connexion. Si tu as développé ton site avec une connexion très rapide française, tests-le avec un téléphone portable en connexion "lente" ça pourrait donner une idée.
Bon, c'est qu'une théorie possible.

P.S: tu masques ton IP mais pas celle de la potentiel personne qui t'attaques: soit tu affiches tout, soit tu masques tout.
 
WRInaute discret
Merci

Le mod_evasive était déjà installé, avec des paramètres un poil plus restrictifs que la config de base. Du coup le firewall suggéré ajouterait une autre protection ou c'est la même chose que mod_evasive ce qeu tu évoques ?

Sinon le serveur en question ne sert que des pages PHP. Tous les éléments statiques (javascript, css, images) sont servis depuis d'autres serveurs, donc ça ne devrait pas interférer.
 
WRInaute accro
Sérieusement, vous arrivez quand même très vite à des conclusions qui me semblent être basées sur rien.

Beaucoup de connexions depuis la même IP dans netstat, ça ne permet pas de tirer grand chose comme conclusions. La première chose à faire, c'est de regarder les logs Apache pour voir les requêtes correspondantes, et surtout de regarder ce que dit mod_status à ce moment-là (qui permet de voir quelles sont les connexions actives, les requêtes associées, l'état de chaque connexion...).

Sans ces deux informations, il me semble difficile de tirer des conclusions sérieuses (qui peuvent aller de la mauvaise configuration Apache à une attaque DOS, et beaucoup d'autres choses entre les deux).

Jacques.
 
WRInaute accro
jcaron a dit:
Sérieusement, vous arrivez quand même très vite à des conclusions qui me semblent être basées sur rien.
Oui c'est pas faux, mais ce qui est bizarre c'est que le serveur ralenti a ce moment là et que le sujet sous entends que dans les autres cas tout se passe bien. donc oui il y a plusieurs causes possibles don certaines peuvent être légitimes mais le ralentissement sous entend plus une action inappropriée qu'autre chose.

@davidtennis > Pour l'histoire du script qui ralentirait le serveur, je pense a un genre de script ajax sur une page qui effectuerait une requête répétée avec un setinterval() (par exemple)
 
WRInaute discret
Bonjour,

Après avoir regardé mod_Status comme vous le suggérez pendant ces moments de plantage, voici ce que je découvre, un bon nombre de requêtes (issues de la même IP et sur la même page) qui semblent être bloquées en état W (sending reply).
Ca précise le problème mais je ne vois pas vraiment comment corriger ça...

Voici un extrait de mod_Status avec les exemples de "childs" qui semblent bloqués :

Code:
Srv PID Acc M CPU SS Req Conn Child Slot Client VHost Request
2-7 11474 0/177/177 W 7.60 217 0 0.0 1.58 1.58 77.ip.xx.xx www.monsite.com GET /une/page/du/site HTTP/1.1
3-7 11476 0/122/122 W 6.52 239 0 0.0 1.02 1.02 77.ip.xx.xx www.monsite.com GET /une/page/du/site HTTP/1.1
21-7 11975 0/11/97 W 0.86 226 0 0.0 0.18 0.93 77.ip.xx.xx www.monsite.com GET /une/page/du/site HTTP/1.1
 
Discussions similaires
Haut