cClaude.rocks ☕ Le blog

[Nouvelles technologies du libre, sciences et coups de gueule…]

Menu

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

ᦿ


ℹ 2006 - 2024 | 🏠 Accueil du domaine | 🏡 Accueil du blog