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í.-

HOW-TO eBusiness Cluster (Parte 1)



EL PROYECTO.-

Un vendedor de libros ha descubierto que el comercio electrónico es una gran opción para vender sus productos por medio de la internet, para lo cual contrata los servicios de Ingenieros de Sistemas Informáticos para levantar una aplicación que le permita tener su negocio on line en todo momento trabajando con usuarios y sesiones. El propósito de este vendedor es no perder ninguna venta por lo cual requiere un proxy o un cluster que le brinde Alta Disponibilidad para que en caso de tener problemas en un servidor no sea necesario detener las ventas sino más bien que el otro servidor dentro del proxy o cluster tome las riendas de la transacción.

LA METODOLOGÍA.-

Para realizar este proyecto se ha utilizado un cluster con un equipo de entrada y dos servidores otorgando los servicios necesarios para el funcionamiento de este. En el equipo principal se encuentra levantado el comando PEN sirviendo como demonio, el cual es el encargado de recibir las peticiones de DNS por medio del puerto 443 (que es donde escucha https, es decir http seguro) y redireccionarlas al equipo inmediato el cual es un servidor (al cual denominamos maestro) que mantiene corriendo la aplicación del e-bussines por medio de Apache2, PHP5, joomla!, Virtuemart y MySQL. Y para el caso de perder la comunicación con este contamos con un servidor (al cual denominamos esclavo) que contiene los mismos servicios que el maestro corriendo de forma auxiliar al mismo. El encargado de hacer este cambio en caso de error es nuestro "demonio" PEN corriendo en el equipo de entrada.-

El balanceo de carga en nuestro cluster esta a cargo de VRRPD, un demonio basado en el Protocolo de Redireccionamiento de Ruteo Virtual originario de algunos equipos de CISCO.-

EL ENTORNO.-



LAMP Maestro:
  • Intel Celeron 2GHz
  • 512MB RAM
  • 60GB HD
  • Debian GNU/Linux 5.0 "Lenny" kernel 2.6.26
  • Apache 2.2.9
  • PHP 5.2.6-1
  • MySQL 5.0.51a-24
  • MySQL Administrator 1.2.12
  • joomla! 1.5.10
  • Virtuemart 1.1.3
  • OpenSSL 0.9.8g
  • VRRPD 1.0
  • SendMail 8.14.3
  • nano 2.0.0
  • Dia 0.96.1

LAMP Esclavo:
  • Intel Centrino M 1.73GHz
  • 512MB RAM
  • 60GB HD
  • Debian GNU/Linux 6.0 "Squeeze" kernel 2.6.26
  • Apache 2.2.11
  • PHP 5.2.9-4
  • MySQL 5.0.51a-24
  • MySQL Administrator 1.2.12
  • joomla! 1.5.10
  • Virtuemart 1.1.3
  • OpenSSL 0.9.8g
  • VRRPD 1.0
  • SendMail 8.14.3
  • nano 2.0.0

Proxy:
  • Intel Pentium 1.6GHz
  • 256MB RAM
  • 60GB HD
  • Debian GNU/Linux 5.0 "Lenny" kernel 2.6.26 (sin entorno gráfico)
  • PEN 0.18.0-1
  • Bind9

1 Switch CentreCom MR815T
Cables UTP Cat-5

LA RED.-



LA MARA.-



Por cierto:
  • Son las 3:23 a.m.
  • De izquierda a derecha: Omar Guzmán, Antonio Escobar y Marely Cárcamo.
  • No hay cigarros !!!!

INSTALACION DEL LAMP.-

Para que reinventar la rueda, mira esta perfecta guía

En la Parte 2 veremos la instalación y configuración de:
  • joomla! + Virtuemart
  • PEN
  • VRRPD
  • OpenSSL

Bueno, hasta aquí.-

Algo .....

... depresivo ... me siento ..............



HJ-Split



En la casa de una amiga deje descargando varias películas asiáticas, cuando llegue a traerlas vi varios archivos con extensión numérica y debido al cansancio de estar terminando el proyecto de una materia agarre llave y no me acordaba como putas unir todas las partes. Por suerte después de mis 12 horas de buen sueño, inmediatamente me acorde de HJ-Split.-



Es un software que:
  • Separa archivos.-
  • Une archivos.-
  • Es multiplataforma.-
  • Es Freeware.-
  • Es fácil de usar.-
  • Esta hecho en Delphi !!!!

Por cierto, en buen salvadoreño:
  • Hj-Split es una programa gratuito que permite dividir un archivo en varias partes. Cada archivo lleva una extensión numérica: .001, .002... Este mismo programa sirve para volver a unir después todas las piezas. Suele usarse en la descarga directa de archivos (sobre todo la mara de Asia Team).

LPIC-1 Study Guide



Para aquellos linuxeros de corazón, encontré esta Guía de Estudio para obtener la Certificación ofrecida por Linux Professional Institute (LPI).-

Algunos de los tópicos que cubre la Guía de Estudio:
  • Herramientas de línea de comando.-
  • Administración de Software.-
  • Configuración de Hardware.-
  • Administración de Archivos y Sistemas de Archivos.-
  • Trabajando con el sistema de ventanas X.-
  • Administración del Sistema.-
  • Networking Básico.-

Por cierto:
  • El libro es editado por la Sybex y fué lanzado en Febrero de este año.-
  • El archivo a descargar esta en PDF y anda por los 8.11MB.-
  • La certificación completa es de 3 niveles, este libro es para el Nivel 1.-

Libros joomla!



A petición de un amigo que quiere facilitarse la vida creando sitios de contenido de una manera kgada de la risa, aquí van un par de libros de joomla!

Los links (dd) son:





Por cierto:
  • Hay una comunidad joomla! en el país.-
  • Ambos libros estan en PDF y entre los dos andan por los 22MB