Il est important de surveiller l'état de votre serveur et d'être prévenu si une anomalie survient, le plus souvent par e-mail. Nous suggérons l'emploi de Monit et Logwatch.
N'hésitez pas à utiliser d'autres outils tels que les graphiques MRTG ou RRD qui permettront de surveiller la charge réseau et processeur de votre serveur sur le long terme, ainsi que l'espace disque, le temps de réponse, ou toute autre valeur numérique pertinente. Ceci ne fera pas l'objet d'un développement dans ce tutoriel.
Commandes utiles
Des outils de base existent pour ausculter la machine en ligne de commande.
- top
- Liste les processus en cours d'exécution et leur identifiant (PID)
- kill
- Tue un processus grâce à son PID
- ftptop
- Liste des connexions au serveur FTP
- iftop
-
Top des interfaces réseau (installation par
apt-get install iftop
) - apachetop
-
Top Apache (installation par
apt-get install apachetop
) - mtop
-
Top MySQL (installation par
apt-get install mtop
)
En ce qui concerne le réseau :
- netstat -tap
- Liste les connexions établies
- netstat -tulp
- Liste les ports en écoute
- lsof -n | grep LISTEN
- Liste les ports en écoute
- lsof -n | grep UDP
- Liste les connexions UDP
Monit
Monit est une application permettant de surveiller l'état des services (notamment web, ftp, mail, mysql, ssh) par une interface web, et de notifier l'administrateur si nécessaire (trop grande charge cpu, redémarrage, indisponibilité...).
Installation
L'installation de Monit se réalise en quelques secondes grâce au paquet éponyme :
apt-get install monit
La configuration de Monit se fait en deux temps. Tout d'abord, autoriser le démarrage du service en éditant /etc/default/monit.
vi /etc/default/monit
Modifier l'option startup à 1.
startup=1
Ensuite, éditer le fichier de configuration /etc/monit/monitrc contenant la description de tous les services à surveiller.
vi /etc/monit/monitrc
Voici un exemple complet. Celui-ci est relativement explicite et à adapter selon votre configuration notamment pour le port SSH (22 par défaut) qui est ici 1337 pour correspondre au précédent tutoriel de configuration.
- set mailserver
- Indique le(s) serveur(s) de mail à utiliser pour l'envoi des notifications
- set alert
- Indique les adresses destinataires
- set httpd port
- Spécifie le port de connexion web. Vous pourrez ensuite vous connecter grâce à votre navigateur sur l'IP et le port correspondant (ex: http://test.alsacreations.com:8080/ )
- allow login:password
- Spécifie le couple login/password pour l'accès web (à renseigner)
- check device
- Va permettre de surveiller l'espace disque restant : il faut ici indiquer le bon path vers /dev/XXX correspondant à la partition à monitorer (ex : /dev/sda, /dev/md1... selon votre configuration)
# Config
set daemon 120
set logfile syslog facility log_daemon
set mailserver localhost, smtp.free.fr
set mail-format {
from: monit@$HOST
subject: $HOST - Monit : $EVENT $SERVICE
}
set alert monitoring@test.com
set httpd port 8080 and
allow login:password
# Apache 2
check process httpd with pidfile /var/run/apache2.pid
group apache
start program = "/etc/init.d/apache2 start"
stop program = "/etc/init.d/apache2 stop"
if failed host 127.0.0.1 port 80
protocol http then restart
if 5 restarts within 5 cycles then timeout
if cpu is greater than 85% for 2 cycles then alert
if cpu > 90% for 5 cycles then restart
if children > 250 then restart
# MySQL
check process mysqld with pidfile /var/run/mysqld/mysqld.pid
group database
start program = "/etc/init.d/mysql start"
stop program = "/etc/init.d/mysql stop"
if failed host 127.0.0.1 port 3306 then restart
if 5 restarts within 5 cycles then timeout
# SSH
check process sshd with pidfile /var/run/sshd.pid
group ssh
start program "/etc/init.d/ssh start"
stop program "/etc/init.d/ssh stop"
if failed host 127.0.0.1 port 1337 protocol ssh then restart
if 5 restarts within 5 cycles then timeout
# Postfix
check process postfix with pidfile /var/spool/postfix/pid/master.pid
group mail
start program = "/etc/init.d/postfix start"
stop program = "/etc/init.d/postfix stop"
if failed port 25 protocol smtp then restart
if 5 restarts within 5 cycles then timeout
# FTP
check process proftpd with pidfile /var/run/proftpd.pid
group ftp
start program = "/etc/init.d/proftpd start"
stop program = "/etc/init.d/proftpd stop"
if failed port 21 protocol ftp then restart
if 5 restarts within 5 cycles then timeout
# Disk
check device sda1 with path /dev/sda1
if space usage > 85% then alert
group system
Vous êtes libre d'ajouter tous les services à monitorer sur votre machine (pop3, imap, spamassassin, clamav, fail2ban...). La syntaxe est abordable et les exemples nombreux. Pour vérifier cette syntaxe, utilisez la commande :
/etc/init.d/monit syntax
Si aucun message d'erreur n'est indiqué, vous pourrez ensuite démarrer monit :
/etc/init.d/monit start
Vérifiez une nouvelle fois la bonne interprétation de la configuration grâce à monit -v
.
Logwatch
Logwatch est par un démon pouvant analyser et résumer les logs générés par les autres services durant la journée pour en détecter d'éventuelles anomalies ou en tirer des statistiques. Il permet d'envoyer un e-mail récapitulatif quotidien à l'administrateur. Son installation est elle aussi très simple grâce à APT et au paquet éponyme :
apt-get install logwatch
La configuration par défaut suffit amplement, il suffit de modifier le destinataire dans le fichier /usr/share/logwatch/default.conf/logwatch.conf. Celui-ci peut se trouver à un autre endroit du disque, n'hésitez pas à vous servir de la commande locate.
vi /usr/share/logwatch/default.conf/logwatch.conf
Modifiez l'option MailTo
MailTo = monitoring@test.com
Vérifiez au besoin la présence de logwatch dans le répertoire /etc/cron.daily/ dont les scripts sont exécutés quotidiennement.
Voir aussi : Sécurité et Firewall