Si vous hébergez une base de données Postgres sur un serveur et que vous devez l’exposer pour y accéder depuis une autre machine, voici ce qu’il faut configurer…
Les étapes principales sont :
- Le Pare-feu qui est le bouclier de votre serveur et que vous devrez ouvrir pour ces connexions,
- La modification du fichier
pg_hba.conf
servant à définir les utilisateurs pouvant se connecter à Postgres, - La modification du fichier
postgresql.conf
indiquant à Postgres comment il communique avec les autres applications. - Un petit redémarrage et un contrôle des fichiers de logs.
Sécurisation
Pour une bonne sécurisation de votre base de donnée, il est recommandé de créer un utilisateur dédié pour ces connexions à distance.
s’il s’agit d’une base de test et que son contenu n’est pas sensible, vous pourrez sans doute utiliser un utilisateur existant et sauter cette étape.
Pour créer un nouvel utilisé, depuis le serveur, vous pouvez utiliser :
sudo -i -u postgres psql
Vous être maintenant dans la console SQL de Postgres, et vous pouvez simplement faire :
CREATE USER UTILISATEUR_POSTGRES_DISTANT WITH PASSWORD 'MOT_DE_PASSE';
Vérifiez qu’il a été créé en tapant depuis la console SQL :
\du
Le pare-feu
Si le pare-feu de votre machine est activé, vous devez mettre à jour les paramètres :
sudo ufw status
Autoriser l’accès au port PostgreSQL (généralement 5432) pour les connexions provenant de la machine que vous souhaitez autoriser :
sudo ufw allow from ADRESSE_IP_DU_CLIENT_AUTORISE to any port 5432
Assurez-vous que tout va bien en tapant de nouveau :
sudo ufw status
Dépannage
- Rappelez-vous que l’ordre des règles est important dans votre pare-feu !
Modification des fichiers de configuration de « Postgres »
Assurez-vous de connaître votre version de Postgres avant de continuer :
Pour récupérer la version, utiliser :
psql --version
Dans mon cas :
psql (PostgreSQL) 13.8 (Debian 13.8-0+deb11u1)
Si vous envisager d’automatiser ceci, vous pourrez utiliser pour récupérer le numéro de version principale :
psql --version | sed -E 's,^.*\)[[:blank:]]([0-9]+)\.([0-9]+)[[:blank:]]\(.*$,\1,g'
Dans mon cas :
13
Sur cette base, je peux trouver les fichiers de configuration : /etc/postgresql/13/
.
Adaptez suivant vos besoins…
Modification du fichier pg_hba.conf
Ce fichier permet de définir les utilisateurs pouvant se connecter à Postgres.
sudo nano /etc/postgresql/13/main/pg_hba.conf
Vous devrez ajouter une ligne du type :
host MA_BASE_DE_DONNEE UTILISATEUR_POSTGRES_DISTANT ADRESSE_IP_DU_CLIENT_AUTORISE/32 md5
Voici plus d’explications sur ces paramètres :
host
indique qu’une connexion TCP/IP sera utilisée.MA_BASE_DE_DONNEE
indique la base de données à laquelle l’hôte peut se connecter (plusieurs bases de données peuvent être séparées par des virgules)UTILISATEUR_POSTGRES_DISTANT
est l’utilisateur autorisé à établir la connexion (plusieurs utilisateurs peuvent être séparés par des virgules)ADRESSE_IP_DU_CLIENT_AUTORISE
: peut contenir un nom d’hôte, une plage d’adresses IP ou d’autres mots clés spéciaux. Ici, nous n’avons autorisé qu'une seule adresse IP de notre client.md5
définit la méthode d’authentification, ici on indique qu’un mot de passe à double hachage MD5 sera requis pour l’authentification.
Modification du fichier postgresql.conf
Vous devez définir dans ce fichier l’adresse d’écoute de Postgres ou comment il communique avec les autres applications.
Ici, nous allons définir l’adresse d’écoute :
sudo nano /etc/postgresql/13/main/postgresql.conf
#listen_addresses = 'localhost' # what IP address(es) to listen on;
listen_addresses = 'localhost,ADRESS_IP_DU_SERVEUR_POSTGRES'
Remarques :
ADRESS_IP_DU_SERVEUR_POSTGRES
est l’adresse IP du serveur sur lequel vous exécutez actuellement ce tutoriel. C’est la machine sur laquelle le serveur Postgres est installé.- La ou les valeurs définies doivent être en simple guillemet (aussi appelé apostrophe).
Redémarrer
Pour prendre en compte la configuration, il faut redémarrer votre serveur .
sudo systemctl restart postgresql
Et assurez-vous que cela fonctionne :
sudo systemctl status postgresql
Tester la connexion
Depuis l’ordinateur ayant l'adresse IP ADRESSE_IP_DU_CLIENT_AUTORISE
essayez de vous connecter à Postgres à l’aide de psql :
psql -U UTILISATEUR_POSTGRES_DISTANT -h ADRESS_IP_DU_SERVEUR_POSTGRES -d MA_BASE_DE_DONNEE
Si cela fonctionne, vous devriez voir une invite pour votre mot de passe.
Veuillez le remplir avec MOT_DE_PASSE
.
Dépannage
Vous pouvez consulter les logs à l’aide de :
cat /var/log/postgresql/postgresql-13-main.log
Liens
- Billet inspiré de les de notes de guillim
ᦿ