Archives mensuelles : juin 2010

Pourquoi une connexion SSL est sécuritaire

Introduction

Ici, nous n’irons pas en détails.  Nous expliquerons simplement les grandes lignes d’une communication SSL (Secure Socket Layer), ce qui vous permettera de voir l’objectif du protocol.

Le fonctionnement

1. Le client, par l’intermédiaire d’un navigateur web, demande de naviguer un site sécurisé (en HTTPS ou SSL) tel que https://www.paypal.com/.

2. Le serveur réponds au navigateur par la clé publique d’encryption de paypal.  Cette clé ne sert qu’à encrypter des données et non pas a décrypter des données.  La clé pour décrypter est privée et est gardée de façon sécuritaire sur le serveur de paypal et n’est pas divulguée à aucun tierce partie.

3. Le navigateur génère une clé publique et privée pour le temps de cette communication avec paypal et garde la clé privée sécuritairement sur le poste du client et réponds au serveur de paypal avec sa clé d’encryption publique.

4. Le serveur de paypal envoie les données du site web cryptées avec la clé publique du client.  Personne ne peut décrypter ces données puisque le seul ayant la clé pour le faire est le client.

5. Le client décrypte les données avec sa clé privée que personne ne connaît et les affiche sur le navigateur.

6. Le client remplis un formulaire avec des données sensibles et lorsqu’il le soumet, le navigateur crypte les données avec la clé publique de paypal et les envoies au serveur de paypal de façon sécuritaire puisque seulement le serveur de paypal à la clé privée pour décrypter ces données.

7. Le serveur de paypal décrypte les données et traite la demande en toute sécurité.

Conclusion

Les données circulant sur ce canal de communication ne peuvent pas être décrypter par nul autre que le serveur de paypal et l’ordinateur du client.  La seule possibilité de « hack » est plutôt que quelqu’un réussisse de façon physique ou par une autre brèche de sécurité sur un des deux ordinateurs à accéder aux clés privées pour ainsi pouvoir décrypter ce qui se passe sur le canal de communications.

De cette façon, vous avez techniquement plus de chances d’avoir un accident d’avion ou d’automobile que de vous faire pirater vos données dans un canal de communication SSL.  Par contre, rien ne dit que la compagnie en arrière du site traite vos données avec respect.  Ici, on doit parler d’une relation de confiance du même type que toutes les boutiques où vous magasinez dans la vie réelle.

Configurer SSH de façon sécuritaire

Introduction

Dans cet article, je ferai le tour de la connexion, autant du côté client (PC sous Windows) que du côté serveur (Linux sous CentOS).  Voici les étapes qui seront couvertes :

  1. Comment générer une clé publique et privée avec PuTTY
  2. Comment utiliser les clés générées avec PuTTY
  3. Déposer la clé publique sur le serveur
  4. Tester la clé publique sur le serveur
  5. Configurer le serveur SSH pour que le tout soit un peu plus sécuritaire

Évidemment, avant de débuter, il est préférable de télécharger PuTTY (la version « Installer » car elle contient d’autres logiciels qui nous seront utiles).  Ci ce lien (l’original) ne fonctionne plus, faites une recherche pour PuTTY dans votre moteur de recherche préféré.

1. Comment générer une clé publique et privée avec PuTTY

Une fois PuTTY téléchargé et installé, ouvrez le logiciel PuTTYgen qui sert à la génération de clés.  Par défaut, on vous suggère une clé SSH2-RSA de 1024bits.  Ceci est déjà très bon mais si vous désirez des paramètres différents, je ne couvrirai pas cette partie dans cet article.

PuTTYgen

Cliquez pour agrandir

Ensuite, lancez la génération en cliquant sur « Generate » et en bougeant la souris sur la zone grise pour générer la clé.  Assurez-vous de mettre un identifiant (habituellement votre adresse courriel) dans la partie « Key Comment » pour identifier votre clé.  Ainsi, ce sera plus simple si jamais vous avez plus d’une clé dans le fichier « authorized_keys » qui sera couvert plus loin dans l’article.

Par la suite, entrez un mot de passe dans la section « Key passphrase » et « Confirm passphrase ».  Ceci est une mesure de sécurité supplémentaire empêchant quelqu’un qui trouverais le fichier de votre clé privée de s’en servir façilement.  Il devra avoir la clé ainsi que le mot de passe de la clé pour s’en servir.

Finalement, sauvegardez les deux clés sur votre ordinateur pour utilisation future.  Vous pouvez aussi les mettre sur votre clé USB ou tout autre média portable, ce qui vous permettra de vous en servir un peu partout.  Même si vous avez un mot de passe, essayez tout de même de ne pas perdre la clé.  Si ça vous arrive, générez vous rapidement une autre clé et effacez votre clé publique de tous les endroits où vous l’avez mise.

2. Comment utiliser les clés générées avec PuTTY

Première chose que je fais à ce point, je copie le raccourci de PuTTY Authentication Agent (Pageant) dans mon menu « Démarrage » (startup) de Windows pour qu’il démarre automatiquement à chaque redémarrage.  L’icône apparaîtra dans la barre de tâches près de l’heure.

Pageant

Cliquez pour agrandir

Ensuite, il faut double cliquer sur l’icône de Pageant et cliquer sur le bouton « Add Key ».  Si vous avez plusieurs clés, vous pouvez toutes les sélectionner et les ajouter d’un seul coup.  Si vous avez le même mot de passe pour toutes les clés sélectionnées, le logiciel ne vous le demandera qu’une seule fois.

Notez qu’il s’agit ici de vos clés privées.  Les clés publiques seront utilisées plus loin au cours de l’article.

3. Déposer la clé publique sur le serveur

Par la suite, cliquez avec le bouton de droite sur l’icône de Pageant et sélectionnez « New Session ».  Vous y retrouverez la prochaine boîte de dialogue dans laquelle vous pourrez configurer et sauvegarder les différents serveurs auxquels vous désirez vous connecter.

PuTTY Configuration

Cliquez pour agrandir

Pour la cause de l’article, faites simplement entrer l’adresse IP du serveur auquel vous voulez vous connecter (ou le nom d’hôte de ce serveur).  Il est toujours préférable d’entrer l’adresse IP du serveur au cas où un problème DNS devait survenir.

Vous pouvez maintenant cliquer sur « Open », ce qui ouvrira un terminal vers le serveur en question.  Évidemment, il faut que le service sshd soit démarré et que le port 22 soit ouvert en TCP pour que le tout fonctionne.

Connectez-vous en tant que l’utilisateur désiré et entrez votre mot de passe pour la dernière fois pour cet utilisateur sur ce serveur.  Ensuite, vérifiez si le dossier « .ssh » existe dans le dossier de l’utilisateur en tapant « ls -la ».  S’il n’existe pas, créez le avec « mkdir .ssh ».

Une fois le dossier créé, entrez dedans avec « cd .ssh » et creez un nouveau fichier texte nommé « authorized_keys ».  Insérez votre clé publique générée et affichée dans PuTTYgen en entier (voir image de PuTTYgen au début de l’article).

Pour vous assurer de la sécurité de ce dossier et du fichier en question, vous pouvez appliquer les permissions « 600 » au fichier authorized_keys et les permissions 700 au dossier « .ssh ».  Dans une telle situation, seulement cet utilisateur pourra voir et modifier le tout.

4. Tester la clé publique sur le serveur

Puisque nous avons déjà inséré la clé dans PuTTY à l’étape 2, il ne reste qu’à se connecter.  Je vais donc vous donner un truc pour vous connecter plus rapidement encore.  Cliquez avec le bouton de droite de la souris sur l’icône de Pageant et sélectionnez « New Session ».

Dans la fenêtre de configuration de session, entrez l’adresse IP du serveur dans « Host name (or IP address) ».  Insérez un nom pour reconnaître ce serveur dans la case « Saved Sessions ».  Ensuite, allez dans le menu de gauche dans la section « Connexion – Data » et entrez le nom d’utilisateur voulu dans la case « Auto-login username ».  Ensuite, allez dans la section « Connexion – SSH – Auth » et cochez la case « Allow agent forwarding » qui vous permettera de vous promener d’un serveur à l’autre ayant la même clé sans problèmes. Finalement, retournez dans la section « Session » et cliquez sur « Save », puis cliquez sur « Cancel » ou « X » pour fermer cette fenêtre.

Maintenant, testez le tout en cliquant avec le bouton droit de la souris sur l’icône de Pageant, ensuite allez dans « Saved Sessions » et cliquez sur la session du serveur que nous venons de configurer.  Vous devriez vous connecter sans même entrer d’utilisateur ou de mot de passe!  Quelle joie!

5. Configurer le serveur SSH pour que le tout soit un peu plus sécuritaire

Connectez-vous sur le serveur et allez dans le dossier « /etc/ssh/ » et ouvrez le fichier « sshd_config » dans votre éditeur texte favori.  Assurez vous d’avoir les lignes suivantes :

PermitRootLogin without-password
PubkeyAuthentication yes
PasswordAuthentication no

Avec ces lignes, vous vous assurez que personne ne peut se connecter à distance à cette boîte avec un mot de passe.  Tout les utilisateurs SSH doivent avoir une clé d’installée sur le serveur (il est donc important de ne pas effacer ou corrompre les clés sans quoi vous ne pourrez plus vous connecter à moins de vous déplacer physiquement au serveur).

Redémarrez SSH avec « service sshd restart » pour prendre les modifications en effet et amusez vous!  Et voilà, nous avons déjà établi une bonne sécurité en peu d’efforts et sans même toucher a iptables.  Évidemment, si vous pouvez vous connecter d’un endroit ayant une IP fixe, il est bien de bloquer tous les accès sauf cette IP dans iptables.  Par contre, ceci à pour défaut que si vous êtes à l’extérieur du bureau ou de la maison et que vous désirez accéder au serveur, vous ne pourrez pas puisque cette IP ne sera pas allouée.  Une méthode peut aussi être qu’un seul de vos serveur alloue les connexions de n’importe quelle IP et que les autres serveurs acceptent les connexions de vos bureaux, de votre maison ainsi que de ce serveur en particulier.  Il devient en quelques sortes, le « gateway » ssh.

Conclusion

Il s’agit donc simplement de générer des clés (ou plutôt une paire de clés) et de garder sécuritairement votre clé privée et de distribuer votre clé publique sur tous les serveurs sur lesquels vous désirez vous connecter de façon sécuritaire et empêcher les connexions n’ayant pas de clé approuvée (dans le fichier à cet effet sur le serveur) d’accéder en SSH tout simplement.

Une fois que vous l’avez fait une fois, cette procédure s’applique en a peine 5 minutes sur les serveurs subséquents que vous voudrez configurer.  Une méthode rapide et efficace d’éviter les attaques de type « Brute Force ».