PostgreSQLLa base de données la plus sophistiquée au monde.
Documentation PostgreSQL 17.1 » Administration du serveur » Configuration du serveur et mise en place » Connexions TCP/IP sécurisées avec des tunnels ssh tunnels

18.11. Connexions TCP/IP sécurisées avec des tunnels ssh tunnels #

Il est possible d'utiliser ssh pour chiffrer la connexion réseau entre les clients et un serveur PostgreSQL. Réalisé correctement, ceci fournit une connexion réseau sécurisée, y compris pour les clients non SSL.

Tout d'abord, assurez-vous qu'un serveur ssh est en cours d'exécution sur la même machine que le serveur PostgreSQL et que vous pouvez vous connecter via ssh en tant qu'un utilisateur quelconque. Ensuite, vous pouvez établir un tunnel sécurisé vers le serveur distant. Un tunnel sécurisé écoute sur un port local et envoie tout le trafic vers un port de la machine distante. Le trafic envoyé vers le port distant peut arriver sur son adresse localhost ou vers une autre adresse liée si désirée , il n'apparaît pas comme venant de votre machine locale. Cette commande crée un tunnel sécurisé de la machine cliente vers la machine distante foo.com :

ssh -L 63333:localhost:5432 joe@foo.com

Le premier numéro de l'argument -l, 63333, est le numéro de port local du tunnel ; cela peut être tout port inutilisé. (IANA réserve les ports 49152 à 65535 pour une utilisation privée.) Le nom ou l'adresse IP après ça est l'adresse distante liée à laquelle vous vous connectez, par exemple localhost, ce qui est la valeur par défaut. Le deuxième nombre, 5432, est la fin distante du tunnel, autrement dit le numéro de port du serveur de bases de données. Pour vous connecter au serveur en utilisant ce tunnel, vous vous connectez au port 63333 de la machine locale :

psql -h localhost -p 63333 postgres

Sur le serveur de bases de données, il semblera que vous êtes l'utilisateur joe sur l'hôte foo.com en vous connectant à l'adresse liée localhost dans ce contexte, et il utilisera la procédure d'authentification configurée pour les connexions de cet utilisateur et de cet hôte. Notez que le serveur ne pensera pas que la connexion est chiffrée avec SSL car, en effet, elle n'est pas chiffrée entre le serveur SSH et le serveur PostgreSQL. Cela ne devrait pas poser un risque de sécurité supplémentaire parce que les deux serveurs sont sur la même machine.

Pour réussir la configuration du tunnel, vous devez être autorisé pour vous connecter via ssh sur joe@foo.com, comme si vous aviez tenté d'utiliser ssh pour créer une session de terminal.

Vous pouvez aussi configurer la translation de port de cette façon :

ssh -L 63333:foo.com:5432 joe@foo.com

mais alors le serveur de la base de données verra la connexion venir de son adresse liée foo.com qui n'est pas ouverte par son paramétrage par défaut listen_addresses = 'localhost'. Ceci n'est pas habituellement ce que vous êtes.

Si vous devez vous connecter au serveur de bases de données via un hôte de connexion, une configuration possible serait :

ssh -L 63333:db.foo.com:5432 joe@shell.foo.com

Notez que de cette façon la connexion de shell.foo.com à db.foo.com ne sera pas chiffrée par le tunnel SSH. SSH offre un certain nombre de possibilités de configuration quand le réseau est restreint. Merci de vous référer à la documentation de SSH pour les détails.

Astuce

Plusieurs autres applications existantes peuvent fournir des tunnels sécurisés en utilisant une procédure similaire dans le concept à celle que nous venons de décrire.