Configurar seguridad y acceso en PostgreSQL
Sobre este tema se ha escrito mucho en Internet y otros soportes; pero por increíble que nos parezca aun se encuentra muchos servidores en producción con información sensible sin protección. Motivo por el cual me anime a hacer esta minuta
Las conexiones seguras permite, mediante una clave, cifrar el tráfico entre los clientes y el servidor, dificultando que alguien pueda interceptarlo y obtener los datos que viajan por red.
Requerimiento:
(a) Instalar openssl
(b) Crear Clave privada (postgresql.key)
© Eliminar la contraseña de la clave (postgresql.key)
(d) Crear Certificado de servidor (postgresql.crt) [En este caso es autofirmado]
Paso para la creación del certificado de servidor
$ sudo su -postgres# cd /etc/postgresql/9.5/main
P1: Cracion del archivo clave privada
# openssl genrsa -des3 -out postgresql.key 1024
P2: Eliminación la contraseña para que no la solicite en cada nueva conexión
# openssl rsa -in postgresql.key -out postgresql.key
P3: Creacion del certificado
# openssl req -x509 -new -key postgresql.key -days 3650 -out postgresql.crt -subj ‘/C=LA/ST=La Habana/L=Cuba/O=PostgreSQL.cu/CN=postgreSQL.cu/emailAddress=mail@postgresql.org’(Donde:)
-> x509 produce un certificado auto firmado en lugar de una solicitud de certificado.
-> days día de duración del certificado
-> subj es un atajo para evitar teclar la info.
P4: Otorgar permisos sobre el archivo .key
# chmod 400 /etc/postgresql/9.5/main/postgresql.key
P5: Configuración del postgresql.conf:
listen_addresses = ‘*’
ssl = true
ssl_cert_file = ‘/etc/postgresql/9.5/main/postgresql.crt’
ssl_key_file = ‘/etc/postgresql/9.5/main/postgresql.key’
P6: Reiniciar el servicio
$ sudo /etc/init.d/postgresql restart
P7: Test
$ psql -h 127.0.0.1 -U postgres -d postgrespsql (9.5.14)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type “help” for help.postgres=# SELECT version();
((Ahora podemos definir los clientes con los cuales nos comunicamos de manera cifrada o si usamos un certificado de una entidad acreditada))
— Configuración del pg_hba.conf:
hostssl all test 10.0.0.X/32 md5
hostssl all postgres 0.0.0.0/0 trust clientcert=1