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='*'plushost all all 0.0.0.0/0 md5expone 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 CentOS | 7.6 (1810) |
|---|---|
| Versión de PostgreSQL | 9.2.24 |
Índice de contenidos
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.
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.
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------
# - Connection Settings -
#listen_addresses = 'localhost' # what IP address(es) to listen on;
#------------------------------------------------------------------------------
# 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.
#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:
[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.
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.
