3.a. Installation de SSH et DynDNS
Maintenant que j'ai un ordinateur fonctionnel (ou presque, problèmes de lecteur Blue-Ray non résolu à l'heure ou j'écris ces lignes), il serait temps de le transformer en vrai serveur.
Car si j'ai monté cet ordinateur, c'était dans le but d'avoir un HTPC, un ordinateur multimédia de salon, d'où le choix du boitier OrigenAE S21T. Mais c'était également et surtout dans le but d'en faire un serveur de travail sur lequel je pourrais stocker diverses choses, afficher des sites web, mettre en place des projets via subversion, et sauvegarder mes données pour avoir un peu plus de sécurité.
Il est donc maintenant temps de s'atteler à l'installation et la configuration des outils serveurs.
En premier lieu, installation de SSH pour me permettre d'accéder en ligne de commande au serveur depuis l'extérieur. Différentes étapes ont été suivies pour arriver à un résultat intéressant : connexion SSH via clé publique sur un dns dynamique (dyndns).
1. Installation du serveur SSH
Rien de plus simple :
sudo apt-get install openssh-server
C'est tout.
2. Configuration avec clé publique
Il existe différentes méthodes pour accéder à un serveur via SSH. ça passe des simples identifiants stockés en clair dans un fichier de config, jusqu'à l'authentification par clé publique. C'est cette dernière que j'ai tout naturellement choisi, vu que je suis sensé être le seul à accéder au serveur de cette manière.
Pour mettre en place une authentification par clé publique, il est nécessaire de générer une clé publique sur le poste client qui va se connecter au serveur. C'est à partir de mon macbook pro que je travaille habituellement, et j'y avais déjà généré une paire de clé publique/privée pour les besoins d'un projet. J'ai simplement récupéré la clé publique (dans /home/titouille/.ssh/id_rsa.pub) que j'ai placée sur un stick USB. (Attention, ne jamais faire transiter ce genre de clé sur le réseau ou ça pourrait compromettre la sécurité).
J'ai branché le stick USB sur mon serveur, ouvert un terminal puis tappé :
sudo ssh-copy-id -i /chemin/vers/la/clé/id_rsa.pub 127.0.0.1
Ce qui m'a permis d'ajouter cette clé publique en tant que clé reconnue par mon serveur. Après un message d'avertissement me disant que l'authenticité de l'hébergeur 127.0.0.1 ne pouvait être certifié, j'ai validé cette mise en garde et j'ai du insérer le mot de passe de l'utilisateur par défaut d'ubuntu.
J'ai ensuite testé une connexion via mon macbook pro avec la ligne de commande suivante :
ssh 192.168.1.20 -l titouille
Et j'ai pu me connecter correctement. A la première connexion, un mot de passe est demandé. C'est en réalité la passphrase qu'on a utilisé pour générer les clés publique/privée qui est à inscrire. Une fois la connexion effectuée une première fois, on ne nous demandera plus de mot de passe, puisque l'authentification par clé publique est validée.
3. Mise en place d'un DNS dynamique
J'aurai pu m'arrêter là, mais je voulais que mon serveur soit accessible depuis l'extérieur, pour pouvoir y travailler même lorsque je ne suis pas chez moi.
La première chose était de contrôler le type d'adresse ip délivrée par mon fournisseur d'accès internet. Malheureusement, mon fournisseur me délivre une adresse ip totalement dynamique, qui change à chaque redémarrage du modem. Ceci est un problème. Certains fournisseurs délivrent des adresses totalement statiques (contre paiement d'un petit supplément généralement) et d'autres des adresses semi-statiques, qui sont gardées pendant une durée plus ou moins déterminée.
Dans ces 2 cas, ça n'aurait pas posé de problème particulier de se connecter directement via l'adresse ip du modem. Mais dans le cas d'une adresse dynamique, ça peut vite poser un problème.
Ayant un routeur qui me permet de faire du DynamicDNS et d'alerter l'organe fournisseur de la DNS d'un quelconque changement d'adresse IP, j'ai opté pour une adresse chez dyndns. Pour ceux qui ne connaissent pas dyndns, c'est une société qui fournit, entre autre, des noms de domaines (restreints) qui sont directement associé avec l'adresse ip publique de notre réseau.
Ce qui veut dire que je peux m'inscrire chez dyndns, choisir un nom de domaine du genre : monServeur.dyndns.org et l'associer à mon adresse IP, afin de pouvoir tapper http://monServeur.dyndns.org dans un navigateur plutôt qu'un incompréhensible http://88.114.18.224. Le but du système dyndns est justement d'être utilisé avec des adresses IP dynamiques. Un processus va remonter chaque x secondes / minutes / heures l'adresse IP associée avec le DNS choisi. Si l'IP a été modifiée, alors elle sera mise à jour chez dyndns pour continuer à lier le DNS avec l'IP.
première chose : rendez-vous sur dyndns pour créer un compte. Une fois que c'est fait, je dois choisir un nom de sous-domaine (libre) ainsi qu'un nom de domaine (fixe, parmi une liste de domaines accessibles) que je voudrai associer à mon serveur et y associer mon IP publique.
Une fois ces infos validées, je vais dans l'administration de mon routeur, et je fais l'association entre l'adresse IP publique et le nom de domaine dyndns que j'ai choisi.
Une dernière configuration est à effectuer : si mon serveur est maintenant accessible via une url du type monServeur.dyndns.org, c'est très bien. Par contre, il est impératif de rajouter des règles dans le routeur pour rediriger certains ports vers le serveur lui-même.
typiquement : port 80 et port 22 sont à rediriger vers l'adresse 192.168.1.20, afin de laisser passer le trafic web (80) et le trafic ssh (22). Les ports 20 et 21 pourront être réglés également pour authoriser les connexions FTP, etc... Chaque application se connectant à internet peut utiliser des ports spécifiques qu'il faudra ouvrir en direction du serveur pour permettre le passage de données.
Une dernière chose concernant SSH et les dyndns. Il semblerai que l'accès ne puisse se faire que depuis l'extérieur. Si je navigue vers http://monserveur.dyndns.org depuis mon réseau local, ça ne fonctionnera malheureusement pas. Il doit surement y avoir une configuration à appliquer pour se faire passer pour l'hôte monserveur.dyndns.org en local, mais je ne l'ai pas encore trouvée (virtualHost, etc...).