PostgreSQL, también conocido como Postgres, es un sistema de administración de bases de datos relacionales de objetos de propósito general. Es una de las bases de datos de código abierto más avanzadas disponibles. Sin embargo, existen muchos problemas de seguridad y posibles vulnerabilidades si la aplicación no está protegida correctamente.
Si es administrador de un sistema o de una base de datos, necesita saber cómo proteger Postgres antes de pasar a producción.
En este tutorial, le mostraremos cómo proteger el servidor PostgreSQL en Ubuntu 18.04.
Requisitos
- Un Ubuntu 18.04 VPS nuevo en Atlantic.net Cloud Platform.
- Una contraseña raíz configurada en su servidor.
Paso 1:crear un servidor en la nube de Atlantic.Net
Primero, inicie sesión en su servidor en la nube de Atlantic.Net. Cree un nuevo servidor, eligiendo Ubuntu 18.04 como sistema operativo con al menos 1 GB de RAM. Conéctese a su servidor en la nube a través de SSH e inicie sesión con las credenciales resaltadas en la parte superior de la página.
Una vez que haya iniciado sesión en su servidor Ubuntu 18.04, ejecute el siguiente comando para actualizar su sistema base con los últimos paquetes disponibles.
apt-get update -y
Paso 2:instalar PostgreSQL
apt-get install postgresql postgresql-contrib -y
Una vez que se haya completado la instalación, inicie el servidor PostgreSQL y habilítelo para que se inicie al reiniciar:
systemctl start postgresql systemctl enable postgresql
Paso 3:Crear base de datos y usuario
A continuación, deberá crear una base de datos y un usuario con fines de prueba.
Primero, inicie sesión en el shell de PostgreSQL con el siguiente comando:
sudo -i -u postgres psql
Debería ver el siguiente resultado:
psql (10.12 (Ubuntu 10.12-0ubuntu0.18.04.1)) Type "help" for help. postgres=#
A continuación, cree un usuario llamado testuser y establezca la contraseña.
postgres=# CREATE USER testuser WITH PASSWORD 'password';
A continuación, cree una base de datos llamada testdb y otorgue acceso completo al nuevo usuario:
postgres=# CREATE DATABASE testdb OWNER testuser;
A continuación, salga del shell de PostgreSQL con el siguiente comando:
postgres=# \q
Paso 4:configurar la dirección de escucha
Para el entorno de producción, deberá configurar PostgreSQL para escuchar en una interfaz pública.
Puede cambiar esta configuración editando el archivo /postgresql.conf:
nano /etc/postgresql/10/main/postgresql.conf
Busque la siguiente línea:
#listen_addresses = 'localhost'
Reemplácelo con lo siguiente:
listen_addresses = 'localhost,your-server-ip'
Guarde y cierre el archivo cuando haya terminado. Luego, reinicie el servicio PostgreSQL para implementar los cambios:
systemctl restart postgresql
Paso 5:configurar los hosts permitidos
Para mayor seguridad, se recomienda permitir que solo IP específicas accedan y modifiquen la base de datos de PostgreSQL. Puedes hacerlo editando el archivo pg_hba.conf:
nano /etc/postgresql/10/main/pg_hba.conf
Busque la siguiente línea:
# local DATABASE USER METHOD [OPTIONS]
Agregue la siguiente línea debajo de la línea anterior:
host testdb testuser client-ip-address/32 md5
Guarde y cierre el archivo cuando haya terminado. Luego, reinicie el servicio PostgreSQL para implementar los cambios:
systemctl restart postgresql
Dónde:
anfitrión :host es un socket TCP/IP simple o cifrado con SSL.
base de datos :testdb es el nombre de la base de datos a la que se puede conectar el host.
usuario :testuser es el nombre del usuario que puede realizar la conexión.
dirección :client-ip-address/32 especifique la dirección IP de la computadora del cliente.
auth-method :md5 es el nombre del método de autenticación.
Paso 6:configurar el cortafuegos UFW
apt-get install ufw -y
A continuación, se recomienda configurar la regla de firewall UFW para otorgar acceso al puerto predeterminado de PostgreSQL 5432 solo a la IP del cliente.
IMPORTANTE: Antes de comenzar, deberá permitir la conexión SSH entrante a través de UFW, ya que eso hará que pierda el acceso al shell. Estará bloqueado y no podrá conectarse a su instancia.
Puede permitir el servicio SSH usando el siguiente comando:
ufw allow ssh
Luego, habilite el firewall UFW con el siguiente comando:
ufw enable
A continuación, permita el puerto 5432 de PostgreSQL solo a la dirección IP del cliente mediante el siguiente comando:
ufw allow from client-ip-address to any port 5432
A continuación, verifique el estado de la regla UFW con el siguiente comando:
ufw status
Deberías obtener el siguiente resultado:
Status: active To Action From -- ------ ---- 22/tcp ALLOW Anywhere 5432 ALLOW client-ip-address 22/tcp (v6) ALLOW Anywhere (v6)
Paso 7:verificar la conexión remota
En este punto, el servidor PostgreSQL está protegido y solo se puede acceder a él desde la IP del cliente.
Para verificarlo, conecte su base de datos PostgreSQL desde el sistema del cliente:
psql -U testuser -h postgres-server-ip -d testdb
Se le pedirá que proporcione la contraseña para testuser, como se muestra a continuación:
Password for user testuser:
Escriba su contraseña y pulse Introducir . Una vez que se haya establecido la conexión, debería obtener el siguiente resultado:
psql (9.3.24, server 10.12 (Ubuntu 10.12-0ubuntu0.18.04.1)) WARNING: psql major version 9.3, server major version 10. Some psql features might not work. SSL connection (cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256) Type "help" for help. testdb=>
Eso es todo por ahora.
Conclusión
En la guía anterior, aprendió cómo proteger PostgreSQL configurando PostgreSQL para otorgar acceso solo a hosts específicos. También aprendió cómo configurar UFW para permitir conexiones solo desde hosts específicos. Ahora debería poder proteger su servidor PostgreSQL de ciertos tipos de ataques. ¡Empiece hoy con alojamiento VPS de Atlantic.Net!