zimbra mail begginer

90
5. Implementación 17 5. Implementación Solución software escogida Después de haber hecho un análisis sobre las distintas alternativas software, se ha decidido usar Zimbra como servidor de correo electrónico para implementar el sistema de mensajería del centro de cálculo. Las alternativas evaluadas han sido: Soluciones modulares: Exim + ClamAV + SpamAssasin + Dovecot + STARTTLS + SMTP AUTH + Mailman: Esta solución está basada en los módulos más conocidos. Soluciones integradas: iRedMail: Utiliza Postfix como MTA. Es de código abierto. Es una solución integrada y se anuncia como libre. Sin embargo, la parte gratuita es la integración ya realizada de todos los paquetes, prácticamente los mismos que en la solución modular mencionada anteriormente. Una vez integrados todos los paquetes, desde iRedMail se vende una interfaz de configuración y administración que aporta numerosas ventajas y posibilidades. Zimbra: Utiliza Postfix como MTA. Es un software colaborativo. Incluye varias funciones además del correo electrónico. Tiene una versión de código abierto que incluye una versión completa del sistema. Presenta una serie de limitaciones pero ninguna en la prestación 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 código abierto. Está distribuido en módulos propios, facilitando una instalación 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 decisión definitiva, se redujo la lista de candidatos a dos: iRedMail y Zimbra. El descarte de la solución modular se debe a que Postfix y Exim tienen un rendimiento similar, con lo cual, la solución modular e iRedMail son prácticamente la misma, con el inconveniente de que en la solución modular es necesaria la instalación e integración de los paquetes uno a uno. Por tanto se descarta la solución 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 configuración que no esté englobada en las versiones de pago de Zimbra. Sin embargo, la información relativa a Horde es más escasa y aunque también cuenta con una comunidad, no es tan completa. La información y la diversidad son fundamentales desde el punto de vista del desarrollo de una solución concreta, como la que nos ocupa. Por tanto, de entre estas dos soluciones integradas, se prefiere Zimbra. Tras realizar las instalaciones y configuraciones básicas de iRedMail y Zimbra, finalmente se

Upload: carlos

Post on 14-Sep-2015

84 views

Category:

Documents


5 download

DESCRIPTION

Zimbra mail begginer

TRANSCRIPT

  • 5. Implementacin

    17

    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

  • PFC SME del CdC

    18

    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.

  • 5. Implementacin

    19

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

    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

    Ilustracin 13: Logo Zimbra

    Ilustracin 14: Zimbra Collaboration Server Open Source Edition

  • PFC SME del CdC

    20

    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.

    Ilustracin 15: Logo Mailman (antiguo) Ilustracin 16: Logo Mailman

  • 5. Implementacin

    21

    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.

    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.

    Ilustracin 17: Logo Z-Push

    Ilustracin 18: Logo Zimbra backend

  • PFC SME del CdC

    22

    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:

    Posteriormente, se descomprime:

    Es necesario instalar, como root, los siguientes paquetes:

    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

    /etc/hosts

    Ahora:

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

    wget http://files2.zimbra.com/downloads/7.1.4_GA/\ zcs-7.1.4_GA_2555.UBUNTU10_64.20120105094803.tgz

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

    apt-get install sysstat sqlite3

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

    + IP_del_equipo nombrepropio.subdominio.dominio nombrepropio

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

  • 5. Implementacin

    23

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

    (contina en la siguiente pgina)

    Checking for installable packages

    Found zimbra-core Found zimbra-ldap Found zimbra-logger Found zimbra-mta Found zimbra-snmp Found zimbra-store Found zimbra-apache Found 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

    Main menu

    1) Common Configuration:

    +Hostname: mailhost.example.com +Ldap master host: mailhost.example.com +Ldap port: 389 +Ldap Admin password: set +Secure interprocess communications: yes +TimeZone: America/Los_Angeles

    2) zimbra-ldap: Enabled +Status Enabled +Create Domain: yes +Domain to create: mailhost.example.com +Ldap root password: set +Ldap replication password: set +Ldap postfix password: set +Ldap amavis password: set +Ldap nginx password: set

  • PFC SME del CdC

    24

    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

    3) zimbra-store: Enabled +Status Enabled +Create Admin User: yes +Admin user to create: [email protected] ******* +Admin Password UNSET +Anti-virus quarantine user: [email protected] +Enable automated spam training: yes +Spam training user [email protected] +Non-spam(Ham) training user: [email protected] +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: [email protected] +Version update source email: [email protected]

    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

  • 5. Implementacin

    25

    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:

    Parar el servicio. Ejecutando:

    Iniciar el servicio. Ejecutando:

    Reiniciar el servicio. Ejecutando:

    Interfaz de usuario:

    Consola de administracin:

    service zimbra status

    service zimbra stop

    service zimbra start

    service zimbra restart

    http://mailhost.example.com/

    https://mailhost.example.com:7071/zimbraAdmin/

  • PFC SME del CdC

    26

    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)

    (contina en la siguiente pgina)

    #!/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

  • 5. Implementacin

    27

    (contina en la siguiente pgina)

    echo >> /opt/zimbra/conf/httpd.conf echo "" >> /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 "" >> /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 "" >> /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 "" >> /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

  • PFC SME del CdC

    28

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

    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

  • 5. Implementacin

    29

    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)

    (contina en la siguiente pgina)

    #!/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/zimbra-backend/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 "" > /etc/apache2/sites-available/z-push echo "ServerAdmin [email protected]" >> /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

  • PFC SME del CdC

    30

    (contina en la siguiente pgina)

    echo >> /etc/apache2/sites-available/z-push echo "" >> /etc/apache2/sites-available/z-push echo "AllowOverride All" >> /etc/apache2/sites-available/z-push echo "" >> /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/sites-available/z-push echo "CustomLog /var/log/apache2/z-sync/access.log combined" >> /etc/apache2/sites-available/z-push echo "" >> /etc/apache2/sites-available/z-push #sitio disponible z-push con SSL y puerto 443 echo "" > /etc/apache2/sites-available/z-push_ssl echo "" >> /etc/apache2/sites-available/z-push_ssl echo "ServerAdmin [email protected]" >> /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 "" >> /etc/apache2/sites-available/z-push_ssl echo "AllowOverride None" >> /etc/apache2/sites-available/z-push_ssl echo "" >> /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/z-push_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/sites-available/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/sites-available/z-push_ssl echo "SSLCertificateKeyFile /etc/apache2/ssl/server.key" >> /etc/apache2/sites-available/z-push_ssl echo "SSLCertificateChainFile /etc/apache2/ssl/ca.crt" >> /etc/apache2/sites-available/z-push_ssl echo "" >> /etc/apache2/sites-available/z-push_ssl echo "SSLCACertificateFile /etc/apache2/ssl/ca.crt" >> /etc/apache2/sites-available/z-push_ssl echo "" >> /etc/apache2/sites-available/z-push_ssl echo "" >> /etc/apache2/sites-available/z-push_ssl echo "" >> /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

  • 5. Implementacin

    31

    (contina en la siguiente pgina)

    echo "" > /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 "" >> /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

  • PFC SME del CdC

    32

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

  • 5. Implementacin

    33

    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 Clculo Resultado Datos de usuario Nmero de usuarios tamao de

    buzn 100 GB

    Datos necesarios por MySQL

    5% del tamao de datos de usuario 5 GB

    Instalacin de Zimbra Tamao fijo 10 GB Registros de Zimbra (logs) Tamao fijo 20 GB ndices de Zimbra 25% del tamao de datos de usuario 25 GB TOTAL 160 GB

    Tabla 2: Tamao necesario para la instalacin de Zimbra

  • PFC SME del CdC

    34

    Virtualizacin

    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. Para la instalacin de ESXi 4.1 en un equipo, es necesario seguir los siguientes pasos:

    1. Registrarse en la pgina de VMware. 2. Acceder al producto (ESXi 4.1). 3. 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. 4. Descargar la instalacin de VMware en un archivo ISO. 5. Grabacin del archivo ISO en un CD (o memoria USB) e instalacin en el equipo (a partir de

    ahora hipervisor). 6. Una vez instalado siguiendo los pasos indicados en la instalacin es necesario definirle una

    contrasea de administrador. 7. 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:

    Ilustracin 19: Logo VMWare

  • 5. Implementacin

    35

    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:

    y pulsar sobre Enable Local Tech Support:

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

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

    Ilustracin 21: Pgina principal de configuracin del hipervisor

    Ilustracin 22: Habilitacin de la consola de comandos del hipervisor

  • PFC SME del CdC

    36

    puede activar el servidor de SSH para un determinado puerto de la siguiente manera:

    1. Acceder al archivo de configuracin de red.

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

    /etc/inetd.conf

    3. Guardar y salir (presionar ESC, luego :wq e INTRO). 4. Acceder al archivo de los servicios y puertos.

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

    /etc/services

    6. Guardar y salir. 7. Reiniciar la red en el hipervisor con:

    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.

    vi /etc/inetd.conf

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

    vi /etc/services

    - ssh 22/tcp # SSH Remote Login Protocol + ssh 55443/tcp # SSH Remote Login Protocol - ssh 22/udp # SSH Remote Login Protocol + ssh 55443/udp # SSH Remote Login Protocol

    kill -HUP `ps | grep inetd | awk '{print $1}'`

  • 5. Implementacin

    37

    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.

  • PFC SME del CdC

    38

    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:

    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

    /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

    Ilustracin 23: Logo Heartbeat

    apt-get install heartbeat

    auth 1 1 crc 2 sha1 HI! 3 md5 Hello!

    debugfile /var/log/ha-debug #nombre del log debug logfile /var/log/ha-log #nombre del log de heartbeat logfacility local0 #configuracin para el log del sistema keepalive 2 #tiempo del latido en segundos deadtime 12 #tiempo en declarar al otro muerto initdead 18 #tiempo antes de emprender acciones udpport 694 #puerto udp para la comunicacin ucast eth0 192.168.137.2 #interfaz local e ip del nodo opuesto auto_failback on #ceder su puesto si el primario est node vm1 #nombre del primer equipo = hostname node vm3 #nombre del segundo equipo = hostname

  • 5. Implementacin

    39

    Para el otro equipo, el fichero sera el siguiente:

    vm2:/etc/ha.d/ha.cf

    /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

    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.

    debugfile /var/log/ha-debug #nombre del log debug logfile /var/log/ha-log #nombre del log de heartbeat logfacility local0 #configuracin para el log del sistema keepalive 2 #tiempo del latido en segundos deadtime 12 #tiempo en declarar al otro muerto initdead 18 #tiempo antes de emprender acciones udpport 694 #puerto udp para la comunicacin ucast eth0 192.168.137.1 #interfaz local e ip del nodo opuesto auto_failback on #ceder su puesto si el primario est node vm1 #nombre del primer equipo = hostname node vm3 #nombre del segundo equipo = hostname

    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

  • PFC SME del CdC

    40

    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.

  • 5. Implementacin

    41

    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:

    Posteriormente, ser necesario ejecutar lo siguiente:

    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.

    apt-get install watchdog

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

  • PFC SME del CdC

    42

    DRBD (Distributed Replicated Block Device)

    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:

    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 24: Logo DRBD

    Ilustracin 26: Esquema fundamental de alta disponibilidad

    Ilustracin 25: Esquema de funcionamiento de DRBD

  • 5. Implementacin

    43

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

    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 install ethstats dpatch patchutils cogito git-core sp apt-get install docbook-utils docbook build-essential flex dpkg-dev apt-get install fakeroot module-assistant apt-get install drbd8-utils

    Ilustracin 27: Solucin que aporta DRBD a la alta disponibilidad

  • PFC SME del CdC

    44

    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

    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.

    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; } }

  • 5. Implementacin

    45

    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

    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.

    #!/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

  • PFC SME del CdC

    46

    GFS2 (Global File System 2)

    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:

    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-hmac-

    perl, 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

    /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:

    Ilustracin 28: Logo redhat

    apt-get install gfs2-tools

  • 5. Implementacin

    47

    /etc/corosync/corosync.conf

    Se debe iniciar cman en ambos equipos:

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

    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: 0 name: pacemaker } aisexec { user: root group: 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/init.d/cman start

  • PFC SME del CdC

    48

    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:

    2. Posteriormente, hay que crear el recurso definido en DRBD, en ambos equipos, mediante:

    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:

    y usarlo para ejecutar la siguiente instruccin, en ambos equipos, donde hay que substituir yyyyyyyy por el valor adecuado:

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

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

    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:

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

    mkfs.ext3 /dev/sdb1

    drbdadm create-md r0

    ... yyyyyyyy kB left usable by current configuration ...

    e2fsck -f /dev/sdb1 && resize2fs /dev/sdb1 yyyyyyyyK

    drbdadm create-md r0

    /etc/init.d/drbd start

    drbdadm primary r0

  • 5. Implementacin

    49

    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:

    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:

    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:

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

    drbdadm -- --overwrite-data-of-peer primary all

    cat /proc/drbd

    mkfs.gfs2 -t cluster:nombre -p lock_dlm -j 2 /dev/drbd0

    mount -t gfs2 /dev/drbd0 /tmp

  • PFC SME del CdC

    50

    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:

    Posteriormente, se descomprime, en ambos servidores:

    wget http://files2.zimbra.com/downloads/7.1.4_GA/\ zcs-7.1.4_GA_2555.UBUNTU10_64.20120105094803.tgz

  • 5. Implementacin

    51

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

    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

    /etc/hosts

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

    apt-get install sysstat sqlite3 libperl5.10

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

    + IP_del_equipo nombrepropio.subdominio.dominio nombrepropio

  • PFC SME del CdC

    52

    LDAP + MAILBOX

    Ahora, en el servidor LDAP + MAILBOX:

    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.

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

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

    Checking for installable packages

    Found zimbra-core Found zimbra-ldap Found zimbra-logger Found zimbra-mta Found zimbra-snmp Found zimbra-store Found zimbra-apache Found zimbra-spell Found zimbra-proxy Found 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

  • 5. Implementacin

    53

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

    Main menu

    1) Common Configuration: +Hostname: mailhost.example.com +Ldap master host: mailhost.example.com +Ldap port: 389 +Ldap Admin password: set +Secure interprocess communications: yes +TimeZone: America/Los_Angeles

    2) zimbra-ldap: Enabled +Status Enabled +Create Domain: yes +Domain to create: mailhost.example.com +Ldap root password: set +Ldap replication password: set +Ldap postfix password: set +Ldap amavis password: set +Ldap nginx password: set

    3) zimbra-store: Enabled +Status Enabled +Create Admin User: yes +Admin user to create: [email protected] ******* +Admin Password UNSET +Anti-virus quarantine user: [email protected] +Enable automated spam training: yes +Spam training user [email protected] +Non-spam(Ham) training user: [email protected] +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: [email protected] +Version update source email: [email protected] 4) zimbra-logger: Enabled 5) zimbra-spell: Enabled 6) zimbra-convertd: Enabled 7) Default Class of Service Configuration: 8) Enable default backup schedule: yes c) Collapse menu r) Start servers after configuration yes s) Save config to file q) Quit

  • PFC SME del CdC

    54

    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:

    Parar el servicio. Ejecutando:

    Iniciar el servicio. Ejecutando:

    Reiniciar el servicio. Ejecutando:

    Interfaz de usuario:

    Consola de administracin:

    service zimbra status

    service zimbra stop

    service zimbra start

    service zimbra restart

    http://mailhost.example.com/

    https://mailhost.example.com:7071/zimbraAdmin/

  • 5. Implementacin

    55

    MTA

    Ahora, en el servidor MTA:

    Aceptamos la licencia e instalamos el siguiente paquete: mta. Si se desea utilizar SNMP, sera necesario instalarlo en todos los servidores.

    Autorizamos que se modifique el sistema y configuramos la instalacin:

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

    Checking for installable packages Found zimbra-core Found zimbra-ldap Found zimbra-logger Found zimbra-mta Found zimbra-snmp Found zimbra-store Found zimbra-apache Found zimbra-spell Found 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

    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: [email protected] +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

  • PFC SME del CdC

    56

    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.

  • 5. Implementacin

    57

    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:

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

    Posteriormente, es necesario habilitar los registros, para ello, en ambos servidores y como usuario root:

    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

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

    /etc/rsyslog.d/60-zimbra.conf en MBX + LDAP:

    /etc/rsyslog.d/60-zimbra.conf en MTA:

    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:

    echo AllowUsers admin zimbra root >> /etc/ssh/sshd_config service ssh restart

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

    /opt/zimbra/libexec/zmsyslogsetup

    - #$modload imudp + $modload imudp - #$UDPServerRun 514 + $UDPServerRun 514

    local0.* -/var/log/zimbra.log local1.* -/var/log/zimbra-stats.log auth.* -/var/log/zimbra.log mail.* -/var/log/zimbra.log

    local0.* @mailhost.example.com local1.* @mailhost.example.com auth.* @mailhost.example.com local0.* -/var/log/zimbra.log local1.* -/var/log/zimbra-stats.log auth.* -/var/log/zimbra.log mail.* @mailhost.example.com mail.* -/var/log/zimbra.log

    service rsyslog restart service zimbra restart

  • PFC SME del CdC

    58

    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)

    (contina en la siguiente pgina)

    #!/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

  • 5. Implementacin

    59

    (contina en la siguiente pgina)

    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 "" >> /etc/apache2/sites-available/mailmanssl echo "" >> /etc/apache2/sites-available/mailmanssl echo "ServerAdmin admin@${SERVIDOR}" >> /etc/apache2/sites-available/mailmanssl echo "ServerName ${SERVIDOR}" >> /etc/apache2/sites-available/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 "" >> /etc/apache2/sites-available/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 "" >> /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 "" >> /etc/apache2/sites-available/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 "" >> /etc/apache2/sites-available/mailmanssl echo >> /etc/apache2/sites-available/mailmanssl echo "RedirectMatch ^/mailman[/]*$ https://${SERVIDOR}:7780/mailman/listinfo" >> /etc/apache2/sites-available/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 "" >> /etc/apache2/sites-available/mailmanssl echo "" >> /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

  • PFC SME del CdC

    60

    (contina en la siguiente pgina)

    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

  • 5. Implementacin

    61

    (contina en la siguiente pgina)

    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

  • PFC SME del CdC

    62

    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

  • 5. Implementacin

    63

    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.

  • PFC SME del CdC

    64

    Sistema final

    Arquitectura general

    La estructura general del sistema ser la siguiente:

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

    Ilustracin 29: Arquitectura completa del sistema final

  • 5. Implementacin

    65

    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 TS-EC1279U-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.

  • PFC SME del CdC

    66

    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 Clculo Resultado Datos de usuario Nmero de usuarios Tamao de

    buzn 12000 GB

    Datos necesarios por MySQL

    5% del tamao de datos de usuario 600 GB

    Instalacin de Zimbra Tamao fijo 10 GB Registros de Zimbra (logs) Tamao fijo 20 GB ndices de Zimbra 25% del tamao de datos de usuario 3000 GB TOTAL 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:

  • 5. Implementacin

    67

    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)