Parte 2: ZCS (Zimbra Comunication Server)

Imagen de RazaMetaL

[u]Procedimiento[/u]:
[b]INSTALAR ZIMBRA[/b]
Para quienes no conzcan Zimbra, es un conjunto de aplicaciones que proveen un groupware muy completo. Zimbra envia y recibe emails, administra usuarios, administra dominios virtuales para email, tiene mensajería instantánea y una interfaz webmail en AJAX para los usuarios finales. Tiene además herramientas colaborativas como wiki, maletín, cliente de mensajería integrado en la interfaz de webmail, libreta de direcciones, buscador, filtros de mensajes, etc. Una de las funcionalidades que utilizaremos mas adelante es su servidor LDAP el cuál brindará autenticación a samba y squid.

Las especificaciones completas de la version Opensource las pueden encontrar en [url]http://www.zimbra.com/products/[/url].

En el equipo destinado para la instalación de Zimbra quitaremos e instalaremos algunas dependencias:


aptitude purge exim4 exim4-base exim4-config exim4-daemon-light apache2
aptitude install libc6-i686 libidn11 curl file fetchmail libpcre3 libexpat1 libgetopt-mixed-perl libxml2 libstdc++6 libstdc++5 openssl libltdl3 sudo libgmp3c2 ssh openssh-server libmail-spf-query-perl sysstat libossp-uuid-perl sqlite3

Modificamos el archivo /etc/hosts para que contenga la siguiente información:


127.0.0.1 localhost.localdomain localhost
200.200.200.100 mail.midominio.com mail

Ejecutamos en la consola:

echo mail.midominio.com > /etc/hostname

Si estan instalando zimbra en un servidor que no tiene configuradas las direcciones declaradas en el DNS es seguro que adelante vamos a tener problemas, para evitar esto utilizaremos dnsmas para que el instalado de zimbra utilize un dns local manejado a nuestro antojo:


aptitude install dnsmasq

Editamos /etc/dnsmasq.conf para que contenga (reemplazar X.X.X.X con la direccion ip del equipo):

address=/mail.midominio.com/X.X.X.X
mx-host=midominio.com,mail.midominio.com,10
mx-host=mail.midominio.com,mail.midominio.com,15
mx-target=mail.midominio.com

Editamos /etc/resolv.conf para que contenga lo siguiente:

nameserver 127.0.0.1


/etc/init.d/dnsmasq restart

[b]IMPORTANTE[/b]: Debemos percatarnos de que no exista algún otro servicio SMTP/POP3/Http activado ó podríamos tener problemas con la instalación.

Descargamos zimbra y lo instalamos:

cd /usr/src
wget http://files.zimbra.com/downloads/5.0.7_GA/zcs-5.0.7_GA_2444.DEBIAN4.0.20080626025055.tgz
tar zvxf zcs-5.0.7_GA_2444.DEBIAN4.0.20080626025055.tgz
cd zcs-5.0.7_GA_2444.DEBIAN4.0.20080626025055
sh install.sh

El instalador nos indicará si nos hace falta algún paquete, afortunadamente tenemos a nuestro amigo aptitude para hacer este trabajo :)

Una vez constatadas las dependencias el instalador nos hará una serie de preguntas relacionadas con el nombre de dominio que vamos autilizar (midominio.com) y las contraseñas de administrador, debemos recordar que contraseña se esta asignando al usuario admin, ya que luego la requeriremos para la tareas de administración.

Una vez que zimbra este instalado, instalado vermos que existe un nuevo usuario en /etc/passwd llamado zimbra y un archivo /etc/init.d/zimbra que nos servirá para iniciar/detener el servicio.

Podemos saber si los servicios que zimbra provee estan activos ejecutando:

su - zimbra
zmcontrol status

Podremos ingresar en la consola de administración desde [url]https://mail.midominio.com:7071[/url] utilizando como nombre de usuario admin y la contraseña ingresada al momento de instalar. La guía del administrador de zimbra contiene abundante información acerca de como utilizarla:

[url]http://files.zimbra.com/website/docs/Zimbra%20OS%20Admin%20Guide.pdf[/url]
[url]http://www.zimbra.com/community/documentation.html[/url]

Para nuestro caso deberemos crear desde la interfaz de administración de zimbra un nuevo dominio llamado midominio.com, luego podremos crear usuarios para ese dominio.

Los usuarios creados desde la interfaz de administración pueden ingresar a su cliente webmail en [url]http://mail.midominio.com[/url]

[b]Migrar usuarios desde el archivo /etc/passwd a Zimbra[/b]

Copiar a /usr/src el archivo /etc/passwd que contiene los usuarios a migrar y eliminar los usuarios del sistema (root, adm, tape, audio, etc).

Creamos un archivo llamado passwd2zmprov que contenga el siguiente código perl:

#!/usr/bin/perl
#
# $Id: passwd2zmprov,v 1.2 2008/03/05 05:01:29 phil Exp $

=head1 NAME

passwd2zmprov - create zmprov commands from a passwd file

=head1 SYNOPSIS

usage: passwd2zmprov [options] [[passwd_file] ...] > commands.zmp
-help show a brief help message
-man show the full documentation

-domain [REQUIRED]
-cosid [default "Default COS"]
-password [default ""]

Getting a COS id:
zimbra$ zmprov gc | grep ^zimbraId:

Example converting CSV to zmprov commands:
$ ./passwd2zmprov -domain example.moc /etc/passwd > commands.zmp

Example provisioning ZCS accounts as 'zimbra' user:
zimbra$ zmprov < commands.zmp

=head1 DESCRIPTION:

Tool to create commands suitable for zmprov from a UNIX passwd file.
We don't use getpwent etc., because we are likely working on a copy
and not running as root.

See Also:
http://wiki.zimbra.com/index.php?title=Bulk_Create

=cut

use strict;
use warnings;
use File::Basename qw(basename);
use Getopt::Long qw(GetOptions);
use Pod::Usage qw(pod2usage);

my $prog = basename($0);
my ( @err, %option );

GetOptions( \%option, 'help|?', 'man', 'domain=s', 'cosid=s', 'password=s' )
or pod2usage( -verbose => 0 );

pod2usage( -verbose => 1 ) if ( $option{help} );
pod2usage( -verbose => 2 ) if ( $option{man} );

push( @err, "-domain is required" )
unless ( $option{domain} );

pod2usage( -verbose => 0, -message => map( "$prog: $_\n", @err ) )
if (@err);

warn("$prog: using Default COS\n") unless ( $option{cos_id} );
warn("$prog: reading passwd like entries from STDIN\n") unless (@ARGV);

my $date = localtime();
my $cosid = $option{cosid};
my $domain = $option{domain};
my $password = defined $option{password} ? $option{password} : "";
my $MIN_UID = 500; # skip system accounts like httpd
my $MAX_UID = 60000; # skip other system accounts like nfsnobody

# sanitize password
$password =~ s/\"/\\\"/g;

while (<>) {
chomp;
next if (/^\s*$/); # skip empty lines

my ( $uname, $x, $uid, $gid, $gecos, $dir, $shell ) = split( /:/, $_, 7 );

if ( $uid < $MIN_UID or $uid > $MAX_UID ) {
warn("$prog: skip $uname: $uid not between $MIN_UID and $MAX_UID\n");
next;
}

# assuming gecos format is First [[MI] [Last]], sanitize a little
$gecos =~ s/\"/\\\"/g;

my ( $fullname, $description ) = split( /\s*,\s*/, $gecos, 2 );
my ( $fname, $mname, $lname ) = split( " ", $fullname, 3 );
unless ( defined($lname) ) {
$lname = $mname;
undef($mname);
}
my $displayname = $fname
. ( defined($mname) ? " $mname" : "" )
. ( defined($lname) ? " $lname" : "" );

print(
qq{ca "$uname\@$domain" "$password"},
( defined($cosid) ? qq{ zimbraCOSid "$cosid"} : () ),
( defined($fname) ? qq{ givenName "$fname"} : () ),
( defined($lname) ? qq{ sn "$lname"} : () ),
( defined($uname) ? qq{ cn "$uname"} : () ),
( defined($displayname) ? qq{ displayName "$displayname"} : () ),
( defined($description) ? qq{ description "$description"} : () ),
qq{ zimbraNotes "Migrated $date"},
qq{ zimbraPasswordMustChange TRUE},
qq{\n},
);
}

=head1 HISTORY

2007/01/23, Version 1.0/1.1 Dlbewley
2008/03/04, Version 1.2 Plobbes

=cut

Le damos privilegios:

chmod a+x passwd2zmprov

Exportamos los usuarios de el archivo passwd de la siguiente manera:

perl /usr/src/passwd2zmprov -domain midominio.com -password unpasswordparadotos < /usr/src/passwd > usuarios.zmp

Y los importamos como usuarios de zimbra de la siguiente manera:

cat /usr/src/usuarios.zmp | su - zimbra -c zmprov

Comentarios

clientes de zimbra via web

Saludos,

es posible configurar en zimbra para que los usuarios que quieran ingresar via web, digamos abran un navegador y ponga
http://mail.dominio.com
e inmediatamente este redireccion a
https://mail.dominio.com

la idea es que tambien de los usuarios accedan de manera segura a su cuenta de correo via web

Si es posible hacerlo, debes

Imagen de RazaMetaL

Si es posible hacerlo, debes editar el archivo:


/opt/zimbra/tomcat/webapps/zimbra/public/Login.jsp

Y comentar estas lineas:

qs = emptyQs? "?initMode=" + currentProto: qs + "&initMode=" +
currentProto;

Despues de editar, debería quedar algo asi:

//qs = emptyQs? "?initMode=" + currentProto: qs + "&initMode=" +
//currentProto;

Finalmente reinicias zimbra.

------------

Antes de preguntar visita el [url=http://www.sindominio.net/ayuda/preguntas-inteligentes.html]link[/url] :evil:

 

[img]http://www.bbspot.com/Images/News_Features/2003/01/os_quiz/debian.jpg[/img]

-----

Visita este [url=http://www.sindominio.net/ayuda/preguntas-inteligentes.html]link[/url] :evil:

[img]http://www.bbspot.com/Images/News_Features/2003/01/os_quiz/debian.jpg[/img]

(adsbygoogle = window.adsbygoogle || []).push({});

Para migrar usuarios y

Imagen de RazaMetaL

Para migrar usuarios y buzones desde un servidor sendmail hacia zimbra podemos hacer lo siguiente:

sendmail/dovecot : servidor.midominio.com
zimbra : zimbra.midominio.com

EXPORTAR USUARIOS
Exportar usuarios desde servidor.midominio.com a zimbra.midominio.com :

vi /usr/src/shadow2zmprov

#!/bin/bash

# Script que exporta los usuarios de /etc/shadow a un archivo usuarios.zimbra
# que debe ser ejecutado en el servidor zimbra

clear

#!/bin/bash

dominio=dominio.com
file="usuarios.zimbra"
passwdsource=/etc/passwd
shadowsource=/etc/shadow

x=0
echo ''>$file

LOGIN=`awk -F: '$3 > 500 {print $1}' $passwdsource`
DISPLAYNAME=`awk -F: '$3 > 500 {print $5}' $passwdsource`
UIDGID=`awk -F: '$3 > 500 {print ":"$3":"$4":"}' $passwdsource`

for uidgid in $UIDGID ; do
display=`cat $passwdsource |grep ${uidgid} |awk -F: '$3 {print $5}'`
displayname=`cat $passwdsource |grep ${uidgid} |awk -F: '$3 {print $5}'`
login=`cat $passwdsource |grep ${uidgid} |awk -F: '$3 {print $1}'`
secret=`cat $shadowsource |grep -w ${login} |awk -F: '$3 {print $2}'`

if echo $display |grep -q [ABCDEFGHIJKLMNMOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.] ; then
echo "zmprov ca $login@$dominio 'passwordtemporal' displayName '$displayname'" >>$file
echo "zmprov ma $login@$dominio userPassword '{crypt}$secret'">>$file
x=$[x+1]
else
echo "zmprov ca $login@$dominio 'passwordtemporal' displayName $login" >>$file
echo "zmprov ma $login@$dominio userPassword '{crypt}$secret'">>$file
x=$[x+1]
fi
done

echo
echo
echo "$x cuentas exportadas a \"$PWD/$file\""
echo "copie el archivo al servidor zimbra y ejecutelo como usuario zimbra:"
echo " # su - zimbra -c "sh /usr/src/usuarios.zimbra""

sleep 5
#EOF

Ejecutamos el script:

sh /usr/src/shadow2zmprov

Copiamos el archivo usuarios.zimbra generado por este script desde servidor.midominio.com a zimbra.dominio.com :

scp /usr/src/usuarios.zimbra root@zimbra.midominio.com:/usr/src

En zimbra.midominio.com ejecutamos lo siguiente:

su - zimbra -c "sh /usr/src/usuarios.zimbra"

Cuando se termine de ejecutar usuarios.zimbra podremos visualizar en la interfaz de administración de zimbra los usuarios importados.

EXPORTAR LOS BUZONES
Para exportar los buzones creamos el siguiente script en /usr/bin:

vi /usr/bin/mbox2zimbra


#!/usr/bin/perl

use strict;
use Email::Folder;
use Mail::Mailer;
use MIME::Parser;
use Net::SMTP;

my $mbox = $ARGV[0];
my $email = $ARGV[1];
my $server = $ARGV[2];

$server = 'smtp' if(!defined($server));

die "Usage: $0 mbox dest_address [smtp server]" if(!defined($mbox) || !-f $mbox);
die "Usage: $0 mbox dest_address [smtp server]" if(!defined($email) || $email !~ m/\@/);

my $folder = Email::Folder->new($mbox ||
die "Usage: $0 mbox dest_address [smtp server]
Forward all mail found in mail file mbox to address.
");

my $count=0;
my @messages=$folder->messages;
my $total=@messages;

foreach (@messages){
$count++;
my $parser = new MIME::Parser;
$parser->output_under("/tmp");
$parser->decode_headers(0);
$parser->ignore_errors(1);
my $entity = $parser->parse_data($_->as_string);
my $header = $entity->head;
my $sender = $entity->head->get('From');
next if $header->get("subject") =~ m/FOLDER INTERNAL/;
$header->replace('To', $email);
$header->delete('Received');
$header->delete('MIME-Version');
$header->delete('Return-Path');
$header->delete('User-Agent');
$header->delete('Message-ID');
$header->delete('X-Mailer');
$header->delete('X-Security');
$header->delete('X-Spam-Checker-Version');
$entity->head($header);
$entity->sync_headers;
print "Message $count / $total\n";
print "Sending message with subject: " . $entity->head->get("subject");
print " to $email via $server\n";

my $smtp = new Net::SMTP($server) or die "No mailserver";
$smtp->mail($sender) or die "unable to set sender";
$smtp->to($email) or die "unable to address message";
$smtp->data() or die "unable to start data send";
$smtp->datasend($entity->as_string()) or die "Message send failed";
$smtp->dataend() or die "Message end failed";
$smtp->quit();
print "Done\n\n";
}
#EOF

Damos privilegios de ejecución al script:

chmod a+x /usr/bin/mbox2zimbra

Creamos el siguiente script:

vi /usr/src/mboxsend

#!/bin/sh
#
# mboxzimbra
# Script para exportar buzones mbox a zimbra
#

BUZONES="/var/spool/mail" # directorio donde residen los buzones mbox. Importante: sin / al final de la ruta
DOMINIO="midominio.com" # dominio
ZIMBRA="zimbra.midominio.com" # servidor zimbra

USUARIOS=`ls -lah $BUZONES |awk '{print $9}'`

for USUARIO in $USUARIOS; do
echo -e "Migrando buzones MBOX para el usuario $USUARIO "
mbox2zimbra $BUZONES/$USUARIO $USUARIO@$DOMINIO $ZIMBRA
find /tmp -name 'msg-*' -print0 | xargs -0 rm -Rf
done

#EOF

Damos privilegios de ejecución al script y lo ejecutamos:

chmod a+x mboxsend
./mboxsend

-----

Visita este [url=http://www.sindominio.net/ayuda/preguntas-inteligentes.html]link[/url] :evil:

[img]http://www.bbspot.com/Images/News_Features/2003/01/os_quiz/debian.jpg[/img]

(adsbygoogle = window.adsbygoogle || []).push({});

FALLO AL MIGRAR BUZONES DE SENDMAIL A ZIMBRA

Gracias de antemano por los scripts de migrar las cuentas de sendmail a ZCS, pero solo
que no me funciona la parte para migrar buzones:

este es el script, el cual me da un error ya en la 4ta linea: use
Email::Folder
eso habria que cambiar por algun paramtero o como es? o problemas con el perl, que es lo que deberia hacer..

gracias por su atencion

Saludos cordiales.

ARREGLADA EJECUCION DE SCRIPT DE MIGRACION SENDMAIL A ZIMBRA

Amigos encontre el porque de el fallo de la linea 4 en la ejecucion del primer script para la migracion de los buzones de correo, el problema es que no se puede compilar debido a que falta una libreria para poderse ejecutar, lo que tienen que hacer es lo siguiente:

perl -MCPAN -e shell
(responden todas las preguntas para la instalacion, luego instalan el modulo que les falta en mi caso pues Email::Folder),luego

cpan> install MODULE::NAME
(ejemplo de mi caso seria: cpan> install Email::Folder)

Siguen los pasos y listo ejecutan el script de migracion..

pueden leer el siguient foro con respecto a la instalacion de Perl via CPAN
http://rm-rf.es/como-instalar-modulos-de-perl-via-cpan/

Gracias a todos, espero haberles ayudado

Saludos cordiales.

Migración de sendmail a Zimbra

Hola Mr.
Tengo problemas y por mas que le doy a los script no me da nada.
necesito me colaboren debo de hacer esto pero ya me siento perdido luego de leer y realizar pruebas, posiblemente sea la poca experiencia dentro de linux pero deseo mejorar.

Estas son mis consultas.

En esta sección no logro dimensionar que realiza este script y estoy algo desesperado jejeje, por mas que apunto a mi server siempre me indica que hay un error en la linea 15.

En mi caso tengo mi zimbra en un servidor completamente diferente al sendmail.

$server = 'smtp' if(!defined($server));

die "Usage: $0 mbox dest_address [smtp server]" if(!defined($mbox) || !-f $mbox);
die "Usage: $0 mbox dest_address [smtp server]" if(!defined($email) || $email !~ m/\@/);

Otra consulta, la primera seccino utilizando cualquiera de los dos script que estan en este foro logro pasar los usuarios de sendmail a zimbra pero no se si hay manera de pasar los pass, ya que en la primera opcion se coloca un pass para todos y en la segunda que es parte de este mismo hilo no menciona nada del acceso a las cuentas.

Cual es el error que te da

Imagen de deathUser

Cual es el error que te da ...???

Si te fijas en la creación de las cuentas en zimbra, primero las crea con una clave temporal y luego cambia la clave con la del /etc/shadow, así que deberías tener los usuarios con sus respectivas claves has la prueba con uno que conozcas la clave.

bye
;)

Este es mi error del script mbox2zimbra

Este es mi error del script mbox2zimbra pero realmente creo que es por mala interpretación, pero ya lo he realizado de varias maneras y no logro pasar de esta linea.

No se si la sección [smtp server] debo de colocar el fqdn de mi servidor.

root@pruebasendmail:/usr/src# ./mboxsend
-e Migrando buzones MBOX para el usuario ->
Usage: /usr/bin/mbox2zimbra mbox 172.16.16.85 [smtp server] at /usr/bin/mbox2zimbra line 15.

Tengo dudas realmente si estoy haciendo bien esto.
esto es lo único que he escrito sobre el script. mbox2zimbra

die "Usage: $0 mbox 172.16.16.85 [smtp server]" if(!defined($mbox) || !-f $mbox);
die "Usage: $0 mbox 172.16.16.85 [smtp server]" if(!defined($email) || $email !~ m/\@/);
my $folder = Email::Folder->new($mbox || die "Usage: $0 mbox 172.16.16.85 [smtp server] Forward all mail found in mail file mbox to address.");

Y este es el cambio que hice en el mboxsend

BUZONES="/var/spool/mail" # directorio donde residen los buzones mbox. Importante: sin / al final de la ruta
DOMINIO="coloque mi dominio de zimbra" # dominio
ZIMBRA="coloque nombre mas mi dominio de zimbra" # servidor zimbra

No entiendo como realizara la transferencia, mientras tanto he colocado un par de llaves para evitar la autenticación del sendmail hacia zimbra.

Mientras tanto con los usuarios no se a que se trataba que no me reconocía el pass, como esto lo tengo en un ambiente prueba antes de ejecutarlo, realice el cambio colocando el mismo pass para todos para no hacerlo largo y logre autenticarme bien.

La línea en cuestión evalúa

Imagen de deathUser

La línea en cuestión evalúa la variable $mbox la misma que se inicializa con el valor de $ARGV[0] que es el primero argumento con el que se llama al script ...

Por lo que el error se da porque no se le están pasando los parámetros adecuados al script, revisa el script mboxsend por ejemplo agregando una línea como:


echo "ejecutando: mbox2zimbra $BUZONES/$USUARIO $USUARIO@$DOMINIO $ZIMBRA";

Antes de la línea:


mbox2zimbra $BUZONES/$USUARIO $USUARIO@$DOMINIO $ZIMBRA

Eso te dirá como se está llamando el script...

En cuanto a como se transfieren los buzones, si te fijas en el código lo que hace es des-ensamblar los buzones para extraer cada uno de los e-mails y enviarlos uno a uno por una conexión SMTP al servidor zimbra ...

bye
;)

Excelente

:)
Gracia Mr. luego de enviar la consulta revise nuevamente el script y me di cuenta de la manera en la que realiza la transferencia de los correos.

Si no es por la luz que me dio con el paso de parámetros creo que no salgo en un buen rato.
esto es lo que me sucedía.

Cuando ejecutaba el script mboxsend siempre se quedaba parado en la linea 15 del mbox2zimbra y que dolos de cabeza no entendía la razón hasta que me comentaron que "evalúa la variable $mbox la misma que se inicializa con el valor de $ARGV[0] que es el primero argumento con el que se llama al script" y es asignado por la linea


`ls -lah $BUZONES |awk '{print $9}'`

Como realmente soy aun un novato y desconocía lo que hacia esto lo corrí y me di cuenta que basicamente creaba una lista con el string numero 9 de la impresión. En mi caso no me mostraba nada pues al buscar el /var/spool/mail me daba como resultado esto "->" de tal manera que jamas funcionaria.

Bien estos fueron los cambios que hice para mi caso cambie el /var/spool/mail a /var/mail


BUZONES="/var/mail" # directorio donde residen los buzones mbox. Importante: sin / al final de la ruta
DOMINIO=coloque mi dominio de zimbra # dominio
ZIMBRA=coloque nombre mas mi dominio de zimbra # servidor zimbra

y para la lectura de los usuarios que son los que pasaran como parametro al script mbox2zimbra le indique que que en lugar de imprimir la cadena 9 imprima la numero 3 que es la que muestra el nombre del buzón.


USUARIOS=`ls -lah $BUZONES |awk '{print $3}'`

Espero que esto les sirva a aquellos que se topen con estas dificultades.

Sin embargo aun me pregunto ¿y si quiero pasar los correos enviados? bueno el camino que se me ocurre en este momento
es utilizar las herramientas de migración de zimbra para las cuentas que posean un .pst ya que entiendo que en el servidor de sendmail no tengo los correos enviados únicamente mi inbox.

Páginas