Serveur OpenSSH
Introduction
Un serveur SSH sert principalement à prendre le contrôle de la machine sur lequel il est installé depuis un autre poste,le client. Évidemment c'est une définition très réductrice des possibilités offertes par un serveur SSH, je laisse le loisir au lecteur de se documenter à droite, à gauche et ailleurs.
L'implémentation libre de référence du protocle SSH est OpenSSH et c'est donc celui-ci que nous allons utiliser.
Installation
Debian & dérivées
$ sudo aptitude install openssh-server
Cette commande permet d'installer le serveur sshd ainsi que le paquet openssh-blacklist qui est une dépendance requise.
Votre serveur SSH est opérationnel !
Il ne nous reste plus qu'à affiner sa configuration.
Configuration
La configuration du serveur se passe dans le fichier /etc/ssh/sshd_config.
- port 2222
Si la machine qui sert de serveur SSH est accessible par ce biais depuis l'Internet ce peut être une bonne idée de changer le port afin de limiter les connections non désirées.
- Protocol 2
On décide de n'utiliser que la version 2 du protocole ssh.
- LoginGraceTime 60
Par défaut le serveur “drop” les connections si l'utilisateur n'entre pas son mot de passe au bout de 2 minutes. On réduit ce temps à 1 minute. Attention passer cette valeur à zéro désigne un temps infini!
- PermitRootLogin no
On supprime la possibilité de se logger directement avec le compte root.
- StrictModes yes
Cette option indique au serveur SSH de vérifier que l'utilisateur ai bien un compte actif sur cette machine (shell valide, un répertoire $HOME dont il est le propriétaire, un dossier ~/.ssh en 700, etc.) avant de lui autoriser la connection.
- MaxAuthTries 3
le serveur va autoriser 3 tentatives d'identification avant de “dropper” la connection.
- MaxSessions 5
un seul utilisateur ne pourra ouvrir “que” 5 sessions par connection (si il vous en faut plus d'une regardez déjà du coté de screen ou de tmux ;)
- AllowUsers pierre,paul,jack
seuls les utilisateurs pierre, paul et jack pourrons ouvrir une session sur ce serveur
cette option peut être remplacée par **AllowGroups mon_groupe_ssh**, il faudra alors faire parti du groupe "mon_groupe_ssh" pour ouvrir une session.
- PermitEmptyPasswords no
pas de mot de passe , pas de session!
- X11Forwarding no
si il n'y à pas de raison de faire du tunneling X11 alors cette option peut être passée à “no”
- UsePrivilegeSeparation yes
Cette option permet de contraindre le démon sshd à créer un processus non privilégié pour la phase d'identification puis ensuite un processus qui bénéficie des privilèges liés à l'identification.
- RSAAuthentication yes
- PubkeyAuthentication yes
- AuthorizedKeysFile %h/.ssh/authorized_keys
- PasswordAuthentication no
- UsePAM no
en lieu et place d'identification par mot de passe (cependant transmit dans un tunnel chiffré) nous allons utiliser le système d'identification par clés publique/privée basée sur l'algorithme de cryptographie asymétrique RSA. le fichier qui renferme la liste des clés publiques autorisant une connection est stockée dans ~/.ssh/authorized_keys. l'identification par mot de passe est désactivée.
N.B.: Fail2ban et SSHGuard permettent aussi d'accroître la sécurité de ssh (entre autre).
Créer une clé privée
Dans la configuration nous préconisons de ne permettre que des connexions par échange de clés. Cela se nomme authentifier, car en plus de m'identifier je vais présenter un certificat attestant mon identité.
Clé privée RSA
Dans une invite de commande (Shell) saisir sous son identité la commande:
$ ssh-keygen -t rsa -b 1024 -C "monlogin@serveur"
Generating public/private rsa key pair. Enter file in which to save the key (/home/users/monlogin/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/users/monlogin/.ssh/id_rsa. Your public key has been saved in /home/users/monlogin/.ssh/id_rsa.pub. The key fingerprint is: 96:9a:63:e8:08:08:7f:69:ee:b0:b4:74:57:20:c4:83 monlogin@serveur The key's randomart image is: +--[ RSA 1024]----+ | o. | | E.o | | ... | | . . . | |. S | |o. o = | |o = %%*%% %%*%% | | + @ o . | | +.+ | +-----------------+ $
Cette commande a pour effet de créer 2 fichier dans le répertoire ~/.ssh de votre $HOME: ~/.ssh/id_rsa ~/.ssh/id_rsa.pub