ssh, ssmtp, ip par email et logwatch pour administrer sa machine à distance

L’objectif de cet article est de se donner quelques outils simples permettant d’administrer une machine à distance. Typiquement, mon cas d’utilisation est l’ordinateur de mes parents dont je prend en charge l’administration système. Je suppose dans cet article qu’un accès ssh est déjà configuré sur votre machine serveur (et, tant qu’à faire, la sécurisation qui va avec : fail2ban, accès permit qu’à certains logins…).

Se connecter en ssh

Comme vous le savez déjà, pour vous connecter en ssh il vous faut soit un nom de domaine, soit une IP. Dans le premier cas, certains utilisent les services de dyndns. Dans mon cas, je peux et je décide de me passer de ce service tiers en choisissant de passer par l’IP qu’attribue mon FAI. Dans le cas où l’IP est fixe, il n’y a pas de problème, mais si elle est dynamique comme chez moi, ça l’est un peu plus. L’idée est donc d’envoyer cette IP par email. Si vous préférez la solution dyndns, l’article garde néanmoins  son intérêt car recevoir des informations par email, c’est sympa :D et on va le voir.

Les emails avec ssmtp

Afin de pouvoir envoyer des emails depuis la machine distante, nous allons installer ssmtp et mailutils (ici sur debian) :

aptitude install ssmtp mailutils

L’avantage de ssmtp est qu’il est simple à configurer. De plus, ce n’est pas un démon, donc pas de consommation de ressources supplémentaires.

Utilisation du smtp de neuf

Mes parents étant chez neuf, nous pouvons utiliser le smtp de celui-ci. Dans ce cas, tout ce passe dans le fichier /etc/ssmtp/ssmtp.conf. On y met :

mailhub=smtp.neuf.fr
FromLineOverride=YES

La première ligne sert à donner le serveur smtp (vous ne l’aviez pas deviné ? :) )  et le seconde permet à l’utilisateur de spécifier le provenance (adresse émettrice) du courriel.

Deux lignes, pas une de plus :) Maintenant, si la machine est amenée à voyager (ie à changer de FAI), il peut être bon d’utiliser un smtp accessible de partout. Par ailleurs, il y a quelques années, lors de mes premiers essais, j’avais fini par être rapidement blacklisté par neuf :/

Utilisation du smtp de gmail

Nous allons donc donner une seconde illustration via le service de google : gmail. Pour cela, rien de plus simple, il vous faut un compte.

La configuration est un chouilla plus compliqué car google demande une authentification pour utiliser le smtp.

Dans le même fichier que précédemment, nous allons commencer par les infos du compte :

AuthUser=moi@gmail.com
AuthPass=super_mot_de_passe

puis, celles du smtp :

mailhub=smtp.gmail.com:587
AuthMethod=LOGIN
UseTLS=YES
UseSTARTTLS=YES

Ne pas hésiter à faire un petit

chmod 600 ssmtp.conf

pour la sécurité car le mot de passe est en clair.

Ouverture du port adéquat du firewall

On commet l’erreur au moins une fois : l’oubli du firewall et la croyance que les tutos des autres ne fonctionnent jamais chez soi. Pour ma part, j’utilise l’excellent guarddog pour paramétrer iptable (dommage qu’il n’existe pas un équivalent ncurse). Pour le smtp de neuf, il suffit d’ouvrir dans la partie mail le smtp. Pour celui de gmail, il faut créer une règle TCP 587 puis la selectionner dans les règles personnelles.

Petit test et première application

Pour lancer un test, rien de plus simple :

echo test | mail -s « test » -t adresse_quotidienne@truc.fr

et relever vos emails :)

Tout devrait fonctionner. La première petite application que je propose est la suivante : on souhaite qu’à chaque connection en root, qu’un email soit envoyer à l’admin. L’admin d’une machine généralement unique (sinon, on délègue avec sudo), on se rendra vite compte d’un accès non-souhaité. Pour ça, on va ajouter dans le .bashrc de root ceci :

echo Connexion (root): $(date) | mail -s « Root access » -t  admin@truc.fr

Et voilà :)

Adresse IP

Puisque l’administration se fera exclusivement par ssh, je vais mettre en place l’envoi automatique de l’adresse IP par email.

Idées du script

Le concept de base est de récupérer l’IP à l’aide d’un site tel que monip.org.

wget -q www.monip.org -O -  | iconv -f iso8859-1 -t utf8 | sed -nre ‘s/^.* (([0-9]{1,3}\.){3}[0-9]{1,3}).*$/\1/p’

Il suffit de passer ce résultat dans une commande similaire à ce que l’on a utilisé plus haut. Le lancement doit être automatisé. Il y a selon moi plusieurs politiques. On peut placer le script dans /etc/init.d et le lancer au démarrage (en plaçant un/des lien(s) symboliques dans /etc/rc*.d ou en utilisant sysv-rc-conf sous debian ; consultez la doc de votre distribution pour connaitre les runlevel et les éventuels logiciels pour créer les symlinks si vous ne voulez pas le faire à la main). L’autre méthode est d’utiliser cron pour envoyer réglièrement l’IP.

Chacune de ces méthodes à son avantage et son inconvénient. Le problème de la première est qu’une machine qui tourne longtemps (fort uptime) pourrait voir l’IP du routeur changer entre temps, et nous ne serions pas notifié de la modification. Pire, la machine est injoignable et on doit faire appel à une personne physique. La seconde envoie régulièrement des infos. En attendant N heures, on aura forcément la bonne IP dans le cas précédent. Mais d’une part, on reçoit plus d’emails que nécessaire et d’autres part, on n’a pas la notification juste au démarrage de la machine (bien que ça doit pouvoir se contourner pour ce dernier point avec anacron, je n’ai pas creusé).

Bien que l’on pourrait se satisfaire dans certains cas de l’une ou l’autre des solutions (j’ai tourné par un mélange des deux précédentes pendant longtemps), je viens d’élaborer une autre plus fine via un petit service qui va :

  • Envoyer une notification à son démarrage
  • Vérifier régulièrement le changement d’IP et notifier si nécessaire

Ce code (encore en test, si des personnes sont intéressées, je le publierai en GPL) se compose d’une part d’un démon (pour débian, mais adaptable facilement à d’autres distributions) et d’un petit script qui s’occupe de gérer l’envoie du email quand il le faut. Il est possible bien sûr d’envoyer d’autres informations pertinentes par la même occasion. De plus, les fans de chiffrements ne manqueront pas de chiffrer le courriel avec gpg. J’avais écrit à une certaine époque un article pour le wiki de mandriva à ce propos.

Logwatch

Outil cité par admin-linux, logwatch permet de surveiller une machine. Que fait-il ? Logwatch lit les logs du systèmes pour nous et les présente sous une forme digeste, par thème. Chaque jour, un courriel est envoyé avec ce qui est bon de savoir (iptable, espace disque, paquets, erreurs divers…) . En effet, une tâche cron est crée dans /etc/cron.daily Modifier le fichier S00logwatch pour y mettre votre adresse email après le –mailto.

Le fichier de configuration par défaut est dans /usr/share/logwatch/default.conf/logwatch.conf

On pourra le copier dans /etc/logwatch (qui prime sur /usr/share/logwatch). Les options sont très bien expliquées, au point qu’il ne me semble pas nécessaire de les repréciser ici.

Conclusion

Me voilà avec une machine fin prête à être maintenue à distance en toute simplicité en plus d’un bon amusement à bidouiller en amont :)


Vus : 671
Publié par François : 67