Configurer et sécuriser un serveur OpenSSH

OpenSSH est un serveur SSH open source utilisé pour se connecter à distance et de manière sécurisée à une machine.

Objectif : configurer un serveur OpenSSH afin, entre autres, d'en augmenter la sécurité

Logiciel utilisé : OpenSSH 5.3P1

Système d'exploitation : Debian 5.0, Linux 2.6.26


Après avoir installé un serveur OpenSSH sur une machine (voir l'article http://blog.moncoindunet.fr/?p=57) nous allons maintenant nous intéresser à sa configuation.

Le fichier de configuration d'OpenSSH se nomme sshd_config et se trouve dans /usr/local/openssh/etc. Si OpenSSH a été installé à partir des packages de distribution, généralement le fichier de configuration se trouve dans /etc.

Par défaut, la plupart des lignes sont commentées, sauf deux. Ce qui ne signifie pas que rien n'est activé, car un certain nombre de ces options ont une valeur par défaut qui est prise en compte par OpenSSH dans le cas où l'option n'est pas activée dans le fichier de configuration.

Port et adresse d'écoute

Par défaut, le serveur OpenSSH écoute sur le port 22, sur toutes les interfaces réseaux et dans deux version d'IP (v4 et v6). Il y a donc moyen de réduire ce champ d'écoute :

Port 20022
AddressFamily inet
ListenAddress 10.234.56.78

La directive Port indique le port d'écoute. Si le serveur est ouvert sur Internet, je vous conseille de modifier ce port par un port > 1024 (par exemple 20022). Ainsi, vous serez moins sujet aux attaques aléatoires de masse, puisqu'il faudra d'abord connaître votre port avant d'attaquer le serveur OpenSSH (ça peut se faire via nmap, mais dans ce cas on est dans une attaque ciblée, et plus une attaque aléatoire de masse).

La directive AddressFamiliy indique la version d'IP à utiliser. Sauf si vous utilisez explicitement l'IP v6, je vous conseille de positionner cette directive à inet (IPv4).

La directive ListenAddress indique l'interface sur laquelle va écouter le serveur OpenSSH. Si le serveur a une IP fixe, vous pouvez la positionner ici. Ainsi, il n'écoutera pas sur toutes les interfaces.

Protocole

Il existe deux version du protocole sshd : v1 et v2. La version 1 est très déconseillée car elle comporte un certain nombre de failles de sécurité. C'est par ailleurs une version obsolète du protocole. La version 2 est donc la seule à activer :

Protocol 2

Log

La consultation régulière des fichiers de logs fait partie intégrante de la sécurité d'un serveur.

SyslogFacility AUTH
LogLevel INFO

Les valeurs par défaut conviennent pour une utilisation normale.

La directive SyslogFacility indique la facilité, une notion utilisée par syslog pour déterminer comment traiter le message. Si la configuration par défaut de syslog n'a pas été modifiée, les messages se retrouveront dans /var/log/auth.log

La directive LogLevel indique le niveau de log souhaité, de DEBUG3 (plus fort) à QUIET (plus faible).

Authentification

Il y a deux types d'options pour l'authentification : les options de gestion et les modes d'authentification autorisés.

LoginGraceTime 600
PermitRootLogin no

La directive la plus importante est PermitRootLogin. Dans un souci de sécurité, cette option doit être positionnée à no. L'utilisateur root étant par défaut sur les machines, il est une cible facile : l'attaquant possède le login, il n'y a plus qu'à trouver le mot de passe. Par ailleurs, si le compte root est piraté, l'attaquant aura tous les droits sur la machine. Il vaut donc mieux s'authentifier avec un utilisateur sans privilège particulier, quitte à passer root une fois connecté, si besoin bien sur.

La directive LoginGraceTime indique le temps, en seconde, après lequel une session sera déconnectée si l'utilisateur ne s'est toujours pas authentifié.

OpenSSH offre différents types d'authentification, notamment par machine, mot de passe et clés. L'authentification par machine (host) est évidemment à proscrire, pour des raisons évidentes de sécurité (aucun contrôle utilisateur). L'authentification par clé à l'avantage d'être plus robuste que par mot de passe, mais à également l'inconvénient de devoir se promener avec sa clé partout où l'on voudrait accéder à la machine. Le choix de l'authentification entre clé et mot de passe se fait donc selon les usages.

RSAAuthentication yes
PubkeyAuthentication yes
RhostsRSAAuthentication no
HostbasedAuthentication no
IgnoreRhosts yes
PasswordAuthentication yes
PermitEmptyPasswords no
ChallengeResponseAuthentication yes

Ici on désactive tout ce qui touche à l'authentification par machine et on active les authentifications par mot de passe et par clé. L'idéal étant d'en désactiver une des deux. En effet il vaut mieux ne conserver qu'une seule méthode d'authentification : inutile d'activer une méthode qui n'est pas utilisée par vous, mais qui pourrait l'être par

Pour l'authentification par mot de passe il faut penser à la directive PermitEmptyPasswords qui évite d'autoriser les connexions avec des mots de passe vide.

Bannière

La bannière est le message affiché lors d'une connexion au serveur OpenSSH. Elle permets d'afficher des informations, notamment qu'il est interdit de se connecter à votre machine sans autorisation préalable. Ca tombe sous le sens pour vous, mais ça évite que quelqu'un vous dise "Ah bah je savais pas que je pouvais pas me connecter sur votre serveur !!!". Il ne faut mettre aucune information concernant la machine (nom, adresse IP, système d'exploitation, etc.).

Banner /usr/local/openssh/etc/banner

Utilisateurs et groupes autorisés

Il est possible de restreindre la connexion au serveur OpenSSH uniquement à certains utilisateurs ou groupes. Je vous conseille vivement d'utiliser ces directives, qui permettent un contrôle plus accru sur qui peut se connecter, ou pas.

AllowUsers moi
AllowGroups users


Posted

in

by

Comments

One response to “Configurer et sécuriser un serveur OpenSSH”

  1. […] avoir configuré OpenSSH sur notre machine (voir l'article http://blog.moncoindunet.fr/linux/openssh-linux/configurer-et-securiser-un-serveur-openssh/) nous voulons maintenant se connecter à ce serveur en utilisant une paire de clés […]

Leave a Reply

Your email address will not be published. Required fields are marked *