Connexion machine distante PostgreSql

De EjnTricks

Pour une installation de PostgreSql sur un serveur Ubuntu, les connexions autre que depuis la machine ne sont pas autorisées par défaut. Le message d'erreur suivant est affiché.

Connection Refused: connect


Cet article présente les configurations mises en place dans les paquets Ubuntu, ainsi que comment accéder à la base depuis une machine distante.


Hand-icon.png Votre avis

Nobody voted on this yet

 You need to enable JavaScript to vote


Study icon.png Etude

Afin d'authoriser les connexions distantes, il est nécessaire de modifier l'adresse d'écoute, fichier postgresql.conf, et de configurer les droits d'accès, fichier pg_hba.conf

Dans le cadre de cet article, la version 10 est installée avec les paquets Ubuntu. Les fichiers impactés se trouve aux emplacements /etc/postgresql/10/main/postgresql.conf et /etc/postgresql/10/main/pg_hba.conf.


Icon-Configuration-Settings.png Configuration

Dans un premier temps, il faut modifier l'adresse d'écoute, à l'aide du paramètre listen_addresses dans le fichier postgresql.conf.

La valeur par défaut est positionnée à localhost, n'authorisant les connexions que depuis la machine, car l'addresse écoutée est 127.0.0.1. afin d'ouvrir sur toutes les interfaces disponibles, il suffit de remplacer la valeur par *.

#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

#listen_addresses = 'localhost'         # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost'; use '*' for all
                                        # (change requires restart)
listen_addresses = '*'
port = 5432                             # (change requires restart)

Cependant, modifier directement le fichier peut être problématique lors de montée de version de l'instance. En utilisant les packets Ubuntu, il pourra être demandé d'investiguer de possibles différences entre le fichier modifié et celui venant du paquet.

Or, il se trouve que le fichier de configuration contient le paramètre include_dir pour spécifier un répertoire où des fichiers de configurations peuvent être placés.

#------------------------------------------------------------------------------
# CONFIG FILE INCLUDES
#------------------------------------------------------------------------------

# These options allow settings to be loaded from files other than the
# default postgresql.conf.

include_dir = 'conf.d'                  # include files ending in '.conf' from
                                        # directory 'conf.d'
#include_if_exists = 'exists.conf'      # include file only if it exists
#include = 'special.conf'               # include file

Il est donc possible de ne pas modifier le fichier installée mais d'en créer un nouveau, pourvu que le nom se termine par .conf, et d'y placer les spécificités, qui peuvent surchargées les paramètres mis en place dans le fichier postgresql.conf.

Pour cet article, un fichier remote_access.conf est créé en spécifiant uniqement le paramètre listen_addresses.

#sudo echo "listen_addresses = '*'" > /etc/postgresql/10/main/conf.d/remote_access.conf
#sudo chown postgres:postgres /etc/postgresql/10/main/conf.d/remote_access.conf

Le contenu du fichier est aussi simple que ceci.

listen_addresses = '*'

Une fois cela mis en place, la connexion aux bases sont possibles depuis n'importe quelle station du réseau, à condition d'avoir un compte utilisateur déclaré dans la base. Cette problématique peut être adressée par la mise en place de configuration Iptables afin de restreindre les accès sur le port d'écoute à un ensemble de machines.


Lock-off-icon.png Droits d'accès

Dans le précédent paragraphe, l'adresse d'écoute a été modifiée. Mais cela n'est pas suffisant pour se connecter depuis une machine externe avec le message suivant.

FATAL: no pg_hba.conf entry for host "<HOST_IP>", user "<USER_LOGIN>", database "<DATABASE>", SSL off

<HOST_IP> contient l'addresse IP de la machine, <USER_LOGIN> le login de connexion à la base et <DATABASE> le nom de la base sur laquelle la connexion est tentée.


Le message d'erreur indique clairement qu'aucune configuration valide n'a été trouvé pour ce contexte dans le fichier pg_hba.conf. Pour cet article, la configuration ajoutée doit permettre les accès distants sur un ensemble du sous réseau, pour toutes les bases et avec tous les autentifiants. Les lignes suivantes sont ajoutées en fin de fichier.

# Remote
host    all             all             192.168.1.0/27          md5

A noter que les addresses IP sont configurés avec un masque CIDR. Pour cet exemple, les IPs configurées sont entre 192.168.1.0 et 198.162.1.31.

Les connexions sont alors possibles depuis les machines externes.


Start-icon.png Activation

Afin que les modifications soient prises en comptes, il est nécessaire de redémarrer l'instance.

#systemctl restart postgresql


Viewer icon.png Voir Aussi

Documentation officielle: https://www.postgresql.org/docs/10/runtime-config-connection.html

https://www.postgresql.org/docs/10/auth-pg-hba-conf.html