J'héberge beaucoup d'hôtes virtuels utilisant Apache dans une LAMP de base configurée à l'aide de Webmin/Virtualmin. Je recherche un outil de haut niveau dans lequel je peux surveiller les connexions actuelles. La partie hébergement virtuel semble me causer des problèmes ici. Voici ce que j'ai essayé:
netstat
- Je peux voir les connexions, mais elles me montrent comme si elles utilisaient toutes mon domaine principal, par exemple. mydomain.com:www
.iftop
- Je l'aime beaucoup, mais le même inconvénient que netstat
name__: ne montre pas l'hôte virtuel.apachetop
- semble ne pas afficher d'informations pour tous mes hôtes virtuels. Je me connecte pour séparer les fichiers journaux personnalisés, ce qui, je suppose, est la cause de son inefficacité.ntop
name__, darkstat
name__, MRTG
name__, bwm-ng
, IPTraf
- ne fonctionne pas non plus.Donc, en gros, je cherche quelque chose de similaire à la sortie actuelle de netstat
name__, mais pour inclure l’hôte virtuel, la demande est pour, par exemple: avirtualsite.com:www
.
Réponse d'Andrea Corbellini vous explique pourquoi cela ne fonctionne pas avec les outils que vous utilisez et comment fonctionne l'hébergement virtuel. Voici le moyen le plus simple auquel je puisse penser pour le faire dans Apache ...
mod_status
va vous aider.Avertissement: Je ne sais pas comment cela se passe dans Webmin - J'utilise des fichiers de configuration nus pour configurer des serveurs. Voici juste un aperçu de base des étapes.
C'est un outil de type top
-, mais représenté sous forme de page Web. Il répertorie l'état actuel directement interrogé par Apache. Il ne dépend donc pas de l'analyse des fichiers journaux comme le fait apachetop
.
Activer mod_status
:
Sudo a2enmod status
Accordez-vous l'accès.
/etc/Apache2/mods-enabled/status.conf
et éditez:ExtendedStatus
sur On
(facultatif, mais plus génial et un peu plus lent)Dans le <Location /server-status>
, ajoutez votre adresse IP à la ligne avec la directive Allow
. Exemple:
Allow from 127.0.0.1 ::1 66.77.88.99
Redémarrez Apache:
Sudo service Apache2 restart
Profitez de l'outil dans votre navigateur, par exemple: http://1.2.3.4/server-status
Cela ressemblera à cet exemple de capture d'écran .
Continuez à appuyer F5 pour obtenir des mises à jour. Ou obtenez un plugin de navigateur génial et regardez-le être mis à jour!
addendum par l'OP pour les futurs visiteurs
Dans Webmin, les étapes de base concernant le module Status peuvent être trouvées ici:
Tous les outils que vous essayez ne vous donneront jamais la bonne réponse. La raison en est que les informations que vous demandez sont perdues lorsque la connexion est établie.
Prenons un exemple: supposons que votre serveur Web ait une adresse IP (1.2.3.4) et deux noms d’hôte (a.mydomain.com et b.mydomain .com) qui résolvent à cette adresse IP.
Que se passe-t-il lorsque vous utilisez votre navigateur Web préféré lors de votre visite a.mydomain.com?
Donc, netstat
& co. Sachez seulement qu’une connexion entrante est établie avec 1.2.3.4. La raison pour laquelle vous voyez un nom d'hôte au lieu d'une adresse IP est que l'adresse IP a un enregistrement rDNS, donc netstat
préfère le montrer à la place de l'IP, car il est plus agréable. Essayez netstat -n
(ou supprimez l'enregistrement rDNS) et vous verrez l'adresse IP.
Mais ce n'est pas tout: quand j'ai dit que les informations sur le nom d'hôte utilisé pour établir la connexion avaient été perdues, je n'avais pas entièrement raison. Du point de vue de la pile TCP/IP, cette phrase est vraie. Mais si nous voyons les choses du point de vue du protocole HTTP, les choses sont différentes. Dans chaque demande HTTP, il existe un en-tête Host:
qui contient le nom d'hôte utilisé par le navigateur pour effectuer la demande.
Donc, en bref, vous devriez regarder les fichiers de log de votre serveur web. Le serveur Web est le service qui gère les demandes HTTP et, par conséquent, le seul service qui connaît le nom d'hôte "d'origine".
Une autre façon est de taper
tail -f /var/log/Apache2/access.log
dans votre terminal
Vous pouvez vérifier tous les ips connectés sur le port 80 avec cette bash
netstat -tn 2>/dev/null | grep :80 | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head
Note: si vous voulez voir un autre port, changez 80
OUTPUT:
19 x.174.143.1
13 x.175.135.1
9 x.68.135.1
8 x.144.87.1
7 x.68.150.1
6 x.92.4.1
6 x.188.23.1
5 x.190.164.1
4 x.189.156.1
Vous pouvez vérifier cela avec:
netstat -na | grep 'ESTA'
Si vous voulez pid, utilisateur et commande:
lsof -i tcp:443,80 | egrep 'PID|->' | sort -k9
Vous pouvez également utiliser GoAccess de manière interactive pour afficher vos visiteurs actuels. Il analyse votre journal d’accès Apache à cet effet et affiche un ensemble de statistiques sur votre site.