Por defecto, una instalación típica de PostgreSQL está configurada para aceptar conexiones únicamente a través de sockets de dominio Unix (en sistemas tipo Linux/Unix) o a través de direcciones locales como 'localhost' (127.0.0.1) en TCP/IP. Esto significa que si intentas conectarte a tu base de datos desde otra computadora en la red, la conexión será rechazada. Para permitir que otros sistemas se conecten a tu servidor PostgreSQL, es necesario configurar el servidor para que escuche en interfaces de red externas y definir quién tiene permiso para conectarse.

Habilitar las conexiones TCP/IP es fundamental para acceder a tu base de datos desde aplicaciones cliente que se ejecutan en máquinas diferentes, para la replicación, o para herramientas de administración remota como pgAdmin o DBeaver. Este proceso implica modificar archivos de configuración clave y asegurar que las reglas de firewall permitan el tráfico entrante al puerto de PostgreSQL (por defecto, 5432).
- Archivos de Configuración Clave
- Configurando postgresql.conf
- Configurando pg_hba.conf
- Configuración del Firewall
- Reiniciar el Servicio PostgreSQL
- Probando la Conexión Remota
- Consideraciones de Seguridad
- Preguntas Frecuentes
- ¿Por qué mi servidor PostgreSQL solo acepta conexiones locales por defecto?
- ¿Cuál es la diferencia entre postgresql.conf y pg_hba.conf?
- ¿Es seguro usar 0.0.0.0/0 en pg_hba.conf?
- ¿Qué puerto usa PostgreSQL por defecto para conexiones TCP?
- ¿Necesito reiniciar PostgreSQL después de modificar los archivos de configuración?
Archivos de Configuración Clave
Para habilitar las conexiones remotas, principalmente necesitas modificar dos archivos de configuración importantes en tu directorio de datos de PostgreSQL:
postgresql.conf: Controla los parámetros generales del servidor, incluyendo en qué direcciones IP debe escuchar el servidor.pg_hba.conf: Controla la autenticación del cliente y la autorización de acceso, definiendo qué hosts, usuarios y bases de datos pueden conectarse y cómo deben autenticarse.
La ubicación exacta de estos archivos puede variar dependiendo del sistema operativo y de cómo se instaló PostgreSQL, pero típicamente se encuentran dentro del directorio de datos de PostgreSQL.
Configurando postgresql.conf
El primer paso es indicarle a PostgreSQL que escuche en direcciones IP distintas a 'localhost'. Esto se hace modificando el parámetro listen_addresses en el archivo postgresql.conf.
Busca la línea que contiene #listen_addresses = 'localhost'. La almohadilla (#) indica que la línea está comentada y el servidor usa el valor por defecto o el anterior configurado.
Para permitir conexiones desde cualquier dirección IP disponible en el servidor, cambia esta línea a:
listen_addresses = '*'Si solo quieres permitir conexiones desde direcciones IP específicas (por ejemplo, una subred interna o una IP de servidor de aplicaciones), puedes especificar esas direcciones separadas por comas. Por ejemplo:
listen_addresses = 'localhost, 192.168.1.100, 10.0.0.5'Usar '*' es lo más común para habilitar el acceso remoto general, pero ten en cuenta que el control de acceso detallado se realiza en pg_hba.conf. Guarda y cierra el archivo después de realizar el cambio.
Nota: En algunas configuraciones o versiones antiguas en sistemas Linux, se podría haber usado una opción -i en el script de inicio del servidor (por ejemplo, en /etc/sysconfig/pgsql/postgresql) para lograr un efecto similar de habilitar la escucha TCP/IP. Sin embargo, el método estándar y preferido es usar listen_addresses en postgresql.conf.
Configurando pg_hba.conf
Una vez que el servidor está configurado para escuchar conexiones externas, necesitas definir quién puede conectarse. Esto se hace en el archivo pg_hba.conf. Este archivo contiene reglas que especifican el tipo de conexión, la base de datos de destino, el usuario de la base de datos, la dirección IP del cliente y el método de autenticación requerido.
Cada línea en pg_hba.conf define una regla de acceso. El formato básico para conexiones TCP/IP remotas es:
host database user address methodhost: Indica que esta regla aplica a conexiones TCP/IP (no SSL).database: A qué base de datos se aplica la regla (allpara todas).user: A qué usuario de base de datos se aplica la regla (allpara todos).address: La dirección IP o rango de IPs del cliente permitidas. Puede ser una IP individual, un rango CIDR (por ejemplo,192.168.1.0/24), o0.0.0.0/0para permitir cualquier dirección IP (¡usar con precaución!).method: El método de autenticación requerido (por ejemplo,md5,trust,password,ident,cert,gssapi,ssi).md5es un método común que requiere que el cliente proporcione una contraseña cifrada en MD5.trustsignifica que la conexión se acepta sin autenticación (¡no recomendado para conexiones remotas!).
Debes añadir líneas a este archivo para permitir las conexiones deseadas. Por ejemplo:
- Para permitir conexiones desde la propia máquina (localhost) usando autenticación md5:
host all all 127.0.0.1/32 md5- Para permitir conexiones desde todas las máquinas en la subred 192.168.1.0/24 usando autenticación md5:
host all all 192.168.1.0/24 md5- Para permitir conexiones desde cualquier dirección IP usando autenticación md5 (menos seguro, solo para pruebas o redes controladas):
host all all 0.0.0.0/0 md5Asegúrate de añadir estas líneas al final del archivo o en un lugar lógico dentro de tus reglas existentes. El orden de las reglas importa: PostgreSQL procesa las reglas secuencialmente y usa la primera que coincide con la conexión entrante. Guarda y cierra pg_hba.conf.
Configuración del Firewall
Además de configurar PostgreSQL, es crucial asegurarse de que el firewall del sistema operativo en el servidor de base de datos permita el tráfico entrante en el puerto por defecto de PostgreSQL, que es el puerto 5432 (a menos que lo hayas configurado de manera diferente en postgresql.conf).
Los pasos para configurar el firewall varían según el sistema operativo:
En Windows
Si tu servidor PostgreSQL está en Windows, necesitas añadir una regla en el Firewall de Windows:
- Abre el 'Panel de control' y navega a 'Sistema y seguridad' > 'Firewall de Windows'.
- Haz clic en 'Configuración avanzada'.
- Selecciona 'Reglas de entrada' en el panel izquierdo y luego haz clic en 'Nueva regla...' en el panel derecho.
- Elige 'Puerto' y haz clic en 'Siguiente'.
- Selecciona 'TCP' e introduce '5432' en el campo 'Puertos locales específicos'. Haz clic en 'Siguiente'.
- Selecciona 'Permitir conexión' y haz clic en 'Siguiente'.
- Elige los perfiles de red a los que se aplicará la regla (Dominio, Privado, Público). Haz clic en 'Siguiente'.
- Asigna un nombre a la regla (por ejemplo, 'PostgreSQL TCP 5432') y una descripción opcional. Haz clic en 'Finalizar'.
En Linux
En sistemas Linux, puedes usar herramientas como ufw, firewalld o iptables. Por ejemplo, con ufw:
sudo ufw allow 5432/tcpCon firewalld:
sudo firewall-cmd --zone=public --add-port=5432/tcp --permanent sudo firewall-cmd --reloadO directamente con iptables (la sintaxis puede variar):
sudo iptables -A INPUT -p tcp --dport 5432 -j ACCEPT sudo service iptables saveAsegúrate de aplicar los cambios de firewall de forma permanente según la herramienta que utilices.
Reiniciar el Servicio PostgreSQL
Para que los cambios en los archivos postgresql.conf y pg_hba.conf surtan efecto, debes reiniciar el servicio PostgreSQL. Simplemente recargar la configuración no es suficiente para los cambios en listen_addresses.

En Windows
Abre el 'Administrador de servicios' (puedes buscar services.msc en el menú de inicio), busca el servicio de PostgreSQL (su nombre puede incluir la versión, por ejemplo, postgresql-x64-14), haz clic derecho sobre él y selecciona 'Reiniciar'.
En Linux
Usando systemd (común en distribuciones recientes como CentOS 7+, Ubuntu 15+, Debian 8+):
sudo systemctl restart postgresqlUsando scripts de inicio SysV (en sistemas más antiguos):
sudo service postgresql restartVerifica el estado del servicio después de reiniciarlo para asegurarte de que se inició correctamente.
Probando la Conexión Remota
Una vez que hayas realizado los cambios en los archivos de configuración, ajustado el firewall y reiniciado el servicio, puedes probar la conexión desde otra máquina en la red.
Usa un cliente de base de datos como pgAdmin, DBeaver, o la herramienta de línea de comandos psql desde el equipo cliente.
En la configuración de conexión del cliente, especifica:
- Host/Dirección: La dirección IP o nombre de host del servidor donde se ejecuta PostgreSQL.
- Puerto: 5432 (o el puerto que hayas configurado).
- Base de datos: La base de datos a la que quieres conectarte.
- Usuario: El nombre de usuario de la base de datos.
- Contraseña: La contraseña del usuario (si usaste
md5opasswordcomo método de autenticación).
Intenta establecer la conexión. Si todo está configurado correctamente, deberías poder conectarte.
Consideraciones de Seguridad
Habilitar conexiones remotas expone tu servidor de base de datos a la red. Es vital tomar medidas de seguridad:
- Limita las IPs: En
pg_hba.conf, sé lo más específico posible con las direcciones IP permitidas en lugar de usar0.0.0.0/0. - Usa Autenticación Fuerte: Prefiere métodos como
md5oscram-sha-256sobretrustopassword. Asegúrate de que los usuarios tengan contraseñas fuertes. - Firewall: Mantén tu firewall configurado para permitir el acceso solo desde las fuentes necesarias.
- SSL: Considera habilitar SSL para cifrar las conexiones entre el cliente y el servidor, especialmente si las conexiones atraviesan redes no confiables.
Preguntas Frecuentes
¿Por qué mi servidor PostgreSQL solo acepta conexiones locales por defecto?
Esta es una medida de seguridad por defecto. Al limitar las conexiones a la máquina local, se reduce la superficie de ataque y se protege la base de datos de intentos de conexión no autorizados desde la red.
¿Cuál es la diferencia entre postgresql.conf y pg_hba.conf?
postgresql.conf controla el comportamiento general del servidor, incluyendo en qué direcciones IP escucha. pg_hba.conf controla quién puede conectarse (basado en IP, usuario, base de datos) y cómo deben autenticarse.
¿Es seguro usar 0.0.0.0/0 en pg_hba.conf?
Generalmente no. 0.0.0.0/0 permite conexiones desde cualquier dirección IP en Internet, lo cual es extremadamente peligroso a menos que tengas otras capas de seguridad (como un firewall muy restrictivo o VPNs) que limiten quién puede realmente llegar al servidor. Es mucho más seguro especificar rangos de IP o IPs individuales.
¿Qué puerto usa PostgreSQL por defecto para conexiones TCP?
El puerto por defecto es el 5432.
¿Necesito reiniciar PostgreSQL después de modificar los archivos de configuración?
Sí, para que los cambios en listen_addresses en postgresql.conf y las reglas en pg_hba.conf surtan efecto, es necesario reiniciar el servicio PostgreSQL.
Siguiendo estos pasos, podrás habilitar y configurar las conexiones TCP/IP a tu servidor PostgreSQL, permitiendo el acceso remoto desde otras máquinas. Recuerda siempre priorizar la seguridad al abrir tu base de datos a la red.
Si quieres conocer otros artículos parecidos a Habilitar Conexiones Remotas en PostgreSQL puedes visitar la categoría Bases de datos.

Aprende mas sobre MySQL