OpenSSH

Secure SHell est un protocole qui permet de contrôler un ordinateur à distance de façon sécurisée (ou plus généralement, de communiquer avec lui). L'outil qui utilise ce protocole se nomme OpenSSH.

Mise en place

OpenSSH se compose de deux parties ; un serveur et un client. Le serveur doit être installé sur la machine à contrôler alors que le client devra être installé sur la machine qui prend le contrôle.

Dans mon cas, le serveur SSH (paquet openssh-server) a été installé sur le T500 en même temps que l'installation de Debian au chapitre précédent. Sur le C50-A, le client SSH est déjà installé par défaut. Pour vérifier sa présence, il faut aller dans le Gestionnaire de paquets puis chercher openssh-client.

sudo apt install ssh installe à la fois le client et le serveur sur la même machine.

Sur le serveur (T500)

Avant de continuer plus loin, je veux m'assurer que SSH fonctionnera bien. Je commence par désactiver le pare-feu du T500 car pour l'instant je ne lui ai donné aucune règle autorisant la connexion à distance (il bloque le trafic entrant, donc en l'état, il sera impossible d'utiliser SSH).

sudo ufw disable

Ensuite, il faut découvrir quelle adresse IP a été assignée au T500.

hostname -I (tiret i majuscule) me donne comme résultat l'adresse IP 192.168.1.3.

On peut aussi utiliser la commande nmap depuis n’importe quel ordinateur du réseau local, ce qui donne la liste des machines connectées : sudo nmap -sn 192.168.1.0/24.

Sur le poste client (C50-A)

Il suffit d'invoquer la commande ssh puis le nom d'utilisateur et l'adresse de la machine distante, un peu comme si on voulait envoyer un courriel.

ssh toto@192.168.1.3

Après avoir renseigné le mot de passe du compte toto, j'ai accès au T500 comme si j'étais physiquement devant lui : toto@projetx ~ $

Donner une adresse IP fixe au T500

Lorsqu'une nouvelle machine est reliée au réseau local, le routeur lui assigne automatiquement une adresse IP à l'aide de DHCP.

Hors, cette adresse IP est susceptible de changer automatiquement à la moindre occasion (c'est le D du protocole DHCP, pour Dynamique). Cela pose problème pour un ordinateur fonctionnant en tant que serveur car advenant un changement d'adresse, la commande ssh toto@192.168.1.3 ne sera plus en mesure d'effectuer la connexion. D'autres paramètres, que l'on verra par la suite, seront eux aussi rendus caducs. Il faudra alors utiliser à nouveau nmap ou hostname afin de voir quelle nouvelle adresse a été attribuée au serveur afin de pouvoir réécrire les diverses configurations.

Pour avoir l'esprit en paix, je vais donc donner une adresse IP fixe au T500.

  1. Éditer le fichier interfaces : sudo nano /etc/network/interfaces.
  2. À la ligne iface eth0 inet dhcp remplacer dhcp par static.
  3. En dessous, écrire les lignes suivantes :
    	#mon IP static	
    	address 192.168.1.30
    	#adresse du routeur
    	gateway 192.168.1.1
    	netmask 255.255.255.0
    	#adresse du reseau
    	network 192.168.1.0
    	broadcast 192.168.1.255

J'ai choisi de donner l'adresse statique 192.168.1.30. Le dernier chiffre (30) est un exemple et peut-être remplacé par n’importe quel autre de 1 à 254 à condition qu'il ne soit pas déjà attribué à une machine (par exemple 1 est souvent attribué au modem/routeur (voir commande nmap pour la liste des IP locales déjà attribuées).

L'adresse de mon réseau est ici 192.168.1 mais ce n'est pas toujours le cas (ex. 192.168.0).

Le fichier interfaces modifié, il faut redémarrer l’interface réseau :

/etc/init.d/networking restart ou /etc/init.d/networking reload ou si rien ne fonctionne, redémarrer l’ordinateur.

ATTENTION ! La même opération est à réaliser sur le C50-A (voir SSH et UFW un peu plus bas).

Sécuriser le serveur SSH

Par défaut, le serveur SSH écoute sur toutes les adresses. On va donc faire en sorte qu'il écoute seulement sur son adresse IP (point 2 ci-bas).

Aussi, tout le monde a le droit d'accéder au serveur SSH. Pour s'en convaincre, il suffit d'initier une connexion depuis n'importe quel ordinateur. Je vais donc changer cela et faire en sorte que seul l'utilisateur toto du C50-A puisse se connecter au T500 (point 4 ci-dessous).

  1. Éditer le fichier de configuration : sudo nano /etc/ssh/sshd_config.
  2. Au début du fichier, changer #ListenAddress 0.0.0.0 par ListenAddress 192.168.1.30.
  3. Sous #Authentication, à la ligne PermitRootLogin remplacer prohibit-password par no.
  4. Écrire la ligne suivante : AllowUsers toto@192.168.1.5
  5. Enregistrer et sortir : Ctrl x puis o et Enter.
  6. Redemarrer SSH : sudo service ssh restart.
ATTENTION !

Ici seul toto pourra se connecter au T500 et cela uniquement à partir du C50-A. L'accès sera refusé à toutes autres combinaisons utilisateur/machine (toto depuis un autre ordinateur, userxyz depuis le C50-A, etc.).

Si on souhaite des permissions plus étendues

Pour permettre au serveur SSH d'écouter sur d'autres adresses (2.), ajouter les IP sur une nouvelle ligne ListenAddress.

Pour ajouter un utilisateur autorisé (4.), le placer sur la même ligne que toto@192.168.1.5 avec un espace entre les deux.

Pour faire en sorte que toto soit autorisé à se connecter depuis tous les ordinateurs, simplement ajouter toto sans l'adresse IP.

Durcir la sécurité

Changer le port par défaut (22). Cela implique de modifier la règle du pare-feu ainsi que le fichier config du ou des clients (voir paragraphe suivant).

Refuser la demande de connexion par mot de passe et mettre en place un système avec clés public/privée. Cette méthode est à privilégier si la liaison s'effectue depuis Internet.

Simplifier le procédé de connexion

Plutôt que de devoir écrire l'adresse IP du T500 à chaque fois que l'on veut se connecter, on va la remplacer par quelque chose de plus lisible.

  1. Sur la machine cliente C50-A, créer un fichier nommé config dans le dossier caché /home/$USER/.shh
  2. Dans ce fichier, écrire les paramètres suivants :
    	Host t500  
    	HostName 192.168.1.30  
    	Port 22  
    	User toto
    
  3. Enregistrer et fermer.

Dorénavant, la connexion pourra être lancée simplement avec la commande ssh toto@t500.

SSH et UFW

Pour voir le pare-feu en action, il suffit de le relancer sudo ufw enable et tenter une connexion à distance depuis le C50-A.

ssh toto@t500 donne pour résulat : ssh: connect to host 192.168.1.30 port 22: Connection timed out.

Le pare-feu du T500 refuse la connexion puisque la règle par defaut est deny (all).

On va donc autoriser C50-A - uniquement lui - à se connecter au serveur T500 en autorisant le trafic TCP entrant (incoming) sur le port 22.

sudo ufw allow from 192.168.1.5 to any port 22 proto tcp.

L'autre protocole est le UDP, mais il est surtout utilisé pour les transmissions qui nécessitent un flux de données rapides (jeux vidéos, messagerie vidéo, etc). Il ne m'a pas semblé opportun de l'autoriser dans le cadre de ce projet.

Attention, si le routeur doit redémarrer pour une raison ou une autre (maintenance, coupure d'électricité), il y a grand risque qu'une autre adresse IP dynamique soit assignée au C50-A. Cela empêcherait la connexion distante. Comme sur le T500, il faut donc assigner une IP fixe au C50-A. J'ai donné l'adresse 192.168.1.5.

Je pourrais aussi autoriser les connexions SSH depuis tout le réseau local (192.168.1.0/24), ce qui éviterait de donner une adresse fixe au C50-A.

Voilà ! La fondation est posée, les murs sont montés. Reste plus qu'à entrer les meubles !


Installation de DebianInstallation de Apache2