SSH

Ce billet vous explique comment configurer openssh-server de votre SeedBox pour permettre d'y accéder à distance de manière beaucoup plus sécurisée.

Introduction

Pour maintenir votre Seedbox, il faut pouvoir se connecter dessus et accéder aux informations de son système afin de le maintenir et de vérifier son bon fonctionnement. La solution la plus adéquate est d'utiliser SSH qui veut dire 'Secured Shell'. Pour celà il vous faut un client. Si vous êtes sur un système Linux ou un Mac, les deux systèmes disposent nativement d'un terminal sous la forme d'une application et qui permet d'exécuter la commande ssh pour se connecter à un serveur SSH. Sur un PC, vous pouvez installer le client SSH de Windows qui est conçue pour se connecter en SSH à un serveur. Sur un Mac il y a l'application Termius dont les fonctionnalités de base ne sont pas payantes.

Installation et contrôle du bon fonctionnement du serveur.

Lorsque vous disposer d'un client SSH il faut qu'il y ait un serveur sur votre SeedBox qui permet de communiquer avec votre client. Pour celà il y a openssh-server que vous pouvez installer avec la commande...

sudo apt install openssh-server

Le contrôle d'exécution du serveur SSH se fait avec la commande systemctl. On peut demander par exemple le status du service avec la commande...

sudo systemctl status sshd.service

qui affichera l'état du service...

● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; preset: enabled)
     Active: active (running) since Mon 2024-01-22 15:20:28 CET; 1min 32s ago
       Docs: man:sshd(8)
             man:sshd_config(5)
    Process: 590 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
   Main PID: 598 (sshd)
      Tasks: 1 (limit: 4635)
     Memory: 8.4M
        CPU: 47ms
     CGroup: /system.slice/ssh.service
             └─598 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"

Jan 22 15:20:28 tool systemd[1]: Starting ssh.service - OpenBSD Secure Shell server...
Jan 22 15:20:28 tool sshd[598]: Server listening on 0.0.0.0 port 22.
Jan 22 15:20:28 tool sshd[598]: Server listening on :: port 22.
Jan 22 15:20:28 tool systemd[1]: Started ssh.service - OpenBSD Secure Shell server.
Jan 22 15:20:44 tool sshd[611]: pam_env(sshd:session): deprecated reading of user environment enabled

Si le service est en cours d'exécution on peut aussi vérifier les ports de communication utilisés avec la commande...

sudo netstat -tunlp

qui affichera...

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      661/sshd: /usr/sbin 
tcp6       0      0 :::22                   :::*                    LISTEN      661/sshd: /usr/sbin 
tcp6       0      0 :::21                   :::*                    LISTEN      1664/vsftpd         
udp        0      0 0.0.0.0:68              0.0.0.0:*                           562/dhclient

Vous devriez constater que le service sshd écoute sur le port 22.

Interdire la lecture des variables d'environnement de l'utilisateur connecté.

Dans l'affiche du status d'exécution du service sshd, il est possible que le message suivant s'affiche...

...
Jan 22 15:20:44 tool sshd[611]: pam_env(sshd:session): deprecated reading of user environment enabled
...

La lecture des variables de l'utilisateur est considérée comme très peu sécurisée de par sa conception car un processus hautement privilégié lit les fichiers contrôlés par des utilisateurs non privilégiés avec un analyseur assez complexe et non renforcé ou particulièrement bien écrit. Cela n'a d'impact que sur l'élévation des privilèges des utilisateurs qui se connectent, mais il s'agit toujours d'un problème de sécurité inutile qui doit être évité.

Pour supprimer ce message, il suffit de désactiver l'option dans le fichier PAM (Pluggable Authentication Modules) du service sshd. PAM est le système sous GNU/Linux qui permet à de nombreuses applications ou services d’authentifier les utilisateurs de manière centralisée.

Pour désactiver la fonctionnalité, il faut éditer le fichier PAM du service sshd avec la commande...

sudo nano /etc/pam.d/sshd

Il faut ensuite retrouver le paramètre user_readenv et lui associer la valeur 0, comme dans l'exemple ci-dessous.

...
session    required     pam_env.so user_readenv=0 envfile=/etc/default/locale
...

Une fois la modification faite, il faut ensuite redémarrer le service et le tour est joué.

Changement du port d'écoute.

Si le service est en cours d'exécution on peut aussi vérifier les ports d'écoute qu'il utilise avec la commande...

sudo netstat -tunlp

qui affichera...

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      661/sshd: /usr/sbin 
tcp6       0      0 :::22                   :::*                    LISTEN      661/sshd: /usr/sbin 
udp        0      0 0.0.0.0:68              0.0.0.0:*                           562/dhclient

Vous devriez constater que le service sshd écoute sur le port 22.

Un nombre importants de port de communication sont réservés par défaut afin que les applications qui sont en cours d'éxécution puisse recevoir les commandes qu'on leur demande d'exécuter sur leur port dédié par défaut. Par exemple, pour SSH c'est le 22, pour FTP c'est le 21, etc...

Vous pouvez consulter le page des ports utilisés par défaut ici. Mais les port entre 10000 et 20000 ne sont pas réservés et peuvent donc être utilisés.

Tous les pirates connaissent ssh et savent que le port d'écoute par défaut est 22. Une première protection consiste à changer ce port d'écoute.

Pour modifier le port par défaut il faut éditer son fichier de configuration avec la commande...

sudo nano /etc/ssh/sshd_config

Puis retrouver ou créer le paramètre Port de définition du port d'écoute et lui donner la valeur que vous souhaitez, par exemple...

...
Port 12345
...

Une fois la modification faite, il faut redémarrer le service et le tour est joué.

Vous pouvez alors contrôler que votre modification a bien été prise en compte en réaffichant les ports d'écoute des service avec la commande...

sudo netstat -tunlp

qui affichera...

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:12345           0.0.0.0:*               LISTEN      661/sshd: /usr/sbin 
tcp6       0      0 :::12345                :::*                    LISTEN      661/sshd: /usr/sbin 
udp        0      0 0.0.0.0:68              0.0.0.0:*                           562/dhclient

Pour vous connecter à votre serveur ssh il faudra maintenant préciser le port de communication utilisé comme dans l'exemple suivant...

ssh me@tools.local -p 12345

Suppression du port d'écoute pour les adresses IP V6.

Si le service est en cours d'exécution on peut aussi vérifier les ports d'écoute qu'il utilise avec la commande...

sudo netstat -tunlp

qui affichera...

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:12345           0.0.0.0:*               LISTEN      661/sshd: /usr/sbin 
tcp6       0      0 :::12345                :::*                    LISTEN      661/sshd: /usr/sbin 
udp        0      0 0.0.0.0:68              0.0.0.0:*                           562/dhclient

La colonne Protoindique les protocoles qu'utilisent le service. tcp indique qu'il s'agit du protocole TCP/IP V4 et tcp6du protocole TCP/IP V6. Bien souvent l'utilisation du prootcole TCP/IP V4 est suffisant. Pour supprimer l'écoute sur des adresses TCP/IP V6, il faut éditer le fichier de configuration du service avec la commande...

sudo nano /etc/ssh/sshd_config

Puis décommenter le paramètre ListenAddress 0.0.0.0

...
ListenAddress 0.0.0.0
...

Une fois la modification faite, il faut redémarrer le service et le tour est joué.

Vous pouvez alors contrôler que votre modification a bien été prise en compte en réaffichant les ports d'écoute des service avec la commande...

sudo netstat -tunlp

qui affichera...

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:12345           0.0.0.0:*               LISTEN      661/sshd: /usr/sbin 
udp        0      0 0.0.0.0:68              0.0.0.0:*                           562/dhclient

Utilisation d'une clé de cryptage pour se connecter.

Pour se connecter avec ssh, vous devez fournir par défaut un compte utilsiateur et un mot de passe. On peut remplacer l'en voi de son mot de passe par l'utilisation d'une clé de cryptage publique mais personnelle qui est une solution beaucoup plus sécurisée. Le cryptage par clé publique utilise un processus non réversible d'encryption qui nécessite une clé privée pour le décryptage. La clé de cryptage réside sur le poste que l'on utilise pour se connecter et n'est jamais transmise.

Il faut tout d'abord générer une clé de cryptage sur le poste que l'on utilise pour se connecter en utilisant le terminal et la commande...

Previous Post Next Post