Instalar PostgreSQL en CentOS con acceso remoto seguro


Fecha de publicación:

Actualizado:


Artículos técnicos > Instalar PostgreSQL en CentOS con acceso remoto seguro

Estado 2026 y uso seguro

Conclusión: Instale una versión de PostgreSQL compatible, inicialice el clúster deseado, escuche solo en las interfaces requeridas y otorgue acceso en pg_hba.conf a bases de datos, roles y redes confiables específicas. Utilice la autenticación de contraseña SCRAM y TLS cuando las contraseñas cruzan una red.

Qué aprenderás

  • Cómo interactúan el origen del paquete, el directorio de datos, la inicialización, systemd, los sockets de escucha y la autenticación del cliente.
  • Por qué listen_addresses='*' plus host all all 0.0.0.0/0 md5 expone mucho más de lo que la mayoría de las aplicaciones requieren.
  • Cómo probar las reglas de acceso sin bloquear la administración local.

Para quién: administradores que migran un runbook simple de CentOS/PostgreSQL a una implementación en red compatible.

Situación en 2026: La regla general MD5 que aparece a continuación se conserva solo como un ejemplo histórico que advierte. PostgreSQL documenta las contraseñas cifradas con MD5 como obsoletas; prefiera scram-sha-256, CIDR limitados, roles con privilegios mínimos, controles de firewall, TLS, copias de seguridad y una versión principal compatible.

Nota de seguridad: Los comandos y ejemplos de configuración del artículo original no se han vuelto a ejecutar en un entorno de producción actual. Verifique las versiones compatibles, las copias de seguridad, los controles de acceso y los pasos de reversión en un entorno de prueba independiente antes de aplicarlos.

Fuentes primarias oficiales

Resumen.

Este es el procedimiento de configuración inicial necesario para instalar e iniciar PostgreSQL en CentOS. La información se basa en el supuesto de que se utiliza CentOS7. También se incluye la sección de seguridad.

Se recomienda PostgreSQL por ser gratuito y muy funcional. He oído que las funciones de PostgreSQL solían ser lentas, pero las recientes han mejorado y son más rápidas.

Versiones utilizadas:

Versión de CentOS7.6 (1810)
Versión de PostgreSQL9.2.24

Índice de contenidos

  1. instalar
  2. Detalles de la configuración
  3. resumen

1. instalar

Esta sección describe el procedimiento para instalar PostgreSQL.

1-1. Instalación de PostgreSQL

Realice la instalación de PostgreSQL mediante el comando yum. Realiza el trabajo como usuario root.

[username@hostname ~]$ su -
[root@hostname ~]# yum -y install postgresql-server

2. Detalles de la configuración

Esta sección describe la configuración hasta el inicio de PostgreSQL.

2-1. Cree un usuario dedicado a PostgreSQL.

Quería crear un usuario dedicado para manipular PostgreSQL (usar comandos psql), pero el usuario ya estaba creado. Recuerdo haber creado usuarios en el pasado, así que quizás la especificación haya cambiado.

Intenta cambiar a un usuario con el siguiente comando.

[root@hostname ~]# su - postgres

Como es posible que algunas personas utilicen una versión más antigua de PostgreSQL, cabe mencionar que el procedimiento para configurar las variables de entorno cambiando el siguiente ".bashrc" ya no es necesario.

.bashrc


export PGHOME=/var/lib/pgsql
export PGDATA=/var/lib/pgsql/data
export PGHOST=localhost

El PGDATA por defecto para los usuarios de postgres parece ser ahora '/var/lib/pgsql/data'. Se describe como una referencia a "/usr/lib/systemd/system/postgresql.service".

2-2. Preparación de datos PostgreSQL

Crear datos PostgreSQL. La codificación es UNICODE. El directorio "/var/lib/pgsql/data" se ha creado por defecto, pero a los que no lo han hecho también se les pide que creen una carpeta.

-bash-4.2$ initdb --encoding=UNICODE

Como "PGDATA=/var/lib/pgsql/data" está configurado en "/usr/lib/systemd/system/postgresql.service", "initdb --encoding=UNICODE" construirá una BD bajo "/var/lib/pgsql/ data/", la BD se construye en "/var/lib/pgsql/data/".

2-3. Modificación del archivo de configuración

Permitir que las direcciones IP accedan a PostgreSQL. Configure el sistema para que se autentique con una contraseña para el acceso no local.

[root@hostname ~]# vi /var/lib/pgsql/data/postgresql.conf

Modifique 'postgresql.conf' como sigue.

postgresql.conf【Antes del cambio】


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

# - Connection Settings -

#listen_addresses = 'localhost'         # what IP address(es) to listen on;

postgresql.conf【después del cambio】


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

# - Connection Settings -

listen_addresses = '*'         # what IP address(es) to listen on;

Además, como es una parte importante de la seguridad, si pones esta configuración, podrás acceder al sitio desde cualquier IP. Si la IP a la que se va a acceder es fija, indique la IP fija.

Esta configuración es necesaria cuando se inicia la sesión desde un servidor distinto al que está instalado PostgreSQL, por ejemplo, pgadmin. Esta configuración no es necesaria si se accede al servidor y se ejecuta el comando psql. (ya que la conexión se origina en él mismo (localhost))

Esta es una configuración de seguridad importante, así que minimiza el número de usuarios que pueden acceder a ella en la medida de lo posible.

A continuación, modifique 'pg_hba.conf'.

[root@hostname ~]# vi /var/lib/pgsql/data/pg_hba.conf

Añade la siguiente información al final del documento.

pg_hba.conf


#Autenticación de contraseña desde el exterior.
host    all             all             0.0.0.0/0            md5

Al incluir esta configuración, se requiere una contraseña cuando se conecta desde el exterior. Estas áreas pueden ser graves agujeros de seguridad si no se configuran o se configuran incorrectamente, así que por favor, configúrelas con el último cuidado.

2-4. control de arranque

Ahora que la preconfiguración está completa, compruebe que PostgreSQL se inicia. Dado que la base de datos se construyó como un usuario postgres, cambie al usuario postgres antes de comenzar.

[root@hostname ~]# su - postgres
-bash-4.2$ pg_ctl start

Una vez iniciado PostgreSQL con éxito, compruebe que el comando psql funciona sin problemas. Ejecute el comando psql como usuario de postgres.

-bash-4.2$ psql -l
                                         Database List
   Name    |  Owner   | Encoding         |  Collation Order   | Ctype(conversion operator) |      Access rights
-----------+----------+------------------+--------------------+----------------------------+-----------------------
 postgres  | postgres | UTF8             | ja_JP.UTF-8        | ja_JP.UTF-8                |
 template0 | postgres | UTF8             | ja_JP.UTF-8        | ja_JP.UTF-8                | =c/postgres          +
           |          |                  |                    |                            | postgres=CTc/postgres
 template1 | postgres | UTF8             | ja_JP.UTF-8        | ja_JP.UTF-8                | =c/postgres          +
           |          |                  |                    |                            | postgres=CTc/postgres
(3 lines)

Está bien si se devuelven los resultados anteriores.

2-5. Ajuste de la puesta en marcha automática

Aunque no es obligatorio, es difícil iniciar PostgreSQL cada vez que se reinicia el servidor, por lo que se configura para que PostgreSQL se inicie automáticamente cuando se inicie el servidor. También se registra al comando systemctl. Tenga en cuenta que este procedimiento es para CentOS7, por lo que si usted está usando cualquier otra cosa que no sea CentOS7, tendrá que utilizar el comando Service para hacer frente a esto.

Compruebe si '/usr/lib/systemd/system/postgresql.service' existe. Si no es así, cree 'postgresql.service' mediante el siguiente procedimiento. Ejecutar como usuario root.

[root@hostname ~]# touch /etc/systemd/system/postgresql.service
[root@hostname ~]# vi /etc/systemd/system/postgresql.service

Configuración utilizada:

postgresql.service


[Unit]
#Descripción.
Description=PostgreSQL
#Control previo y posterior a la ejecución.
#Before=xxx.service
After=network.target

[Service]
#Designación de usuarios y grupos
User=postgres
Group=postgres
#Una vez activada, establezca el estado en Activado.
Type=oneshot
RemainAfterExit=yes
#Arranque, parada y recarga.
Environment=PGDATA=/var/lib/pgsql/data
ExecStart=/usr/bin/pg_ctl start -D /var/lib/pgsql/data
ExecStop=/usr/bin/pg_ctl stop
ExecReload=/usr/bin/pg_ctl reload

[Install]
#Ajustes equivalentes al nivel de ejecución 3.
WantedBy=multi-user.target

A continuación, habilite el servicio con systemctl.

[root@hostname ~]# systemctl enable postgresql
[root@hostname ~]# systemctl is-enabled postgresql
enabled
[root@hostname ~]# systemctl list-unit-files --type=service | grep postgresql
postgresql.service                                enabled
[root@hostname ~]# systemctl daemon-reload

2-6. Añadir un usuario administrativo a PostgreSQL

Las aplicaciones usan un usuario de base de datos distinto de la cuenta de servicio de Linux. El ejemplo histórico cambia la contraseña del usuario postgres existente.

Ejecute el siguiente comando como el usuario postgres.

-bash-4.2$ psql
postgres=# alter role postgres with password 'Contraseña (informática)';
postgres=# \q

Nota: Introduzca la contraseña que desea establecer en el campo "Contraseña".

2-7. Perforación de cortafuegos

Permitir el acceso al puerto de PostgreSQL porque el firewall (iptables para CentOS6 y anteriores) sólo permite el acceso ssh por defecto en CentOS7. Añade también la opción "permanente" para que la configuración sea permanente.

[root@hostname ~]# firewall-cmd --permanent --zone=public --add-port=5432/tcp
[root@hostname ~]# firewall-cmd --reload
[root@hostname ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: dhcpv6-client http https ssh
  ports: 8080/tcp 5432/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

Si dice "puertos: 5432/tcp", está bien.

Acceso a través de pgadmin. Debería poder iniciar la sesión como usuario de Postgres con la contraseña que acaba de establecer.

Panel de pgAdmin con la base de datos postgres en el servidor centos_test

3. resumen

Hemos descrito la configuración inicial necesaria cuando se instala PostgreSQL. La construcción inicial de PostgreSQL puede ser una lucha, así que por favor refiérase a esta sección.