HOW-TO eBusiness Cluster (Parte 2)

joomla! + Virtuemart.-




Joomla! es una herramienta de desarrollo web para crear sitios de contenido (CMS). Es una aplicación de código abierto construida mayoritariamente en PHP bajo una licencia GPL. Este administrador de contenidos puede trabajar en Internet o intranets y requiere de una base de datos MySQL, así como preferiblemente de un servidor HTTP Apache.-

Virtuemart es un módulo para joomla! con el cual se facilita la creación de un sitio dedicado al comercio electrónico.-

Como dijimos al final de la Parte 1, no vamos a reinventar la rueda:

Después de todo lo anterior, agregamos una nueva plantilla para el sitio y empezamos a levantar inventario. Generamos:
  • Casas Editoras.-
  • Libros por Casas Editoras.-

PEN.-



PEN es un balanceador de carga basado en TCP, brinda un servicio de balanceo de carga de trabajo cuando detecta un servidor abajo. Su función es brindar alta disponibilidad. Pen nos va a servir para tener una web siempre disponible. Actua como proxy entre 2 servidores puede servir de forma temporal para dar servicio web en un dominio determinado sin necesidad de redireccionar DNS. Cuando PEN detecta un servidor inalcanzable inmediatamente escanea en busca de otro servidor activo y elige el que se uso mas recientemente.-

Penlogd
  • El balanceo de carga produce muchos logs, pero penlog nos permite guardar en un solo archivo todos los log producidos por el web server.-

Webstats
  • La opcion -w puede ser usada para obtener estadisticas de señales en formato de html.-

Portabilidad
  • PEN puede ser utilizado en los siguientes sistemas FreeBSD, Linux, HP-UX y Solaris. A la vez corre en Windows, MacOS X.-

Para instalar:

#aptitude install pen

Esta es la linea ocupada para ejecutar el balanceo para el puerto 80:

#pen 80 -l /var/log/pen.log -p /var/log/pen.pid -w /var/www/html/pen.html -h -f -d -e 192.168.1.11:80 192.168.1.8:80

Para el puerto 443:

#pen 443 -l /var/log/pen.log -p /var/log/pen.pid -w /var/www/html/pen.html -h -f -d -e 192.168.1.11:443 192.168.1.8:443

PEN puede soportar hasta 15 servidores.-

VRRPD.-




VRRPD es la implementación del protocolo de VRRP, su finalidad principal es un protocolo que elige un servidor master en una LAN y un master de respuesta con una IP virtual. Para configurar el protocolo se siguieron los siguientes pasos:

#aptitude install vrrpd

Agregar la siguiente linea en la maquina del servidor maestro:

#vrrpd –i eth0 –v 10 – p 200 192.168.1.111

En el esclavo se agrega la linea seria la siguiente:

#vrrpd - i eth0 –v 10 – p 100 192.168.1.111

Después se debe asegurar que los dos servidores tengan la IP virtual 192.168.1.111

#ip addr show eth0

Con la opción ps ax podemos ver el estado del demonio

#ps ax

Para más detalles de los parámetros:

#man vrrpd


OpenSSL.-



Primero que nada, abri una consola como root. Para ver si esta instalado el OpenSSL digita:

#apt-cache search openssl

Si no lo esta:

#apt-get install openssl

Ya instalado, podemos librementre crear los certificados digitales.-

Creación de una CA (Autoridad Certificadora):

Para comenzar nos situamos en el directorio root de nuestro servidor web, en nuestro caso /var/www/app, creamos una carpeta ya que los comandos que ejecutaremos generan archivos y es prudente tenerlos ordenados:

host1:/var/www/app# mkdir CA
host1:/var/www/app# cd CA

Con el siguiente comando creamos un CA para certificados X509 con algoritmo de encriptación rsa de 2048 bytes. Con el -keyout le indicamos que la clave privada de nuestra CA se almacene en el fichero mipri.pem y la clave publica -out en el mipub.pem. Seguidamente nos pedirá un password para nuestra CA y se lo damos (Apuntarlo o memorizarlo ya que sirve para los próximos pasos). También nos pedirá una serie de datos por ejemplo país, nombre de empresa, que nos identifica como CA. Observar que le he añadido el parámetro -days con 3650, de esta manera indicamos que la CA no expire en 10 años.

host1:/var/www/app/CA# openssl req -x509 -newkey rsa:2048 -keyout mipri.pem -days 3650 -out mipub.pem

Creando el certificado digital:

Podremos hacer tantos como queramos los pasos son los mismos, ahora bien: Primero generamos la clave privada del que sera nuestro certificado digital: Con esto generamos la clave privada la cual tendrá un algoritmo de cifrado triple des (-des3) de 2048 y se almacenara en el archivo (-out) serv-priv.pem y con el comando -passout pass: indicamos la passfrase para nuestra clave privada yo le he puesto dlinux. Teniendo en cuenta que el algoritmo solo se puede hackear a fuerza de verga es importante tener en cuenta que entre mas digitos tenga la clave mas tiempo tardaran e descifrarla.

host1:/var/www/app/CA# openssl genrsa -des3 -out serv-priv.pem -passout pass:dlinux 2048


Generar la petición de certificado:

Ahora vamos a generar la petición del certificado, antes de hacer un certificado , hay que hacer una petición donde se define el propietario del certificado.

host1:/var/www/app/CA# openssl req -new -subj "/DC=tacruel.net/OU=net/CN=tacruel" -key serv-priv.pem -passin pass:dlinux -out petic-certificado-serv.pem

Observamos que le indicamos (req -new) con lo que indicamos que es una petición con el parámetro -subj le indicamos a quien pertenece el certificado, para ello ponemos entre comillas cada uno de los apartados que identifican separados por /. A la petición le indicamos que usara la clave privada que hemos hecho en el anterior comando -key serv-priv.pem y le indicamos el password que usemos en el anterior (-passing pass):dlinux y como salida (-out) le indicamos que genere el siguiente archivo petic-certificado-serv.perm

Emitir el certificado:

Finalmente ya podemos emitir el certificado. Para definir las características de un certificado openssl dispone del directorio /etc/ssl donde hay un archivo openssl.cnf con lo que podemos definir las características. Pero hay una forma mas simple de darle estas características, mediante la generación de un archivo de configuración por parte nuestra. Por tanto con nano generamos un archivo que contenga lo siguiente:

basicConstraints = critical,CA:FALSE
extendedKeyUsage = serverAuth

Y lo guardamos por ejemplo con el nombre config1.txt , en el archivo le indicamos el basicConstraints =critical,CA:FALSE para que cumpla con el X509v3 y con la RFC3280 (dogma de fé). Y también le indicamos que el certificado servirá para un servidor con lo siguiente extendedKeyUsage=serverAuth, por ejemplo un servidor web que es lo que queremos certificar. Y ahora con el archivo hecho, hacemos el certificado:

host1:/var/www/app/CA# openssl x509 -CA mipub.pem -CAkey mipri.pem -req -in petic-certificado-serv.pem -days 3650 -extfile config1.txt -sha1 -CAcreateserial -out servidor-cert.pem

Indicamos que sera un certificado del tipo x509 cuya CA (-CA) esta definida en el archivo mipub.pem (lo hemos hecho lo primero) y que usa como clave privada (-CAkey) el archivo mipri.pem y que el certificado a generar tendrá las especificaciones definidas en el apartado anterior (-req -in) las cuales están en el archivo de petición petic-certificado-serv.pem.

El certificado tendrá una validez de diez años (-days 3650). Y le indicamos que el certificado es para un servidor, como esto lo tenemos en nuestro archivo de configuración se lo indicamos poniendo -extfile y nuestro archivo config1.txt y utilizaremos un algoritmo de cifrado SHA (-sha1). Luego como es nuestro primer certificado le indicamos que la CA lo numere con lo cual le pondrá 2 , ya que el 1 es la CA -CAcreateserial y finalmente le decimos donde generar el certificado (-out) en el archivo servidor-cert.pem

Una vez lanzado el comando nos pedirá el password de la CA que lo emite y el archivo se generará.

Ciertas configuraciones:

Copien los archivos servidor-cert.pem y servidor-priv.pem en /etc/apache2/ssl si no existe el directorio ssl hay que crearlo, solo sirve para guardar esto en algún lado y que apache sepa de él. Al apache2 hay que indicarle que también escuche por el puerto 443 que es el del Secure Socket Layer (ssl) para eso se modifica el fichero /etc/apache2/ports.conf para que ponga:

Listen 80
Listen 443





Ahora tenemos que decirle a apache que soporte el ssl para ello:

host1:/var/www/app/CA# a2enmod ssl

Y con esto ya solo nos queda configurar nuestro fichero de sites-availables donde tenemos nuestra configuración para poder acceder a nuestro site mediante https.

Editamos el archivo /etc/apache2/sites-availables/default y creamos el virtual host adecuado para el puerto 443:



Poniendo en el DocumentRoot el lugar donde tenemos nuestra pagina. Le indicamos que utilizamos certificados (SSLEngine on) y le decimos donde tiene que que leer el certificado (SSLCertificateFile) y la clave privada de este (SSLCertificateKeyFile).-

Ahora solo nos queda parar y arrancar nuestro apache:

host1:/etc/apache2/sites-enabled# /etc/init.d/apache2 stop
Stopping web server: apache2 ... waiting .
host1:/etc/apache2/sites-enabled# /etc/init.d/apache2 start
Starting web server: apache2Apache/2.2.9 mod_ssl/2.2.9 (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide the pass phrases.
Server tacruel.net:443 (RSA)
Enter pass phrase:
OK: Pass Phrase Dialog successful.
.
host1:/etc/apache2/sites-enabled#

Se observa que les pide password , el cual es el password del certificado.

Evitar petición de password:

Como se vio en el paso anterior, siempre nos va a pedir el password el cual es el password de nuestro certificado.Como lo del password puede ser un problema ya que ahora si la maquina se arranca y cuando arranque el apache, se quedara parado hasta metáis el password. La solución chafa (la que adoptamos) es ponerle en el archivo /etc/sites-availables/default una directiva (fuera de los virtual host):

SSLPassPhraseDialog exec:/etc/apache2/claveputa

Donde claveputa es un archivo bash que creamos nosotros para que se invoque cuando apache arranque y le proporcione la clave. El contenido del archivo es:

#!/bin/sh
echo dlinux

Observar que simplemente es un echo con el password. Ahora solo le tienen que dar permiso de ejecución:

#chmod 700 claveputa

En la Parte 3 veremos:
  • Replicación de MySQL.-
  • Configuraciones del DNS.-
  • Script para para el control de los demonios.-
  • Un par de tonteras.-

Bueno, hasta aquí.-

0 comentarios: