Autenticación local y conexiones de red de PostgreSQL 8.2 en FreeBSD 7

Autenticación local.

Por defecto PostgreSQL permite que las conexiones al motor de bases de datos que se realizan de manera local se hagan sin autenticación, lo cual es poco recomendable. Este comportamiento puede modificarse siguiendo los pasos dispuestos a continuación.

# vi /usr/local/pgsql/data/pg_hba.conf

Modificamos el método pasándolo de trust a md5 para los orígenes de conexión que nos interese asegurar. El siguiente es el nuevo contenido del archivo tomando en cuenta las modificaciones realizadas para activar el soporte de SSL.

local      all    all                      md5
hostssl    all    all    127.0.0.1/32      md5
hostssl    all    all    ::1/128           md5

Habilitar el acceso a las bases de datos a través de TCP/IP.

Nuevamente, por defecto PostgreSQL no permite la realización de conexiones cuya petición provenga de un equipo externo, es decir, diferente de localhost. Para habilitar esto se deberán seguir los pasos a continuación.

Es posible autorizar las conexiones desde orígenes externos nombrados, es decir, especificar con precisión desde cuales direcciones IP se habilitarán las conexiones remotas enunciándolas separadas por espacio en la variable listen_address (reemplazando el asterisco = todos).

# vi /usr/local/pgsql/data/postgres.conf
listen_addresses='*'

Debe tenerse en cuenta que además de permitir las conexiones desde una dirección IP específica (o varias), es necesario especificar el tipo de autenticación para ese equipo/red como se realizó en la sección anterior para localhost. Para permitir conexiones entrantes con soporte para SSL (hostssl), a cualquier base de datos (primer all), de cualquier usuario (segundo all) desde cualquier equipo de la red 192.168.1.x (192.168.0.0/24) utilizando contraseñas encriptadas con MD5 se deberá realizar el siguiente procedimiento.

# vi /usr/local/pgsql/data/postgres.conf
hostssl all all 192.168.1.0/24 md5

Para ajustar una mayor granularidad en la seguridad de conexión se deberán personalizar estos valores a sus requerimientos individuales.

Es necesario reiniciar el servicio para que se tomen en cuenta las modificaciones a la configuración recién realizadas.

Enlaces:

Soporte SSL para las conexiones de PostgreSQL 8.2 en FreeBSD 7

PostgreSQL trae inmerso por defecto el soporte nativo para encriptar el transporte de la información utilizando SSL. A continuación se describe el procedimiento necesario para activarlo en un servidor FreeBSD.

Activa el uso de SSL para las conexiones del motor de bases de datos.

# vi /usr/local/pgsql/data/postgresql.conf
ssl = on

Detiene el servicio del motor de bases de datos.

# /usr/local/etc/rc.d/postgresql stop

Crea el certificado SSL.

# cd /usr/local/pgsql/data/

En este paso se deben tener en cuenta dos aspectos. El primero de ellos es la clave PEM que se utilizará mas adelante y el segundo es que el Common Name deberá corresponder con nombre FQDN del servidor.

# openssl req -new -text -out server.req
Enter PEM pass phrase: MiClavePEM
Verifying - Enter PEM pass phrase: MiClavePEM
Country Name (2 letter code) [AU]: CO
State or Province Name (full name) [Some-State]: Caldas
Locality Name (eg, city) []: Manizales
Organization Name (eg, company) [Internet Widgits Pty Ltd]:  Personal Development
Organizational Unit Name (eg, section) []: Educacion
Common Name (eg, YOUR name) []: webserver.mydomain.com
Email Address []:jimezam@gmail.com
A challenge password []: Certificado&2008k
An optional company name []: Smiley World
# openssl rsa -in privkey.pem -out server.key
Enter pass phrase for privkey.pem: MiClavePEM
# rm privkey.pem

Se crean la llave privada y el certificado del servidor.

# openssl req -x509 -in server.req -text -key server.key -out server.crt
# chmod og-rwx server.key
# chown pgsql:pgsql server.*

Se reinicia el servidor para comprobar los cambios realizados.

# reboot

Por defecto las conexiones locales (con 127.0.0.1) se realizan sin encriptación. Siguiendo los pasos dispuestos a continuación es posible modificar este comportamiento y obligar a que este tráfico se encripte.

# vi /usr/local/pgsql/data/pg_hba.conf
local      all    all                      trust
hostssl    all    all    127.0.0.1/32      trust
hostssl    all    all    ::1/128           trust

Enlaces:

Instalación de PostgreSQL 8.2 en FreeBSD 7

Obtiene los paquetes necesarios de Internet, los compila e instala.

# cd /usr/ports/databases/postgresql82-server
# make config
NLS
PAM
# make install clean

Establece el directorio de datos inicial.

# su -l pgsql -c “initdb –locale=es_ES”

Se inicia manualmente el motor de base de datos para verificar que todo esté funcionando correctamente.

# su pgsql -c "postmaster -i -D /usr/local/pgsql/data"

Habilita el inicio automático del motor de base de datos al inicio del servidor.

# vi /etc/rc.conf
postgresql_enable="YES"

Se modifica la contraseña del usuario administrador (pgsql). Modifique la cadena rootpassword por el valor que considere apropiado.

# su - pgsql
# /usr/local/bin/psql template1
template1=# ALTER USER pgsql WITH ENCRYPTED PASSWORD 'rootpassword';
template1=# q

Enlaces:

Instalación rápida de PostgreSQL para Windows

Los siguientes son los pasos seguidos para instalar PostgreSQL bajo Windows en una unidad US

1. Descargar y descomprimir el archivo postgresql-8.3.1-1-binaries-no-installer.zip.

2. Mover el directorio pgsql a la unidad USB, g: para este ejemplo.

3. Crear el directorio g:pgsqldata.

4. Crear el repositorio de datos inicial.

dos> g:pgsqlbininitdb -D g:pgsqldata

5. Editar el archivo de configuración de acceso para permitir las conexiones externas.

dos> notepad g:pgsqldatapg_hba.conf

# Allow any user on the local system to connect to any database under
# any database user name using Unix-domain sockets (the default for local
# connections).
#
# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
local   all         all                               trust

# The same using local loopback TCP/IP connections.
#
# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
host    all         all         127.0.0.1/32          trust

host    all         all         0.0.0.0/0             md5

6. Editar el archivo de configuración de la base de datos para permitir conexiones a través de TCP/IP y SSL.

dos> notepad g:pgsqldatapostgresql.conf

listen_addresses = '*'
authentication_timeout = 1min		# 1s-600s
ssl = on				# (change requires restart)
ssl_ciphers = 'ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH'	# allowed SSL ciphers

7. Crear la llave primaria del servidor (server.key) y el certificado SSL (server.crt). Para esto es necesario contar con la distribución de OpenSSL y su directorio g:OpenSSLbin (o donde haya sido instalado) incluído en la variable de ambiente PATH. Tengase en cuenta que este paso es opcional y sólo deberá ejecutarse si se desea establecer el soporte para conexiones SSL con el motor de base de datos (ver parámetro ssl en el paso #6).

dos> cd g:pgsqldata
dos> openssl req -new -text -out server.req
PEM pass phrase: ***CLAVESECRETA***
Country Name (2 letter code) [AU]: CO
State or Province Name (full name) [Some-State]: Caldas
Locality Name (eg, city) []: Manizales
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Personal Development
Organizational Unit Name (eg, section) []: Sistemas
Common Name (eg, YOUR name) []: jorgeivan
Email Address []: jimezam@gmail.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Ténganse en cuenta las siguientes consideraciones para especificar los datos mencionados anteriormente.

  1. La frase PEM (***CLAVESECRETA***) es una contraseña de seguridad del certificado, elíjala de acuerdo a sus criterios de seguridad.
  2. Los valores de los campos Country Name, State Name, Locality Name, Organization Name, Organizational Unit Name e Email Address son informativos y deben personalizarse según su propio contexto.
  3. El campo Common Name debe corresponder con el hostname de la máquina que tendrá el certificado (importante).
  4. El Challenge Password y el Optional Company Name pueden obviarse (dejarse en blanco).

La llave generada se encuentra protegida con contraseña, para removerla y permitir el inicio automático del motor de base de datos junto con el sistema operativo se debe realizar la acción siguiente.

dos> openssl rsa -in privkey.pem -out server.key

PEM pass phrase: ***CLAVESECRETA***

dos> del privkey.pem

Para firmar (self-signed) el certificado recién creado ejecutar la acción siguiente.

openssl req -x509 -in server.req -text -key server.key -out server.crt

8. Iniciar el motor de base de datos.

dos> postgres -i -D g:pgsqldata

Si se desea redireccionar los mensajes de la base de datos a un archivo de log se deben agregar las siguientes modificaciones.

dos> postgres -i -D g:pgsqldata >logfile 2>&1

Si se desea enviar el proceso del motor de base de datos a background se debe anteponer el comando start de Windows.

dos> start postgres -i -D g:pgsqldata >logfile 2>&1

9. Modificar la contraseña de acceso del usuario de administración del motor de base de datos.

dos> psql -h 127.0.0.1 -c "ALTER USER USUARIO WITH PASSWORD 'CONTRASEÑA'" -d template1

Téngase en cuenta que debe reemplazarse a USUARIO con el nombre de usuario bajo el cual se ejecuta la base de datos, el mismo con el que se ejecutó initdb y postgres, así como CONTRASEÑA con la contraseña escogida para ese usuario.

10. Crear una base de datos.

dos> createdb.exe base_de_datos

11. Prueba de conexión a la base de datos.

dos> psql -W -U USUARIO base_de_datos

Enlaces de interés: