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:

Mover el repositorio de archivos de MySQL 5.x en FreeBSD 7

La instalación ubica por defecto al repositorio de archivos del motor de base de datos en /var/db/mysql. Esta ubicación no es necesariamente la idónea, para nuestro caso no disponemos del espacio suficiente en esa partición y es por eso que es necesario moverla.

Los ajustes siguientes son los necesarios para transladar el repositorio de archivos de MySQL a /home/datos_mysql.

# /usr/local/etc/rc.d/mysql-server stop
# mv /var/db/mysql /home/datos_mysql
# vi /etc/rc.conf
mysql_dbdir=”/home/datos_mysql”

Instalación de MySQL 5.x en FreeBSD 7

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

# cd /usr/ports/mysql50-server/
# make install clean

Establece el directorio de datos inicial y le asigna los permisos apropiados.

# /usr/local/bin/mysql_install_db

Establece un archivo de configuración inicial basado en los archivos de demostración.

# cp /usr/local/share/mysql/my-medium.cnf /var/db/mysql/my.cnf

Existen varios archivos base de configuración en la ruta /usr/local/share/mysql para elegir según la configuración de hardware del servidor y su finalidad.

my-small.cnf Para sistemas de bajos recursos con 64MB de RAM o menos.
my-medium.cnf Para sistemas hasta con 128MB de RAM, ideal para servidor web
my-large.cnf Para sistemas con 512MB de RAM, ideal para servidor MySQL dedicados
my-huge.cnf Para sistemas con 1GB o 2GB de RAM, ideal para datacenters.

Actualiza el usuario y grupo propietario de los archivos.

# chown -R mysql:mysql /var/db/mysql

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

# /usr/local/bin/mysqld_safe --user=mysql &

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

# /usr/local/bin/mysqladmin -u root password 'rootpassword'

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

# vi /etc/rc.conf

    mysql_enable=”YES”

Si se desea desactivar el acceso externo al servidor de bases de datos se deberá realizar la siguiente modificación. Esto es útil cuando sólo nos interesa permitir conexiones desde el servidor de páginas que se encuentra ubicado en el mismo equipo y no desde el exterior.

# vi /var/db/mysql/my.cnf

(quitar el comentario)

skip-networking

Reiniciar el servicio de MySQL.

# /usr/local/etc/rc.d/mysql-server restart

Revise el archivo de registro por mensajes de error o de advertencia que le permitan depurar cualquier problema existente en el motor de base de datos.  El archivo de registro se encuentra ubicado en /var/db/mysql y su nombre corresponde al siguiente formato: hostname.domainname.err, para este artículo será entonces: webserver.mydomain.com.err.

Creación de un VirtualHost con Apache 2.2.x en FreeBSD 7

Activar el acceso al archivo de configuración de VirtualHosts.

# vi /usr/local/etc/apache22/httpd.conf

Include etc/apache22/extra/httpd-vhosts.conf

Para configurar un Huesped Virtual se debe especificar la información básica de este de manera similar a como se especificó la información del sitio.

# vi /usr/local/etc/apache22/extra/httpd-vhosts.conf

<VirtualHost *:80>

    ServerAdmin jimezam@mydomain.com

    DocumentRoot "/home/web"

    ServerName webserver.mydomain.com

</VirtualHost>

<VirtualHost *:80>
    ServerAdmin jimezam@mydomain.com
    DocumentRoot "/home/sistemas"
    ServerName sistemas.mydomain.com
    ServerAlias www.sistemas.mydomain.com
    ErrorLog "/var/log/sistemas-error_log"
    TransferLog "/var/log/sistemas-access_log"

    <Directory /home/sistemas>
        Allow from all
    </Directory>
</VirtualHost>

La modificación anterior indica que se crea el Huesped Virtual para el sitio sistemas.mydomain.com el cual tiene como raíz de su árbol de directorios web a /home/sistemas y a jimezam@mydomain.com como la dirección de correo de su administrador. Se especifican además la ubicación de los archivos de registro de acceso (CustomLog) y de error (ErrorLog). Lo mas conveniente es separarlos de los archivos de registro del sitio principal para facilitar su posterior depuración y manejo.

Un parámetro opcional permite establecer un alias del huesped virtual (ServerAlias) el cual es útil si se desea permitir el acceso a este con las www al comienzo.

La primera sección de VirtualHost corresponde con el huesped por defecto, es decir, el que será llamado en el caso en que la solicitud (nombre DNS) no corresponda con ninguno de los ServerName de los VirtualHost definidos a continuación, para nuestro caso, el definido inicialmente cuando no había huespedes virtuales.

Es importante tener en cuenta la sección Directory en el interior del VirtualHost ya que es necesaria debido a un sutil cambio en la configuración estándar de Apache 2.2.x la cual producirá sin esta modificación errores 403 en la consulta con el navegador y mensajes de registro del estilo de: client denied by server configuration error.

Crear el directorio al cual hace referencia el DocumentRoot del huesped virtual.

# mkdir /home/sistemas

# chown jimezam:jimezam /home/sistemas

El nombre del dominio de cada ServerName deberá ser resuelto por un DNS (o por un archivo hosts local en su defecto) para poder ser utilizado.

Instalación y configuración inicial de Apache 2.2.x en FreeBSD 7

Instalación.

Obtener de los ports las fuentes, compilarlas e instalar la versión 2.2.x bajo el árbol /usr/local.

# cd /usr/ports/www/apache22

# make install

Agregar la opción suExec.

Ejecución automática al inicio del sistema operativo.

Habilitar el inicio automático del servicio HTTP, con él cada vez que se inicie el sistema operativo se iniciará el servidor de páginas.

# vi /etc/rc.conf

apache22_enable=”YES”
apache22_http_accept_enable=”YES”

Inicio/detención manual del servidor de páginas.

Inicio, detención y reinicio del servicio de Apache de manera manual.

# /usr/local/etc/rc.d/apache22 [start | stop | restart]

Configuración del servidor de páginas.

Configuración básica del servidor de páginas.

# vi /usr/local/etc/apache22/httpd.conf

Modificar la dirección de correo de la persona de contacto del servidor (webmaster) y del nombre DNS del servidor (incluyendo su dominio).

 ServerAdmin webmaster@mydomain.com
 ServerName webserver.mydomain.com:80

Especificar la ubicación en disco del árbol de directorios publicados a través de web y sus características.

 DocumentRoot "/home/web"
 <Directory "/home/web">
     Options Indexes FollowSymLinks
     AllowOverride None
     Order allow,deny
     Allow from all
 </Directory>

Permitir la consulta automática de los archivos index.html e index.htm si el URL de la solicitud no especifica un nombre de archivo explícito.

 <IfModule dir_module>
     DirectoryIndex index.html index.htm
 </IfModule>

Permitir el acceso a los sitios web de los usuarios del sistema operativo a través del símbolo ~ (Ejemplo: http://webserver.mydomain.com/~jimezam/).

 Include etc/apache22/extra/http-userdir.conf

Creación del directorio al cual hace nueva referencia el árbol de directorios web (DocumentRoot).

# mkdir /home/web

# chown www:www /home/web

Revisar los registros de la aplicación.

/var/log/httpd-access.log contiene la información de las peticiones exitosas que ha servido Apache.

/var/log/httpd-error.log contiene la información de los errores y peticiones fallidas que ha tenido el servidor de páginas.

Obtención y actualización de los 'ports' de FreeBSD 7

Como obtener los archivos de los ports para instalar aplicaciones.

# sysinstall

Configure > Distributions > [x] Ports

FTP > Main site

Como actualizar los archivos de los ports para incluír las últimas versiones disponibles de las aplicaciones.

Verificar la información específica y particular de la actualización de los ports dispuesta en /usr/ports/UPDATING para determinar si existen problemas o modificaciones respecto a las aplicaciones instaladas o a actualizarse.

Existen varias aplicaciones para la gestión de los ports y su eventual actualización. Una de ellas es Portmaster cuyos pasos de instalación y actualización de paquetes se describen a continuación.

Instalación de Portmaster.

# cd /usr/ports/ports-mgmt/portmaster
# make install clean
Ubicación del programa postmaster /usr/local/sbin/portmaster
Listar los ports instalados y verificar si existe una actualización disponible # portmaster -L
Listar los ports instalados # portmaster -l
Actualizar todos los ports instalados # portmaster -a
Actualizar un port específico # portmaster shells/bash

Enlace: Using the Ports Collection.

Configuración de la dirección IP en FreeBSD 7

La interfaz de red Ethernet es le0.

Dirección dinámica con DHCP.

# vi /etc/rc.conf

   ifconfig_le0="DHCP"

Dirección estática.

# vi /etc/rc.conf
    ifconfig_le0="inet DIRECCION_IP netmask NETMASK"
    defaultrouter="DEFAULTROUTER"
# vi /etc/resolv.conf
    nameserver IP_SERVIDOR_DNS

Los parámetros DIRECCION_IP, NETMASK y DEFAULTROUTER deberán reemplazarse por la dirección IP estática del equipo, su máscara de red y la dirección IP del enrrutador por defecto respectivamente.

Reiniciar los servicios de red para actualizar los cambios.

# /etc/netstart

Verificar la configuración de red.

# ifconfig le0

Instalación de FreeBSD 7 como servidor web

Country Selection 48 Colombia
System console keymap USA ISO
SysInstall Main Menu Standard
FDISK Partition Editor A – Use entire disk

S – Set bootable

Q – Finish

Install boot manager for drive ad0? BootMgr
FreeBSD disk label editor 1024 swap
768 tmp
768 var

2048 usr
512 /

Chose distributions 4 – Developer

8 – User

B – Custom

Root Password demo
Network gateway No
Configure inetd and network services No
Enable SSH login Yes
Anonymous FTP access No
Configure NFS server No
Configure NFS client No
Customize system console settings No
Set time zone Yes
Clock set to UTC No
Select region 2 América
Linux binary compatibility No
PS/2, serial or bus mouse No
Browse port collection No
Add user account No

# sysinstall

SysInstall Main Menu Configure
User Mangement User

Login ID – jimezam

Password

Full Name: Jorge I. Meza

Time Zone No

2 – América

13 – Colombia

Mouse 2 – Enable
Networking Interfaces

le0 – Ethernet card

IPV6 configuration – No

DHCP configuration –

Host – webserver

Domain – mydomain.com

IPV4 gateway – 192.168.1.1

Name server: xxx.xxx.xxx.xxx

IPV4 Address: 192.168.1.20

Netmask: 255.255.255.0

Startup Startup dirs – /usr/local/etc/rc.d

NIS DomainName – No

Quotas – Yes

Para la instalación se consideró un equipo con 512MB de memoria RAM y 5GB de disco, para un servidor real se realizan las siguientes observaciones con respecto a las particiones del disco duro.

swap – 2 a 3 veces la memoria RAM instalada

/ – 2048MB

/var – 2048MB o más según los servicios a instalarse.

/tmp – 1024MB o más según la cantidad de procesos y usuarios.

/usr – 3072MB o más según la cantidad de paquetes a instalarse.

/home – 1024MB o más según la cantidad de usuarios y los requerimientos en disco de estos.

Para mas información consultar el siguiente enlace:

A pesar de los muy bajos recursos de disco que se asignaron, el espacio disponible después de la instalación fresca son bastante prometedores.

Después de instalar los ports.

¿ Por qué no BSD ?

Hay tantas cosas que quiero aprender, experimentar, desarrollar. Hay tantas tareas y actividades que tengo que hacer. Hay tantos libros que quisiera leer. Hay tantas cosas nuevas que ni siquiera conozco que quisiera buscar. Hay tantas ideas que se me van a ocurrir, que me hace falta tiempo en el día y cuando lo tengo no se ni siquiera por donde empezar.

Ayer recordé que dejé olvidado mi “proyecto” de instalar y documentar un servidor web que había iniciado hace ya un tiempo con fines académicos. Ayer se me ocurrió por qué no hacerlo con FreeBSD ? En mi época en la UAM utilice un poco FreeBSD, lo utilice cuando estuve montando un router para el Centro de Informática obteniendo en poco tiempo resultados considerables. Al final no continué el proyecto pero fue por motivos administrativos 😉

El poco contacto que tuve con FreeBSD me dejó un buen recuerdo. La facilidad de instalar la mayoría de los paquetes que uno requiere a través de los ports es muy interesante, también me gustó la sensación de controlar que se instala en el servidor y no un montón de cosas que no pedí, no conozco y pueden ser un problema después, la misma que me hace preferir Linux Slackware para la instalación de servidores ante otras distribuciones que parecen cada vez mas estar enfocadas a los escritorios de los usuarios finales.

Es por esto que se me ocurrió retomar mi proyecto simple pero ahora con FreeBSD, para esto estoy descargando en este momento el FreeBSD 7.0 e hice una búsqueda de bibliografía ya que sin documentación cualquier cosa es un caos, en especial, la administración de servidores.

A continuación documento algunas de las fuentes de información mas interesantes que encontré relacionadas con el sistema operativo FreeBSD.

Explaining BSD
http://www.lemis.com/bsdpaper.html

FreeBSD Man Pages

http://www.freebsd.org/cgi/man.cgi

FreeBSD Architecture Handbook
http://www.freebsd.org/doc/en/books/arch-handbook/index.html
ftp://ftp.freebsd.org/pub/FreeBSD/doc/en/books/arch-handbook/book.pdf.zip

The FreeBSD Corporate Networker’s Guide
http://www.freebsd.org/doc/en/books/corp-net-guide/
ftp://ftp.freebsd.org/pub/FreeBSD/doc/en/books/corp-net-guide/book.pdf.zip

The Design and Implementation of the 4.4BSD Operating System
http://www.freebsd.org/doc/en/books/design-44bsd/
ftp://ftp.freebsd.org/pub/FreeBSD/doc/en/books/design-44bsd/book.pdf.zip

A project model for the FreeBSD Project
http://www.freebsd.org/doc/en/books/dev-model/
ftp://ftp.freebsd.org/pub/FreeBSD/doc/en/books/dev-model/book.pdf.zip

FreeBSD Developers’ Handbook
http://www.freebsd.org/doc/en/books/developers-handbook/
ftp://ftp.freebsd.org/pub/FreeBSD/doc/en/books/developers-handbook/book.pdf.zip

Frequently Asked Questions for FreeBSD 5.X and 6.X
http://www.freebsd.org/doc/en/books/faq/
ftp://ftp.freebsd.org/pub/FreeBSD/doc/en/books/faq/book.pdf.zip

FreeBSD Documentation Project Primer for New Contributors
http://www.freebsd.org/doc/en/books/fdp-primer/
ftp://ftp.freebsd.org/pub/FreeBSD/doc/en/books/fdp-primer/book.pdf.zip

FreeBSD Handbook
http://www.freebsd.org/doc/en/books/handbook/
ftp://ftp.freebsd.org/pub/FreeBSD/doc/en/books/handbook/book.pdf.zip

PMake — A Tutorial
http://www.freebsd.org/doc/en/books/pmake/
ftp://ftp.freebsd.org/pub/FreeBSD/doc/en/books/pmake/book.pdf.zip

FreeBSD Porter’s Handbook
http://www.freebsd.org/doc/en/books/porters-handbook/
ftp://ftp.freebsd.org/pub/FreeBSD/doc/en/books/porters-handbook/book.pdf.zip

A comprehensive Guide to FreeBSD
http://www.vmunix.com/fbsd-book/

The Complete FreeBSD
http://grog.evilcode.net/book.pdf.gz