miércoles, marzo 02, 2016

Data Center Virtual Seguro en Alta Disponiblidad

Acabo de publicar la web de mi empresa https://cloudperu.pe donde he creado una solución de Infraestructura Virtual, que paso a detallar:

Data Center Virtual Seguro en Alta Disponibilidad

La solución de Data Center Virtual cuenta con funcionalidad de Alta Disponibilidad, en esquema activo/activo, el cual le permite asegurar la continuidad del negocio ante una caída crítica de uno de los servidores; migrando todas las máquinas virtuales hacia el otro servidor de forma automática.

Cluster de Virtualización Centralizado y Alta Disponibilidad Open Source
El Data Center Virtual está gestionado con un cluster de virtualización centralizada Open Source; el cual le permite ahorrar miles de dólares en licencias si optara por productos comerciales como vcenter o hyperv. El Cluster de Virtualización brinda alta disponibilidad para todos las máquinas virtuales Windows o Linux. Así mismo brinda la funcionalidad de migración en caliente de máquinas virtuales y respaldo en vivo de las mismas.

Data Center Virtual exclusivo con redes aisladas
El Data Center Virtual base, está conformado por dos servidores dedicados físicos; es 100% exclusivo y cuenta con redes aisladas para la WAN, LAN y DMZ con posibilidad de crear hasta 4000 vlans

Seguridad extrema con Firewall UTM Sophos XG, con VPN, IPS, WAF y Antispam
El Data Center Virtual está protegido con el firewall UTM Sophos XG, firewall de última generación que protege a todos sus servidores virtuales en LAN o DMZ. Permite establecer una conexión remota segura con el datacenter a través de VPN IPSec y OpenVPN.
Protege los servidores web y https con el servidor WAF
Protege a los servidores de correo con el servidor AntiSpam.
Protege cualquier servidor público con el servidor IPS
Es compatible con certificaciones de seguridad CB, CE, IC, FCC, MIC, VCCI, CCC, etc y compatible con el iso 27001.
Se integra a Active Directory Linux o Windows.
Cuenta con mas de 1000 reportes detallados

SLA de 99.999% y soporte 24x7
Nuestros servidores físicos se encuentran ubicados en datacenters Tier III y Tier IV.
La configuración en alta disponibilidad de los servidores permite recuperar cualquier servicio (incluido el firewall y las IPs públicas) en un máximo de 3 minutos. Nuestro soporte es de 24x7 por 365 días al año, e incluye incidencias ilimitadas. con más de mil reportes detallados.

Soporte Local y facturación en Perú
Brindamos asistencia local en Perú, tanto en la integración entre el firewall del Data Center Virtual con su firewall local como en el despliegue de soluciones cloud o a medida.
Si no tiene un firewall local, le ofrecemos los appliance de Sophos XG.
Si cuenta con alguna consulta, contáctenos a informes@cloudperu.pe o los teléfonos
RPC: 940712686, RPM: #971149678, Fijo: 013965970

Esquema del Data Center Virtual



sábado, enero 04, 2014

Instalación de HHVM, hhvm-fastcgi, nginx y apache en Ubuntu 13.10

A continuación describo los procedimientos para instalar hhvm y hhvm-fastcgi en Ubuntu 13.10 por código fuente, ya que los paquetes deb adolecen de las ultimas modificaciones en las extensiones de hhvm.
Adicionalmente configuraremos apache y nginx con la extensión hhvm-fastcgi

Actualización de Ubuntu 13.10
Siempre que instalamos paquetes de desarrollo no está demás hacer un update de todos los paquetes

$> sudo su -
$> apt-get -y update
$> apt-get -y dist-upgrade

Si se actualizó  el kernel, no olviden hacer un reboot

Instalación de Prerrequisitos
$> sudo su -
$> apt-get install autoconf automake binutils-dev build-essential cmake g++ git \
  libboost-dev libboost-filesystem-dev libboost-program-options-dev libboost-regex-dev \
  libboost-system-dev libboost-thread-dev libbz2-dev libc-client-dev \
  libc-client2007e-dev libcap-dev libcurl4-openssl-dev libdwarf-dev libelf-dev \
  libexpat-dev libgd2-xpm-dev libgoogle-glog-dev libgoogle-perftools-dev libicu-dev \
  libjemalloc-dev libmcrypt-dev libmemcached-dev libmysqlclient-dev libncurses-dev \
  libonig-dev libpcre3-dev libreadline-dev libtbb-dev libtool libxml2-dev zlib1g-dev

Descargar el código fuente de hhvm, lo instalaremos en /opt
$> cd /opt
$> mkdir dev
$> cd dev
$> export CMAKE_PREFIX_PATH=`pwd`
$> git clone git://github.com/facebook/hhvm.git
$> cd hhvm
$> git submodule init
$> cd ../

Instalar librerías dependientes
libevent
$> git clone git://github.com/libevent/libevent.git
$> cd libevent
$> git checkout release-1.4.14b-stable
$> cat ../hhvm/hphp/third_party/libevent-1.4.14.fb-changes.diff | patch -p1
$> ./autogen.sh
$> ./configure --prefix=$CMAKE_PREFIX_PATH
$> make
$> make install
$> cd ..

Compilar hhvm
$> cd hhvm
$> git submodule update
$> export HPHP_HOME=`pwd`
$> cmake .
$> make

El binario hhvm se instalará en /opt/dev/hhvm/hphp/hhvm/hhvm

Instalación de nginx, mysql, apache y php (para probar los benchmark)
$> apt-get install nginx mysql-server apache2 \
apache2-data apache2-bin apache2-doc php5


HHVM Fastcgi, instalamos los precompilados para Ubuntu 13.10
$> echo deb http://dl.hhvm.com/ubuntu saucy main | tee /etc/apt/sources.list.d/hhvm.list
$> apt-get update
$> apt-get install hhvm-fastcgi

Enlazar el binario hhvm compilado a una ruta del path (reemplazar al hhvm del .deb)
$> mv /usr/bin/hhvm /usr/bin/hhvm-old
$> ln -s /opt/dev/hhvm/hphp/hhvm/hhvm /usr/bin/hhvm

Reiniciar los servicios
$> /etc/init.d/hhvm-fastcgi restart
$> /etc/init.d/apache2 restart
$> /etc/init.d/nginx restart

Editamos el index.php y lo visualizamos en el Navegador
$> vim /var/www/index.php
<?php

echo "Running on HHVM version ".HHVM_VERSION."\n";
phpinfo();
Visualizamos en Apache desde el navegador
http://localhost

Visualizamos en nginx desde el navegador
http://localhost:8090

Debemos visualizar un mensaje similar a
Running on HHVM version 2.4.0-dev HipHop 

Ejecución por consola
$> hhvm /var/www/index.php

HHVM: Hip Hop Virtual Machine for PHP, el futuro de PHP

HHVM (Hip Hop Virtual Machine for PHP) es una nueva máquina virtual para la ejecución Just In Time (JIT) de código PHP, cuya performance respecto al intérprete de PHP  ha demostrado ser hasta hasta 6 veces más rápido [1]

Hhvm fue creado por Facebook en el 2008 como HPHP (Hip Hop for PHP), un compilador escrito en C++, el cual convierte el código php en C++ y lo compila, obteniendo una performance superior al intérprete. El objetivo de Facebook con hphp. fue el de acelerar la ejecución de su plataforma web, ya que el intérprete ofrecía serios problemas de performance ante la masiva concurrencia de usuarios.

El compilador hphp evolucionó en el 2011 hasta convertirse en una máquina virtual JIT y de ahí nace hhvm. Hhvm ejecuta el código php convirtiéndolo primero a bytecode (Hip Hop Byte Code: HHBC) y almacenando este bytecote en una base de datos sqlite; la primera ejecución suele ser más lenta que las siguientes; por el proceso de conversión, pero aún así es más rápido que el intérprete estándar de php O_O.
Uno de los objetivos fundamentales de hhvm es ser 100% compatible con php 5.4/5.5 y dar soporte a las funciones eval() y create_function(), que no eran soportados por el anterior compilador.

La importancia de hhvm es que se avizora como el futuro de PHP, lo que vendría a ser un PHP6 pues el intérprete Zend no ha evolucionado como debería, presenta aún la deficiencia de rendimiento de los lenguaje interpretados y por sobre todo es difícil crear nuevas extensiones, ya que estas se tienen que escribir con lenguaje C.

Con hhvm, PHP se acerca al modelo de la JVM, ejecución JIT, soporte multithread, bytecode y lo más importante la posibilidad de crear extensiones con buena performance en el lenguaje PHP, sin necesidad de recurrir al lenguaje C.

Actualmente hhvm se desarrolla a un ritmo vertiginoso, siendo sus objetivos primordiales mejorar aún más la performance de la Virtual Machine, añadir más extensiones de Zend y ser compatible al 100% con las frameworks de PHP más populares como Symfony, drupal, doctrine2, Zend Framework2, codeigniter, slim, etc.

Adicional a esto Facebook ha publicado la extensión hhvm fastcgi para la ejecución de código PHP con los principales servidores web: Apache y nginx como un módulo fastcgi.
Con la extensión fastcgi se puede ejecutar muchas aplicaciones web desarrolladas en PHP, siendo aún los principales problemas la falta de extensiones como mysqli, gd, intl(implementado parcialmente), etc.

Recursos de hhvm
Sitio Web: http://www.hhvm.com/blog/
Github:      https://github.com/facebook/hhvm
Wiki:          https://github.com/facebook/hhvm/wiki

viernes, diciembre 20, 2013

Mapa del Software Libre y Open Source (FLOSS)

Publico a continuación una diapositiva en Impress en la cual resumo en líneas generales los programas que existen en Software Libre y Open source (FLOSS) orientados a diferentes usuarios: Usuario de escritorio, empresas, programadores y sector educación

jueves, diciembre 19, 2013

Curso de Zimbra - Capítulo IV (Comandos en consola en Zimbra)

Pueden llevar mi curso de zimbra presencial en
http://aulautil.com/curso/zimbra-open-source-mailwatch-owncloud/
1.- Comandos de servicio
##########################################################################

$> su - zimbra

verificar el estado de todos los  servicios en zimbra
$> zmcontrol status 

detener todos los servicios
$> zmcontrol stop

iniciar todos los servicios
$> zmcontrol start

reiniciar todos los servicios
$> zmcontrol restart

ver la versión de zimbra
$> zmcontrol -v


2.- Comandos individuales de servicio (start, stop, restart, status)
##########################################################################
Ej: detenemos todos los servicios e iniciaremos uno a uno

$> zmcontrol stop

$> zmcontrol status

Iniciar LDAP server
$> ldap start

$> zmcontrol status

Iniciar MySQL Server
$> mysql.server start

Iniciar zmconfigd
$> zmconfigdctl start

Iniciar MTA (postfix, saslauthd)
$> zmmtactl start

Iniciar Amavis, Antivirus y AntiSpam (amavis, spamassassin, clamav)
$> zmamavisdctl start

$> zmcontrol status

Iniciar Mailbox (webmail, panel de administracion, servidores imap y pop3, servidores de filtros)
$> zmmailboxdctl start

Iniciar spell (servidor de ortografía)
$> zmapachectl start

Iniciar monitoreo
$> zmswatchctl start

Iniciar estadísticas
$> zmstatctl start

Iniciar Logger (logs del sistema)
$> zmlogswatchctl start

Reiniciar solo el antivirus
$> zmantivirusctl restart

Reiniciar solo el antispam
$> zmantispamctl restart


3.- zmprov: comando de administración de zimbra
############################################################################

Loguearse primero como usuario zimbra

$> su - zimbra

Lista la ayuda general de zmprov
$> zmprov help

Listar la ayuda para gestionar las cuentas
$> zmprov help acount

Consola Interactiva
$> zmprov
prov> 

Ver ayuda de cuentas
prov> help account

Salir de la consola interactiva
prov> quit

4.- Cuentas
############################################

Obtener listado de todas las cuentas del servidor (todos los dominios)
$> zmprov -l gaa

Obtener todas las cuentas de administración
$> zmprov -l gaaa

Obtener información de una sola cuenta
$> zmprov -l ga tuxito@dominio.com 

Cuentas de un dominio específico
$> zmprov -l gaa dominio.com

Detalle de cuentas de un dominio especifico
$> zmprov -l gaa -v dominio.com

Detalle de cuentas de un dominio especifico con Cuenta, Nombre y Quota
$> zmprov -l gaa -v dominio0.com | grep -e zimbraMailDeliveryAddress -e displayName -e zimbraMailQuota |sed -e "s/zimbraMailDeliveryAddress/Cuenta/" -e "s/displayName/Nombre/" -e "s/zimbraMailQuota/Quota/"   

Crear una cuenta, con cos default
$> zmprov ca pepito@dominio.com pepitopass displayName "Pepito Pérez"

Crear un usuario con un cos específico ej: gerente
$> cos=`zmprov gc gerente | grep zimbraId:|cut -d ' ' -f2`
$> zmprov ca juanito@dominio.com juanitopass displayName "Juanito Martinez" zimbraCOSId $cos 

Crear una cuenta con detalle
$> zmprov ca windozero@dominio.com passwinbugs cn 'Nombre(s) ApMaterno ApPaterno' displayName 'Nombre(s) ApMaterno ApPaterno' givenName 'Nombre(s)' zimbraCOSId $cos

5.- Modificar opciones de una cuenta
#########################################################

Cambiar de password de una cuenta
$> zmprov sp usuario1@dominio.com passnuevo

Modificar un atributo de una cuenta
$> zmprov ma usuario1@dominio.com displayName "Luser Noob 1"

Nota: se puede modificar cualquier atributo del usuario
para la lista de atributos ejecutar
$> zmprov -l ga usuario1@dominio.com


6.- Busqueda de cuentas 
##########################################################

* Búsqueda por atributos
Se puede buscar las cuentas por un atributo en común
$> zmprov sa parametro=cadena

Buscar todas las cuentas activas
$> zmprov sa zimbraAccountStatus=active

Buscar todas las cuentas bloqueadas
$> zmprov sa zimbraAccountStatus=locked

Buscar en cuales listas se encuentra una cuenta
$> zmprov gam cuenta@dominio.com


7.- Borrar una cuenta
##########################################################
$> zmprov da usuario3@dominio.com

8.- Creación de Cuentas en forma masiva
######################################################################################################
Nos logueamos como root
$> su -

Creamos nuestro directorio de scrips
$> mkdir /opt/zimbra/scripts

Entramos al directorio
$> cd /opt/zimbra/scripts

Primero creamos un archivo con la lista de cuentas y sus respectivos cos
$> vim usuarios.txt
--------------------------------------------
usuario1@dominio.com,userpass1,Usuario Prueba 1,default
usuario2@dominio.com,userpass2,Usuario Prueba 2,default
usuario3@dominio.com,userpass3,Usuario Prueba 3,gerente
--------------------------------------------

Creamos ahora un script que genere un archivo para la creación de usuario
$> vim crea_usuarios.php
#!/usr/bin/php

<?php 

// Obteniendo los COS del sistema y sus Ids 

exec("/opt/zimbra/bin/zmprov gac",$arrcos); 

$cos = array(); 

foreach($arrcos as $cos_name){ 

        $cos_name  = chop ($cos_name); 

        $cosid=`/opt/zimbra/bin/zmprov gc $cos_name | grep ^zimbraId:`; 

        $cosid = trim(str_replace("zimbraId: ","",$cosid)); 

        $cos[$cos_name]=$cosid; 

} 

//print_r($cos); 

// Leyendo los archivos de Usuarios 

$userfile=file("usuarios.txt"); 

// Recorriendo array de usuarios y creando las cuentas 

foreach($userfile as $userline){ 

    $userline=trim(chop($userline)); 

    if(!empty($userline)){

        $user = explode(",",$userline);
    echo("ca $user[0] $user[1] displayName '$user[2]' zimbraCOSId ".$cos[$user[3]]."\n"); 
    } 
} 
?>
Ejecutamos el script, para eso necesitamos php
$> yum -y install php php-cli
$> chmod 755 crea_usuarios.php
$> ./crea_usuarios.php> cuentas.zm


Creamos los usuarios con zmprov
$> /opt/zimbra/bin/zmprov < cuentas.zm


9.- Listas de correo
###############################################################
Buscar todas las listas, y por dominio

$> zmprov gadl

$> zmprov gadl dominio.com

Crear una lista
$> zmprov cdl lista@dominio.com

Ver una lista específica
$> zmprov gdl lista@dominio.com

Encontrar todas las listas de un dominio y sus miembros
$> for i in $( zmprov gadl dominio.com | grep -v abuse | grep -v postmaster | sort ) ; do echo
 `zmprov gdl $i | grep -e 'mail: ' -e 'zimbraMailForwardingAddress: ' | sed 's/mail/Lista/' | sed

's/zimbraMailForwardingAddress: //'` ; done ;


agregar un miembro a la lista
$> zmprov adlm lista@dominio.com cuenta@dominio.com

Remover un miembro de la lista
$> zmprov rdlm lista@dominio.com cuenta@dominio.com

Borrar una lista
$ zmprov ddl lista@dominio.com


10.- Buzones (zmmailbox)
##################################################################

Entrar a la consola interactiva
$> zmmailbox
mbox> 

Ver ayuda general del comando
$> zmmailbox help

Ver ayuda de las cuentas 
$> zmmailbox help account

Ver ayuda de los mensajes
$> zmmailbox help message


* Tamaño de un buzón
Ver tamaño ocupado del buzón
$> zmmailbox -z -m cuenta@dominio.com gms

Ver el tamaño de las quotas asignadas y ocupadas de todos los buzones
$> zmprov gqu `zmhostname`|awk {'print " "$3" "$2" "$1'}

Revisar mensajes por carpetas en el buzón
$> zmmailbox -z -m cuenta@dominio.com gaf

Borrar una carpeta completa de un buzón
$> zmmailbox -z -m cuenta@dominio.com emptyFolder Junk

Importar mensajes de una carpeta Maildir existente en el INBOX 
$> echo addMessage /INBOX /path/to/Maildir/cur | /opt/zimbra/bin/zmmailbox -z -m cuenta@dominio.com

Buscar un mensaje
$> zmmailbox -z -m cuenta@dominio.com search -t message "prueba"

Buscar un mensaje en todas las cuentas
$> zmprov -l gaa |awk '{print "zmmailbox -z -m "$1" search \"linux\" "}' |sh -v
linux es la palabra de búsqueda

Buscar correos anteriores a una fecha: (formato mes/dia/año)
$> zmmailbox -z -m cuenta@dominio.com search -t message "in:INBOX (before: 12/19/13)"

Obtener contenido de un correo
$> zmmailbox -z -m cuenta@dominio.com  gm  21940
21940 es el ID del mensaje

Ver contactos:
$> zmmailbox -z -m cuenta@dominio.com gact | less

Vaciar casilla usuario:  
$> zmmailbox -z -m accoun@domain.com ef "/Inbox"

Ver correos de una carpeta
$> zmmailbox -z -m cuenta@dominio.com search -l 100 "in:Inbox"

Ver metadata de un correo:
$> zmmetadump -m cuenta@dominio.com -i 26747

Borrar un mensaje
$> zmmailbox -z -m cuenta@dominio.com dm 4543
4543 es el id del mensaje