−25%

en Windows con pago anual, hasta el 31/10. Ver planes

EQVPS

Cómo instalar PostgreSQL en un VPS y conectarse con seguridad

Instala PostgreSQL 16 en Ubuntu, crea una base de datos y un usuario, y conéctate en remoto sin exponer el puerto 5432 a internet: por túnel SSH o lista de permitidos.

PostgreSQL se instala con un solo comando. Donde la gente se equivoca es con el acceso remoto: abre el puerto 5432 al mundo, pone una contraseña y luego se pregunta por qué los registros están llenos de intentos de inicio de sesión. Esta guía instala Postgres en Ubuntu 24.04, crea una base de datos y muestra dos formas seguras de conectarse desde fuera.

1. Instalación

apt update && apt install -y postgresql
systemctl status postgresql --no-pager

En Ubuntu 24.04 es PostgreSQL 16. Por defecto solo escucha en localhost; déjalo así salvo que tengas un motivo.

2. Crea un usuario y una base de datos

sudo -u postgres psql <<'SQL'
CREATE USER app WITH PASSWORD 'use-a-long-random-password';
CREATE DATABASE appdb OWNER app;
SQL

Las aplicaciones del mismo servidor se conectan con postgresql://app:PASSWORD@localhost:5432/appdb.

3. Conectarte desde tu portátil: túnel SSH (recomendado)

Nada que abrir, nada que configurar en el servidor. El túnel redirige un puerto local a través de SSH:

ssh -N -L 5433:localhost:5432 root@203.0.113.10

En un plan NAT, añade tu puerto SSH personal del panel:

ssh -N -p 20123 -L 5433:localhost:5432 root@your-nat-host

Mientras el túnel está activo, apunta tu cliente de base de datos a localhost:5433. SSH lo cifra todo y el puerto 5432 sigue cerrado a internet. Herramientas gráficas como DBeaver y pgAdmin tienen una pestaña de «túnel SSH» que hace lo mismo.

4. Acceso directo para otro servidor (lista de permitidos)

Si un servidor de aplicaciones en otro lugar debe conectarse directamente, permite solo su IP. Para ello, el servidor de base de datos debe estar en un plan con IP dedicada, porque los planes NAT no aceptan conexiones entrantes salvo SSH.

En /etc/postgresql/16/main/postgresql.conf:

listen_addresses = '*'

Al final de /etc/postgresql/16/main/pg_hba.conf:

hostssl  appdb  app  198.51.100.20/32  scram-sha-256

Abre el cortafuegos para esa única dirección y reinicia:

ufw allow from 198.51.100.20 to any port 5432 proto tcp
systemctl restart postgresql

hostssl obliga a usar una conexión cifrada; el paquete de Ubuntu trae un certificado autofirmado, así que los clientes deben conectarse con sslmode=require.

5. Primeros ajustes sensatos

Para un servidor con 2 GB de RAM, en postgresql.conf:

shared_buffers = 512MB
effective_cache_size = 1536MB
work_mem = 8MB

Reinicia tras el cambio. Basta para la mayoría de apps pequeñas; afina cuando veas consultas reales.

6. Copias de seguridad

Un volcado nocturno, conservado una semana:

mkdir -p /var/backups/pg && chown postgres /var/backups/pg
cat > /etc/cron.d/pg-backup <<'EOF'
30 3 * * * postgres pg_dump -Fc appdb > /var/backups/pg/appdb-$(date +\%u).dump
EOF

-Fc genera un volcado comprimido que se restaura con pg_restore. Copia también los volcados fuera del servidor; Managed Backups añaden puntos de restauración diarios de toda la máquina.

Relacionado

Preguntas frecuentes

¿Debo abrir el puerto 5432 a internet?

Mejor no. Los puertos de bases de datos expuestos se escanean y se atacan por fuerza bruta constantemente. Conéctate por un túnel SSH o, si un servidor de aplicaciones debe conectarse directamente, permite solo su IP tanto en pg_hba.conf como en el cortafuegos.

¿Puedo usar PostgreSQL en un plan NAT?

Sí. Las aplicaciones del mismo servidor se conectan en local, y tú llegas a la base de datos desde tu portátil por un túnel SSH en tu puerto SSH personal. Lo que un plan NAT no puede hacer es aceptar una conexión entrante directa al 5432 desde otro servidor.

¿Cuánta RAM necesita PostgreSQL?

Funciona con unos cientos de megabytes y usa para caché todo lo que le des. Un punto de partida habitual es shared_buffers en torno al 25 % de la RAM. Para la base de datos de una app pequeña, 2 GB de RAM en el servidor van holgados.

¿Cómo hago copia de la base de datos?

Usa pg_dump con el formato personalizado ('pg_dump -Fc') y ejecútalo desde cron. Guarda también copias fuera del servidor. Managed Backups añaden puntos de restauración diarios de todo el servidor.

¿Qué versión de PostgreSQL obtengo?

Ubuntu 24.04 trae PostgreSQL 16 y Debian 12 trae la 15. Para una versión mayor más reciente, añade el repositorio apt oficial de PostgreSQL (apt.postgresql.org).

Comentarios

Aún no hay comentarios. Sé el primero.

Deja un comentario

Los comentarios se moderan antes de aparecer.