Categorías: Tutoriales

Permitir conexiones entrantes a un servidor PostgreSQL

Para los que venimos del mundo de MySQL y nunca antes hemos utilizado PostgreSQL, la configuración de los accesos externos a la base de datos puede parecernos algo confusa. El mecanismo, sin entrar en la tabla de gestión de usuarios, es algo más complejo pero tiene más posibilidades que en la base de datos recién adquirida por Oracle.

Veamos los pasos a dar.

1. Acceder al sistema

Para poder seguir los pasos, deberemos estar dentro del sistema, en la terminal del mismo. Si no tenemos acceso físico, podemos conectar vía ssh.

$ ssh miusuario@miservidorpgsql

2. Autenticarnos como usuario postgres

Una vez dentro del sistema, podemos hacer las operaciones como root, pero por seguridad o por si no disponemos de tales credenciales, lo mejor es actuar como usuario postgres:

su postgres

3. Permitir conexiones de clientes desde un determinado rango

Llegamos a uno de los puntos importantes de la cuestión, el fichero pg_hba.conf. Su situación exacta dependerá de vuestra instalación, pero lo encontraréis en una de estas dos rutas:

  • /var/lib/pgsql/data/pg_hba.conf (en mi instalación lo tengo ahí, utilizo Scientific Linux, una distribución derivada de Red Hat)
  • /etc/postgresql/main/pg_hba.conf

Dentro de este fichero, al final del mismo, veremos algo así:

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

# "local" is for Unix domain socket connections only
local   all         all                               ident
# IPv4 local connections:
host    all         all         127.0.0.1/32          ident
# IPv6 local connections:
host    all         all         ::1/128               password

¿Qué significa esto? Veamos columna a columna:

  • Tipo: básicamente conexión local o conexión remota (host).
  • Base de datos: base de datos a las que afecta la regla. Si queremos todas, usamos el comodín all.
  • Usuario: usuarios a los que afecta la regla, si queremos que afecte a todos, usamos también all.

Nos paramos ahora en los dos apartados que más atención requieren.

3.a Dirección

En esta columna definimos, las direcciones IP (podemos también usar IPv6), desde las que podremos conectarnos a PostgreSQL. Usaremos la fórmula dirección/máscara:

  • Una sola dirección: 150.100.100.100/32
  • O un rango (ampliemos el mismo de antes): 150.100.100.0/24 (256 direcciones)

3.b Método

Aunque hay multitud de métodos para utilizar (incluyendo conexiones LDAP, Kerberos o PAM), explico los tres más básicos:

  • ident: utiliza el usuario del sistema desde el que se está intentado conectar.
  • trust: deja todos los accesos sin necesidad de autenticarse (sólo recomendable para conexiones desde el equipo local).
  • password: identificación con usuario/contraseña, es la más típica y es la recomendable para conexiones desde clientes como EMS PostgreSQL Manager.

Una línea de ejemplo, para darle acceso a todos los usuarios, a todas las base de datos, desde el rango de IP explicado antes, usando autenticación con usuario y contraseña, sería la siguiente:

host    all         all         150.100.100.0/24          password

4. Habilitar conexiones al socket desde clientes que no sean el host local

Al igual que en MySQL hay que configurar el bind-adress en my.conf, en PostgreSQL tenemos que hacer algo análogo.

Para versiones 8.x en adelante el procedimiento es el siguiente. Buscamos el fichero postgresql.conf en:

  • /var/lib/pgsql/data/postgresql.conf
  • /etc/postgresql/8.2/main/postgresql.conf

Y buscar dentro del mismo la siguiente línea:

listen_addresses='localhost'

Para sustituirla, por el comodín (para todas las IP, es una opción segura, tened en cuenta que tenemos también un filtro en el fichero pg_hba.conf.

listen_addresses='*'

O definir algunas direcciones IP en concreto:

listen_addresses='150.100.100.100 150.100.100.101'

5. Reiniciar servicio

Reiniciamos el servicio para que el servidor cargue los nuevos valores (como root):

$ service postgresql restart

6. Abrir entrada en iptables

Finalmente, nos aseguramos de que iptables no corta la entrada (el puerto de PostgreSQL es el 5432 por defecto, si lo cambiáis, cambiadlo aquí también):

iptables -A INPUT -p tcp -s 0/0 --sport 1024:65535 -d ip_cliente \
 --dport 5432 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -s ip_cliente --sport 5432 -d 0/0 \
 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT

7. Probar

Desde un cliente gráfico o desde el cliente en línea de comandos, probamos la configuración (suponemos que desde el equipo al que estamos dando acceso):

$ psql -h ip_servidor -U miusuario

Y con esto debería ir todo sin problemas. Las posibilidades de PostgreSQL son enormes, empezando por este tipo de configuraciones. Ahora que son  tiempos oscuros para MySQL por culpa de Oracle, no viene mal acordarse de esta base de datos que tantas alegrías ha dado al software libre, PostgreSQL.

F. Javier Carazo Gil

Cofundador de CODECTION, empresa especializada en WordPress, autor de un libro sobre WordPress (el primero en español) y multitud de artículos (en medios físicos y virtuales) sobre el tema. Participa en la comunidad WordPress de forma activa siendo parte del equipo organizador de la WordPress Meetup de Córdoba, dando charlas en diferentes WordCamp y siendo autor y coautor de multitud de plugins libres y premium para WordPress de gran éxito.

Ver comentarios

Entradas recientes

DeepSeek

2 días hace

Contacto

2 semanas hace

Smart-tv mute

2 semanas hace

STEAM OS

3 semanas hace

2025

4 semanas hace

El podcast de Linux Hispano – #072 – El hardware libre debe consolidarse como el software libre

https://www.youtube.com/embed/z-xGk9c_eOw Guionista y locutor: Manuel Ignacio López Quintero.Fecha de publicación: 31 de diciembre de 2024.

1 mes hace