Additions:
Deletions:
Este HOWTO explica como instalar Cyrus con soporte para autenticación en mysql en RHEL 5.
Instalar paquetes (via yum):
cyrus-imapd, cyrus-imapd-perl, cyrus-imapd-utils, cyrus-sasl-sql
mysql-server
service mysqld start
service cyrus-imapd start
Configurando mysql
Crear base de datos y administrador:
CREATE DATABASE cyrus;
USE cyrus;
CREATE TABLE user (user varchar(100), password varchar(100), domain varchar(100), PRIMARY KEY(user,domain));
INSERT INTO user VALUES ('cyrus','secret','host.example.com');
GRANT SELECT ON cyrus.* TO cyrus@localhost IDENTIFIED BY 'secret';
Crear otros usuarios:
INSERT INTO user VALUES ('alice','secret','example.com');
INSERT INTO user VALUES ('bob','secret','example.com');
Nota: es buena idea activar log de queries en mysql log=/var/log/mysql.log en /etc/my.cnf para depurar en caso de problemas.
Configurar cyrus: /etc/imapd.conf
configdirectory: /var/lib/imap
partition-default: /var/spool/imap
admins: cyrus
sievedir: /var/lib/imap/sieve
sendmail: /usr/sbin/sendmail
hashimapspool: true
#sasl_pwcheck_method: saslauthd
sasl_mech_list: PLAIN
tls_cert_file: /etc/pki/cyrus-imapd/cyrus-imapd.pem
tls_key_file: /etc/pki/cyrus-imapd/cyrus-imapd.pem
tls_ca_file: /etc/pki/tls/certs/ca-bundle.crt
# auth
sasl_pwcheck_method: auxprop
sasl_auxprop_plugin: sql
sasl_sql_engine: mysql
sasl_sql_hostnames: example.com
sasl_sql_database: cyrus
sasl_sql_user: users
sasl_sql_passwd: secret
sasl_sql_select: SELECT password FROM user WHERE user = '%u' AND domain = '%r'
sasl_sql_verbose: yes
# otras opciones
altnamespace: yes
unixhierarchysep: yes
servername: host.example.com
virtdomains: userid
defaultdomain: example.com
Crear usuarios con administrador CLI cry-adm:
cyr-adm --user cyrus localhost
cm user/bob@examle.com
cm user/alice@example.com
Nota: En caso de ser el defaultdomain, no es necesario poner example.com
Nota: El uso de "/" o "." como separador depende de unixhierarchysep.
Configuración de sendmail: /etc/mail/sendmail.mc
Debe definirse cyrusv2 como local mailer, y modificar la ruta de FILE ya que no coincide con la que viene por defecto con cyrusv2. Finalmente cambiar a procmail por cyrusv2 como mailer.
define(`confLOCAL_MAILER', `cyrusv2')dnl
define(`CYRUSV2_MAILER_ARGS', `FILE /var/lib/imap/socket/lmtp')dnl
dnl MAILER(procmail)dnl
MAILER(cyrusv2)dnl
Nota: normalmente basta con descomentar las 3 lineas de cyrus y comentar la 1 de procmail.
El problema es que sendmail quita el dominio al momento de pasarlo a cyrus, entonces no hay soporte para dominios virtuales, se puede modificar el mailer /usr/share/sendmail-cf/mailer/cyrusv2.m4 para que soporte esto:
27c27
< S=EnvFromSMTP/HdrFromL, R=EnvToL/HdrToL, E=\r\n,
---
> S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=\r\n,
O se instala cyrusv2d, como documentado en una pagina que ya no existe
http://anfi.homeunix.net/sendmail/cyrusv2.html∞
Ver:
http://cyrusimap.web.cmu.edu/imapd/install-virtdomains.html∞
Additions:
HOWTO: Cyrus + Sendmail + Mysql
Deletions:
HOWTO: Cyrus + Mysql
Additions:
Additions:
Configurar cyrus: /etc/imapd.conf
Configuración de sendmail: /etc/mail/sendmail.mc
Deletions:
Configurar imapd.conf
Configuración de sendmail
Additions:
Configurando mysql
Additions:
INSERT INTO user VALUES ('alice','secret','example.com');
INSERT INTO user VALUES ('bob','secret','example.com');
Nota: En caso de ser el defaultdomain, no es necesario poner example.com
Configuración de sendmail
Debe definirse cyrusv2 como local mailer, y modificar la ruta de FILE ya que no coincide con la que viene por defecto con cyrusv2. Finalmente cambiar a procmail por cyrusv2 como mailer.
%%(text;;sendmail.mc)
define(`confLOCAL_MAILER', `cyrusv2')dnl
define(`CYRUSV2_MAILER_ARGS', `FILE /var/lib/imap/socket/lmtp')dnl
dnl MAILER(procmail)dnl
MAILER(cyrusv2)dnl
Nota: normalmente basta con descomentar las 3 lineas de cyrus y comentar la 1 de procmail.
Deletions:
INSERT INTO user VALUES ('alice','secret','host.example.com');
INSERT INTO user VALUES ('bob','secret','host.example.com');
Additions:
Nota: El uso de "/" o "." como separador depende de unixhierarchysep.
Additions:
INSERT INTO user VALUES ('alice','secret','host.example.com');
INSERT INTO user VALUES ('bob','secret','host.example.com');
Additions:
GRANT SELECT ON cyrus.* TO cyrus@localhost IDENTIFIED BY 'secret';
Nota: es buena idea activar log de queries en mysql log=/var/log/mysql.log en /etc/my.cnf para depurar en caso de problemas.
cm user/bob@examle.com
cm user/alice@example.com
Deletions:
cm
Additions:
%%(bash)
service mysqld start
service cyrus-imapd start
Additions:
CREATE DATABASE cyrus;
USE cyrus;
INSERT INTO user VALUES ('cyrus','secret','host.example.com');
INSERT INTO user VALUES ('cyrus','secret','host.example.com');
INSERT INTO user VALUES ('cyrus','secret','host.example.com');
Deletions:
CREATE DATABASE cyrus
INSERT INTO user ('cyrus','secret','host.example.com');
INSERT INTO user ('cyrus','secret','host.example.com');
INSERT INTO user ('cyrus','secret','host.example.com');
Additions:
Crear base de datos y administrador:
CREATE DATABASE cyrus
CREATE TABLE user (user varchar(100), password varchar(100), domain varchar(100), PRIMARY KEY(user,domain));
INSERT INTO user ('cyrus','secret','host.example.com');
Crear otros usuarios:
INSERT INTO user ('cyrus','secret','host.example.com');
INSERT INTO user ('cyrus','secret','host.example.com');
Crear usuarios con administrador CLI cry-adm:
cyr-adm --user cyrus localhost
cm
sasl_sql_database: cyrus
servername: host.example.com
Deletions:
Configurar base de datos:
CREATE TABLE (user varchar(100), password varchar(100), domain varchar(100), PRIMARY KEY(user,domain));
sasl_sql_database: email
servername: test.example.com
Additions:
Instalar paquetes (via yum):
cyrus-imapd, cyrus-imapd-perl, cyrus-imapd-utils, cyrus-sasl-sql
mysql-server
Deletions:
Instalar paquetes (via yum): cyrus-imapd, cyrus-imapd-perl, cyrus-imapd-utils, cyrus-sasl-sql
Additions:
HOWTO: Cyrus + Mysql
Este HOWTO explica como instalar Cyrus con soporte para autenticación en mysql en RHEL 5.
Instalar paquetes (via yum): cyrus-imapd, cyrus-imapd-perl, cyrus-imapd-utils, cyrus-sasl-sql
Configurar base de datos:
CREATE TABLE (user varchar(100), password varchar(100), domain varchar(100), PRIMARY KEY(user,domain));
Configurar imapd.conf
configdirectory: /var/lib/imap
partition-default: /var/spool/imap
admins: cyrus
sievedir: /var/lib/imap/sieve
sendmail: /usr/sbin/sendmail
hashimapspool: true
#sasl_pwcheck_method: saslauthd
sasl_mech_list: PLAIN
tls_cert_file: /etc/pki/cyrus-imapd/cyrus-imapd.pem
tls_key_file: /etc/pki/cyrus-imapd/cyrus-imapd.pem
tls_ca_file: /etc/pki/tls/certs/ca-bundle.crt
# auth
sasl_pwcheck_method: auxprop
sasl_auxprop_plugin: sql
sasl_sql_engine: mysql
sasl_sql_hostnames: example.com
sasl_sql_database: email
sasl_sql_user: users
sasl_sql_passwd: secret
sasl_sql_select: SELECT password FROM user WHERE user = '%u' AND domain = '%r'
sasl_sql_verbose: yes
# otras opciones
altnamespace: yes
unixhierarchysep: yes
servername: test.example.com
virtdomains: userid
defaultdomain: example.com
Deletions:
HOWTO: integridad cyrus-mysql
Este HOWTO explica como mantener la integridad entre los datos de cuentas de correo en Mysql y en Cyrus. Pueda que existan cuentas en Cyrus porque han sido borradas desde la adminitración o panel (mysql) pero no han sido borradas usando cyradm. También al revés aunque esto sería menos común. Es importante sobretodo eliminar las cuentas fantasmas de cyrus pues cada una puede ocupar hasta 500mb.
Las herramientas aqui usadas check_mbox_mysql.pl, cyrus_list.pl, check_mbox_cyrus.pl las cree para facilitar estas tareas y estan en el home del root en beta.
Errores en Mysql
Para ver si los usuarios de mysql tienen su correspondiente en cyrus:
para listar solo errores, es decir usuarios solo ingresados en mysql pero cuyo mailbox no existe:
./check_mbox_mysql.pl |grep ERROR
al momento de escribir esto habian 5 errores.
Errores en Cyrus
El proceso inverso es mas complicado, pues cyrus no es sencillo de hacer consultas. para listar todos los mailboxes de cyrus (los que tienen hijos, asumimos todos los mailboxes ppales tienen hijos):
para listar solo aquellos de dominio virtual (todos los de mysql corresponden a dominios virtuales al menos hasta la fecha), ordenarnolos alfabeticamente (por domino y usuario) y ponerlos en un archivo:
./cyrus_list.pl |grep "@"|sort|cut -f2 -d" ">cyrus_users.txt
finalmente para ver que limpiar de cyrus, es decir listar mailboxes fantasmas (que no existen ya en mysql) usando el archivo que acabamos de crear cyrus_users.txt:
./check_mbox_cyrus.pl
./check_mbox_cyrus.pl |grep ERROR
al momento de escribir esto existian 81 errores.
Como corregir los errores?
Borrando info@example.org
Las entradas de mas de mysql con:
# mysql -p mail
DELETE FROM user WHERE user='info@example.org'
En cyrus con delete mailbox dm... (sm... es necesario para hacerlo como usuario cyrus en cyradm):
# cyradm --user cyrus localhost
> sam user/info@example.org cyrus c
> dm user/info@example.org
NOTA: es posible generar un script en perl que genere las lineas sam y dm necesarias en los casos de ERROR y luego solo dar copy and paste en cyradm. Un intento con dos lineas en el shell:
Genera las lineas sam (esto aplicamos luego en cyradm):
./check_mbox_cyrus.pl |grep ERROR|cut -f1 -d" "|sed -e 's/^/sam user\//g'|sed -e 's/$/ cyrus c/g'
Genera las lineas dm (esto aplicamos luego en cyradm):
./check_mbox_cyrus.pl |grep ERROR|cut -f1 -d" "|sed -e 's/^/dm user\//g'
O ambas con awk:
./check_mbox_cyrus.pl |grep ERROR|cut -f1 -d" "|awk '{print "sam user/"$1" cyrus c\ndm user/"$1}'
NOTA2: este proceso es importante porque nos puede ahorrar gigas de espacio en el disco
Additions:
Deletions:
Additions:
./check_mbox_cyrus.pl |grep ERROR|cut -f1 -d" "|awk '{print "sam user/"$1" cyrus c\ndm user/"$1}'
Deletions:
./check_mbox_cyrus.pl |grep ERROR|cut -f1 -d" "|awk '{print "sam user/"$1 "cyrus c\ndm user/"$1}'
Additions:
El proceso inverso es mas complicado, pues cyrus no es sencillo de hacer consultas. para listar todos los mailboxes de cyrus (los que tienen hijos, asumimos todos los mailboxes ppales tienen hijos):
Deletions:
El proceso inverso es mas complicado, pues cyrus no es sencillo de hacer consultas. para listar todos los mailboxes de cyrus (los que tienen hijos, asumimos todos los mailboxes ppales tienen
hijos):
Additions:
O ambas con awk:
./check_mbox_cyrus.pl |grep ERROR|cut -f1 -d" "|awk '{print "sam user/"$1 "cyrus c\ndm user/"$1}'
Additions:
./check_mbox_cyrus.pl |grep ERROR%%
Deletions:
/check_mbox_cyrus.pl |grep ERROR%%
HOWTO: integridad cyrus-mysql
Este HOWTO explica como mantener la integridad entre los datos de cuentas de correo en Mysql y en Cyrus. Pueda que existan cuentas en Cyrus porque han sido borradas desde la adminitración o panel (mysql) pero no han sido borradas usando cyradm. También al revés aunque esto sería menos común. Es importante sobretodo eliminar las cuentas fantasmas de cyrus pues cada una puede ocupar hasta 500mb.
Las herramientas aqui usadas check_mbox_mysql.pl, cyrus_list.pl, check_mbox_cyrus.pl las cree para facilitar estas tareas y estan en el home del root en beta.
Errores en Mysql
Para ver si los usuarios de mysql tienen su correspondiente en cyrus:
para listar solo errores, es decir usuarios solo ingresados en mysql pero cuyo mailbox no existe:
./check_mbox_mysql.pl |grep ERROR
al momento de escribir esto habian 5 errores.
Errores en Cyrus
El proceso inverso es mas complicado, pues cyrus no es sencillo de hacer consultas. para listar todos los mailboxes de cyrus (los que tienen hijos, asumimos todos los mailboxes ppales tienen
hijos):
para listar solo aquellos de dominio virtual (todos los de mysql corresponden a dominios virtuales al menos hasta la fecha), ordenarnolos alfabeticamente (por domino y usuario) y ponerlos en un archivo:
./cyrus_list.pl |grep "@"|sort|cut -f2 -d" ">cyrus_users.txt
finalmente para ver que limpiar de cyrus, es decir listar mailboxes fantasmas (que no existen ya en mysql) usando el archivo que acabamos de crear cyrus_users.txt:
./check_mbox_cyrus.pl
/check_mbox_cyrus.pl |grep ERROR
al momento de escribir esto existian 81 errores.
Como corregir los errores?
Borrando info@example.org
Las entradas de mas de mysql con:
# mysql -p mail
DELETE FROM user WHERE user='info@example.org'
En cyrus con delete mailbox dm... (sm... es necesario para hacerlo como usuario cyrus en cyradm):
# cyradm --user cyrus localhost
> sam user/info@example.org cyrus c
> dm user/info@example.org
NOTA: es posible generar un script en perl que genere las lineas sam y dm necesarias en los casos de ERROR y luego solo dar copy and paste en cyradm. Un intento con dos lineas en el shell:
Genera las lineas sam (esto aplicamos luego en cyradm):
./check_mbox_cyrus.pl |grep ERROR|cut -f1 -d" "|sed -e 's/^/sam user\//g'|sed -e 's/$/ cyrus c/g'
Genera las lineas dm (esto aplicamos luego en cyradm):
./check_mbox_cyrus.pl |grep ERROR|cut -f1 -d" "|sed -e 's/^/dm user\//g'
NOTA2: este proceso es importante porque nos puede ahorrar gigas de espacio en el disco
CategorySysAdmin