Sécurisation simple en utilisant un tunnel ssh


Dans cette documentation nous allons vous montrer comment sécuriser simplement et efficacement une connexion à un serveur de bases de données PostgreSQL qui n'écoute que le réseau local ou même uniquement sur son adresse de loopback.

 Table des matières

Prérequis
Démarrage du serveur PostgreSQL
Création du tunnel ssh

Prérequis

Pour être à même d'utiliser ce manuel, il vous faudra un serveur PostgreSQL installé sur une machine ayant aussi un serveur OpenSSH, ce qui est le cas sur des systèmes GNU/Linux, pour les utilisateurs de plateformes win32 vous pouvez vous reportez à cette documentation afin d'installer et de configurer votre serveur OpenSSH sur votre serveur Windows™.
Il vous faudra de plus un client OpenSSH disponible par défaut sur les plateformes GNU/Linux et Unix. La documentation mentionnée précédament peut aussi être utilisée afin d'installer le client OpenSSH (il est contenu dans la distribution OpenSSH utilisée pour installer le serveur SSH).

haut de la page | table des matières

Démarrage du serveur PostgreSQL

Nous expliqons ici comment lancer le serveur PostgreSQL qui n'écoute que sur l'adresse local de la machine (cad l'adresse de loopback : 127.0.0.1) :

# pg_ctl start

Nous supposons ici que vous avez affecté une valeur à la variable d'environnement PGDATA spécifiant où se trouve le répertoire d'installation de votre système de gestion de bases de données PostgreSQL (se qui fait simplement en utilisant la commandes suivantes : export PGDATA="/var/lib/postgres/data" pour les système Unix et GNU/Linux ou set PGDATA=\PostgreSQL\8.2\data dans une invite de commande cmd sur plateforme win32).

Nous allons maintenant vérifier que le serveur écoute belle et bien uniquement sur l'adresse de loopback et sur le socket de domaine unix (qui nous garanti lui aussi qu'aucune connexion n'est possible de l'extérieur). Pour ce faire nous allons simplement utiliser la commande netstat existante aussi bien sur les systèmes Unix et GNU/Linux que sur plateformes win32 de la manière suivante :

# netsta -na | grep 5432
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN
unix 2 [ ACC ] STREAM LISTENING 16088006 /tmp/.s.PGSQL.5432

Nous sommes donc sûr que notre serveur PostgreSQL n'écoute que sur le socket de domaine Unix et sur l'adresse de loopback. Si vous avez quelque chose comme 0.0.0.0:5432 c'est sans doute que vous avez lancé le serveur PostgreSQL avec l'option -i qui stipule que le serveur doit écouter sur l'ensemble des adresses réseau disponible. Cela revient à affecter la valeur * au paramètre de configuration listen_addresses, comme cela est mentionné dans la page de manuel de postmaster.

haut de la page | table des matières

Création du tunnel ssh

Maintenant que nous avons lancé le serveur PostgreSQL est que nous nous sommes assuré que ce dernier n'écouté que sur l'adresse local de la machine, il nous semle alors dificile d'accéder à distance au serveur de bases de données. Pourtant nous allons vous montrer combien il est simple d'y accéder si on a un compte utilisateur sur la machine utilisée comme serveur de bases de données.
Si vous vous connectez à la machine utilisée comme serveur de bases de données, vous pourrez toujours utiliser les outils en lignes de commande pour interragir avec vos données, c'est souvent bien suffisant. Néanmoins, la plupart des utilisateurs préfèrent utiliser des outils graphique pour interragir avec leurs données, c'est pourquoi nous allons vous montrer ici comment utiliser un tunnel ssh afin de vous connecter à distance avec des outils graphiques comme par exemple pgAdmin.
La première chose à faire est de créer un tunnel ssh entre votre machine (celle à partir de laquelle vous voulez vous connecter au serveur PostgreSQL) et la machine utilisée comme serveur PostgreSQL. Ce n'est pas très compliqué et cela peut être trouvé facilement dans la page de manuel de OpenSSH.
# ssh -L 5432:127.0.0.1:5432 utilisateur@serveur
Dans la commande ci-dessus, vous devez remplacer utilisateur par le nom de votre compte Unix et serveur par le nom ou l'adresse ip du serveur PostgreSQL. Vous pouvez de plus utiliser le premier numéro dee port que vous souhaitez, il suffira d'utliser le même pour les paramètres de connexion mentionnés ci-dessous.
Notez de plus que si vous utilisez la commande netstat -na vu précédament sur votre propre machine, une fois le tunnel ssh ouvert vous avez effectivement ouvert le port 5432 sur votre adresse local, ce qui vous permet donc d'être sur de pouvoir vous conecter de façon sécurisée à votre serveur de bases de donées PostgreSQL.
Au moment ou vous aurez lancé cette commande, et temps que cette connexion reste ouverte, vous serez alors capable de vous connecter au serveur distant en utilisant les paramètres de configuration suivant :

Nous ne mentionnons pas ici les autre paramètres car ils sont identique aux paramètres de connexion que vous utilisez pour vous connecter localement au serveur PostgreSQL.

haut de la page | table des matières