Les instructions dans help.ubuntu.com/community/SSH/OpenSSH/Configuration recommandent de désactiver l'authentification par mot de passe afin qu'"il ne soit possible de se connecter qu'à partir d'ordinateurs que vous avez spécifiquement approuvés". Mais ils ne disent pas comment approuver spécifiquement un ordinateur. Comment dois-je m'y prendre ?
Réponses
Trop de publicités?Sur chaque utilisateur que vous voulez avoir accès au serveur, exécutez dans un terminal :
ssh-keygen
ssh-copy-id <username>@<serverIPorDNSname>
Il vous demandera où le sauvegarder, la valeur par défaut est parfaite. Il vous demandera d'entrer une phrase de passe. Cela permet de crypter la clé au cas où l'ordinateur serait volé ou compromis. Si vous ne voulez pas de phrase de passe, laissez les deux invites de phrase de passe vides.
La première commande crée une clé ssh pour l'utilisateur actuel sur lequel elle est exécutée. La seconde commande se connecte au serveur et ajoute la clé de l'utilisateur actuel à la liste des personnes autorisées à se connecter. Comme ssh-copy-id utilise ssh, vous devrez effectuer cette opération avant de désactiver les connexions par mot de passe.
Les clés SSH sont constituées de deux moitiés correspondantes. Une moitié est connue de tous, l'autre est gardée secrète. À l'aide d'un algorithme mathématique, la moitié publique peut être utilisée pour déchiffrer les données cryptées avec la clé privée. Si les données sont décryptées avec succès avec la clé publique, vous savez sans aucun doute que c'est la moitié privée de la clé qui les a cryptées. Ainsi, lorsque vous vous connectez avec une clé ssh, le client envoie un message (crypté à l'aide de la clé privée) qui dit essentiellement "laissez-moi entrer". Le serveur vérifie en utilisant la clé publique et si celle-ci figure dans la liste des ordinateurs autorisés, la connexion est réussie.
ssh-copy-id consiste (en utilisant ssh) à copier la moitié publique dans la liste des serveurs des clés autorisées à se connecter (cette liste est stockée dans /home/<username>/.ssh/authorized_keys2, ou dans le cas de root dans /root/.ssh/authorized_keys2). Si vous avez déjà désactivé l'authentification par mot de passe, vous pouvez toujours ajouter un ordinateur. Il vous suffit de copier la clé publique (dans /home/nomd'utilisateur/.ssh/id_rsa.pub sur un ordinateur client) sur quelque chose comme une clé USB, puis d'ajouter le contenu de id_rsa.pub à la fin du fichier /home/<nomd'utilisateur>/.ssh/authorized_keys2 sur le serveur. (Vous pouvez le faire en exécutant une commande comme cat /media/USB/stick/path/to/id_rsa.pub >>/home/<username>/.ssh/authorized_keys2
sur le serveur).
Iptables
Si les ordinateurs ont une certaine plage d'adresses IP, vous pouvez utiliser iptables pour contrôler l'accès. Les Iptables font partie du noyau. Vous pouvez les contrôler dans le fichier /etc/iptables
# from /etc/iptables
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
#
# loopback device
#
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
#
# all connections already established (started outgoing from my machine)
#
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#
# but SSH - restricted
#
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 --source 138.232.0.0/255.255.0.0 -j ACCEPT
#
# block all others (without answering - thus nobody is able to scan the network)
#
-A INPUT -p icmp --icmp-type echo-request -j DROP
-A RH-Firewall-1-INPUT -j DROP
COMMIT
La ligne intéressante est celle-ci :
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 --source 111.111.0.0/255.255.0.0 -j ACCEPT
Prot 22 est le port ssh par défaut. S'il est différent sur votre machine, changez-le. 111.111.0.0/255.255.0.0 -j ACCEPT
signifie qu'il accepte toutes les connexions provenant de '111.111.foo.bar' avec 'foo' et 'bar' étant n'importe quels 3 chiffres.