Migrando Exchange 2010 a Zarafa, parte 7

Ahora toca añadir SSL al webaccess.

Primero, vamos al servidor y añadimos los siguientes directorios con los permisos:


# mkdir /etc/apache2/certs
# chmod 700 /etc/apache2/certs
# cd /etc/apache2/certs

Generamos el certificado:


openssl req -nodes -newkey rsa:2048 -keyout zarafa-ssl.key -out zarafa-ssl.csr

Y respondemos a las preguntas….

Vemos si se ha generado el certificado…

cat /etc/apache2/certs/zarafa-ssl.key

Firmamos el certificado:


openssl x509 -req -in zarafa-ssl.csr -signkey zarafa-ssl.key -out zarafa-ssl.crt -days 9999

root@zeus#a2enmod ssl

Habilitamos el SSL en el webaccess de zarafa:


root@zeus#nano /etc/apache2/sites-available/zarafa-webaccess

Y añadimos al final del fichero..


SSLEngine On
SSLCertificateFile /etc/apache2/certs/zarafa-ssl.crt
SSLCertificateKeyFile /etc/apache2/certs/zarafa-ssl.key

Reiniciamos el apache y listo …


/etc/init.d/apache2 restart

Migrando Exchange 2010 a Zarafa, parte 6

En esta sección, procederemos al apartado de las copias.

Con la versión free, no se incluye la utilidad zarafa-backup, así que tendremos que montar nosotros el sistema de copias.

Como no tengo muchos datos (4 gigas aprox de correo entre todos los buzones), haré un dump de la base de datos.

Creamos en la carpeta /usr/local/copias/ un script en bash, con el siguiente contenido

root@zeus#nano /usr/local/copias/copia.sh

Y añadimos lo siguiente:

echo “————————————————————–”
echo “— Exportamos la bbdd mysql zeus :: zarafa —————–”
echo “————————————————————–”
cd /media/backup_zfc/bbdd
mysqldump -uroot -pPASSWORD –single-transaction –skip-opt –quick zarafa > zarafa.sql
echo “—— Exportacion finalizada ——————————–”
echo “————————————————————–”
echo “—- renombramos los ficheros .sql y los comprimimos ———”
tar -zcvf respaldo_zarafa_$(date +%d%m%y).tgz zarafa.sql
echo “—– Ahora borramos los ficheros de logs de + de 5 dias —–”
find -name ‘*.tgz’ -type f -mtime +5 -exec rm -f {} ;
echo “—- proceso finalizado ————————————–”
echo “——— copiamos ficheros postfix ————————-”
cd /etc/postfix
cp -r * /media/backup_zfc/postfix_zeus
echo “—- proceso finalizado ————————————–”
echo “——- copiamos ficheros zarafa —————————–”
cd /etc/zarafa
cp -r * /media/backup_zfc/zarafa
echo “—- proceso finalizado ————————————–”

Y ahora explicamos:


cd /media/backup_zfc/bbdd
mysqldump -uroot -pPASSWORD –single-transaction –skip-opt –quick zarafa > zarafa.sql

Hacemos un volcado total de la base de datos.


tar -zcvf respaldo_zarafa_$(date +%d%m%y).tgz zarafa.sql

Hacemos un TAR con la fecha de la copia.


find -name ‘*.tgz’ -type f -mtime +5 -exec rm -f {} ;

Eliminamos todos los ficheros de > de 5 días, para no llenar el disco iSCSI con copias.

Ya sé que no es la mejor opción y, si quiero recuperar un buzón en concreto es complicado, pero jugando un poco con los backups, mysql y la utilidad zarafa-migration-tool es posible hacerlo.

Migrando Exchange 2010 a Zarafa, parte 5

Ahora configuraremos de manera correcta postfix, que será el encargado de recoger el correo del antispam y entregarlo al lmtp local.


root@zeus#apt-get remove exim4 exim4-doc
root@zeus#apt-get install postfix postfix-ldap postfix-doc

Ahora configuramos postfix, en /etc/postfix

Editamos el fichero main.cf y lo dejamos tal que:


myhostname = zeus.craem.net
mydomain = craem.net
inet_interfaces = all
mydestination = $hostname, localhost.$mydomain, localhost
mynetworks = 192.168.0.0/16, 127.0.0.0/8
relayhost = 192.168.2.2
zarafa_destination_recipient_limit = 1
virtual_transport = zarafa:
#
virtual_mailbox_domains = craem.net, misdominiosSeparadosPorComas
zarafa_destination_recipient_limit = 1
virtual_mailbox_maps = ldap:/etc/postfix/ldap-users.cf
virtual_alias_maps = ldap:/etc/postfix/ldap-aliases.cf
virtual_transport = lmtp:127.0.0.1:2003

# mail size an some generic settings
message_size_limit = 15360000
delay_notice_recipient = craem@craem.net
bounce_notice_recipient = craem@craem.net
2bounce_notice_recipient = craem@craem.net
error_notice_recipient = craem@craem.net

Ahora el fichero ldap-aliases

server_host = 192.168.2.5
search_base = dc=craem,dc=net
version = 3
bind = yes
bind_dn = uid=admin,dc=craem,dc=net
bind_pw = passwordUsuario
scope = sub
query_filter = (zarafaAliases=%s)
result_attribute = mail

Y ahora el fichero ldap-users.cfg


server_host = 192.168.2.5
search_base = dc=craem,dc=net
version = 3
scope = sub
query_filter = (mail=%s)
result_attribute = mail
bind = yes
bind_dn = cn=admin,dc=craem,dc=net
bind_pw = passwordUsuarioLdap

Editamos el fichero master.cf y añadimos al final:


zarafa unix – n n – 10 pipe
flags= user=vmail argv=/usr/bin/zarafa-dagent ${user}

Reiniciamos Postfix, con /etc/init.d/postfix restart.

En principio, tenemos zarafa de la siguiente manera:

– Buzones creados con ldap
– WebAccess funcionando
– El idioma configurado correctamente
– Entrega y recibe correo local y externamente

Nos queda por configurar:

– Webaccess por SSL
– ActiveSync
– Copias de seguridad.

Migrando Exchange 2010 a Zarafa, parte 4

Ahora, editamos la parte de Ldap, haciendo:


root@zeus:/etc/zarafa# cp ldap.openldap.cfg ldap.cfg

Cambiamos :

nano ldap.cfg


##############################################################
# LDAP/ACTIVE DIRECTORY USER PLUGIN SETTINGS
#
# Any of these directives that are required, are only required if the
# userplugin parameter is set to ldap.

# LDAP host name/IP address
# Optional, default = localhost
ldap_host = la.ip.de.mi.ldap

# LDAP port
# Optional, default = 389
# Use 636 for ldaps
ldap_port = 389

# LDAP protocol
# Optional, default = ldap
# use ‘ldaps’ for SSL encryption. Make sure /etc/ldap/ldap.conf is
# configured correctly with TLS_CACERT
ldap_protocol = ldap

# The DN of the user to bind as for normal operations (not used for
# authentication if ldap_authentication_method is set to “bind”
# Optional, default = empty (anonymous bind)
# The userPassword attribute must be readable for this user if the
# ldap_authentication_method option is set to password.
ldap_bind_user = cn=admin,dc=craem,dc=net

# LDAP bind password
# Optional, default = empty (no password)
ldap_bind_passwd = password_ldap_user

# The timeout for network operations in seconds
ldap_network_timeout = 30

# When an object (user/group/company) is changed, this attribute will also change:
# Active directory: uSNChanged
# LDAP: modifyTimestamp
ldap_last_modification_attribute = modifyTimestamp

#########
# Object settings

# Top level search base, every object should be available under this tree
ldap_search_base = dc=craem,dc=net

# attribute name which is/(should: was) used in ldap_user_search_filter
ldap_object_type_attribute = objectClass
ldap_user_type_attribute_value = posixAccount
ldap_group_type_attribute_value = posixGroup
ldap_contact_type_attribute_value = zarafa-contact
ldap_company_type_attribute_value = organizationalUnit
ldap_addresslist_type_attribute_value = zarafa-addresslist
ldap_dynamicgroup_type_attribute_value = zarafa-dynamicgroup

y para manejar las quotas de almacenamiento:

should also receive a warning mail when a user exceeds his quota.
ldap_quota_userwarning_recipients_attribute = zarafaQuotaUserWarningRecipients

# Optional, default = text
# Active directory: dn
# LDAP: text
ldap_quota_userwarning_recipients_attribute_type = text

# Optional, default empty
ldap_quota_userwarning_recipients_relation_attribute =

# Optional
# The attribute which indicates which users should receive a warning mail
# when a company exceeds his quota.
ldap_quota_companywarning_recipients_attribute = zarafaQuotaCompanyWarningRecipients

# Optional, default = text
# Active directory: dn
# LDAP: text
ldap_quota_companywarning_recipients_attribute_type = text

# Optional, default empty
ldap_quota_companywarning_recipients_relation_attribute =

# Whether to override the system wide quota settings
ldap_quotaoverride_attribute = zarafaQuotaOverride

ldap_warnquota_attribute = zarafaQuotaWarn
ldap_softquota_attribute = zarafaQuotaSoft
ldap_hardquota_attribute = zarafaQuotaHard


# Whether to override the system wide quota settings for all users within the company
ldap_userdefault_quotaoverride_attribute = zarafaUserDefaultQuotaOverride

ldap_userdefault_warnquota_attribute = zarafaUserDefaultQuotaWarn
ldap_userdefault_softquota_attribute = zarafaUserDefaultQuotaSoft
ldap_userdefault_hardquota_attribute = zarafaUserDefaultQuotaHard

# Mapping from the quota attributes to a number of bytes. Qmail-LDAP
# schema uses bytes (1), ADS uses kilobytes (1024*1024).
ldap_quota_multiplier = 1

Aplicamos los cambios y iniciamos zarafa

root@zeus#/etc/init.d/zarafa-server start

Ahora modificamos los usuarios de ldap para que sean usuarios de zarafa, añadiendo los siguientes atributos:
object-Class: zarafa-user

Y modificando:

zarafaAccount = 1
zarafaAdmin = 1

ZarafaAdmin=1 será el usuario con derecho de acceso a todos los buzones, importante para la migración. zarafaAccount=1, indica que este usuario es de zarafa.

Añadimos las direcciones de email, en el campo email, que pueden ser, de 1 a N.

Una vez modificados todos los usuario implicados, consultamos desde la línea de comandos los usuarios de zarafa:

root@zeus:/etc/zarafa# zarafa-admin -l
User list for Default(9):
Username Fullname Homeserver
—————————————————-
SYSTEM SYSTEM Zarafa
pepito Pepito
manolito Manolito
poseidon Poseidon
zeus Zeus
andromeda Andromeda
openfire openfire
cepheus Cepheus
info info

Si no nos sale la lista de usuarios, algo hemos hecho mal y toca revisar la configuración.

Antes de crear los buzones, configuramos correctamente el idioma, para evitar sorpresas y cambios posteriores en el idioma de los buzones. Nos vamos al directorio:
/etc/zarafa/userscripts/createuser.d

y editamos el fichero 00createstore y lo dejamos tal que:


#! /bin/sh

# Create a Zarafa user for an already existing external user. Create
# and initialize the user’s stores.

PATH=$PATH:/sbin:/usr/local/sbin:/usr/sbin

# The ZARAFA_USER variable from the server will always be in UTF-8
# format. The –utf8 option must be set before this value is used,
# since the current locale isn’t necessarily UTF-8.
zarafa-admin –create-store username –lang es_ES.UTF-8
#zarafa-admin –utf8 –create-store “${ZARAFA_USER}” –lang “${ZARAFA_LANG}”

Ahora creamos los buzones:


root@zeus#zarafa-admin –create-store pepito
…..

Y así con todos los buzones

Migrando Exchange 2010 a Zarafa, parte 3

Una vez finalizada la instalación, paramos el servicio zarafa-server.

root@zeus#/etc/init.d/zarafa-server stop

Primero de todo, configuramos el apache2 para que nos muestre correctamente los acentos, eñes y demás códigos ascii de la manera correcta en nuestro explorador. Nos vamos al fichero /etc/apache2/envvars y cambiamos:


## The locale used by some modules like mod_dav
export LANG=C
## Uncomment the following line to use the system default locale instead:
#. /etc/default/locale

por esto otro:


## The locale used by some modules like mod_dav
#export LANG=C
export LANG=”es_ES.utf8″
## Uncomment the following line to use the system default locale instead:
#. /etc/default/locale

Reinciamos el apache2

root@zeus#/etc/init.d/apache2 force-reload

Importante, sinó veremos como en el webaccess (que es muy bueno), los acentos se traducen a ‘?’ y resulta bastante frustante.

Ahora editamos el fichero de configuración de zarafa, server.cfg, en la carpeta /etc/zarafa y, en mi caso, hago los siguientes cambios:


# e-mail address of the Zarafa System user
system_email_address = craem@craem.net

##############################################################
# MYSQL SETTINGS (for database_engine = mysql)

# MySQL hostname to connect to for database access
mysql_host = localhost

# MySQL port to connect with (usually 3306)
mysql_port = 3306

# The user under which we connect with MySQL
mysql_user = root

# The password for the user (leave empty for no password)
mysql_password = miPasswordMySQL

# Override the default MySQL socket to access mysql locally
# Works only if the mysql_host value is empty or ‘localhost’
mysql_socket =

# Database to connect to
mysql_database = zarafa

##############################################################
# USER PLUGIN SETTINGS

# Name of the plugin that handles users
# Required, default = ldap
# Values: ldap, unix, db, ldapms (available in enterprise license)
user_plugin = ldap

# configuration file of the user plugin, examples can be found in /usr/share/zarafa/example-config
user_plugin_config = /etc/zarafa/ldap.cfg

# location of the zarafa plugins
# if you have a 64bit distribution, this probably should be changed to /usr/lib64/zarafa
plugin_path = /usr/lib/zarafa

En mi caso, la auth de los usuarios es sobre ldap… me gusta la idea de unificar todos los logins contra una única BBDD, siendo para mí:

– Wifi 802.1x / radius
– Openfire
– Zarafa
– Acceso VPN / radius

En vez de tener usuarios locales para cada programa / aplicación, configuro una única vez y cuando lo cambio, lo hago para todos.

Seguimos configurando zarafa, ahora le toca al dagent, que es el daemon encargado de entregar el correo localmente al zarafa. Nos vamos al directorio /etc/default y editamos el fichero zarafa

Cambiamos:


# Common defaults for all daemons
ZARAFA_LOCALE=”es_ES.utf8″
# Set this to ‘yes’ to enable the zarafa-dagent to start in LMTP mode
DAGENT_ENABLED=yes

Migrando Exchange 2010 a Zarafa, parte 2

Primero de todo, necesitamos un pc con Linux instalado y, al menos apache2.

Vamos a la línea de comandos y:

root@zeus:~#apt-get install apache2

Descargamos la versión de zarafa, desde aquí; en mi caso, descargo la versión debian squeeze x64.

Descomprimimos…

root@zeus#tar -zxvf zcp-7.0.0-27791-debian-6.0-x86_64-free.tar.gz

Cambiamos al directorio …

root@zeus#cd zcp-7.0.0-27791-debian-6.0-x86_64

Instalamos….

root@zeus:/zcp-7.0.0-27791-debian-6.0-x86_64# ./install.sh

Si falta algún paquete, lo instalará; esperamos y en unos minutos, tendremos ya instalado y funcionando nuestro servidor zarafa.

Migrando Exchange 2010 a Zarafa, parte 1

Hace unos meses que estaba buscando una solución open source a Exchange; no es que me desagrade la solución de microsoft, todo lo contrario, es un software muy bueno, con muchas opciones de configuración y con un webaccess muy conseguido y compatible con firefox, pero necesitaba probar otros programas, con los siguientes requisitos:

– Compatible con dispositivos móviles, android / iphone.
– Open Source, total o parcial.
– Correo almacenado en servidor, tipo exchage (indispensable).
– Que consuma pocos recursos, o menos que exchange 2010.
– Web Access completo y compatible con todos los navegadores.
– Fácil de recuperar en caso de desastres.
– Que funcione sobre linux.

Mi correo personal, desde hace años lo tengo en casa, pasando por el fantástico y sencillo smtpbeamer, allá por el año 1997 y migrado a exchange 5.5, 2000, 2003 y finalmente a 2010.

La elección de exchange era básica…… tenía los buzones almacenados siempre en el servidor, las copias de seguridad con Backup Exec y en cinta, la integración con outlook es perfecta y lo más importante, lo tengo muy por la mano para administrarlo.

La última migración desde exchange 2003 a Exchange 2010 fue bastante difícil y todavía había algunas cosas que no me acababan de funcionar bien…… el active sync con mi android no iba fino… las tareas que creaba no se replicaban si eran creadas en el outlook / owa, pero sí en teléfono y el consumo de recursos era demasiado elevado para 8 buzones que tengo en casa, en un ML 110 G4 con 5 gigas de ram.

Desde hace varios años, uso linux en mis pc’s de trabajo y windows para cosas muy específicas con virtualBox (configuradores de routers xDSL de ttd, delphi y poco más) y la idea de tener el otro servidor con Linux me atraía bastante, así que me lancé al ruedo.

Estuve probando soluciones de groupware: Zimbra, OpenXchange, Zarafa y Scalix durante 2 meses y en máquinas virtuales; todas ellas fantásticas, pero Zarafa me encantó; cubría todas las necesidades que tenía y totalmente opensource.

La web del fabricante:

www.zarafa.com

Va con licencia Affero GPLv3.

Pasar de Exchange 2010 a Zarafa comporta:

1º) Active Directory (gestión usuarios) <-> openLdap.
2º) ActiveSync <-> z-Push.
3º) Outlook Mapi <-> Conector MAPI outlook para 3 usuarios (versión openSource).
4º) BBDD propietaria <-> MySQL.
5º) Copias de seguridad Backup Exec <-> Scripts en Bash / dumps MySQL.

Con el cambio estoy muy contento, en cuanto a rendimiento, usabilidad y recuperación ante desastres.

En el siguiente post empiezo explicando la instalación de Zarafa sobre una Debian Squeeze x64.