Está en la página 1de 90

5.

Implementacin

5. Implementacin
Solucin software escogida
Despus de haber hecho un anlisis sobre las distintas alternativas software, se ha decidido
usar Zimbra como servidor de correo electrnico para implementar el sistema de mensajera del
centro de clculo. Las alternativas evaluadas han sido:

Soluciones modulares:
Exim + ClamAV + SpamAssasin + Dovecot + STARTTLS + SMTP AUTH + Mailman: Esta
solucin est basada en los mdulos ms conocidos.
Soluciones integradas:
iRedMail: Utiliza Postfix como MTA. Es de cdigo abierto. Es una solucin integrada y se
anuncia como libre. Sin embargo, la parte gratuita es la integracin ya realizada de
todos los paquetes, prcticamente los mismos que en la solucin modular mencionada
anteriormente. Una vez integrados todos los paquetes, desde iRedMail se vende una
interfaz de configuracin y administracin que aporta numerosas ventajas y
posibilidades.
Zimbra: Utiliza Postfix como MTA. Es un software colaborativo. Incluye varias funciones
adems del correo electrnico. Tiene una versin de cdigo abierto que incluye una
versin completa del sistema. Presenta una serie de limitaciones pero ninguna en la
prestacin del servicio. Algunas de ellas: no se pueden eliminar los logotipos de Zimbra,
no incluye funciones avanzadas (por ejemplo, configuraciones de cluster), etc.
Horde: Utiliza Postfix como MTA. Al igual que Zimbra, se trata de un software
colaborativo de cdigo abierto. Est distribuido en mdulos propios, facilitando una
instalacin modular sus distintos componentes.
Soluciones cloud: no han sido evaluadas ya que no son compatibles con los requisitos de
coste requeridos.

Antes de tomar una decisin definitiva, se redujo la lista de candidatos a dos: iRedMail y
Zimbra.
El descarte de la solucin modular se debe a que Postfix y Exim tienen un rendimiento
similar, con lo cual, la solucin modular e iRedMail son prcticamente la misma, con el
inconveniente de que en la solucin modular es necesaria la instalacin e integracin de los
paquetes uno a uno. Por tanto se descarta la solucin modular frente a iRedMail.
Horde se desecha al compararlo con Zimbra. Zimbra tiene una comunidad inmensa, donde
los desarrolladores participan activamente, resolviendo dudas concretas, haciendo seguimiento de
errores conocidos y facilitando soluciones a cualquier tipo de configuracin que no est englobada
en las versiones de pago de Zimbra. Sin embargo, la informacin relativa a Horde es ms escasa y
aunque tambin cuenta con una comunidad, no es tan completa. La informacin y la diversidad
son fundamentales desde el punto de vista del desarrollo de una solucin concreta, como la que
nos ocupa. Por tanto, de entre estas dos soluciones integradas, se prefiere Zimbra.
Tras realizar las instalaciones y configuraciones bsicas de iRedMail y Zimbra, finalmente se

17

PFC SME del CdC


opta por Zimbra (http://www.zimbra.com).
A continuacin se puede ver una tabla comparativa de ambos en cuantos a los requisitos
del proyecto:
Requisitos

iRedMail

Zimbra

Autenticacin en envo
Accesibilidad completa WEBMAIL y cliente
Filtros antispam, correo basura, virus
Integracin de servicios (webdav)
Sistema de buzones por mails
Cuotas de usuario y carpetas
Monitorizacin y estadsticas
Listas de distribucin automantenidas
(mailman) (mailman)

Virtualizacin
Tabla 1: Comparativa entre iRedmail y Zimbra
Los motivos que condujeron a la decisin final de elegir Zimbra son los siguientes:

Integracin perfecta entre los distintos mdulos, ya que han sido ajustados por Zimbra
para que encajen adecuadamente.
Amplia comunidad de consulta.
Wiki propia con instrucciones, configuraciones, mtodos de importacin y casi cualquier
problema ya resuelto.
Todo integrado: Correo electrnico, calendario, contactos, tareas, almacenamiento.
Interfaz web muy potente, elaborada con AJAX (Asynchronous JavaScript And XML).
Permite una multitud de funciones tales como: arrastrar y soltar, men en el botn
derecho, versin mvil, versin ligera (html), etc. Adems, la interfaz web integra todas las
aplicaciones con una gran interoperabilidad entre todas ellas.
Rendimiento probado en numerosos escenarios, siendo la versin bsica, instalada en un
nico servidor, capaz de dar servicio a varios miles de usuarios.
Galera de extensiones (Zimlets) de instalacin trivial, con actualizaciones constantes.
Instalacin sencilla.
Numerosos casos de xito.
Todos los requisitos satisfechos.

La versin elegida es ZCS (Zimbra Collaboration Server) Open Source Edition 7.1.4, la ms
reciente.

18

5. Implementacin

Zimbra

Ilustracin 13: Logo Zimbra


La empresa Zimbra (http://www.zimbra.com) fue comprada por Yahoo!
(http://www.yahoo.com) en 2007. Poco despus de mejorar su propio correo electrnico y dejarlo
muy parecido al de Zimbra, en 2010 Yahoo! vendi Zimbra a VMWare (http://www.vmware.com).

Ilustracin 14: Zimbra Collaboration Server Open Source Edition


La versin de cdigo abierto se ofrece bajo la licencia ZPL (Zimbra Public License), derivada
de CPL (Common Public License) y MPL (Mozilla Public License).
La versin de cdigo abierto hace uso de los siguientes proyectos tambin de cdigo
abierto:

Postfix
MySQL
OpenLDAP
Jetty
Lucene
ClamAV
SpamAssasin
Amavisd y Amavisd-new
DSPAM
Aspell
James
Sieve
nginx

19

PFC SME del CdC

Mailman

Ilustracin 15: Logo Mailman (antiguo)

Ilustracin 16: Logo Mailman

Para cumplir adecuadamente con los requisitos, se hace necesaria la utilizacin de Mailman
(http://www.gnu.org/software/mailman/index.html) integrado con Zimbra.
Mailman es un gestor de listas de distribucin con licencia GNU GPL. La ventaja de este
sistema frente al que incluye Zimbra de forma integrada, es la posibilidad de que distintos usuarios
gestionen distintas listas.
As, en Zimbra, si se desea aadir una persona a una lista de distribucin, deber ser el
administrador quien se encargue de hacerlo. Mientras que Mailman cuenta con una interfaz de
gestin web preparada para definir mltiples administradores de las distintas listas de distribucin
y un nico administrador del sistema (el encargado de crear y eliminar listas), de forma tal que se
pueden considerar listas de distribucin automantenidas (requisito del proyecto).
La instalacin depender de si se va a realizar sobre una instalacin bsica de Zimbra o si se
va a instalar sobre una instalacin multiservidor.

20

5. Implementacin

Z-Push

Ilustracin 17: Logo Z-Push


La versin de cdigo abierto de Zimbra no incluye el servicio de sincronizacin de
contactos, tareas y correo electrnico, conocido como Exchange, para dispositivos mviles.
Aunque s permitira esta sincronizacin haciendo uso de IMAP, CalDav (para la agenda) y CardDav
(para los contactos), es difcil encontrar aplicaciones gratuitas que lo permitan.
Z-Push (http://z-push.sourceforge.net/soswp/) es un proyecto de cdigo abierto que
implementa un Exchange usando Microsoft ActiveSync. El funcionamiento de Z-Push, est basado
en mdulos (conocidos como backends) que implementan la interaccin con los distintos sistemas
comerciales existentes.

Ilustracin 18: Logo Zimbra backend


Z-Push Zimbra Backend (http://sourceforge.net/projects/zimbrabackend/) es una
implementacin de cdigo abierto de un backend mediante el cual puede usarse Z-Push sobre
Zimbra.
La instalacin se debe realizar en un servidor distinto a Zimbra, ya que z-push necesita
apache y apache es incompatible con Zimbra (debido a que Zimbra utiliza su propio apache). No
obstante, puede configurarse la instalacin de Zimbra para que coexista con apache, aunque no es
recomendable. Debido a que la instalacin definitiva que se va a emplear de Zimbra ser
multiservidor, como se comentar ms adelante, el servidor MTA de Zimbra ser el escenario
perfecto para instalar Z-Push, ya que en l Zimbra no estar usando apache y, por tanto, no habr
incompatibilidad.

21

PFC SME del CdC

Correo electrnico: instalacin bsica


Se va a analizar cmo se realiza la instalacin de ZCS OS 7.1.4 (Zimbra a partir de ahora)
para un nico servidor. Se implementar esta instalacin sobre Ubuntu Server 10.04.3 LTS para 64
bits (http://www.ubuntu.com/). La decisin de utilizar este sistema operativo est fundamentada
en que el centro de clculo utiliza habitualmente Debian. ZCS OS 7.1.4 no est recomendado sobre
Debian y Ubuntu es la alternativa con mayor afinidad a Debian.
En primer lugar, se debe descargar la instalacin de la pgina web de Zimbra
(www.zimbra.com), para ello:
wget http://files2.zimbra.com/downloads/7.1.4_GA/\
zcs-7.1.4_GA_2555.UBUNTU10_64.20120105094803.tgz

Posteriormente, se descomprime:
tar xvfz zcs-7.1.4_GA_2555.UBUNTU10_64.20120105094803.tgz

Es necesario instalar, como root, los siguientes paquetes:


apt-get install sysstat sqlite3

Una vez instalados, ya es posible instalar Zimbra. No obstante, la instalacin hace una
comprobacin sobre el nombre del equipo (hostname). Dicho nombre debe ser de tipo FQDN
(Fully Qualified Domain Name), es decir, de la forma nombrepropio.subdominio.dominio. Es un
requisito indispensable para continuar la instalacin. La motivacin de esto es evitar errores
derivados de que el equipo no est correctamente identificado.
Adems, es muy recomendable que se haga uso de un nombre asociado a un DNS. La
instalacin har una peticin DNS para comprobarlo y permitir continuar si no es as aunque no
sea lo ideal.
Para satisfacer esto, habra que ajustar los siguientes ficheros del sistema operativo:
/etc/hostname
+

nombre_no_FDQN
#se elimina esta lnea
nombrepropio.subdominio.dominio #se aade esta lnea

/etc/hosts
+

IP_del_equipo

nombrepropio.subdominio.dominio nombrepropio

Ahora:
cd zcs-7.1.4_GA_2555.UBUNTU10_64.20120105094803
./install.sh

Aceptamos la licencia e instalamos todos los paquetes con [Y] por defecto: ldap, logger,
mta, snmp, store, apache y spell.

22

5. Implementacin

Checking for installable packages


Found
Found
Found
Found
Found
Found
Found
Found

zimbra-core
zimbra-ldap
zimbra-logger
zimbra-mta
zimbra-snmp
zimbra-store
zimbra-apache
zimbra-spell

Select the packages to install


Install zimbra-ldap [Y] y
Install zimbra-logger [Y] y
Install zimbra-mta [Y] y
Install zimbra-snmp [Y] y
Install zimbra-store [Y] y
Install zimbra-apache [Y] y
Install zimbra-spell [Y] y
Checking required space for zimbra-core
checking space for zimbra-store
Installing:
zimbra-core
zimbra-ldap
zimbra-logger
zimbra-mta
zimbra-snmp
zimbra-store
zimbra-apache
zimbra-spell

Autorizamos que se modifique el sistema y llegamos a la pantalla de configuracin de la


instalacin:
Main menu
1) Common Configuration:
+Hostname:
+Ldap master host:
+Ldap port:
+Ldap Admin password:
+Secure interprocess communications:
+TimeZone:

mailhost.example.com
mailhost.example.com
389
set
yes
America/Los_Angeles

2) zimbra-ldap:
+Status
+Create Domain:
+Domain to create:
+Ldap root password:
+Ldap replication password:
+Ldap postfix password:
+Ldap amavis password:
+Ldap nginx password:

Enabled
Enabled
yes
mailhost.example.com
set
set
set
set
set

(contina en la siguiente pgina)

23

PFC SME del CdC


3) zimbra-store:
Enabled
+Status
Enabled
+Create Admin User:
yes
+Admin user to create:
admin@mailhost.example.com
******* +Admin Password
UNSET
+Anti-virus quarantine user:
Vxmm6@mailhost.example.com
+Enable automated spam training:
yes
+Spam training user
spamC@mailhost.example.com
+Non-spam(Ham) training user:
ham.n@mailhost.example.com
+SMTP host:
mailhost.example.com
+Web server HTTP port:
80
+Web server HTTPS port:
443
+Web server mode:
http
+IMAP server port:
143
+IMAP server SSL port:
993
+POP server port:
110
+POP server SSL port:
995
+Use spell check server:
yes
+Spell server URL:
http://mailhost.example.com:7780/aspell.php
+Configure for use with mail proxy: FALSE
+Configure for use with web proxy:
FALSE
+Enable version update checks:
TRUE
+Enable version update notifications: TRUE
+Version update notification email: admin@mailhost.example.com
+Version update source email:
admin@mailhost.example.com
4) zimbra-mta:
Enabled
5) zimbra-snmp:
Enabled
6) zimbra-logger:
Enabled
7) zimbra-spell:
Enabled
8) zimbra-convertd:
Enabled
9) Default Class of Service Configuration:
10) Enable default backup schedule:
yes
c) Collapse menu
r) Start servers after configuration:
yes
s) Save config to file
q) Quit

Las lneas marcadas con **** al inicio indican que necesitan ser revisadas para completar la
configuracin.
Para el correcto funcionamiento del sistema, tan slo habra que definir la contrasea de
administrador, en zimbra-store (3) => admin password (4).
No obstante, sera adecuado configurar las contraseas de administracin de LDAP y los
dems servicios del men zimbra-ldap (2). Para ello configuramos adecuadamente las opciones:

ldap root password (4)


ldap replication password (5)
ldap postfix password (6)
ldap amavis password (7)
ldap nginx password (8)

Podemos definir la zona horaria en common configuration (1) => timezone (6), aunque

24

5. Implementacin

tambin se puede ajustar posteriormente.


Finalmente, en zimbra-ldap (2) => domain to create (3) tenemos el nombre de dominio que
se va a crear. Al acabar, pulsamos la opcin apply (letra a), que solo aparecer cuando no haya
lneas marcadas con ****.
Al concluir la instalacin, estara instalado y funcionando el servidor de correo electrnico
de Zimbra. La informacin bsica para poder gestionarlo:

Estado del servicio. Ejecutando:


service zimbra status

Parar el servicio. Ejecutando:


service zimbra stop

Iniciar el servicio. Ejecutando:


service zimbra start

Reiniciar el servicio. Ejecutando:


service zimbra restart

Interfaz de usuario:
http://mailhost.example.com/

Consola de administracin:
https://mailhost.example.com:7071/zimbraAdmin/

25

PFC SME del CdC

Instalacin e integracin de mailman


Como se ha comentado en el diseo de la solucin, se va a integrar mailman con Zimbra.
Para ello, ser necesario tener el siguiente script:
/root/mailman.sh (permisos 777)
#!/bin/sh
# Script para la instalacion de mailman con zimbra
if [ $# -gt "1" ]; then
echo "USO: instalacionmailman.sh"
echo "ejemplo: instalacionmailman.sh (para un unico servidor en el
sistema)"
echo "USO: instalacionmailman.sh nombre_servidor"
echo "ejemplo: instalacionmailman.sh servidor.dominio.com"
else
#******************* Nombre del servidor *********************
if [ $# -eq "0" ]; then
SERVIDOR=$(sudo -u zimbra /opt/zimbra/bin/zmprov gad)
echo "Mailman se instalara para el siguiente servidor:"
echo $SERVIDOR
echo "si es correcto pulse ENTER, si no CONTROL-C"
echo "y ejecute: instalacionmailman.sh nombre_servidor"
read variable
else
SERVIDOR=$1
fi
echo $SERVIDOR
#*************************************************************
apt-get update
apt-get install python-dev make chkconfig
adduser --no-create-home --disabled-login mailman
#***************** Instalacion de mailman *******************
cd /usr/local/
wget http://ftp.gnu.org/gnu/mailman/mailman-2.1.14-1.tgz
#procede si el tamano de la instalacion de mailman es correcto
if [ $(ls -l mailman-2.1.14-1.tgz | awk '{print $5-8201307}') -eq "1" ];
then
mkdir mailman
chgrp mailman mailman
chmod a+rx,g+ws mailman
tar xvfz mailman-2.1.14-1.tgz
cd mailman-2.1.14-1
./configure --with-cgi-gid=zimbra
make install
cd /
rm /usr/local/mailman-2.1.14-1.tgz
rm -r /usr/local/mailman-2.1.14-1
#***************************************************************
cd /usr/local/mailman/archives
chown zimbra private
chmod o-x private
/usr/local/mailman/bin/check_perms -f
/usr/local/mailman/bin/check_perms -f
cp /opt/zimbra/conf/httpd.conf /opt/zimbra/conf/httpd.confBK
#*************** Modificacion de httpd.conf ********************
echo "ServerName ${SERVIDOR}" >> /etc/apache2/httpd.conf
echo >> /opt/zimbra/conf/httpd.conf
echo
"ScriptAlias
/mailman/
/usr/local/mailman/cgi-bin/"
>>
/opt/zimbra/conf/httpd.conf

(contina en la siguiente pgina)

26

5. Implementacin
echo >> /opt/zimbra/conf/httpd.conf
echo "<Directory /mailman/>" >> /opt/zimbra/conf/httpd.conf
echo "AllowOverride None" >> /opt/zimbra/conf/httpd.conf
echo "Options ExecCGI" >> /opt/zimbra/conf/httpd.conf
echo "Order allow,deny" >> /opt/zimbra/conf/httpd.conf
echo "Allow from all" >> /opt/zimbra/conf/httpd.conf
echo "</Directory>" >> /opt/zimbra/conf/httpd.conf
echo >> /opt/zimbra/conf/httpd.conf
echo
"Alias
/pipermail/
/usr/local/mailman/archives/public/"
>>
/opt/zimbra/conf/httpd.conf
echo >> /opt/zimbra/conf/httpd.conf
echo "<Directory /pipermail/>" >> /opt/zimbra/conf/httpd.conf
echo
"Options
Indexes
MultiViews
FollowSymLinks"
>>
/opt/zimbra/conf/httpd.conf
echo "AllowOverride None" >> /opt/zimbra/conf/httpd.conf
echo "Order allow,deny" >> /opt/zimbra/conf/httpd.conf
echo "Allow from all" >> /opt/zimbra/conf/httpd.conf
echo "</Directory>" >> /opt/zimbra/conf/httpd.conf
echo >> /opt/zimbra/conf/httpd.conf
echo
"RedirectMatch
^/mailman[/]*$
http://${SERVIDOR}:7780/mailman/listinfo" >> /opt/zimbra/conf/httpd.conf
echo >> /opt/zimbra/conf/httpd.conf
chown zimbra:zimbra /opt/zimbra/conf/httpd.conf
chmod 444 /opt/zimbra/conf/httpd.conf
#**************************************************************
cd /opt/zimbra/httpd/htdocs
mkdir mmimages
cp /usr/local/mailman/icons/* mmimages/
sudo -u zimbra /opt/zimbra/bin/zmapachectl stop
sudo -u zimbra /opt/zimbra/bin/zmapachectl start
cp
/opt/zimbra/postfix/conf/main.cf
/opt/zimbra/postfix/conf/main.cfBK
#***************** Modificacion de main.cf ********************
cat
/opt/zimbra/postfix/conf/main.cf
|
awk
'{if($1=="virtual_alias_maps"){
print
"virtual_alias_maps
=
ldap:/opt/zimbra/conf/ldap-vam.cf"} else{ print $0}}' > prueba.txt
mv prueba.txt /opt/zimbra/postfix/conf/main.cf
cat /opt/zimbra/postfix/conf/main.cf | awk '{if($1=="alias_maps"){
print "alias_maps = hash:/etc/aliases,hash:/usr/local/mailman/data/aliases"}
else{ print $0}}' > prueba.txt
mv prueba.txt /opt/zimbra/postfix/conf/main.cf
chown zimbra:zimbra /opt/zimbra/postfix/conf/main.cf
chmod 644 /opt/zimbra/postfix/conf/main.cf
#**************************************************************
echo >> /usr/local/mailman/Mailman/mm_cfg.py
echo "MTA = 'Postfix'" >> /usr/local/mailman/Mailman/mm_cfg.py
echo "POSTFIX_ALIAS_CMD = '/opt/zimbra/postfix/sbin/postalias'" >>
/usr/local/mailman/Mailman/mm_cfg.py
echo
"POSTFIX_MAP_CMD
=
'/opt/zimbra/postfix/sbin/postmap'"
>>
/usr/local/mailman/Mailman/mm_cfg.py
echo
"IMAGE_LOGOS
=
'/mmimages/'"
>>
/usr/local/mailman/Mailman/mm_cfg.py
echo
"DEFAULT_URL_PATTERN
=
'http://%s:7780/mailman/'"
>>
/usr/local/mailman/Mailman/mm_cfg.py
/usr/local/mailman/bin/newlist mailman
/usr/local/mailman/bin/config_list
-i
/usr/local/mailman/data/sitelist.cfg mailman
/usr/local/mailman/bin/genaliases
/opt/zimbra/postfix-2.7.4.2z/sbin/newaliases

(contina en la siguiente pgina)

27

PFC SME del CdC


chown mailman:mailman /usr/local/mailman/data/aliases*
chown mailman:mailman /usr/local/mailman/data/virtual-mailman*
cd /usr/local/mailman/cron
crontab -u mailman crontab.in
cp /usr/local/mailman/scripts/mailman /etc/init.d
chkconfig --add mailman
cp /opt/zimbra/conf/zmmta.cf /opt/zimbra/conf/zmmta.cfBK
#***************** Modificacion de zmmta.cf ********************
cat
/opt/zimbra/conf/zmmta.cf
|
awk
'{if($0=="\t\tPOSTCONF
mydestination VAR zimbraMtaMyDestination"){ print "\t\tPOSTCONF mydestination
LOCAL postfix_mydestination"} else{ print $0}}' > prueba.txt
mv prueba.txt /opt/zimbra/conf/zmmta.cf
cat
/opt/zimbra/conf/zmmta.cf
|
awk
'{if($1=="POSTCONF"
&&
$2=="alias_maps"){ print "#"$0} else{ print $0}}' > prueba.txt
mv prueba.txt /opt/zimbra/conf/zmmta.cf
chown zimbra:zimbra /opt/zimbra/conf/zmmta.cf
chmod 444 /opt/zimbra/conf/zmmta.cf
#**************************************************************
/etc/init.d/mailman stop; /etc/init.d/mailman start
/etc/init.d/zimbra stop; /etc/init.d/zimbra start
echo
"sudo
-u
zimbra
/opt/zimbra/bin/zmlocalconfig
-e
postfix_mydestination='localhost ${SERVIDOR}'" > /1.txt
sh /1.txt
rm /1.txt
else
echo "Error en la descarga"
fi
clear
echo "Instalacion correcta"
echo "Puede comprobar el correcto funcionamiento del servicio en la
url:"
echo "http://${SERVIDOR}:7780/mailman/listinfo"
fi

Basta con ejecutarlo y seguir las instrucciones para la correcta instalacin de mailman y su
integracin con Zimbra.

28

5. Implementacin

Instalacin de Z-Push
Como se ha comentado en el diseo de la solucin, se va a hacer uso de Z-Push para el
intercambio con dispositivos mviles. En una instalacin bsica de Zimbra, Z-Push deber ser
instalado en otro servidor distinto al de Zimbra.
Para la instalacin, puede hacerse uso del siguiente script, teniendo apache2 ya instalado:
/root/z-push.sh (permisos 777)
#!/bin/sh
cd /root/; mkdir zpushTempinstall; cd zpushTempinstall
apt-get install -y subversion php5-curl
mkdir /var/www/z-push
svn checkout svn://svn.berlios.de/z-push/branches/as12.1 /var/www/z-push
mkdir /var/www/z-push/zimbra
svn
checkout
https://zimbrabackend.svn.sourceforge.net/svnroot/zimbrabackend/zimbrabackend/branches/as12.1 /var/www/z-push/zimbra
mkdir /var/www/z-push/backend-old
mv /var/www/z-push/backend/* /var/www/z-push/backend-old
mv /var/www/z-push/backend-old/backend.php /var/www/z-push/backend/
mv /var/www/z-push/backend-old/diffbackend.php /var/www/z-push/backend/
mv /var/www/z-push/zimbra/zimbra.php /var/www/z-push/backend/
chgrp www-data /var/www/z-push/state
chmod g+w /var/www/z-push/state
touch /var/www/z-push/debug.txt
chmod 777 /var/www/z-push/debug.txt
#ajusta configuracion de z-push para usar el backend de zimbra
fechaunica1=`date +%s`
sleep 1
fechaunica2=`date +%s`
touch $fechaunica1
touch $fechaunica2
cat
/var/www/z-push/config.php
|
awk
'{if($1!="$BACKEND_PROVIDER"){print
$0}else{print "\t$BACKEND_PROVIDER = \"BackendZimbra\";"}}' > $fechaunica1
cat $fechaunica1 | sed 's/Europe\/Berlin/Europe\/Madrid/g' > $fechaunica2
cat $fechaunica2 | awk -F \' '{if($2!="PROVISIONING"){print $0}else{print
$1"\x27"$2"\x27, false);"}}' > $fechaunica1
cat $fechaunica1 | awk '{if($1!="?>"){print $0}else{}}' > $fechaunica2
echo "define('ZIMBRA_DEBUG',true);" >> $fechaunica2
echo "define('ZIMBRA_URL', 'https://mbxetsi.us.es');" >> $fechaunica2
echo "define('ZIMBRA_USER_DIR', 'zimbra');" >> $fechaunica2
echo "define('ZIMBRA_SYNC_CONTACT_PICTURES', true);" >> $fechaunica2
echo "define('ZIMBRA_VIRTUAL_CONTACTS',true);" >> $fechaunica2
echo "define('ZIMBRA_VIRTUAL_APPOINTMENTS',true);" >> $fechaunica2
echo "define('ZIMBRA_VIRTUAL_TASKS',true);" >> $fechaunica2
echo "define('ZIMBRA_IGNORE_EMAILED_CONTACTS',true);" >> $fechaunica2
echo "define('ZIMBRA_HTML',true);" >> $fechaunica2
echo >> $fechaunica2
echo "?>" >> $fechaunica2
cat $fechaunica2 > /var/www/z-push/config.php
rm $fechaunica1; rm $fechaunica2
#sitio disponible z-push con puerto 80
echo "<VirtualHost *:80>" > /etc/apache2/sites-available/z-push
echo "ServerAdmin admin@etsi.us.es" >> /etc/apache2/sites-available/z-push
echo "ServerName etsi.us.es" >> /etc/apache2/sites-available/z-push
echo >> /etc/apache2/sites-available/z-push
echo "DirectoryIndex index.php" >> /etc/apache2/sites-available/z-push
echo "DocumentRoot /var/www/z-sync/" >> /etc/apache2/sites-available/z-push
echo
"Alias
/Microsoft-Server-ActiveSync
/var/www/z-sync/index.php"
>>
/etc/apache2/sites-available/z-push

(contina en la siguiente pgina)

29

PFC SME del CdC


echo >> /etc/apache2/sites-available/z-push
echo "<Directory />" >> /etc/apache2/sites-available/z-push
echo "AllowOverride All" >> /etc/apache2/sites-available/z-push
echo "</Directory>" >> /etc/apache2/sites-available/z-push
echo >> /etc/apache2/sites-available/z-push
echo "php_flag magic_quotes_gpc off" >> /etc/apache2/sites-available/z-push
echo "php_flag register_globals off" >> /etc/apache2/sites-available/z-push
echo "php_flag magic_quotes_runtime off" >> /etc/apache2/sites-available/z-push
echo "php_flag short_open_tag on" >> /etc/apache2/sites-available/z-push
echo >> /etc/apache2/sites-available/z-push
echo
"ErrorLog
/var/log/apache2/z-sync/error.log"
>>
/etc/apache2/sitesavailable/z-push
echo
"CustomLog
/var/log/apache2/z-sync/access.log
combined"
>>
/etc/apache2/sites-available/z-push
echo "</VirtualHost>" >> /etc/apache2/sites-available/z-push
#sitio disponible z-push con SSL y puerto 443
echo "<IfModule mod_ssl.c>" > /etc/apache2/sites-available/z-push_ssl
echo "<VirtualHost _default_:443>" >> /etc/apache2/sites-available/z-push_ssl
echo "ServerAdmin admin@etsi.us.es" >> /etc/apache2/sites-available/z-push_ssl
echo "ServerName etsi.us.es" >> /etc/apache2/sites-available/z-push_ssl
echo "DirectoryIndex index.php" >> /etc/apache2/sites-available/z-push_ssl
echo "DocumentRoot /var/www/z-push/" >> /etc/apache2/sites-available/z-push_ssl
echo
"Alias
/Microsoft-Server-ActiveSync
/var/www/z-push/index.php"
>>
/etc/apache2/sites-available/z-push_ssl
echo "" >> /etc/apache2/sites-available/z-push_ssl
echo "<Directory />" >> /etc/apache2/sites-available/z-push_ssl
echo "AllowOverride None" >> /etc/apache2/sites-available/z-push_ssl
echo "</Directory>" >> /etc/apache2/sites-available/z-push_ssl
echo "" >> /etc/apache2/sites-available/z-push_ssl
echo "php_flag magic_quotes_gpc off" >> /etc/apache2/sites-available/z-push_ssl
echo "php_flag register_globals off" >> /etc/apache2/sites-available/z-push_ssl
echo "php_flag magic_quotes_runtime off" >> /etc/apache2/sites-available/zpush_ssl
echo "php_flag short_open_tag on" >> /etc/apache2/sites-available/z-push_ssl
echo "" >> /etc/apache2/sites-available/z-push_ssl
echo "ErrorLog
/var/log/apache2/z-push/error.log" >> /etc/apache2/sitesavailable/z-push_ssl
echo
"CustomLog
/var/log/apache2/z-push/access.log
combined"
>>
/etc/apache2/sites-available/z-push_ssl
echo "" >> /etc/apache2/sites-available/z-push_ssl
echo "SSLEngine on" >> /etc/apache2/sites-available/z-push_ssl
echo
"SSLCertificateFile
/etc/apache2/ssl/web.crt"
>>
/etc/apache2/sitesavailable/z-push_ssl
echo "SSLCertificateKeyFile /etc/apache2/ssl/server.key" >> /etc/apache2/sitesavailable/z-push_ssl
echo "SSLCertificateChainFile /etc/apache2/ssl/ca.crt" >> /etc/apache2/sitesavailable/z-push_ssl
echo "" >> /etc/apache2/sites-available/z-push_ssl
echo "SSLCACertificateFile /etc/apache2/ssl/ca.crt" >> /etc/apache2/sitesavailable/z-push_ssl
echo "" >> /etc/apache2/sites-available/z-push_ssl
echo "</VirtualHost>" >> /etc/apache2/sites-available/z-push_ssl
echo "</IfModule>" >> /etc/apache2/sites-available/z-push_ssl
echo "" >> /etc/apache2/sites-available/z-push_ssl
#activa por defecto el seguro y pasa a generar los certificados
cd /etc/apache2/sites-enabled
ln -s ../sites-available/z-push_ssl z-push_ssl
#activa el modulo ssl y php
cd /etc/apache2/mods-enabled
ln -s ../mods-available/ssl.conf ssl.conf
ln -s ../mods-available/ssl.load ssl.load
if [ -e /etc/apache2/mods-available/php5.conf ]; then
echo > /dev/null
else

(contina en la siguiente pgina)

30

5. Implementacin
echo "<IfModule mod_php5.c>" > /etc/apache2/mods-available/php5.conf
echo "
AddType application/x-httpd-php .php .phtml .php3" >>
/etc/apache2/mods-available/php5.conf
echo
"
AddType
application/x-httpd-php-source
.phps"
>>
/etc/apache2/mods-available/php5.conf
echo "</IfModule>" >> /etc/apache2/mods-available/php5.conf
fi
if [ -e /etc/apache2/mods-available/php5.load ]; then
echo > /dev/null
else
echo
"LoadModule
php5_module
/usr/lib/apache2/modules/libphp5.so"
>
/etc/apache2/mods-available/php5.load
fi
ln -s ../mods-available/php5.conf php5.conf
ln -s ../mods-available/php5.load php5.load
rm /etc/apache2/sites-available/default-ssl
echo "La instalacion de z-push ha finalizado correctamente para el puerto 443,
mediante SSL"
echo "Si desea generar los certificados autofirmados para poder usar apache con
SSL pulse cualquier tecla"
echo "En caso contrario, pulse CONTROL+C para salir."
read variable
#generacion de certificados
mkdir /root/ssl
cd /root/ssl
echo "Generamos la clave de CA:"; echo "Se debe introducir una clave cuando se
solicite"; echo
openssl genrsa -des3 -out ca.key 2048
echo; echo "Proceso de generacin de clave de CA finalizado. Pulse para
continuar..."
read variable
clear
echo "Generamos el certificado de CA:"; echo "Se debe introducir la clave
anterior cuando se solicite"; echo
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt
echo; echo "Proceso de generacin de certificado de CA finalizado. Pulse para
continuar..."
read variable
clear
echo "Generamos la clave de servidor:"; echo "Se debe introducir una clave
cuando se solicite"; echo
openssl genrsa -des3 -out server.key 1024
echo; echo "Proceso de generacin de clave de servidor finalizado. Pulse para
continuar..."
read variable
clear
echo "Generamos la peticion de certificado de servidor:"; echo "IMPORTANTE:
"Common name" debe ser el nombre FQDN del servidor"; echo
openssl req -new -key server.key -out web.csr
echo; echo "Proceso de generacin de peticion de certificado de servidor
finalizado. Pulse para continuar..."
read variable
clear
echo "Generamos el certificado de servidor:"; echo "Se debe introducir la clave
anterior cuando se solicite"; echo
openssl x509 -req -in web.csr -out web.crt -sha1 -CA ca.crt -CAkey ca.key CAcreateserial -days 3650
echo; echo "Proceso de generacin de certificado de servidor finalizado. Pulse
para continuar..."
read variable; clear
mv server.key server.key.secure
echo "Reducimos la seguridad de la clave para poder cargar el servicio sin
interaccion humana:"; echo "Se debe introducir la clave anterior cuando se
solicite"; echo

(contina en la siguiente pgina)

31

PFC SME del CdC


openssl rsa -in server.key.secure -out server.key
echo; echo "Proceso finalizado. Pulse para continuar..."
read variable
chmod 0400 *.key
mkdir /etc/apache2/ssl
cp web.crt /etc/apache2/ssl/web.crt
cp ca.crt /etc/apache2/ssl/ca.crt
cp server.key /etc/apache2/ssl/server.key
service apache2 restart
clear
echo "Proceso completado."

32

5. Implementacin

Tamao de la instalacin
Zimbra nos facilita el clculo del espacio requerido por una instalacin para la cual se haya
fijado el tamao de buzn por usuario y el nmero de usuarios. As, suponiendo 200 usuarios y
buzones de 0,5 GB, se necesitaran aproximadamente:
Concepto
Datos de usuario

Clculo
Resultado
Nmero de usuarios tamao de
100 GB
buzn
por 5% del tamao de datos de usuario
5 GB

Datos
necesarios
MySQL
Instalacin de Zimbra
Registros de Zimbra (logs)
ndices de Zimbra
TOTAL

Tamao fijo
Tamao fijo
25% del tamao de datos de usuario

10 GB
20 GB
25 GB
160 GB

Tabla 2: Tamao necesario para la instalacin de Zimbra

33

PFC SME del CdC

Virtualizacin

Ilustracin 19: Logo VMWare


Para la virtualizacin se ha recurrido a VMware (http://www.vmware.com), y en concreto al
producto ESXi 4.1 que es gratuito y no presenta limitaciones importantes para el objetivo
perseguido frente a otras versiones (ESX, por ejemplo). Existe una versin superior, la 5.0, pero
incluye una limitacin de uso de la memoria RAM del hipervisor de 8 GB, lo cual no resulta
adecuado ya que los equipos que van a ser utilizados cuentan con 24 GB de RAM.
La decisin de emplear VMware frente a otras tcnicas de virtualizacin (como Xen o
Hyper-V) no est fundamentada en que Zimbra sea propiedad de VMware. En el Centro de Clculo
ya se haba usado VMware con xito y es por ello por lo que se prefiere seguir con su utilizacin.

1.
2.
3.
4.
5.
6.
7.

34

Para la instalacin de ESXi 4.1 en un equipo, es necesario seguir los siguientes pasos:
Registrarse en la pgina de VMware.
Acceder al producto (ESXi 4.1).
Solicitar el uso de este producto para nuestra cuenta. Nos facilitar un nmero de serie que
nos permitir activar el producto de manera gratuita y para su uso indefinido.
Descargar la instalacin de VMware en un archivo ISO.
Grabacin del archivo ISO en un CD (o memoria USB) e instalacin en el equipo (a partir de
ahora hipervisor).
Una vez instalado siguiendo los pasos indicados en la instalacin es necesario definirle una
contrasea de administrador.
Posteriormente, se puede descargar el cliente vSphere Client 4.1 desde la interfaz web que
presenta el hipervisor instalado. Para acceder a ella basta con acceder a
https://iphipervisor/, donde iphipervisor ser la IP que se le haya asignado al hipervisor en
la instalacin. Al acceder, se mostrar lo siguiente:

5. Implementacin

Ilustracin 20: Pgina web mostrada al acceder a: https://iphipervisor/


vSphere Cliente permitir gestionar completamente el hipervisor. Podrn crearse nuevas
mquinas virtuales, arrancarlas o detenerlas, reiniciarlas, cambiar su hardware asociado, etc.
Adems facilitar la gestin del hipervisor: cmo se distribuye su espacio de almacenamiento,
cmo mapea la red y las distintas mquinas virtuales, etc.
Tambin es interesante, desde el equipo fsico, acceder a la consola de comandos, pulsando
ALT + F1. Para activar esta opcin hay que acceder como root en ALT + F2, ir a Troubleshooting
options:

Ilustracin 21: Pgina principal de configuracin del hipervisor


y pulsar sobre Enable Local Tech Support:

Ilustracin 22: Habilitacin de la consola de comandos del hipervisor


Ahora, en ALT + F1, es necesario autenticarse (como root, por ejemplo). Una vez aqu, se

35

PFC SME del CdC


puede activar el servidor de SSH para un determinado puerto de la siguiente manera:
1. Acceder al archivo de configuracin de red.
vi /etc/inetd.conf

2. Editar (presionar INSERTAR) las lneas 5 y 6 eliminando # del principio.


/etc/inetd.conf
-#
+
+
-#
+
+

ssh
ssh
ssh
ssh

stream
tcp
nowait
root
/sbin/dropbearmulti \
dropbear ++min=0,swap,group=shell -w -i -K60
stream
tcp
nowait
root
/sbin/dropbearmulti \
dropbear ++min=0,swap,group=shell -w -i -K60
stream
tcp
nowait
urp
/sbin/dropbearmulti \
dropbear ++min=0,swap,group=shell -i -K60
stream
tcp
nowait
urp
/sbin/dropbearmulti \
dropbear ++min=0,swap,group=shell -i -K60

3. Guardar y salir (presionar ESC, luego :wq e INTRO).


4. Acceder al archivo de los servicios y puertos.
vi /etc/services

5. Editar las lneas 45 y 46 cambiando el nmero de puerto por el deseado.


/etc/services
+
+

ssh
ssh
ssh
ssh

22/tcp
55443/tcp
22/udp
55443/udp

#
#
#
#

SSH
SSH
SSH
SSH

Remote
Remote
Remote
Remote

Login
Login
Login
Login

Protocol
Protocol
Protocol
Protocol

6. Guardar y salir.
7. Reiniciar la red en el hipervisor con:
kill -HUP `ps | grep inetd | awk '{print $1}'`

Este proceso nos permitir acceder al hipervisor por SSH y ejecutar ciertos comandos, sin
necesidad de hacer uso de vSphere Client que nicamente est disponible para Windows.

36

5. Implementacin

Alta disponibilidad
Introduccin
La alta disponibilidad, como se explica en el marco terico, hace uso de dos recursos
compartidos, un sistema de ficheros comn y una IP de servicio. Ambos, deben estar disponibles a
ambos equipos y deben conmutar en caso de fallo de uno de los equipos.

Para la conmutacin y para la IP del servicio se ha decidido usar HEARTBEAT, que cumple a
la perfeccin con las exigencias del escenario y los requisitos demandados.
Para el sistema de ficheros comn se ha decidido usar DRBD + GFS2. DRBD se ajusta al
funcionamiento necesitado por s solo. Su utilizacin en conjunto con GFS2 est muy por
encima en prestaciones demandadas. An as, se emplea con esta configuracin para
garantizar, sin coste adicional, que, antes cualquier situacin posible, no se producir
corrupcin en el sistema de ficheros.

En lo que sigue, se va a analizar la configuracin de alta disponibilidad diseada para este


sistema de mensajera electrnica. Siempre se consideran dos equipos que va a compartir recursos
(IP de servicio y datos necesarios para la prestacin del servicio). Lo visto en este apartado ser
usado como pieza clave en la constitucin del sistema final.

37

PFC SME del CdC

Heartbeat

Ilustracin 23: Logo Heartbeat


Para conseguir la conmutacin de recursos, necesaria en la alta disponibilidad, se ha hecho
uso de la aplicacin heartbeat (http://linux-ha.org/wiki/Heartbeat), parte del proyecto Linux-HA,
con licencia GNU GPL.
Para instalar heartbeat para Ubuntu, basta con ejecutar como root:
apt-get install heartbeat

que realiza la instalacin de los siguientes paquetes: cluster-agents, cluster-glue, gawk,


heartbeat, libcluster-glue, libcorosync4, libesmtp5, libheartbeat2, libnet1, libopenhpi2, libopenipmi0,
openhpid y pacemaker.

Una vez instalado, la configuracin de heartbeat se controla con los siguientes ficheros:

/etc/ha.d/authkeys: Almacena la informacin que intercambiarn los equipos para


garantizar una comunicacin segura entre ellos y evitar la suplantacin de identidad por
parte de un tercero. Este fichero deber ser idntico en ambos equipos. La configuracin
mnima de seguridad ser la siguiente:

/etc/ha.d/authkeys
auth 1
1 crc
2 sha1 HI!
3 md5 Hello!

/etc/ha.d/ha.cf: Contiene los parmetros de configuracin del funcionamiento de


heartbeat; direcciones IP, interfaces, tiempos de espera, etc. Este fichero ser distinto en
los dos equipos. Para la prestacin del servicio en el escenario en el que nos encontramos,
se ha optado por la siguiente configuracin:

vm1:/etc/ha.d/ha.cf
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 12
initdead 18
udpport 694
ucast eth0 192.168.137.2
auto_failback on
node vm1
node vm3

38

#nombre del log debug


#nombre del log de heartbeat
#configuracin para el log del sistema
#tiempo del latido en segundos
#tiempo en declarar al otro muerto
#tiempo antes de emprender acciones
#puerto udp para la comunicacin
#interfaz local e ip del nodo opuesto
#ceder su puesto si el primario est
#nombre del primer equipo = hostname
#nombre del segundo equipo = hostname

5. Implementacin

Para el otro equipo, el fichero sera el siguiente:


vm2:/etc/ha.d/ha.cf
debugfile /var/log/ha-debug
logfile
/var/log/ha-log
logfacility local0
keepalive 2
deadtime 12
initdead 18
udpport 694
ucast eth0 192.168.137.1
auto_failback on
node vm1
node vm3

#nombre del log debug


#nombre del log de heartbeat
#configuracin para el log del sistema
#tiempo del latido en segundos
#tiempo en declarar al otro muerto
#tiempo antes de emprender acciones
#puerto udp para la comunicacin
#interfaz local e ip del nodo opuesto
#ceder su puesto si el primario est
#nombre del primer equipo = hostname
#nombre del segundo equipo = hostname

/etc/ha.d/haresources: Contiene informacin sobre los recursos compartidos (IPs, sistema


de ficheros, scripts contenidos en /etc/init.d que se ejecutarn con start o stop, etc.) y qu
equipo ser el que los ejecutar por defecto (primario). Este fichero deber ser idntico en
ambos equipos. En nuestro escenario, este fichero contendr la siguiente informacin:

/etc/ha.d/haresources
vm1 drbddisk::all Filesystem::/dev/drbd0::/opt::gfs2::rw \
IPaddr::172.16.1.201/22/eth1 zimbra
#parmetros en orden, separados por espacios:
#nombre del equipo primario
#recursos compartidos ordenados, donde a la hora de:
# + tomar el servicio se ejecutaran de izquierda a derecha
#
(los scripts con start)
# + abandonar el servicio, se ejecutaran de derecha a izquierda
#
(los scripts con stop)
#para sistemas de ficheros:
#drbddisk::nombre_recurso_drbd (o all para todos)
#Filesystem::nombre_fisico::punto_de_montaje::tipo::tipo_de_montaje
#para IPs:
#Ipaddr::valor_IP/mascara/interfaz_fisica

Con esta configuracin el funcionamiento sera el siguiente:


Si ambos equipos estn activos y:
vm2 se vuelve indisponible: No ocurre nada, ya que est como primario el equipo vm1.
Perderamos la redundancia que nos aporta el segundo equipo, pero el servicio no se
vera afectado.
Despus, el equipo vm2 vuelve a estar disponible: Tampoco sucede nada de cara al
servicio, aunque volveramos a tener la proteccin del segundo equipo.
vm1 se vuelve indisponible: vm2 lo detecta y asume el control del servicio.
vm1 ejecutar, si puede:
1. /etc/init.d/zimbra stop, parando el servicio Zimbra.
2. Desvincula la IP 172.16.1.201/22 de su interfaz eth1.
3. Desmonta el sistema de ficheros /dev/drbd0 del directorio /opt.
4. Cambia el equipo a secundario en el servicio drbd.
vm3 ejecutar:
1. Cambia el equipo a primario en el servicio drbd.
2. Monta el sistema de ficheros /dev/drbd0 en el directorio /opt.
3. Vincula la IP 172.16.1.201/22 a su interfaz eth1.
4. /etc/init.d/zimbra start, iniciando el servicio Zimbra.

39

PFC SME del CdC

Si vm3 funciona y es quin controla el servicio: y


vm1 se vuelve disponible: vm1 recupera el control
vm3 parar los scripts con stop y abandonar la IP y el sistema de ficheros en favor
de vm1 debido a la clusula auto_failback on de su fichero /etc/ha.d/ha.cf.
vm1 tomar los recursos y arrancar los scripts con start.

De esta forma, el paso del testigo del servicio y de la inicializacin de todos los recursos
necesarios para ejecutar el servicio corren a cuenta de heartbeat.

40

5. Implementacin

Watchdog
Watchdog (http://watchdog.sourceforge.net/) es una herramienta software que
monitoriza recursos, y en caso de que alguno de ellos falle, reinicia el equipo. Debidamente
utilizado, es el complemento perfecto de heartbeat. As, heartbeat fija el rol al equipo que est
activo y watchdog reestablece el equipo que deje de estar activo por un fallo en algn servicio
monitorizado. En conjunto, mantendrn:
1. El servicio activo siempre (excepto el tiempo de cambio entre mquinas, aproximadamente
3 o 4 minutos).
2. Los equipos, el mayor tiempo posible activos y listos para prestar el servicio.
Para instalar watchdog para Ubuntu, basta con ejecutar como root:
apt-get install watchdog

Posteriormente, ser necesario ejecutar lo siguiente:


echo "file = /var/log/messages" >> /etc/watchdog.conf
echo "watchdog-device = /dev/watchdog" >> /etc/watchdog.conf
/sbin/modprobe softdog
echo 'softdog' >> /etc/modules

Finalmente, se podrn configurar todos los recursos susceptibles de ser monitorizados,


en /etc/watchdog.conf. Un ejemplo de esto ser tratado ms adelante, en la instalacin completa
del sistema.

41

PFC SME del CdC

DRBD (Distributed Replicated Block Device)

Ilustracin 24: Logo DRBD


Para conseguir un sistema de ficheros compartido, se ha hecho uso de la aplicacin DRBD
(http://www.drbd.org/), de LINBIT, con licencia GNU GPL.
DRBD mantiene sincronizadas dos particiones del mismo tamao en equipos distintos
unidos por sus interfaces de red, como se muestra en la siguiente figura:

Ilustracin 25: Esquema de funcionamiento de DRBD


En el marco terico, se analiz que la situacin bsica para un sistema de alta disponibilidad
con un sistema de ficheros compartido, deba responder a la siguiente estructura:

Ilustracin 26: Esquema fundamental de alta


disponibilidad

42

5. Implementacin

Este modelo puede ser satisfecho, empleando DRBD, de la siguiente manera:

Ilustracin 27: Solucin que aporta DRBD a la alta


disponibilidad
Es decir, un sistema de ficheros externo de comn acceso a ambos se sustituye por una
particin local a cada equipo, sincronizadas mediante DRBD y montada slo para el equipo que
est prestando el servicio. Este mtodo tiene numerosas ventajas:

DRBD es un sistema estable, muy probado y con una documentacin muy extensa.
Disminuye el tiempo de acceso con respecto a cualquier recurso remoto, ya sea para
escritura o lectura, debido a que los accesos realizan de forma local.
Hace uso de roles (primario y secundario) facilitando que un sistema configurado con un rol
pueda cambiarlo y actuar con otro.
En la configuracin de este sistema en concreto, es totalmente transparente al servicio.
Debido a que slo uno de los dos equipos estar como activo, el transvase de informacin
ser en un solo sentido, hacia el pasivo. Este equipo no estar esperando los datos del otro,
por lo que no habr bloqueo. Este hecho implica que cualquier posible retardo introducido
por la red ser inocuo ya que se producir sobre el equipo pasivo.
Permite tener dos equipos completamente autnomos en caso de fallo irrecuperable de
uno de ellos.
Permite una copia de seguridad del sistema. Para ello slo habra que parar y aislar el
equipo que no da el servicio y realizar una copia completa de todo el sistema mientras el
otro sigue prestando el servicio.

Para instalar DRBD en Ubuntu, hay que instalar una serie de paquetes necesarios y para
ello hay que ejecutar como root:
apt-get
apt-get
apt-get
apt-get

install
install
install
install

ethstats dpatch patchutils cogito git-core sp


docbook-utils docbook build-essential flex dpkg-dev
fakeroot module-assistant
drbd8-utils

43

PFC SME del CdC


Una vez instalado, la configuracin de DRBD se encuentra en el siguiente fichero:

/etc/drbd.conf: Contiene toda la informacin que necesita DRBD para el funcionamiento


del servicio:

/etc/drbd.conf
global {
usage-count no;
}
common {
protocol C;
syncer { rate 1000M; }
#sincronizacin en funcin de disponibilidad
}
resource r0 {
handlers {
pri-on-incon-degr "echo o > /proc/sysrq-trigger ; halt -f";
pri-lost-after-sb "echo o > /proc/sysrq-trigger ; halt -f";
local-io-error "echo o > /proc/sysrq-trigger ; halt -f";
}
startup {
wfc-timeout 60;
#tiempo de espera al inicio en segs
degr-wfc-timeout 120;
#tiempo de espera complementario
}
disk {
on-io-error
detach;
}
net {
after-sb-0pri discard-zero-changes;
after-sb-1pri discard-secondary;
after-sb-2pri disconnect;
rr-conflict disconnect;
allow-two-primaries;
#til para el uso de gfs2
}
syncer {
rate 1000M;
}
on vm1 {
device /dev/drbd0;
#dispositivo creado
disk /dev/sdb1;
#dispositivo fsico
Address 192.168.137.1:7788; #direccin IP del equipo
meta-disk internal;
}
on vm3 {
device /dev/drbd0;
#dispositivo creado
disk /dev/sdb1;
#dispositivo fsico
Address 192.168.137.2:7788; #direccin IP del equipo
meta-disk internal;
}
}

Una vez instalado y configurado DRBD necesita ejecutar una serie de comandos. Para ello,
en primer lugar, hay que formatear la particin que se ha indicado en el fichero anterior. Aunque
en principio cualquier sistema de ficheros (por ejemplo, EXT3) hubiera sido bastante, se ha
decidido implementar GFS2 sobre DRBD.

44

5. Implementacin

Actualizacin de DRBD
Se dispone de un repositorio con una versin de DRBD ms actualizada (8.3.11 frente a
8.3.7) y con nuevas funciones, adecuada a la versin de linux que nos ocupa: Ubuntu Server
10.04.3 LTS. Para actualizar DRBD una vez instalado, basta con ejecutar el siguiente script:
/root/actualizadrbd8311.sh
#!/bin/sh
service drbd stop
apt-get -y remove drbd8-utils
apt-get -y install python-software-properties
add-apt-repository ppa:numerigraphe/ppa
apt-get update
apt-get -y install drbd8-utils

Debido a la utilizacin de particiones de ms de 16 TB (como se comentar ms adelante),


ser necesario llevar a cabo esta actualizacin en nuestro sistema.

45

PFC SME del CdC

GFS2 (Global File System 2)

Ilustracin 28: Logo redhat


GFS2 es un sistema de ficheros, propiedad de Red Hat (http://www.redhat.com/gfs/),
ideado para sistemas en cluster y acceso concurrente, distribuido bajo licencia GNU. La principal
propiedad de este sistema de ficheros es que bloquea el acceso a un fichero mientras un equipo lo
est escribiendo, evitando as que otro sistema escriba a la misma vez y los ficheros se corrompan.
Para instalar GFS2 en Ubuntu, basta con ejecutar como root:
apt-get install gfs2-tools

que realiza la instalacin de los siguientes paquetes: cman, corosync, libccs3, libcman3,
libcorosync4,

libdlm3,

libdlmcontrol3,

libfence4,

liblogthread3,

libnet-snmp-perl,

libnet-telnet-perl,

libopenais3, libopenipmi0, libvirt0, libxen3, openais, openipmi, sg3-utils, libcrypt-des-perl, libdigest-hmacperl, libio-socket-inet6-perl y lvm2.

Una vez instalado, la configuracin de GFS2 se encuentra en los siguientes ficheros (propios
de cman y corosync):

/etc/cluster/cluster.conf: Este fichero de configuracin es ledo por cman al iniciarse. Por su


parte, cman se encarga de iniciar el resto de demonios necesarios para el cluster, dndole
as esta configuracin a corosync:

/etc/cluster/cluster.conf
<?xml version="1.0"?>
<cluster name="clustermta" config_version="1">
<totem consensus="6000" token="3000"/>
<clusternodes>
<clusternode name="vm1" nodeid="1">
<fence></fence>
</clusternode>
<clusternode name="vm2" nodeid="2">
<fence></fence>
</clusternode>
</clusternodes>
<cman expected_votes="1" two_node="1"/>
<fencedevices>
</fencedevices>
<rm>
</rm>
</cluster>

46

/etc/corosync/corosync.conf: Si corosync se inicia usando cman, como se ha comentado


anteriormente, no es necesario configurar este fichero. No obstante, se indica aqu su
configuracin para nuestro escenario por si fuera necesario iniciarlo por separado:

5. Implementacin
/etc/corosync/corosync.conf
totem {
version: 2
token: 3000
token_retransmits_before_loss_const: 10
join: 60
consensus: 5000
vsftype: none
max_messages: 20
clear_node_high_bit: yes
secauth: off
threads: 0
rrp_mode: none
interface {
ringnumber: 0
bindnetaddr: 192.168.137.1
mcastaddr: 192.168.137.3
mcastport: 5405
}
}
amf {
mode: disabled
}
service {
ver:
name:
}
aisexec {
user:
group:
}

0
pacemaker

root
root

logging {
fileline: off
to_stderr: yes
to_logfile: no
to_syslog: yes
syslog_facility: daemon
debug: off
timestamp: on
logger_subsys {
subsys: AMF
debug: off
tags: enter|leave|trace1|trace2|trace3|trace4|trace6
}
}

Se debe iniciar cman en ambos equipos:


/etc/init.d/cman start

Para hacer uso de GFS2 en el escenario que nos ocupa, se debe usar en combinacin con
DRBD.

47

PFC SME del CdC

DRBD + GFS2
La conjuncin de GFS2 con DRBD da como resultado una estructura muy robusta. Con ella
se tiene acceso a una serie de caractersticas que no podran conseguirse de otra forma. La ms
importante es que con esta configuracin se puede crear un sistema de ficheros compartido por
dos equipos permitiendo que ambos acten como equipos primarios y compartan en tiempo real
la informacin de dicho sistema.
Este es el principal motivo por el que se ha elegido implementar GFS2 sobre DRBD en lugar
de otro sistema de ficheros, aunque en nuestro escenario no se vaya a hacer uso de esta
configuracin. Al estar automatizados los procesos que implican cambio de roles en DRBD y
montaje y desmontaje de particiones, es posible que en una situacin inesperada ambos sistemas
asuman el rol de primario. Si esto ocurriera sin estar haciendo uso de GFS2 se producira
corrupcin en los datos con toda seguridad. Otro motivo para usar GFS2 es que ni EXT3 ni EXT4 son
compatibles con particiones de ms de 16 TB (como veremos que son las que aqu nos ocupan), sin
embargo, GFS2 soporta hasta 100 TB en su ltima versin.
Para instalar GFS2 sobre una particin sincronizada con DRBD hay que seguir los siguientes
pasos:
1. En primer lugar, la particin elegida para el recurso de DRBD debe ser formateada en EXT3,
por ejemplo. En los ficheros de configuracin de DRBD se ve que esta particin es
/dev/sdb1. Por tanto, en ambos equipos:
mkfs.ext3 /dev/sdb1

2. Posteriormente, hay que crear el recurso definido en DRBD, en ambos equipos, mediante:
drbdadm create-md r0

3. Aunque se haya fijado el mismo tamao en la particin de cada equipo, al ejecutar el


comando anterior, ste devolver un error. Habr que leer el valor sugerido en la lnea:
...
yyyyyyyy kB left usable by current configuration
...

y usarlo para ejecutar la siguiente instruccin, en ambos equipos, donde hay que substituir
yyyyyyyy por el valor adecuado:
e2fsck -f /dev/sdb1 && resize2fs /dev/sdb1 yyyyyyyyK

4. Una vez hecho esto, se podr volver a ejecutar sin error, en ambos equipos, el comando:
drbdadm create-md r0

5. Se debe iniciar drbd, en ambos equipos, mediante:


/etc/init.d/drbd start

6. El estado inicial del recurso en ambos equipos ser el de inconsistencia. Habr que
establecer uno de los dos como primario. As pues, en uno de los equipos nicamente:
drbdadm primary r0

Si al ejecutar este comando se obtuviera un error, podra usarse este otro alternativamente:

48

5. Implementacin
drbdadm -- --overwrite-data-of-peer primary all

7. Es necesario esperar a que se complete el paso anterior. Se puede visualizar el progreso y el


estado ejecutando en cualquiera de los dos equipos:
cat /proc/drbd

8. Una vez que ha aparecido UpToDate/UpToDate al ejecutar el comando anterior, se debe


formatear la particin al formato GFS2. Para ello, en el equipo establecido como primario:
mkfs.gfs2 -t cluster:nombre -p lock_dlm -j 2 /dev/drbd0

donde cluster es el nombre asignado al cluster en el fichero de configuracin cluster.conf,


nombre es el nombre que tendr esta particin dentro de ese cluster y el nmero a
continuacin de la opcin -j indica cuntos equipos van a concurrir en el recurso, dos en
este caso.
Al finalizar el paso anterior ya se encuentra disponible la estructura DRBD+GFS2. Para hacer
uso de ella, se puede establecer un equipo como primario (o los dos) y montar el sistema de
ficheros donde se desee. Slo un sistema que est establecido como primario en DRBD podr
efectuar el montaje de GFS2 y acceder a los ficheros.
Para realizar el montaje, por ejemplo en /tmp, habr que ejecutar el siguiente comando,
siendo primario en DRBD:
mount -t gfs2 /dev/drbd0 /tmp

Al llegar aqu, se tiene ya el elemento necesario para el diseo realizado del sistema final.

49

PFC SME del CdC

Configuracin multiservidor
Se va a analizar cmo se realiza la instalacin de ZCS OS 7.1.4 (Zimbra a partir de ahora)
para varios servidores. Antes, es necesario evaluar la utilidad de hacer uso de una configuracin
multiservidor.
Al utilizar la alta disponibilidad, se hace necesario emplear al menos dos equipos para
permitir que uno sea redundante del otro. Pero si una mquina alberga todos los servicios, la otra
permanece inactiva desaprovechando todos sus recursos. La mejor alternativa a este problema es
dividir el servicio ofrecido, consiguiendo que ambos equipos ofrezcan el servicio en conjuncin. La
alta disponibilidad entonces, se consigue empleando la virtualizacin sobre los equipos para tener
en cada uno dos mquinas virtuales. As, en un equipo permanece una mquina virtual activa que
forma parte del servicio y otra en espera, que sirve de redundancia a la mquina virtual activa del
otro equipo. Para que todo esto sea una posibilidad real, es necesario poder desagrupar el servicio
ofrecido en muchos otros que puedan ser repartidos en varios equipos.
Zimbra permite repartir los distintos mdulos que lo integran en varios servidores, con una
configuracin determinada, e incluye los mecanismos necesarios para comunicar los distintos
servidores que conformen el servicio. Se implementar esta instalacin sobre Ubuntu Server
10.04.3 LTS para 64 bits (http://www.ubuntu.com/).
La configuracin multiservidor que Zimbra permite, consta de tres equipos servidores con
los siguientes servicios:

LDAP: Se trata del servidor principal. En l se almacenan todos los datos relativos a usuarios
de Zimbra.
MAILBOX: Destinado a almacenar los buzones de los usuarios y la interfaz web.
MTA: Destinado a las funciones de envo y recepcin de correo.

Segn los casos de xito y pruebas de rendimiento de Zimbra un servidor LDAP, un


MAILBOX y otro MTA seran suficientes para atender a unos 5000 usuarios. En cualquier caso, se
puede ampliar el nmero de servidores para atender a una gran cantidad de usuarios. Por ejemplo,
se pueden aadir rplicas LDAP (otros servidores LDAP esclavos del primero), distintos MAILBOX
donde los buzones de los usuarios se iran repartiendo equitativamente y varios MTA para permitir
varios flujos simultneos de envo y recepcin.
En este proyecto, donde el nmero de usuarios no excede de 600, se decide agrupar el
servidor LDAP con el MAILBOX en un equipo (mquina virtual) y el MTA en otro. Los pasos
necesarios para instalacin seran los siguientes:
En primer lugar, se debe descargar la instalacin de la pgina web de Zimbra
(www.zimbra.com), para ello, en ambos servidores:
wget http://files2.zimbra.com/downloads/7.1.4_GA/\
zcs-7.1.4_GA_2555.UBUNTU10_64.20120105094803.tgz

Posteriormente, se descomprime, en ambos servidores:

50

5. Implementacin
tar xvfz zcs-7.1.4_GA_2555.UBUNTU10_64.20120105094803.tgz

Es necesario instalar, como root, los siguientes paquetes, en ambos servidores:


apt-get install sysstat sqlite3 libperl5.10

Una vez instalados, ya es posible instalar Zimbra. No obstante, la instalacin hace una
comprobacin sobre el nombre del equipo (hostname). Dicho nombre debe ser de tipo FQDN
(Fully Qualified Domain Name), es decir, de la forma nombrepropio.subdominio.dominio. Es un
requisito indispensable para continuar la instalacin. La motivacin de esto es evitar errores
derivados de que el equipo no est correctamente identificado.
Adems, es muy recomendable que se haga uso de un nombre asociado a un DNS. La
instalacin har una peticin DNS para comprobarlo y permitir continuar si no es as aunque no
sea lo ideal.
Para satisfacer esto, habra que ajustar los siguientes ficheros del sistema operativo, en
ambos servidores:
/etc/hostname
+

nombre_no_FDQN
#se elimina esta lnea
nombrepropio.subdominio.dominio #se aade esta lnea

/etc/hosts
+

IP_del_equipo

nombrepropio.subdominio.dominio nombrepropio

51

PFC SME del CdC

LDAP + MAILBOX
Ahora, en el servidor LDAP + MAILBOX:
cd zcs-7.1.4_GA_2555.UBUNTU10_64.20120105094803
./install.sh

Aceptamos la licencia e instalamos los siguientes paquetes: ldap, logger, store, apache y
spell. Si se desea utilizar SNMP, sera necesario instalarlo en todos los servidores.
Checking for installable packages
Found
Found
Found
Found
Found
Found
Found
Found
Found
Found

zimbra-core
zimbra-ldap
zimbra-logger
zimbra-mta
zimbra-snmp
zimbra-store
zimbra-apache
zimbra-spell
zimbra-proxy
zimbra-memcached

Select the packages to install


Install zimbra-ldap [Y] y
Install zimbra-logger [Y] y
Install zimbra-mta [Y] n
Install zimbra-snmp [Y] n
Install zimbra-store [Y] y
Install zimbra-apache [Y] y
Install zimbra-spell [Y] y
Install zimbra-proxy [N] n
Install zimbra-memcached [N] n
Checking required space for zimbra-core
checking space for zimbra-store
Installing:
zimbra-core
zimbra-ldap
zimbra-logger
zimbra-store
zimbra-apache
zimbra-spell

Autorizamos que se modifique el sistema y llegamos a la pantalla de configuracin de la


instalacin:

52

5. Implementacin
Main menu
1) Common Configuration:
+Hostname:
+Ldap master host:
+Ldap port:
+Ldap Admin password:
+Secure interprocess communications:
+TimeZone:

mailhost.example.com
mailhost.example.com
389
set
yes
America/Los_Angeles

2) zimbra-ldap:
+Status
+Create Domain:
+Domain to create:
+Ldap root password:
+Ldap replication password:
+Ldap postfix password:
+Ldap amavis password:
+Ldap nginx password:

Enabled
Enabled
yes
mailhost.example.com
set
set
set
set
set

3) zimbra-store:
Enabled
+Status
Enabled
+Create Admin User:
yes
+Admin user to create:
admin@mailhost.example.com
******* +Admin Password
UNSET
+Anti-virus quarantine user:
Vxmm6@mailhost.example.com
+Enable automated spam training:
yes
+Spam training user
spamC@mailhost.example.com
+Non-spam(Ham) training user:
ham.n@mailhost.example.com
+SMTP host:
mailhost.example.com
+Web server HTTP port:
80
+Web server HTTPS port:
443
+Web server mode:
http
+IMAP server port:
143
+IMAP server SSL port:
993
+POP server port:
110
+POP server SSL port:
995
+Use spell check server:
yes
+Spell server URL:
http://mailhost.example.com:7780/aspell.php
+Configure for use with mail proxy: FALSE
+Configure for use with web proxy:
FALSE
+Enable version update checks:
TRUE
+Enable version update notifications: TRUE
+Version update notification email: admin@mailhost.example.com
+Version update source email:
admin@mailhost.example.com
4)
5)
6)
7)
8)
c)
r)
s)
q)

zimbra-logger:
zimbra-spell:
zimbra-convertd:
Default Class of Service Configuration:
Enable default backup schedule: yes
Collapse menu
Start servers after configuration yes
Save config to file
Quit

Enabled
Enabled
Enabled

Las lneas marcadas con **** al inicio indican que necesitan ser revisadas para completar la
configuracin.

53

PFC SME del CdC


Para el correcto funcionamiento del sistema, tan slo habra que definir la contrasea de
administrador, en zimbra-store (3) => admin password (4) y la contraseas del men zimbra-ldap
(2). Para ello fijamos las contraseas que se deseen usar:

ldap root password (4), siendo esta la contrasea principal


ldap replication password (5)
ldap postfix password (6)
ldap amavis password (7)
ldap nginx password (8)

Debemos definir la zona horaria en common configuration (1) => timezone (6), aunque
tambin se pueda ajustar posteriormente, porque nos servir para comprobar que la
comunicacin de los dems servidores (MTA en este caso), es correcta.
Finalmente, en zimbra-ldap (2) => domain to create (3) tenemos el nombre de dominio que
se va a crear. Al acabar, pulsamos la opcin apply (letra a), que solo aparecer cuando no haya
lneas marcadas con ****. Es importante comprobar en los distintos mens que las direcciones de
correo electrnico que vayan a crearse o asociarse a algo tengan el dominio asignado al realizar
esta operacin y no el nombre de la mquina en la que estamos realizando la instalacin. Es
posible que no se haya cambiado automticamente en todos los casos al elegir el dominio al crear.
Al concluir la instalacin, estara instalado y funcionando el servidor LDAP + MAILBOX de
Zimbra. La informacin bsica para poder gestionarlo:

Estado del servicio. Ejecutando:


service zimbra status

Parar el servicio. Ejecutando:


service zimbra stop

Iniciar el servicio. Ejecutando:


service zimbra start

Reiniciar el servicio. Ejecutando:


service zimbra restart

Interfaz de usuario:
http://mailhost.example.com/

Consola de administracin:
https://mailhost.example.com:7071/zimbraAdmin/

54

5. Implementacin

MTA
Ahora, en el servidor MTA:
cd zcs-7.1.4_GA_2555.UBUNTU10_64.20120105094803
./install.sh

Aceptamos la licencia e instalamos el siguiente paquete: mta. Si se desea utilizar SNMP,


sera necesario instalarlo en todos los servidores.
Checking for installable packages
Found
Found
Found
Found
Found
Found
Found
Found
Found

zimbra-core
zimbra-ldap
zimbra-logger
zimbra-mta
zimbra-snmp
zimbra-store
zimbra-apache
zimbra-spell
zimbra-proxy

Select the packages to install


Install zimbra-ldap [Y] n
Install zimbra-logger [Y] n
Install zimbra-mta [Y] y
Install zimbra-snmp [Y] n
Install zimbra-store [Y] n
Install zimbra-apache [Y] n
Install zimbra-spell [Y] n
Install zimbra-proxy [N] n
Checking required space for zimbra-core
Installing:
zimbra-core
zimbra-mta

Autorizamos que se modifique el sistema y configuramos la instalacin:


Main menu
1) Common Configuration:
+Hostname:
mta-1.example.com
******* +Ldap master host:
UNSET
+Ldap port:
389
******* +Ldap Admin password:
UNSET
+Secure interprocess communications:
yes
+TimeZone:
(GMT-08.00) Pacific Time (US & Canada)
2) zimbra-mta:
Enabled
******* +MTA Auth host:
mta-1.example.com
+Enable Spamassassin:
yes
+Enable Clam AV:
yes
+Notification address for AV alerts:
admin@mta-1.example.com
+Bind password for postfix ldap user: UNSET
+Bind password for amavis ldap user:
UNSET
3) Enable default backup schedule:
yes
r) Start servers after configuration
yes
s) Save config to file
x) Expand menu
q) Quit

55

PFC SME del CdC


Las lneas marcadas con **** al inicio indican que necesitan ser revisadas para completar la
configuracin.
Para el correcto funcionamiento del sistema, es necesario conectar este servidor MTA con
el servidor LDAP maestro. Para ello, tan slo habra que definirlo en el men common
configuration (1), en el campo ldap master host (2) y la contrasea de administrador en ldap admin
password (4). Una vez introducido el nombre del equipo LDAP maestro y la contrasea, el
configurador de la instalacin conectar con el servidor LDAP y recuperar su timezone (6). Si no se
ha podido establecer la comunicacin, el servidor MTA no podr finalizar la instalacin.
Posteriormente, habr que completar, en el men zimbra-mta (2), el campo MTA auth host (2) con
el nombre del equipo servidor MAILBOX (en este caso, el mismo que LDAP). Finalmente, habr que
introducir las contraseas almacenadas en el servidor LDAP maestro dentro de este mismo men,
en los campos: ldap replication password, ldap postfix password, ldap amavis password y ldap
nginx password.
Es importante comprobar en los distintos mens que las direcciones de correo electrnico
que vayan a crearse o asociarse a algo tengan el dominio asignado al realizar esta operacin y no el
nombre de la mquina en la que estamos realizando la instalacin. Es posible que no se haya
cambiado automticamente en todos los casos al elegir el dominio al crear.
Al concluir la instalacin, estara instalado y funcionando el servidor MTA de Zimbra y
vinculado al MAILBOX + LDAP, por lo que tendramos el servicio completo. No obstante, ser
necesario realizar unos ltimos pasos para completar la configuracin.

56

5. Implementacin

Configuracin final
Es necesario completar la instalacin para que ambos servidores se comuniquen
correctamente. En primer lugar, hay que ajustar la configuracin de ssh en el servidor MTA:
echo AllowUsers admin zimbra root >> /etc/ssh/sshd_config
service ssh restart

A continuacin, para generar las claves y actualizarlas, en ambos servidores:


sudo -u zimbra /opt/zimbra/bin/zmsshkeygen
sudo -u zimbra /opt/zimbra/bin/zmupdateauthkeys

Posteriormente, es necesario habilitar los registros, para ello, en ambos servidores y como
usuario root:
/opt/zimbra/libexec/zmsyslogsetup

En en servidor MBX + LDAP hay que permitir la recepcin de registros quitando los
comentarios de /etc/rsyslog.conf de las siguientes lneas:
/etc/rsyslog.conf
#$modload imudp
+
$modload imudp
#$UDPServerRun 514
+
$UDPServerRun 514

Finalmente, hay que modificar /etc/rsyslog.d/60-zimbra.conf. Ser distinto en ambos


servidores:
/etc/rsyslog.d/60-zimbra.conf en MBX + LDAP:
local0.*
local1.*
auth.*
mail.*
/etc/rsyslog.d/60-zimbra.conf en MTA:
local0.*
local1.*
auth.*
local0.*
local1.*
auth.*
mail.*
mail.*

-/var/log/zimbra.log
-/var/log/zimbra-stats.log
-/var/log/zimbra.log
-/var/log/zimbra.log

@mailhost.example.com
@mailhost.example.com
@mailhost.example.com
-/var/log/zimbra.log
-/var/log/zimbra-stats.log
-/var/log/zimbra.log
@mailhost.example.com
-/var/log/zimbra.log

En el ltimo fichero, mailhost.example.com representa el servidor en el que el paquete


logger fue instalado, LDAP + MBX en este caso. Finalmente, en ambos servidores:
service rsyslog restart
service zimbra restart

57

PFC SME del CdC

Instalacin e integracin de mailman (multiservidor)


Como se ha comentado en el diseo de la solucin, se va a integrar mailman con Zimbra. En
el script de instalacin e integracin de mailman y Zimbra para un nico servidor, la instalacin de
mailman haca uso tanto de la MTA (para enviar y recibir correos electrnicos) como del servidor
web apache de Zimbra para mostrar su interfaz de gestin y utilizacin.
No obstante, al instalar e integrar mailman con Zimbra en esta configuracin multiservidor,
la instalacin debe efectuarse en el servidor MTA (para que pueda hacer uso adecuadamente del
intercambiador de correo). Es decir, ya no puede beneficiarse del servidor apache utilizado por
Zimbra. Por tanto, el script que sigue a continuacin realiza una instalacin y configuracin de
mailman basada en apache (www-data) y posteriormente lo asocia con la MTA (Postfix) de Zimbra.
/root/mailmanMTASSL.sh (permisos 777)
#!/bin/sh
# Script para la instalacion de mailman con zimbra
if [ $# -gt "1" ]; then
echo "USO: mailmanMTA.sh"
echo "ejemplo: mailmanMTA.sh (para un unico servidor en el sistema)"
echo "USO: mailmanMTA.sh nombre_servidor"
echo "ejemplo: mailmanMTA.sh servidor.dominio.com"
else
#******************* Nombre del servidor *********************
if [ $# -eq "0" ]; then
SERVIDOR=$(sudo -u zimbra /opt/zimbra/bin/zmprov gad)
echo "Mailman se instalara para el siguiente servidor:"
echo $SERVIDOR
echo "si es correcto pulse ENTER, si no CONTROL-C"
echo "y ejecute: mailmanMTA.sh nombre_servidor"
read variable
else
SERVIDOR=$1
fi
echo $SERVIDOR
#*************************************************************
apt-get update
apt-get install -y apache2 openssl
apt-get install -y python-dev make chkconfig
adduser --no-create-home --disabled-login mailman
#***************** Instalacion de mailman *******************
cd /usr/local/
wget http://ftp.gnu.org/gnu/mailman/mailman-2.1.14-1.tgz
#procede si el tamano de la instalacion de mailman es correcto
if [ $(ls -l mailman-2.1.14-1.tgz | awk '{print $5-8201307}') -eq "1" ];
then
mkdir mailman
chgrp mailman mailman
chmod a+rx,g+ws mailman
tar xvfz mailman-2.1.14-1.tgz
cd mailman-2.1.14-1
./configure --with-cgi-gid=www-data
make install
cd /usr/local/mailman/archives
rm /usr/local/mailman-2.1.14-1.tgz
rm -r /usr/local/mailman-2.1.14-1
chown www-data private

(contina en la siguiente pgina)

58

5. Implementacin
chmod o-x private
/usr/local/mailman/bin/check_perms -f
/usr/local/mailman/bin/check_perms -f
echo "ServerName ${SERVIDOR}" >> /etc/apache2/httpd.conf
#*************** Creacion de sites-available/mailmanssl ********************
echo "<IfModule mod_ssl.c>" >> /etc/apache2/sites-available/mailmanssl
echo
"<VirtualHost
_default_:7780>"
>>
/etc/apache2/sitesavailable/mailmanssl
echo
"ServerAdmin
admin@${SERVIDOR}"
>>
/etc/apache2/sitesavailable/mailmanssl
echo
"ServerName
${SERVIDOR}"
>>
/etc/apache2/sitesavailable/mailmanssl
echo >> /etc/apache2/sites-available/mailmanssl
echo
"ScriptAlias
/mailman/
/usr/local/mailman/cgi-bin/"
>>
/etc/apache2/sites-available/mailmanssl
echo >> /etc/apache2/sites-available/mailmanssl
echo
"<Directory
/mailman/>"
>>
/etc/apache2/sitesavailable/mailmanssl
echo "AllowOverride None" >> /etc/apache2/sites-available/mailmanssl
echo "Options ExecCGI" >> /etc/apache2/sites-available/mailmanssl
echo "Order allow,deny" >> /etc/apache2/sites-available/mailmanssl
echo "Allow from all" >> /etc/apache2/sites-available/mailmanssl
echo "</Directory>" >> /etc/apache2/sites-available/mailmanssl
echo >> /etc/apache2/sites-available/mailmanssl
echo
"Alias
/mmimages/
/usr/local/mailman/icons/"
>>
/etc/apache2/sites-available/mailmanssl
echo
"Alias
/pipermail/
/usr/local/mailman/archives/public/"
>>
/etc/apache2/sites-available/mailmanssl
echo >> /etc/apache2/sites-available/mailmanssl
echo
"<Directory
/pipermail/>"
>>
/etc/apache2/sitesavailable/mailmanssl
echo
"Options
Indexes
MultiViews
FollowSymLinks"
>>
/etc/apache2/sites-available/mailmanssl
echo "AllowOverride None" >> /etc/apache2/sites-available/mailmanssl
echo "Order allow,deny" >> /etc/apache2/sites-available/mailmanssl
echo "Allow from all" >> /etc/apache2/sites-available/mailmanssl
echo "</Directory>" >> /etc/apache2/sites-available/mailmanssl
echo >> /etc/apache2/sites-available/mailmanssl
echo
"RedirectMatch
^/mailman[/]*$
https://${SERVIDOR}:7780/mailman/listinfo"
>>
/etc/apache2/sitesavailable/mailmanssl
echo >> /etc/apache2/sites-available/mailmanssl
echo "SSLEngine on" >> /etc/apache2/sites-available/mailmanssl
echo
"SSLCertificateFile
/etc/apache2/ssl/web.crt"
>>
/etc/apache2/sites-available/mailmanssl
echo
"SSLCertificateKeyFile
/etc/apache2/ssl/server.key"
>>
/etc/apache2/sites-available/mailmanssl
echo
"SSLCertificateChainFile
/etc/apache2/ssl/ca.crt"
>>
/etc/apache2/sites-available/mailmanssl
echo
"SSLCACertificateFile
/etc/apache2/ssl/ca.crt"
>>
/etc/apache2/sites-available/mailmanssl
echo "</VirtualHost>" >> /etc/apache2/sites-available/mailmanssl
echo "</IfModule>" >> /etc/apache2/sites-available/mailmanssl
#***************** Modificacion de ports.conf *****************
cp /etc/apache2/ports.conf /etc/apache2/ports.confBK
cat /etc/apache2/ports.conf | awk '{if($0=="Listen 80"){print "Listen
7780"}else{print $0}}' > mailmanMTAtemporal.txt
cat mailmanMTAtemporal.txt > /etc/apache2/ports.conf
rm mailmanMTAtemporal.txt
#**************************************************************
rm /etc/apache2/sites-enabled/*
cd /etc/apache2/sites-enabled/
ln -s ../sites-available/mailmanssl mailmanssl
cd /etc/apache2/mods-enabled/
ln -s ../mods-available/ssl.conf ssl.conf

(contina en la siguiente pgina)

59

PFC SME del CdC


ln -s ../mods-available/ssl.load ssl.load
#**************************************************************
cp
/opt/zimbra/postfix/conf/main.cf
/opt/zimbra/postfix/conf/main.cfBK
#***************** Modificacion de main.cf ********************
cat
/opt/zimbra/postfix/conf/main.cf
|
awk
'{if($1=="virtual_alias_maps"){
print
"virtual_alias_maps
=
ldap:/opt/zimbra/conf/ldap-vam.cf"} else{ print $0}}' > prueba.txt
mv prueba.txt /opt/zimbra/postfix/conf/main.cf
cat /opt/zimbra/postfix/conf/main.cf | awk '{if($1=="alias_maps"){
print "alias_maps = hash:/etc/aliases,hash:/usr/local/mailman/data/aliases"}
else{ print $0}}' > prueba.txt
mv prueba.txt /opt/zimbra/postfix/conf/main.cf
chown zimbra:zimbra /opt/zimbra/postfix/conf/main.cf
chmod 644 /opt/zimbra/postfix/conf/main.cf
#**************************************************************
echo >> /usr/local/mailman/Mailman/mm_cfg.py
echo "MTA = 'Postfix'" >> /usr/local/mailman/Mailman/mm_cfg.py
echo "POSTFIX_ALIAS_CMD = '/opt/zimbra/postfix/sbin/postalias'" >>
/usr/local/mailman/Mailman/mm_cfg.py
echo
"POSTFIX_MAP_CMD
=
'/opt/zimbra/postfix/sbin/postmap'"
>>
/usr/local/mailman/Mailman/mm_cfg.py
echo
"IMAGE_LOGOS
=
'/mmimages/'"
>>
/usr/local/mailman/Mailman/mm_cfg.py
echo
"DEFAULT_URL_PATTERN
=
'https://%s:7780/mailman/'"
>>
/usr/local/mailman/Mailman/mm_cfg.py
echo "PUBLIC_ARCHIVE_URL = 'https://%s:7780/pipermail/%(listname)s'"
>> /usr/local/mailman/Mailman/mm_cfg.py
echo
"DEFAULT_SERVER_LANGUAGE
=
'es'"
>>
/usr/local/mailman/Mailman/mm_cfg.py
cp
/usr/local/mailman/Mailman/Defaults.py
/usr/local/mailman/Mailman/Defaults.pyBK
echo "BEGIN{servidor = \"$SERVIDOR\"" > temp.awk
echo
"}{if(\$1==\"DEFAULT_EMAIL_HOST\"){print
\$1\"
=
'\"servidor\"'\";" >> temp.awk
echo "getline; print \$1\" = '\"servidor\"'\";}else{print \$0}" >>
temp.awk
echo "if(\$1==\"DEFAULT_URL_HOST\"){print \$1\" = '\"servidor\"'\";"
>> temp.awk
echo "getline; print \$1\" = '\"servidor\"'\";}else{print \$0}}END{}"
>> temp.awk
cat /usr/local/mailman/Mailman/Defaults.py | awk -f temp.awk >
temporalinstmailman.temp
cat temporalinstmailman.temp > /usr/local/mailman/Mailman/Defaults.py
rm temporalinstmailman.temp; rm temp.awk
/usr/local/mailman/bin/mmsitepass -c
/usr/local/mailman/bin/newlist mailman
/usr/local/mailman/bin/config_list
-i
/usr/local/mailman/data/sitelist.cfg mailman
/usr/local/mailman/bin/genaliases
/opt/zimbra/postfix-2.7.7.3z/sbin/newaliases
chown mailman:mailman /usr/local/mailman/data/aliases*
chown mailman:mailman /usr/local/mailman/data/virtual-mailman*
cd /usr/local/mailman/cron
crontab -u mailman crontab.in
cp /usr/local/mailman/scripts/mailman /etc/init.d
chkconfig --add mailman
cp /opt/zimbra/conf/zmmta.cf /opt/zimbra/conf/zmmta.cfBK
#***************** Modificacion de zmmta.cf ********************
cat
/opt/zimbra/conf/zmmta.cf
|
awk
'{if($0=="\t\tPOSTCONF
mydestination VAR zimbraMtaMyDestination"){print "\t\tPOSTCONF mydestination
LOCAL postfix_mydestination"}else{print $0}}' > prueba.txt
mv prueba.txt /opt/zimbra/conf/zmmta.cf
cat
/opt/zimbra/conf/zmmta.cf
|
awk
'{if($1=="POSTCONF"
&&
$2=="alias_maps"){}else{print $0}}' > prueba.txt

(contina en la siguiente pgina)

60

5. Implementacin
mv prueba.txt /opt/zimbra/conf/zmmta.cf
chown zimbra:zimbra /opt/zimbra/conf/zmmta.cf
chmod 444 /opt/zimbra/conf/zmmta.cf
#**************************************************************
/usr/local/mailman/bin/check_perms -f
/usr/local/mailman/bin/check_perms -f
echo
"sudo
-u
zimbra
/opt/zimbra/bin/zmlocalconfig
-e
postfix_mydestination='localhost ${SERVIDOR}'" > ./1.txt; sh ./1.txt; rm
./1.txt;
/etc/init.d/mailman stop 2>/dev/null
/etc/init.d/mailman start
/etc/init.d/zimbra restart
clear
echo "La instalacion realizada de mailman necesita de certificados
SSL"
echo "En concreto,"
echo "
/etc/apache2/ssl/ca.crt <- Certificado de la CA"
echo "
/etc/apache2/ssl/ca.crt <- Certificado del
servidor"
echo "
/etc/apache2/ssl/ca.crt <- Llave privada del
servidor"
echo "Si desea generar unos certificados autofirmados pulse ENTER para
continuar"
echo "Si por el contrario, ya dispone de ellos, pulse CONTROL+C para
salir"
echo "y no olvide colocarlos en el lugar indicado."
read variable; clear
#****************** generacion de certificados *****************
mkdir /root/ssl; cd /root/ssl
echo "Generamos la clave de CA:"; echo "Se debe introducir una clave
cuando se solicite"; echo
openssl genrsa -des3 -out ca.key 2048
echo; echo "Proceso de generacin de clave de CA finalizado. Pulse para
continuar..."
read variable; clear
echo "Generamos el certificado de CA:"; echo "Se debe introducir la
clave anterior cuando se solicite"; echo
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt
echo; echo "Proceso de generacin de certificado de CA finalizado.
Pulse para continuar..."
read variable; clear
echo "Generamos la clave de servidor:"; echo "Se debe introducir una
clave cuando se solicite"; echo
openssl genrsa -des3 -out server.key 1024
echo; echo "Proceso de generacin de clave de servidor finalizado.
Pulse para continuar..."
read variable; clear
echo "Generamos la peticion de certificado de servidor:"; echo
"IMPORTANTE: "Common name" debe ser el nombre FQDN del servidor"; echo
openssl req -new -key server.key -out web.csr
echo; echo "Proceso de generacin de peticion de certificado de
servidor finalizado. Pulse para continuar..."
read variable; clear
echo "Generamos el certificado de servidor:"; echo "Se debe introducir
la clave anterior cuando se solicite"; echo
openssl x509 -req -in web.csr -out web.crt -sha1 -CA ca.crt -CAkey
ca.key -CAcreateserial -days 3650
echo; echo "Proceso de generacin de certificado de servidor
finalizado. Pulse para continuar..."
read variable; clear
mv server.key server.key.secure
echo "Reducimos la seguridad de la clave para poder cargar el servicio
sin interaccion humana:"; echo "Se debe introducir la clave anterior cuando se
solicite"; echo
openssl rsa -in server.key.secure -out server.key

(contina en la siguiente pgina)

61

PFC SME del CdC


echo; echo "Proceso finalizado. Pulse para continuar.."; read variable
chmod 0400 *.key
mkdir /etc/apache2/ssl
cp web.crt /etc/apache2/ssl/web.crt
cp ca.crt /etc/apache2/ssl/ca.crt
cp server.key /etc/apache2/ssl/server.key
service apache2 restart
clear
echo "Proceso completado."
echo "Puede comprobar el correcto funcionamiento del servicio en la
url:"
echo "https://${SERVIDOR}:7780/mailman/listinfo"
else
echo "Error en la descarga"
fi
fi

62

5. Implementacin

Instalacin de Z-Push (multiservidor)


La instalacin de Z-Push en una configuracin multiservidor hace uso del mismo script
comentado anteriormente, z-push.sh. Adems, no ser necesario realizar la instalacin de Z-Push
en un servidor distinto al de Zimbra. Puede hacerse uso del servidor MTA, con apache2
previamente instalado para mailman.

63

PFC SME del CdC

Sistema final
Arquitectura general
La estructura general del sistema ser la siguiente:

Ilustracin 29: Arquitectura completa del sistema final


El servicio se ofrece manteniendo activas dos mquinas virtuales, una de cada tipo. Los dos
servidores estarn a cargo de dos mquinas virtuales, una de cada tipo tambin. As pues, sern
autnomos, pero la configuracin por defecto estar orientada a repartir la carga, manteniendo
pues slo una mquina virtual activa en cada servidor (en negrita en la figura).
Las mquinas con el intercambiador de correo y sus datos estarn contenidos ntegramente
en el almacenamiento fsico de los hipervisores. Estos datos estn destinados a almacenar los
correos de forma temporal antes de ser entregados a otros servidores o volcados en los buzones
de los usuarios. El tiempo que un correo pasa en este espacio es de 60 segundos (parmetro
configurable). Por ello, se ha realizado el diseo dejando 100GB de datos de MTA.
En cuanto al almacenamiento disponible para los usuarios, los servidores en los que se ha
decidido implementar el servicio presentan una limitacin importante. Cada HP Proliant DL360
G6 cuenta con 8 bahas de discos duros SAS y los discos duros disponibles tienen una capacidad de
146 GB, lo que da una capacidad total de 1,14TB. Podra haberse optado por adquirir nuevos
discos duros SAS de mayor capacidad, pero existen otros recursos ms adecuados y de menor
coste.
Para la mejora de la capacidad de almacenamiento en los buzones de los usuarios se ha
decidido hacer uso de dos NAS de 36 TB cada uno (12 discos duros SATA de 3TB). Para mantener
un buen rendimiento, se ha optado por usar iSCSI (Internet SCSI, Internet Small Computer System
Interface).

64

5. Implementacin

Este protocolo simula un disco duro conectado fsicamente al equipo mediante una interfaz
SCSI (Small Computer System Interface) a travs de una conexin remota, usando TCP/IP. El
almacenamiento usado mediante este protocolo se organiza en unidades lgicas, llamadas LUN
(Logical Unit Number).
En este caso, se ha hecho uso de una nica LUN con la capacidad completa del QNAP TSEC1279U-RP TURBO NAS. No obstante, para no comprometer la estructura del sistema, se ha
decidido emplear RAID 5 como mecanismo de proteccin ante posibles fallos en los discos duros.
La capacidad final utilizable, considerando ya DRBD y GFS2, queda reducida a 29,70TB.
Por tanto, la instalacin de Zimbra correspondiente a los buzones (LDAP + MAILBOX) y los
datos referidos a los usuarios irn en dicha particin y se replicarn al otro QNAP TURBO NAS
mediante DRBD y GFS2 que es usado por la otra mquina virtual con LDAP + MAILBOX.

65

PFC SME del CdC

Recursos
Los recursos necesarios sern:

Dos servidores HP Proliant DL 360 G6, con 24GB de RAM y un procesador Intel Xeon.
Dos NAS QNAP TS-EC1279U-RP Turbo NAS con 12 HDD SATA de 3TB cada uno.
Un registro A de DNS para la interfaz web del servicio y una IP pblica.
Un registro MX de DNS para el intercambiador de correo (MTA) y una IP pblica.
Cuatro IPs pblicas, una por cada mquina virtual, requisito de la configuracin de VLANs
de los conmutadores.

Tamao de la instalacin
En cuanto a los NAS destinados a albergar los buzones de los usuarios y la instalacin del
servidor MAILBOX + LDAP, se calcula el tamao necesario mediante el nmero de usuarios y la
capacidad asignada a cada uno de ellos de ellos. As pues, con 600 usuarios y buzones de 20 GB, se
necesitaran aproximadamente:
Concepto
Datos de usuario

Clculo
Resultado
Nmero de usuarios Tamao de 12000 GB
buzn
por 5% del tamao de datos de usuario
600 GB

Datos
necesarios
MySQL
Instalacin de Zimbra
Registros de Zimbra (logs)
ndices de Zimbra
TOTAL

Tamao fijo
Tamao fijo
25% del tamao de datos de usuario

10 GB
20 GB
3000 GB
15630 GB

Tabla 3: Tamao necesario para la instalacin de Zimbra


Se disponen de 30400 GB, que permiten un crecimiento de hasta 1150 usuarios
aproximadamente. Por otra parte, el almacenamiento utilizado en cada hipervisor se ha distribuido
segn el siguiente diseo:

66

5. Implementacin

Espacio necesario en cada hipervisor


Espacio
Mquina virtual con S.O. del servidor LDAP + MAILBOX
20 GB
Espacio libre necesario (24 GB RAM)
24 GB
Mquina virtual con S.O. del servidor MTA
20 GB
Espacio libre necesario (24 GB RAM)
24 GB
Instalacin del servidor MTA y espacio libre para el intercambio 100 GB
temporal
Instalacin de mailman con registros y listas
50 GB
TOTAL
238 GB
Tabla 4: Organizacin del almacenamiento del hipervisor
Para ello, se han usado tres discos duros SAS de 146 GB en configuracin RAID 5,
permitiendo redundancia en el fallo de uno de ellos, y con una capacidad libre total de 268.5 GB
con el hipervisor de VMWare ya instalado.

67

PFC SME del CdC

Planificacin de direcciones

2 registros DNS:
A:
equipo:
mbxetsi.us.es
MAC:
18:A9:05:47:96:28
IP:
193.147.160.201
Masc.:
255.255.255.128

MX:
equipo:
etsi.us.es
MAC:
00:25:B3:AB:B7:70
IP:
193.147.160.200
Masc.:
255.255.255.128

Tabla 5: Configuracin de los registros DNS necesarios


2 equipos fsicos con hipervisor ESXi 4.1 de VMware (actualizados a VMware 5.0):
Hipervisor 1:
Hipervisor 2:
equipo:
hiper1sme
equipo:
hiper2sme
eth0:
00:26:55:FF:39:E4
eth0:
00:25:B3:AB:B7:70
IP:
193.147.160.238
IP:
193.147.160.202
eth1:
00:26:55:FF:39:E6
eth1:
00:25:B3:AB:B7:72
IP:
192.168.160.238
IP:
192.168.160.202
Masc.:
255.255.252.0
Masc.:
255.255.252.0
Tabla 6: Direccionamiento de los equipos fsicos
2 NAS QNAP TS-EC1279U-RP:
QNAP 1:
equipo:
qnap1
eth0:
00:08:9B:CC:51:28
IP:
eth1:
00:08:9B: CC:51:29
IP:
192.168.161.11
Masc.:
255.255.252.0

QNAP 2:
equipo:
qnap2
eth0:
IP:
eth1:
IP:
Masc.:

00:08:9B:CC:53:76
00:08:9B:CC:53:77
192.168.161.12
255.255.252.0

Tabla 7: Direccionamiento de los servidores de almacenamiento


4 mquinas virtuales con Ubuntu 10.04.3 LTS:
MBX1:
Hostname: mbx1sme
eth0:
00:50:56:3F:00:01
IP:
193.147.160.203
Masc.:
255.255.255.128
eth1:
00:50:56:3F:16:81
IP:
192.168.160.203
Masc.:
255.255.252.0
MTA1:
Hostname: mta1sme

68

MBX2:
Hostname: mbx2sme
eth0:
00:50:56:3F:00:02
IP:
193.147.160.204
Masc.:
255.255.255.128
eth1:
00:50:56:3F:16:82
IP:
192.168.160.204
Masc.:
255.255.252.0
MTA2:
Hostname: mta2sme

5. Implementacin

eth0:
IP:
Masc.:
eth1:
IP:
Masc.:

00:50:56:3F:00:03
193.147.160.205
255.255.255.128
00:50:56:3F:16:83
192.168.160.205
255.255.255.0

eth0:
IP:
Masc.:
eth1:
IP:
Masc.:

00:50:56:3F:00:04
193.147.160.206
255.255.255.128
00:50:56:3F:16:84
192.168.160.206
255.255.255.0

Tabla 8: Direccionamiento de las mquinas virtuales

69

PFC SME del CdC

Presupuesto
Recurso
HP Proliant DL360 G6 24GB RAM
QNAP TS-EC1279U-RP Turbo NAS
Disco duro Seagate Barracuda
TOTAL (IVA no incluido)
IVA (18%)
TOTAL (IVA incluido)

Precio unitario
3.160,64
3118,44

Cantidad
2
2

Coste
6.321,28
6.236,88

131,36

24

3.152,64
15.710,80
2.827,92
18.538,74

Tabla 9: Presupuesto del sistema final

70

5. Implementacin

Instalacin
Para la instalacin final se han seguido los siguientes pasos:
Creacin y configuracin de las mquinas virtuales

Instalacin de los dos hipervisores de VMWare y configuracin.


Asociacin de las interfaces de red a la correspondiente subred. En vSphere Cliente,
sobre el nombre del hipervisor, solapa CONFIGURATION NETWORKING. Mediante
Add Networking... se ajusta la configuracin de red para tener:
2 Virtual Machine Port Group (1 por cada interfaz fsica).
2 VMKernel Port (1 por cada interfaz fsica, con las IPs de las interfaces).

Creacin de las mquinas virtuales mbx1sme y mta2sme en el hipervisor hiper1sme y de


las mquinas virtuales mta1sme y mbx2sme en el hipervisor 2.
Botn derecho sobre el nombre del hipervisor en vSphere Client New Virtual
Machine Typical Nombre de la mquina virtual Seleccionar datastore Linux,
Ubuntu Linux 64 20 GB Next Finish.

En las cuatro mquinas virtuales, dos interfaces de red:


Botn derecho sobre la mquina virtual (en vSphere Client) Edit Settings
Hardware Add Ethernet Adapter Next Ajuste de las interfaces de red, Next
Finish.

En mta1sme y mta2sme, un disco duro adicional para Zimbra:


Botn derecho sobre la mquina virtual (en vSphere Client) Edit Settings
Hardware Add Hard Disk Create a new device disk Next Disk size: 100 GB,
Store with the virtual machine, Next Independent, Persistent, Next Finish.

Almacenamiento de la imagen de Ubuntu en el espacio de almacenamiento (datastore) de


los hipervisores.
Sobre el nombre del hipervisor, en vSphere Client, Configuration Storage Botn
derecho sobre el datastore, Browse Datastore Upload files to this datastore.

71

PFC SME del CdC


Instalacin del sistema operativo en las mquinas virtuales

72

Para la instalacin del sistema operativo en las cuatro mquinas virtuales:


Botn derecho sobre la mquina virtual (en vSphere Client) Edit Settings
Hardware CD/DVD Drive 1 Datastore ISO File Browse Seleccionar el nombre
de la imagen de ubuntu Connect at power on OK.
Botn derecho sobre la mquina virtual (en vSphere Client) Edit Settings Options
Boot options The next time the virtual machine boots, force entry into de BIOS
setup screen Arranque de la mquina virtual y configuracin de arranque desde el
CD.
Instalacin normal de ubuntu en las cuatro mquinas virtuales, por parejas, primero
mbx1sme y mta1sme y luego, ms tarde, mbx2sme y mta2sme de la misma forma.
mbx1sme con hostname: mbxetsi.us.es e IP: 193.147.160.201.
mta1sme con hostname: etsi.us.es e IP: 193.147.160.200.

5. Implementacin

Instalacin de Zimbra en la primera pareja

Instalacin de Zimbra en la primera pareja pero vlida para todo el sistema:


Como usuario root:
En mbx1sme:
echo >> /etc/bash.bashrc;echo "PATH=\$PATH:./" >> /etc/bash.bashrc
PATH=$PATH:./
apt-get install -y sshd drbd8-utils cman gfs2-tools heartbeat
apt-get install -y gcc sysstat sqlite3 libperl5.10 watchdog
/root/vmware-tools-distrib/vmware-install.pl -default
wget http://files2.zimbra.com/downloads/7.1.4_GA/\
zcs7.1.4_GA_2555.UBUNTU10_64.20120105094803.tgz
tar xvfz zcs-7.1.4_GA_2555.UBUNTU10_64.20120105094803.tgz
rm zcs-7.1.4_GA_2555.UBUNTU10_64.20120105094803.tgz
apt-get install -y open-iscsi
iscsiadm -m discovery -t sendtargets -p 192.168.161.11 \
| awk '{print $2}' | tail -1 > nombre.txt
iscsiadm -m node --targetname $(cat nombre.txt) -p 192.168.161.11 \
-o update -n node.conn[0].startup -v automatic
iscsiadm -m node --targetname $(cat nombre.txt) -p 192.168.161.11 -l
iscsiadm -m node --op delete --targetname $(cat nombre.txt) -->
ERROR(OK)
parted /dev/sdb
mktable
gpt
mkpart
[sin nombre]
ext3
0
32.7TB
Ignore
quit
mkfs.ext3 /dev/sdb1; drbdadm create-md r0 -> FALLO (leer valor left
usable para la siguiente lnea, sustituyendo las xxxxxxxxxx)
e2fsck -f /dev/sdb1 && resize2fs /dev/sdb1 xxxxxxxxxxK
cd zcs-7.1.4_GA_2555.UBUNTU10_64.20120105094803.tgz/
install.sh

En mta1sme (al acabar con mbx1sme):


echo >> /etc/bash.bashrc;echo "PATH=\$PATH:./" >> /etc/bash.bashrc
PATH=\$PATH:./
apt-get install -y sshd drbd8-utils cman gfs2-tools heartbeat
apt-get install -y gcc sysstat sqlite3 libperl5.10 watchdog
/root/vmware-tools-distrib/vmware-install.pl -default
wget http://files2.zimbra.com/downloads/7.1.4_GA/\
zcs7.1.4_GA_2555.UBUNTU10_64.20120105094803.tgz
tar xvfz zcs-7.1.4_GA_2555.UBUNTU10_64.20120105094803.tgz
rm zcs-7.1.4_GA_2555.UBUNTU10_64.20120105094803.tgz
apt-get install -y open-iscsi
fdisk /dev/sdb -> 1 tabla de particiones (c u o w), 1 particion
100GB (c u p 1 INTRO INTRO w)
init 0

Una vez apagada, ser necesario ampliar la capacidad del disco para crear una nueva
particin, destinada a albergar mailman. Para ello, entramos en Edit settings de la mquina
virtual y cambiamos el tamao del disco a 150 GB. Posteriormente, volvemos a arrancar la

73

PFC SME del CdC


mquina virtual:
fdisk /dev/sdb
-> 1 particion 100GB (c u p 2 INTRO INTRO w)
mkfs.ext3 /dev/sdb1; mkfs.ext3 /dev/sdb2
drbdadm create-md r0 -> FALLO (leer valor left usable para la
siguiente lnea, sustituyendo las xxxxxxxxxx)
e2fsck -f /dev/sdb1 && resize2fs /dev/sdb1 xxxxxxxxxx K
drbdadm create-md r0
drbdadm create-md r1 -> FALLO (leer valor left usable para la
siguiente lnea, sustituyendo las xxxxxxxxxx)
e2fsck -f /dev/sdb2 && resize2fs /dev/sdb2 xxxxxxxxxx K
drbdadm create-md r1
mkdir /usr/local/mailman
cd zcs-7.1.4_GA_2555.UBUNTU10_64.20120105094803.tgz/
install.sh
mailmanMTA.sh
z-push.sh

Siendo mailmanMTA.sh el script, anteriormente comentado, para la integracin de mailman


con Zimbra y siendo z-push.sh el script, tambin mencionado antes, para instalar Z-Push con el
backend necesario para interactuar con Zimbra.
En ambos equipos ser necesario evitar que Zimbra se arranque al iniciar el equipo. Para
ello, se ejecuta el siguiente script en ambos:
soloconfzimbramailmanMTA.sh
#!/bin/sh
rm /etc/rc6.d/S89zimbra
rm /etc/rc6.d/K01zimbra
rm /etc/rc1.d/K01zimbra
rm /etc/rc4.d/S99zimbra
rm /etc/rc4.d/K01zimbra
rm /etc/rc0.d/S89zimbra
rm /etc/rc0.d/K01zimbra
rm /etc/rc5.d/S99zimbra
rm /etc/rc5.d/K01zimbra
rm /etc/rc3.d/S99zimbra
rm /etc/rc3.d/K01zimbra
rm /etc/rc2.d/S99zimbra
rm /etc/rc2.d/K01zimbra

Tambin, en ambos, habr que instalar watchdog, para lo cual se debe usar este script que
incluye su configuracin:

74

5. Implementacin
instalawatchdog.sh
#!/bin/sh
apt-get install watchdog
rm /etc/rc4.d/S09wd_keepalive
rm /etc/rc5.d/S09wd_keepalive
rm /etc/rc3.d/S09wd_keepalive
rm /etc/rc2.d/S09wd_keepalive
rm /etc/rc6.d/K11watchdog
rm /etc/rc1.d/K11watchdog
rm /etc/rc4.d/S89watchdog
rm /etc/rc0.d/K11watchdog
rm /etc/rc5.d/S89watchdog
rm /etc/rc3.d/S89watchdog
rm /etc/rc2.d/S89watchdog
echo "#!/bin/sh" > /usr/sbin/accionwatchdog.sh
echo "service heartbeat stop" >> /usr/sbin/accionwatchdog.sh
echo "init 6" >> /usr/sbin/accionwatchdog.sh
chmod 777 /usr/sbin/accionwatchdog.sh
/sbin/modprobe softdog
echo 'softdog' >> /etc/modules
echo "file = /var/log/messages" >> /etc/watchdog.conf
echo "watchdog-device = /dev/watchdog" >> /etc/watchdog.conf
echo "repair-bin = /usr/sbin/accionwatchdog.sh"
HN=`hostname`
cd /opt/zimbra
if [ $HN = "mta1sme" ]; then
find -name *.pid | sed 's/\./\/opt\/zimbra/1' | grep -v freshclam | grep v zmstat | awk 'BEGIN{print "pidfile\t\t\t= /var/run/heartbeat.pid";print
"pidfile\t\t\t=
/var/run/cdcrpc.pid";print
"pidfile\t\t\t=
/var/run/apache2.pid";print
"pidfile\t\t\t=
/usr/local/mailman/data/masterqrunner.pid"}{print "pidfile\t\t\t= "$0}' >> /etc/watchdog.conf
else
if [ $HN = "mta2sme" ]; then
find -name *.pid | sed 's/\./\/opt\/zimbra/1' | grep -v freshclam |
grep -v zmstat | awk 'BEGIN{print "pidfile\t\t\t= /var/run/heartbeat.pid";print
"pidfile\t\t\t=
/var/run/cdcrpc.pid";print
"pidfile\t\t\t=
/var/run/apache2.pid";print
"pidfile\t\t\t=
/usr/local/mailman/data/masterqrunner.pid"}{print "pidfile\t\t\t= "$0}' >> /etc/watchdog.conf
else
find -name *.pid | sed 's/\./\/opt\/zimbra/1' | grep -v freshclam |
grep -v zmstat | awk 'BEGIN{print "pidfile\t\t\t= /var/run/heartbeat.pid";print
"pidfile\t\t\t=
/var/run/cdcrpc.pid"}{print
"pidfile\t\t\t=
"$0}'
>>
/etc/watchdog.conf
fi
fi
cd
service watchdog start

75

PFC SME del CdC


Configuracin final de la primera pareja
Una vez que Zimbra ha quedado instalado (incluyendo la post-instalacin), ser necesario
seguir una serie de pasos que nos permitan alcanzar la configuracin final de la primera pareja
(mbx1sme y mta1sme):
Paramos el servicio de Zimbra y salvaguardamos la instalacin, en ambos:
service watchdog stop; service zimbra stop
mkdir /tmp/zimbra/
rsync -a /opt/zimbra/ /tmp/zimbra/
rm -r /opt/zimbra/

En mta1sme, adems:
service mailman stop
mkdir /tmp/mailman/
rsync -a /usr/local/mailman/ /tmp/mailman/
rm r /usr/local/mailman/*

Ya que se har uso de esta instalacin con un nombre de host distinto, habr que realizar
una pequea modificacin de /etc/init.d/zimbra en mta1sme y mta2sme debido a comprobaciones
de DNS internas por parte de Postfix. El nuevo contenido ser:
/etc/init.d/zimbra (permisos 777)
#!/bin/bash
#
# ***** BEGIN LICENSE BLOCK *****
# Zimbra Collaboration Suite Server
# Copyright (C) 2005, 2006, 2007, 2009, 2010, 2011 VMware, Inc.
#
# The contents of this file are subject to the Zimbra Public License
# Version 1.3 ("License"); you may not use this file except in
# compliance with the License. You may obtain a copy of the License at
# http://www.zimbra.com/license.
#
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
# ***** END LICENSE BLOCK *****
#
#
# Init file for zimbra mail
#
# chkconfig: 345 99 01
# description: Zimbra mail service
#
### BEGIN INIT INFO
# Provides:
zimbra
# Required-Start: $network $remote_fs $syslog $time nscd cron
# Required-Stop: $network $remote_fs $syslog $time
# Default-Start: 3 5
# Description:
Zimbra mail service
### END INIT INFO

(contina en la siguiente pgina)

76

5. Implementacin

command()
{
if [ -f /opt/zimbra/redolog/redo.log ]; then
chown -f zimbra:zimbra /opt/zimbra/redolog/redo.log
fi
# su - zimbra -c "zmcontrol $1 </dev/null >>/opt/zimbra/log/startup.log
2>&1"
# bug 45842
su - zimbra -c "zmcontrol $1 </dev/null"
}
case "$1" in
restart)
kill `cat /opt/zimbra/data/postfix/data/master.lock`
kill `ps aux | grep saslauthd | awk '{print $2}'`
command shutdown
command startup
RETVAL=0
if [ -d /var/lock/subsys -a $RETVAL -eq 0 ]; then
touch /var/lock/subsys/zimbra
fi
;;
start)
command startup
RETVAL=$?
if [ -d /var/lock/subsys -a $RETVAL -eq 0 ]; then
touch /var/lock/subsys/zimbra
fi
;;
stop)
kill `cat /opt/zimbra/data/postfix/data/master.lock`
kill `ps aux | grep saslauthd | awk '{print $2}'`
command shutdown
RETVAL=0
if [ -d /var/lock/subsys -a $RETVAL -eq 0 ]; then
rm -f /var/lock/subsys/zimbra
fi
;;
reload|status)
command $1
RETVAL=$?
;;
*)
echo $"Usage: $0 {start|stop|restart|reload|status}"
RETVAL=1
esac
exit $RETVAL

Ahora, slo queda configurar los servicios necesarios para la alta disponibilidad. Para ello,
habr que ajustar los archivos de configuracin como sigue a continuacin.

77

PFC SME del CdC


mbx1sme
/etc/hostname
mbx1sme
/etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 193.147.160.203
netmask 255.255.255.128
network 193.147.160.128
broadcast 193.147.160.255
gateway 193.147.160.129
dns-nameservers 150.214.186.69 150.214.130.15
auto eth1
iface eth1 inet static
address 192.168.160.203
netmask 255.255.254.0
network 192.168.160.0
broadcast 192.168.161.255
/etc/hosts
127.0.0.1
193.147.160.200
193.147.160.201
193.147.160.203
193.147.160.204
193.147.160.205
193.147.160.206

localhost
etsi.us.es etsi
mbxetsi.us.es mbxetsi
mbx1sme
mbx2sme
mta1sme
mta2sme

# The following lines are desirable for IPv6 capable hosts


::1
localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
/etc/cluster/cluster.conf
<?xml version="1.0"?>
<cluster name="clustermbx" config_version="1">
<totem consensus="6000" token="3000"/>
<clusternodes>
<clusternode name="mbx1sme" nodeid="1">
<fence></fence>
</clusternode>
<clusternode name="mbx2sme" nodeid="2">
<fence></fence>
</clusternode>
</clusternodes>
<cman expected_votes="1" two_node="1"/>
<fencedevices>
</fencedevices>
<rm></rm>
</cluster>

78

5. Implementacin
/etc/corosync/corosync.conf
totem {
version: 2
token: 3000
token_retransmits_before_loss_const: 10
join: 60
consensus: 5000
vsftype: none
max_messages: 20
clear_node_high_bit: yes
secauth: off
threads: 0
rrp_mode: none
interface {
ringnumber: 0
bindnetaddr: 192.168.160.203
mcastaddr: 192.168.160.255
mcastport: 5405
}
}
amf {
mode: disabled
}
service {
ver:
name:
}
aisexec {
user:
group:
}

0
pacemaker

root
root

logging {
fileline: off
to_stderr: yes
to_logfile: no
to_syslog: yes
syslog_facility: daemon
debug: off
timestamp: on
logger_subsys {
subsys: AMF
debug: off
tags: enter|leave|trace1|trace2|trace3|trace4|trace6
}
}
/etc/ha.d/authkeys (permisos 600)
auth 2
1 crc
2 sha1 clave1
3 md5 clave2

79

PFC SME del CdC


/etc/drbd.conf
global {
usage-count no;
}
common {
protocol C;
syncer { rate 100M; }
}
resource r0 {
handlers {
pri-on-incon-degr "echo o > /proc/sysrq-trigger ; halt -f";
pri-lost-after-sb "echo o > /proc/sysrq-trigger ; halt -f";
local-io-error "echo o > /proc/sysrq-trigger ; halt -f";
}
startup {
wfc-timeout 60;
# 1 minute.
degr-wfc-timeout 120;
# 2 minutes.
}
disk {
on-io-error
detach;
}
net {
after-sb-0pri discard-zero-changes;
after-sb-1pri discard-secondary;
after-sb-2pri disconnect;
rr-conflict disconnect;
}
syncer { rate 100M; }
on mbx1sme {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.160.203:7788;
meta-disk internal;
}
on mbx2sme {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.160.204:7788;
meta-disk internal;
}
}
/etc/ha.d/haresources
mbx1sme drbddisk::all Filesystem::/dev/drbd0::/opt::gfs2::rw getipmbx zimbra \
mtarestart delayedwatchdog
/etc/ha.d/ha.cf
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 12
initdead 18
udpport 694
ucast eth1 192.168.160.204
auto_failback on
node mbx1sme
node mbx2sme

80

5. Implementacin

Finalmente, ser necesario incluir como scripts de servicio, los siguientes:

mtarestart: Script de python basado en xmlrpc que permite la comunicacin de cualquiera


de los dos servidores LDAP + MBX con cualquiera del servidores MTA. Es necesaria esta
comunicacin, ya que si falla el equipo que est ejecutando el servidor LDAP de Zimbra y
tena un servidor Zimbra MTA contectado, al arrancar el nuevo servidor LDAP el servidor
MTA necesita reconectarse. Mediante este script, se fuerza el reinicio del servicio para
efectuar esta reconexin.

/etc/init.d/mtarestart (permisos 777)


#!/usr/bin/python
# -*- coding: iso-8859-15 -*import xmlrpclib, sys, socket
url="http://etsi.us.es:6667/"
codificacion='iso-8859-15'
if len(sys.argv) == 1:
print "Ejecute: mtarestart start|estado"
else:
if sys.argv[1]=="start":
try:
s = xmlrpclib.ServerProxy(url, encoding=codificacion)
print s.reiniciamta()
except socket.error:
print "Error en la comunicacin.
if sys.argv[1]=="estado":
s = xmlrpclib.ServerProxy(url, encoding=codificacion)
try:
print s.estadomta()
except socket.error:
print "Error en la comunicacin.

delayedwatchdog: Script que retrasa el arranque de watchdog el tiempo necesario para


que se consoliden los recursos que monitoriza.

/etc/init.d/delayedwatchdog (permisos 777)


#!/bin/sh
if [ $1 = "start" ]; then
sleep 10; service watchdog start
else
service watchdog $1
fi

manualfenceack: En la utilizacin de CMAN (cluster manager), necesario para GFS2, este


script elimina la proteccin adicional de la barrera de proteccin (fence). Esta proteccin se
basa en equipos especiales (por ejemplo, fuentes de alimentacin) que realizan acciones
sobre los equipos que constituyen la barrera, permitiendo, por ejemplo, apagar/reiniciar un
equipo que ha perdido la conexin con la agrupacin (cluster) pero que no se ha
apagado/reiniciado. Al no disponer de ningn mecanismo sobre el que implementar esta
barrera de proteccin se ha decidido no hacer uso de ella. Tampoco resulta necesario ya
que watchdog se encarga de ello. Para el uso de este script, no invocado por heartbeat, es
necesario aadir la siguiente entrada en /etc/crontab:

81

PFC SME del CdC


* *

* * *

root

sh /etc/init.d/manualfenceack

/etc/init.d/manualfenceack (permisos 777)


#!/bin/sh
MUERTO=`tail
-5
/var/log/syslog
|
awk
'BEGIN{bandera=0}{if($6=="fencing"&&$7=="node"){getline;if($8=="dev"&&$9=="0.0"&
&$10=="agent"){getline;if($6=="fence"&&$8=="failed"){bandera=1}}}}END{print
bandera}'`
if [ $MUERTO -eq "1" ]; then
echo "El otro nodo ha muerto, se toman medidas" >> /var/log/syslog
echo "*"; echo "*"; echo "*"; echo "*"; >> /var/log/syslog
# equivalente a fence_ack_manual
while ! [ -e /var/run/cluster/fenced_override ]; do
sleep 1
done
echo `cat /etc/drbd.conf | grep " on " | grep -v $(hostname) | awk '{print
$2}'` > /var/run/cluster/fenced_override
sleep 1
# fin fence_ack_manual
echo -n "Asentimiento sobreescrito para: " >> /var/log/syslog
echo `cat /etc/drbd.conf | grep " on " | grep -v $(hostname) | awk '{print
$2}'` >> /var/log/syslog
fi

getipmbx: Otorga la IP del servicio haciendo uso de las herramientas de heartbeat.

/etc/init.d/getipmbx (permisos 777)


#!/bin/sh
if [ $# -eq "1" ]; then
if [ $1 = "start" ]; then
ifconfig eth0 193.147.160.201 netmask 255.255.255.128 broadcast
193.147.160.255
route add -net 0.0.0.0 gw 193.147.160.129 netmask 0.0.0.0 metric
100 dev eth0
if [ `hostname` = "mbx1sme" ]; then
/etc/ha.d/resource.d/IPaddr 193.147.160.203/25/eth0 start
fi
if [ `hostname` = "mbx2sme" ]; then
/etc/ha.d/resource.d/IPaddr 193.147.160.204/25/eth0 start
fi
fi
if [ $1 = "stop" ]; then
if [ `hostname` = "mbx1sme" ]; then
ifconfig
eth0
193.147.160.203
netmask
255.255.255.128
broadcast 193.147.160.255
route add -net 0.0.0.0 gw 193.147.160.129 netmask 0.0.0.0
metric 100 dev eth0
/etc/ha.d/resource.d/IPaddr 193.147.160.203/25/eth0 stop
fi
if [ `hostname` = "mbx2sme" ]; then
ifconfig
eth0
193.147.160.204
netmask
255.255.255.128
broadcast 193.147.160.255
route add -net 0.0.0.0 gw 193.147.160.129 netmask 0.0.0.0
metric 100 dev eth0

(contina en la siguiente pgina)

82

5. Implementacin
/etc/ha.d/resource.d/IPaddr 193.147.160.204/25/eth0 stop
fi
fi
else
echo "Uso: /etc/init.d/getipmbx {start|stop}"
fi

83

PFC SME del CdC


mta1sme
/etc/hostname
mta1sme

/etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 193.147.160.205
netmask 255.255.255.128
network 193.147.160.128
broadcast 193.147.160.255
gateway 193.147.160.129
dns-nameservers 150.214.186.69 150.214.130.15
auto eth1
iface eth1 inet static
address 192.168.160.205
netmask 255.255.254.0
network 192.168.160.0
broadcast 192.168.161.255
/etc/hosts:

Igual que en mbx1sme.


/etc/cluster/cluster.conf
<?xml version="1.0"?>
<cluster name="clustermta" config_version="1">
<totem consensus="6000" token="3000"/>
<clusternodes>
<clusternode name="mta1sme" nodeid="1">
<fence>
</fence>
</clusternode>
<clusternode name="mta2sme" nodeid="2">
<fence>
</fence>
</clusternode>
</clusternodes>
<cman expected_votes="1" two_node="1"/>
<fencedevices>
</fencedevices>
<rm>
</rm>
</cluster>

84

5. Implementacin
/etc/corosync/corosync.conf
totem {
version: 2
token: 3000
token_retransmits_before_loss_const: 10
join: 60
consensus: 5000
vsftype: none
max_messages: 20
clear_node_high_bit: yes
secauth: off
threads: 0
rrp_mode: none
interface {
ringnumber: 0
bindnetaddr: 192.168.160.205
mcastaddr: 192.168.160.255
mcastport: 5405
}
}
amf {
mode: disabled
}
service {
ver:
name:
}
aisexec {
user:
group:
}

0
pacemaker

root
root

logging {
fileline: off
to_stderr: yes
to_logfile: no
to_syslog: yes
syslog_facility: daemon
debug: off
timestamp: on
logger_subsys {
subsys: AMF
debug: off
tags: enter|leave|trace1|trace2|trace3|trace4|trace6
}
}

85

PFC SME del CdC


/etc/drbd.conf
global {
usage-count no;
}
common {
protocol C;
syncer { rate 100M; }
}
resource r0 {
handlers {
pri-on-incon-degr "echo o > /proc/sysrq-trigger ; halt -f";
pri-lost-after-sb "echo o > /proc/sysrq-trigger ; halt -f";
local-io-error "echo o > /proc/sysrq-trigger ; halt -f";
}
startup {
wfc-timeout 60;
# 1 minute.
degr-wfc-timeout 120;
# 2 minutes.
}
disk {
on-io-error
detach;
}
net {
after-sb-0pri discard-zero-changes;
after-sb-1pri discard-secondary;
after-sb-2pri disconnect;
rr-conflict disconnect;
}
syncer {
rate 100M;
}
on mta1sme {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.160.205:7788;
meta-disk internal;
}
on mta2sme {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.160.206:7788;
meta-disk internal;
}
}
resource r1 {
handlers {
pri-on-incon-degr "echo o > /proc/sysrq-trigger ; halt -f";
pri-lost-after-sb "echo o > /proc/sysrq-trigger ; halt -f";
local-io-error "echo o > /proc/sysrq-trigger ; halt -f";
}
startup {
wfc-timeout 60;
# 1 minute.
degr-wfc-timeout 120;
# 2 minutes.
}
disk {
on-io-error
detach;
}

(contina en la siguiente pgina)

86

5. Implementacin

net {
after-sb-0pri discard-zero-changes;
after-sb-1pri discard-secondary;
after-sb-2pri disconnect;
rr-conflict disconnect;
}
syncer {
rate 100M;
}
on mta1sme {
device /dev/drbd1;
disk /dev/sdb2;
address 192.168.160.205:7789;
meta-disk internal;
}
on mta2sme {
device /dev/drbd1;
disk /dev/sdb2;
address 192.168.160.206:7789;
meta-disk internal;
}
}

/etc/ha.d/authkeys (permisos 600)


auth 2
1 crc
2 sha1 clave1
3 md5 clave2
/etc/ha.d/haresources
mta1sme drbddisk::all Filesystem::/dev/drbd1::/usr/local/mailman::gfs2::rw
Filesystem::/dev/drbd0::/opt::gfs2::rw mounttmpfs getipetsi \
zimbra cdcrpc apache2 mailman delayedwatchdog

/etc/ha.d/ha.cf
debugfile /var/log/ha-debug
logfile
/var/log/ha-log
logfacility local0
keepalive 2
deadtime 12
initdead 18
udpport
694
ucast eth1 192.168.160.206
auto_failback on
node mta1sme
node mta2sme

Finalmente, ser necesario incluir como scripts de servicio, los siguientes:

manualfenceack: Al igual que en mbx1sme, es necesario aadir la siguiente entrada en


/etc/crontab:

87

PFC SME del CdC


* *

* * *

root

sh /etc/init.d/manualfenceack

/etc/init.d/manualfenceack (permisos 777)

Igual que en mbx1sme.

delayedwatchdog: Al igual que en mbx1sme, es necesario el siguiente script de servicio:

/etc/init.d/delayedwatchdog (permisos 777)

Igual que en mbx1sme.

getipetsi: Otorga la IP del servicio haciendo uso de las herramientas de heartbeat.

/etc/init.d/getipetsi (permisos 777)


#!/bin/sh
if [ $# -eq "1" ]; then
if [ $1 = "start" ]; then
ifconfig eth0 193.147.160.200 netmask 255.255.255.128 broadcast
193.147.160.255
route add -net 0.0.0.0 gw 193.147.160.129 netmask 0.0.0.0 metric
100 dev eth0
if [ `hostname` = "mta1sme" ]; then
/etc/ha.d/resource.d/IPaddr 193.147.160.205/25/eth0 start
fi
if [ `hostname` = "mta2sme" ]; then
/etc/ha.d/resource.d/IPaddr 193.147.160.206/25/eth0 start
fi
fi
if [ $1 = "stop" ]; then
if [ `hostname` = "mta1sme" ]; then
ifconfig
eth0
193.147.160.205
netmask
255.255.255.128
broadcast 193.147.160.255
route add -net 0.0.0.0 gw 193.147.160.129 netmask 0.0.0.0
metric 100 dev eth0
/etc/ha.d/resource.d/IPaddr 193.147.160.205/25/eth0 stop
fi
if [ `hostname` = "mta2sme" ]; then
ifconfig
eth0
193.147.160.206
netmask
255.255.255.128
broadcast 193.147.160.255
route add -net 0.0.0.0 gw 193.147.160.129 netmask 0.0.0.0
metric 100 dev eth0
/etc/ha.d/resource.d/IPaddr 193.147.160.206/25/eth0 stop
fi
fi
else
echo "Uso: /etc/init.d/getipetsi {start|stop}"
fi

88

mounttmpfs: Monta el directorio temporal de amavisd como un sistema de ficheros tmpfs,


que se aloja en la memoria RAM y que mejora el rendimiento. Los detalles sobre esta
mejora se comentan en las peculiaridades de la instalacin de @etsi.us.es.

5. Implementacin
/etc/init.d/mounttmpfs (permisos 777)
#!/bin/sh
if [ $# -ne "1" ]; then
echo "USO: mounttmpfs {start|stop}"
else
if [ $1 = "start" ]; then
if [ `df | grep amavisd | wc -l` = "0" ]; then
mount
-t
tmpfs
defaults,noexec,nodev,nosuid,size=260m,mode=750,uid=zimbra,gid=zimbra
/opt/zimbra/data/amavisd/tmp/
fi
fi
if [ $1 = "stop" ]; then
if [ `df | grep amavisd | wc -l` = "1" ]; then
umount /opt/zimbra/data/amavisd/tmp/
fi
fi
fi

-o
/dev/shm/

El clculo de la zona de RAM reservada para este directorio responde al siguiente criterio,
con parmetro principal el tamao mximo de un correo electrnico:
n * (1 + max(expansionfactor)) * $zimbraMtaMaxMessageSize

Tabla 10: Frmula para el clculo del espacio temporal necesario para amavisd

Parmetro

Valor por
defecto

10

max(expansionfactor)

1,6

zimbraMtaMaxMessageSize

10240 kB

Descripcin
Opcin max_servers configurada en
/opt/zimbra/conf/amavisd.conf. Responde al
nmero de procesos simultneos de amavisd
que pueden ejecutarse.
Factor de expansin de archivos comprimidos.
Puede tomarse 1.6 como valor estndar.
Es un parmetro de configuracin de Zimbra.
Responde al tamao mximo de un correo
electrnico.

Tabla 11: Parmetros de la frmula para el clculo del espacio temporal de amavisd

89

PFC SME del CdC


Puesta en marcha de la primera pareja
Una vez que las mquinas mbx1sme y mta1sme han sido debidamente configuradas, ya
podemos hacer uso de todos los recursos. Adems, debemos incluir en ellos la instalacin de
Zimbra que hicimos anteriormente, para ello:

En mbx1sme:
service drbd restart
drbdadm -- --overwrite-data-of-peer primary all
mkfs.gfs2 -t clustermbx:zimbra -p lock_dlm -j 2 /dev/drbd0
mount -t gfs2 /dev/drbd0 /opt/
mkdir /opt/zimbra/
rsync -a /tmp/zimbra/ /opt/zimbra/

En mta1sme:
service drbd restart
drbdadm -- --overwrite-data-of-peer primary all
mkfs.gfs2 -t clustermta:zimbra -p lock_dlm -j 2 /dev/drbd0
mkfs.gfs2 -t clustermta:mailman -p lock_dlm -j 2 /dev/drbd1
mount -t gfs2 /dev/drbd0 /opt/
mkdir /opt/zimbra/
rsync -a /tmp/zimbra/ /opt/zimbra/
mount -t gfs2 /dev/drbd1 /usr/local/mailman/
rsync -a /tmp/mailman/ /usr/local/mailman/

Con esto ya quedara completamente funcional la primera pareja de equipos que ofrecen el
servicio deseado de forma autnoma. Para verificar el funcionamiento, deben ser reiniciados los
equipos y esperar a que arranquen todos los procesos necesarios. Para monitorizar que todo se
inicia adecuadamente, es conveniente ir comprobando las ltimas lneas del registro /var/log/halog mientras se van iniciando los distintos servicios.

90

5. Implementacin

Preparacin de la segunda pareja


Con mbx1sme y mta1sme apagados, se realiza una instalacin normal de ubuntu en
mbx2sme y mta2sme de la misma forma.

mbx2sme con hostname: mbxetsi.us.es e IP: 193.147.160.201.


mta2sme con hostname: etsi.us.es e IP: 193.147.160.200.

Instalacin de Zimbra en la segunda pareja


En mbx2sme:
echo >> /etc/bash.bashrc;echo "PATH=\$PATH:./" >> /etc/bash.bashrc
PATH=$PATH:./
apt-get install -y sshd drbd8-utils cman gfs2-tools heartbeat
apt-get install -y gcc sysstat sqlite3 libperl5.10 watchdog
/root/vmware-tools-distrib/vmware-install.pl -default
wget http://files2.zimbra.com/downloads/7.1.4_GA/\
zcs7.1.4_GA_2555.UBUNTU10_64.20120105094803.tgz
tar xvfz zcs-7.1.4_GA_2555.UBUNTU10_64.20120105094803.tgz
rm zcs-7.1.4_GA_2555.UBUNTU10_64.20120105094803.tgz
apt-get install -y open-iscsi
iscsiadm -m discovery -t sendtargets -p 192.168.161.12 \
| awk '{print $2}' | tail -1 > nombre.txt
iscsiadm -m node --targetname $(cat nombre.txt) -p 192.168.161.12 \
-o update -n node.conn[0].startup -v automatic
iscsiadm -m node --targetname $(cat nombre.txt) -p 192.168.161.12 -l
iscsiadm -m node --op delete --targetname $(cat nombre.txt) -->
ERROR(OK)
parted /dev/sdb
mktable
gpt
mkpart
[sin nombre]
ext3
0
32.7TB
Ignore
quit
mkfs.ext3 /dev/sdb1; drbdadm create-md r0 -> FALLO (leer valor left
usable para la siguiente lnea, sustituyendo las xxxxxxxxxx)
e2fsck -f /dev/sdb1 && resize2fs /dev/sdb1 xxxxxxxxxxK
cd zcs-7.1.4_GA_2555.UBUNTU10_64.20120105094803.tgz/
install.sh

En mta2sme (al acabar con mbx2sme):

91

PFC SME del CdC


echo >> /etc/bash.bashrc;echo "PATH=\$PATH:./" >> /etc/bash.bashrc
PATH=\$PATH:./
apt-get install -y sshd drbd8-utils cman gfs2-tools heartbeat
apt-get install -y gcc sysstat sqlite3 libperl5.10
/root/vmware-tools-distrib/vmware-install.pl -default
wget http://files2.zimbra.com/downloads/7.1.4_GA/\
zcs7.1.4_GA_2555.UBUNTU10_64.20120105094803.tgz
tar xvfz zcs-7.1.4_GA_2555.UBUNTU10_64.20120105094803.tgz
rm zcs-7.1.4_GA_2555.UBUNTU10_64.20120105094803.tgz
apt-get install -y open-iscsi
fdisk /dev/sdb -> 1 tabla de particiones (c u o w), 1 particion
100GB (c u p 1 INTRO INTRO w)
init 0

Una vez apagada, ser necesario ampliar la capacidad del disco para crear una nueva
particin, destinada a albergar mailman. Para ello, entramos en Edit settings de la mquina
virtual y cambiamos el tamao del disco a 150 GB. Posteriormente, volvemos a arrancar la
mquina virtual:
fdisk /dev/sdb
-> 1 particion 100GB (c u p 2 INTRO INTRO w)
mkfs.ext3 /dev/sdb1; mkfs.ext3 /dev/sdb2
drbdadm create-md r0 -> FALLO (leer valor left usable para la
siguiente lnea, sustituyendo las xxxxxxxxxx)
e2fsck -f /dev/sdb1 && resize2fs /dev/sdb1 104853340K
drbdadm create-md r0
drbdadm create-md r1 -> FALLO (leer valor left usable para la
siguiente lnea, sustituyendo las xxxxxxxxxx)
e2fsck -f /dev/sdb2 && resize2fs /dev/sdb2 10485404K
drbdadm create-md r1
mkdir /usr/local/mailman
cd zcs-7.1.4_GA_2555.UBUNTU10_64.20120105094803.tgz/
install.sh
mailmanMTA.sh
z-push.sh

92

5. Implementacin

Configuracin final de la segunda pareja


Una vez que Zimbra ha quedado instalado (incluyendo la post-instalacin), ser necesario
seguir una serie de pasos que nos permitan alcanzar la configuracin final de la segunda pareja
(mbx2sme y mta2sme):
Paramos el servicio de Zimbra y borramos la instalacin, en ambos:
service zimbra stop
rm -r /opt/zimbra/

En mta2sme, adems:
service mailman stop
cd /usr/local/mailman/; rm -r *

Ahora, slo queda configurar los servicios necesarios para la alta disponibilidad. Para ello,
habr que ajustar los archivos de configuracin como sigue a continuacin.

93

PFC SME del CdC


mbx2sme
/etc/hostname
mbx2sme

/etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 193.147.160.204
netmask 255.255.255.128
network 193.147.160.128
broadcast 193.147.160.255
gateway 193.147.160.129
dns-nameservers 150.214.186.69 150.214.130.15
auto eth1
iface eth1 inet static
address 192.168.160.204
netmask 255.255.254.0
network 192.168.160.0
broadcast 192.168.161.255
/etc/hosts

Igual que en mbx1sme.


/etc/cluster/cluster.conf

Igual que en mbx1sme.


/etc/drbd.conf

Igual que en mbx1sme.


/etc/ha.d/authkeys (permisos 600)

Igual que en mbx1sme.


/etc/ha.d/haresources

Igual que en mbx1sme.


/etc/ha.d/ha.cf
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 12
initdead 18
udpport 694
ucast eth1 192.168.160.204
auto_failback on
node mbx1sme
node mbx2sme

94

5. Implementacin
/etc/corosync/corosync.conf
totem {
version: 2
token: 3000
token_retransmits_before_loss_const: 10
join: 60
consensus: 5000
vsftype: none
max_messages: 20
clear_node_high_bit: yes
secauth: off
threads: 0
rrp_mode: none
interface {
ringnumber: 1
bindnetaddr: 192.168.160.204
mcastaddr: 192.168.160.255
mcastport: 5405
}
}
amf {
mode: disabled
}
service {
ver:
name:
}
aisexec {
user:
group:
}

0
pacemaker

root
root

logging {
fileline: off
to_stderr: yes
to_logfile: no
to_syslog: yes
syslog_facility: daemon
debug: off
timestamp: on
logger_subsys {
subsys: AMF
debug: off
tags: enter|leave|trace1|trace2|trace3|trace4|trace6
}
}

Finalmente, ser necesario incluir como scripts de servicio los mismos que para mbx1sme.

95

PFC SME del CdC


mta2sme
/etc/hostname
mta2sme

/etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 193.147.160.206
netmask 255.255.255.128
network 193.147.160.128
broadcast 193.147.160.255
gateway 193.147.160.129
dns-nameservers 150.214.186.69 150.214.130.15
auto eth1
iface eth1 inet static
address 192.168.160.206
netmask 255.255.254.0
network 192.168.160.0
broadcast 192.168.161.255
/etc/hosts:

Igual que en mbx1sme.


/etc/cluster/cluster.conf

Igual que en mta1sme.


/etc/drbd.conf

Igual que en mta1sme.


/etc/ha.d/authkeys (permisos 600)

Igual que en mta1sme.


/etc/ha.d/haresources

Igual que mta1sme.

96

5. Implementacin
/etc/corosync/corosync.conf
totem {
version: 2
token: 3000
token_retransmits_before_loss_const: 10
join: 60
consensus: 5000
vsftype: none
max_messages: 20
clear_node_high_bit: yes
secauth: off
threads: 0
rrp_mode: none
interface {
ringnumber: 1
bindnetaddr: 192.168.160.206
mcastaddr: 192.168.160.255
mcastport: 5405
}
}
amf {
mode: disabled
}
service {
ver:
name:
}
aisexec {
user:
group:
}

0
pacemaker

root
root

logging {
fileline: off
to_stderr: yes
to_logfile: no
to_syslog: yes
syslog_facility: daemon
debug: off
timestamp: on
logger_subsys {
subsys: AMF
debug: off
tags: enter|leave|trace1|trace2|trace3|trace4|trace6
}
}

97

PFC SME del CdC


/etc/ha.d/ha.cf
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 12
initdead 18
udpport 694
ucast eth1 192.168.160.205
auto_failback on
node mta1sme
node mta2sme

Finalmente, ser necesario incluir como scripts de servicio los mismos que para mta1sme.

98

5. Implementacin

Puesta en marcha de la segunda pareja


Una vez que las mquinas mbx2sme y mta2sme han sido debidamente configuradas, ya
podemos hacer uso de todos los recursos de esta pareja. Para ello, en ambos:
init 6

Con esto ya quedara completamente funcional la segunda pareja de equipos que ofrecen
el servicio deseado de forma autnoma. Para verificar el funcionamiento se debe esperar a que se
sincronicen las particiones drbd. Para monitorizar el estado de la sincronizacin, es conveniente ir
comprobando el fichero /proc/drbd hasta que el estado sea UpToDate en ambos equipos.

99

PFC SME del CdC


Instalacin de @etsi.us.es
Adems de todo lo visto anteriormente, la instalacin correspondiente al dominio
@etsi.us.es debe cumplir una serie de particularidades que se enuncian a continuacin:

Autenticacin externa mediante LDAPS frente al servicio ofrecido por la Universidad de


Sevilla.
Autenticacin en la entrega de correo del servidor mediante SMTP Auth frente al
intercambiador principal de la Universidad de Sevilla (mail.us.es).
Mejora en el rendimiento inicial de amavisd-new.
Desactivacin de la GAL (Global Address List) de Zimbra.
Utilizacin de XMLRPC (XML Remote Procedure Control).

LDAPS
La autenticacin LDAP (Lightweight Directory Access Protocol) se har frente al servidor
atenea.us.es. Para que Zimbra permita el uso de LDAPS (LDAP seguro) frente a cualquier servidor,
debe tener almacenado su certificado.
Para obtener este certificado de atenea.us.es e instalarlo en el servidor LDAP + MAILBOX,
puede hacerse uso del siguiente script:
/root/instalacertificadoatenea.sh (permisos 777)
openssl s_client -connect 193.147.160.148:636 | awk \
'{if($1=="-----BEGIN"){while($1!="-----END"){print $0 >> \
"./certificado.crt"; getline;}print $0 >> "./certificado.crt"}}\'
sudo /opt/zimbra/java/bin/keytool -import -alias EXTERNAL-LDAP \
-keystore /opt/zimbra/java/jre/lib/security/cacerts -storepass \
changeit -file ./certificado.crt
rm ./certificado.crt
service zimbra restart

Puede resultar til permitir la autenticacin local para alguna cuenta con la que no se
pueda usar el servidor LDAP externo, como la cuenta de administracin. Para ello habr que
ejecutar en el mismo servidor:
su zimbra
zmprov md etsi.us.es zimbraAuthFallbackToLocal TRUE

Es recomendable que aquellas cuentas en las que se desee utilizar autenticacin local
tengan definido un dominio de consulta externa no vlido, para evitar realizar peticiones
innecesarias, as por ejemplo, el campo Cuenta LDAP externa para autenticacin deber tener el
valor (guin simple), por ejemplo.
Adems,
en
la
interfaz
de
administracin
de
Zimbra
(https://mbxetsi.us.es:7071/zimbraAdmin), debe configurarse el dominio para la autenticacin
externa. Para ello, en DOMINIOS ETSI.US.ES Configurar autenticacin, debe introducirse los

100

5. Implementacin

siguientes parmetros:

URL de LDAP: https://atenea.us.es, Puerto: 636, UTILIZAR SSL activado.


Filtro LDAP: uid=%u (el uid para autenticar es el nombre de la cuenta, todo lo que vaya
antes de la @ de la direccin de correo).
Base de bsqueda de LDAP: o=us.es,dc=us,dc=es.
Utilizar el DN/ la contrasea para asociar al servidor externo activado.
DN de enlace: uid=consultaesi,ou=people,dc=us,dc=es.
Contrasea de enlace y confirmar la contrasea.

SMTP Auth
Al pertenecer ETSI.US.ES al dominio de la Universidad de Sevilla (US.ES), se debe ajustar la
configuracin de acuerdo a su poltica. En concreto, debe definirse como intercambiador principal
mail.us.es. Este servidor slo acepta el correo mediante SMTP autenticado (SMTP Auth) al puerto
25. Para ello, ser necesario una cuenta LDAP especial de la US (mail-etsi@us.es) y la siguiente
configuracin, en el servidor MTA, y como usuario zimbra:
zmprov ms etsi.us.es zimbraMtaRelayHost mail.us.es
echo mail.us.es mail-etsi@us.es:AQUICONTRASEA \
> /opt/zimbra/conf/relay_password
postmap hash:/opt/zimbra/conf/relay_password
postmap -q mail.us.es /opt/zimbra/conf/relay_password
postconf -e smtp_sasl_password_maps=hash:/opt/zimbra/conf/relay_password
postconf -e smtp_sasl_auth_enable=yes
postconf -e smtp_cname_overrides_servername=no
postconf -e smtp_use_tls=yes
postconf -e smtp_sasl_security_options=noanonymous
exit
service zimbra restart

Donde slo hay que completar con la contrasea de la cuenta en el lugar indicado.
Mejora del rendimiento de amavisd-new
Zimbra hace uso de amavisd-new para recoger el correo y que el antivirus (ClamAv) y el
antispam (SpamAssassin) puedan examinarlo. Posteriormente, amavisd-new devuelve el correo a
su cadena de proceso habitual. Esta aplicacin puede ver reducido su tiempo de trnsito mediante
las siguientes dos actuaciones:

Creacin de un espacio temporal en la RAM para almacenar los correos mientras son
procesados. Esta mejora ya ha sido contemplada en la instalacin mediante el uso del script
/init.d/mounttmpfs usado por /etc/ha.cf/haresources.
Activacin de una base de datos MySQL para mejorar la bsqueda durante el escaneo del
antispam. Para ello, debe ejecutarse lo siguiente, en el servidor MTA y como usuario
zimbra:

101

PFC SME del CdC


zmlocalconfig -e antispam_mysql_enabled=TRUE
zmantispamctl restart

Se ha comprobado que el uso de estas tcnicas mejora el rendimiento de amavisd-new en


un 60%.
Desactivacin de GAL
La agenda global GAL (Global Address List) est pensada para un entorno ms colaborativo
del que aqu se aborda. Por tanto, por privacidad, conviene desactivarla. Para ello, debe
introducirse el siguiente comando, como usuario zimbra en el servidor LDAP + MAILBOX del
sistema:
zmprov mc default zimbraFeatureGalEnable FALSE

Utilizacin de XMLRPC
Existe una situacin en la que se hace necesario que un equipo servidor MAILBOX + LDAP
necesita dar una orden ajena a Zimbra al equipo servidor MTA que est prestando el servicio. La
situacin es la siguiente: funcionando el servicio, si el servidor MAILBOX + LDAP activo cambia por
el otro, el servidor MTA debe reiniciarse. La solucin que se ha adoptado es la siguiente:

El servidor MTA, una vez que recoge el testigo de heartbeat, arranca CDCRPC
(implementacin de XMLRPC hecha en el Centro de Clculo) y se queda escuchando la
orden de reiniciarse.
Una vez que un servidor MAILBOX + LDAP se inicia, enva la orden de reiniciarse al servidor
MTA activo en ese momento.
Con esta configuracin queda solucionado el problema.

102

5. Implementacin

Verificacin de la instalacin
Para verificar que el sistema se ha instalado y configurado correctamente pueden realizarse
las siguientes comprobaciones:

Zimbra est corriendo:


En las cuatro mquinas virtuales ejecutamos: service zimbra status
En mbx1sme: Todos los servicios deben aparecer Running
En mbx2sme: Error, ruta no encontrada.
Verificamos con df que no existe nada montado en /opt/.
En mta1sme: Todos los servicios deben aparecer Running
En mta2sme: Error, ruta no encontrada.
Verificamos con df que no existe nada montado en /opt/.
Funciona la autenticacin externa:
https://mbxetsi.us.es/: Identificacin con UVUS/contrasea de PAS o PDI.
Funciona la autenticacin interna para las cuentas que as lo tengan definido:
https://mbxetsi.us.es/: Identificacin con usuario/contrasea predefinido.
Se enva y recibe correo electrnico correctamente:
Desde la interfaz de usuario de Zimbra, se enva contra un dominio externo, por
ejemplo, @gmail.com.
Si se recibe, desde @gmail.com se responde y se comprueba que llega la respuesta.
Funciona mailman.
https://etsi.us.es:7780/mailman: muestra correctamente las listas creadas.
Se enva correo a una lista (desde una cuenta autorizada) y se comprueba que se
entrega a alguien suscrito a esa lista.
Funciona la mejora de rendimiento de amavisd-new.
Desde la interfaz de usuario, se enva un correo a una cuenta local, con nivel de carga
baja en el servidor.
Se accede a la cuenta de destino y se ve el mensaje completo (Ver original).
Se mira el tiempo que lo tuvo amavisd-new. Para ello se mira la fecha y hora de entrada
al servidor 127.0.0.1:10024 y la fecha y hora de entrada al siguiente salto.
Si el tiempo es inferior a 3 segundos, funciona correctamente.
Funciona Z-Push.
En Android 2.3.6, por ejemplo, AJUSTES CUENTAS Y SINCRONIZACIN
CORPORATIVO:
Nombre de usuario: UVUS
Contrasea.
Servidor Exchange: etsi.us.es
Usar SSL: Activado.
Aceptar todos los certificados: Activado.
Desactivar Sync SMS despus de que el servidor haya aceptado la conexin y
muestre datos para la sincronizacin.
Funciona la alta disponibilidad.
Con las cuatro mquinas virtuales encendidas.
Se ejecuta init 0 en mbx1sme y se comprueba en mbx2sme en el fichero
/var/log/ha-log que asume los recursos de mbx1sme. Posteriormente (tarda un

103

PFC SME del CdC

104

tiempo en arrancar todos los servicios, en especial Zimbra), se ejecuta service


zimbra status. Debe aparecer todo Running. A continuacin, se enciende la
mquina virtual mbx1sme y se comprueba que despus de arrancar recuper el
servicio ya que est definida como principal en el caso de que estn las dos mbx
activas.
Igual con mta1sme y mta2sme.
Se corta la corriente de mbx1sme (Power off en el vSphere Client de VMWare), y
se comprueba desde mbx2sme que se detecta y se asume el servicio.
Igual desde mta2sme con mta1sme.
Se corta la corriente de mbx2sme (mientras mbx1sme funciona y presta el servicio),
y se comprueba desde mbx1sme que no sucede nada extrao. Posteriormente se
enciende mbx2sme monitorizando en mbx1sme que todo se inicia correctamente,
mirando los ficheros /var/log/ha-log y /proc/drbd.
Igual con mta2sme y mta1sme.

5. Implementacin

Servicios y recursos ofrecidos


Esta instalacin proporciona los siguientes recursos y servicios:

https://mbxetsi.us.es/: Interfaz de usuario. Tres versiones:


AJAX (la ms completa)
HTML
Mvil
https://etsi.us.es:7780/mailman/: Listas de distribucin.
Acceso IMAP SSL. Configuracin:
Servidor: mbxetsi.us.es
SSL: Activado
Puerto: 993
Acceso POP3 SSL. Configuracin:
Servidor: mbxetsi.us.es
SSL: Activado
Puerto: 995
Acceso SMTP TLS. Configuracin:
Servidor: etsi.us.es
TLS: Activado
Puerto: 587
Acceso WebDAV. Configuracin:
https://mbxetsi.us.es/dav/usuario@etsi.us.es/Briefcase (se puede sustituir Briefcase
por el nombre de otro maletn creado por el usuario)
Acceso CalDAV. Configuracin:
https://mbxetsi.us.es/dav/usuario@etsi.us.es/Calendar
Acceso CardDAV. Configuracin:
https://mbxetsi.us.es/dav/usuario@etsi.us.es/Contacts
Servidor Exchange para dispositivos mviles. Configuracin:
Servidor: etsi.us.es
Acceso SSL
Aceptar todos los certificados
Sync SMS desactivado (cuando aparezca)
https://mbxetsi.us.es:7071/zimbraAdmin/: Interfaz de administracin

105

PFC SME del CdC

Entrega del sistema


Es interesante mencionar cmo se hace la entrega del sistema al usuario final (el Centro de
Clculo de la ETSI) una vez finalizados su diseo, implementacin y puesta en produccin.
Adems de toda la informacin ofrecida en este documento, falta por aadir la siguiente
informacin de carcter sensible:

Contrasea de los hipervisores: Los hipervisores cuenta con una contrasea de


administracin a travs de la cual se tiene acceso a su supervisin, gestin y
mantenimiento.
Contrasea del usuario root de las cuatro mquinas virtuales (as como de otros usuarios
que hayan sido creados): Con ella se tiene acceso completo al sistema operativo completo y
a la instalacin de Zimbra mediante la consola de comandos que soporta cualquier
operacin sobre el servicio. Tambin a las instalaciones de Mailman y Z-Push.
Contrasea de administracin de Zimbra: Con ella se tiene acceso a la cuenta del
administrador de Zimbra y a la interfaz web de administracin.
Contrasea de administracin de Mailman: Cuya principal funcionalidad es la de crear una
lista de distribucin desde el interfaz web, pero no es necesaria su utilizacin si se tiene
acceso a la consola de comandos del sistema operatvo en el que est instalado Mailman.
Contraseas internas para el funcionamiento de Zimbra (necesarias para configurar otros
servidores Zimbra distintos del MAILBOX + LDAP principal a la hora de ser instalados):
o Contrasea del servidor LDAP principal.
o Contrasea para las rplicas de LDAP.
o Contrasea de postfix en LDAP.
o Contrasea de amavis en LDAP.
o Contrasea de nginx en LDAP.
Contraseas internas de funcionamiento de las aplicaciones (heartbeat, iscsi, etc.): No
resulta necesario entregarlas si se tiene acceso completo al sistema, ya que figuran en los
ficheros de configuracin y su uso es interno a las distintas aplicaciones, es decir, no
controlan el acceso a su gestin.

Y un par de contraseas externas:


Contrasea para la entrega externa autenticada frente a mail.us.es (SMTP Auth),
proporcionada bajo demanda por la Universidad de Sevilla.
Contrasea para la base de bsqueda de LDAP en el servidor externo ldap.us.es, tambin
proporcionada por la Universidad de Sevilla bajo peticin.

106