Sistema de Correo Con Postfix

Sistema de correo con Postfix, Cyrus y MySQL

© Copyright 2006 Liberalia Tempus, S.L.

Índice
I. Introducción …………………………………………………………………….. II. Tecnologías …………………………………………………………………….. …………………………………………………………… 03 04 08 12 14 15 21 27 30 32 36 45 51 54

III. Instalando software

IV. Seguridad en MySQL …………………………………………………………… V. Configuración de PAM ………………………………………………………..

VI. Postfix ……………………………………………………………………………. VII. Cyrus IMAP y SASL VIII. Cifrado del canal …………………………………………………………… ……………………………………………………………

IX. Web-Cyradm …………………………………………………………………….. X. Probando la configuración …………………………………………………..

XI. Filtrado …………………………………………………………………………….. XII. Squirrelmail ………………………………………………………………………

XIII. Mailman ……………………………………………………………………………. XIV. Apéndice ……………………………………………………………………………

© Copyright 2006 Liberalia Tempus, S.L. Todos los derechos reservados. El manual queda publicado sin coste alguno y es de libre distribución siempre que se respete la inclusión de su procedencia en los medios donde sea publicado y no sea modificado de ninguna forma. Se prohíbe expresamente la publicación parcial del contenido de este manual sin permiso de su autor. Se prohíbe expresamente la modificación de este manual y su posterior publicación en cualquier medio.

Sistema de correo con Postfix, Cyrus y MySQL

2

I – Introducción
A partir de este documento, instalaremos y configuraremos de forma adecuada un sistema de correo con el MTA Postfix y el servidor Cyrus IMAP. Conseguiremos con ello tener en funcionamiento un potentísimo sistema de correo que abarcará las últimas tecnologías en servidores y seguridad. Se potenciará, una vez realizada dicha instalación, la facilidad de administración del sistema, que procuraremos sea independiente de la configuración de los distintos paquetes. Así, configuraremos una interfase web que nos permita el control total del sistema de usuarios, siendo accesible desde cualquier ordenador y contando con las mayores garantías de seguridad. El objetivo de nuestra instalación será completar un sistema de correo con las siguientes características: • • • • • • • • • • • Cuentas de correo independientes del sistema operativo. Opción de gestionar varios dominios desde una misma máquina. Dominios virtuales redirigidos a la cuenta principal. Auteticación mediante SASL con texto plano o login. Tabla de MySQL con datos de usuarios. Transporte de datos bajo TLS. Protocolos IMAP, POP, y webmail para el acceso de los buzones. Seguridad SSL de conexión. Filtros de correo (Sieve). Filtros antivirus (ClamAV) y antispam (SpamAssassin). Listas de correo.

Nota: Agradecer con sinceridad a Jaume Sabater y a Luc de Louw su gran trabajo, sin el cual este manual no hubiera sido posible. Al finalizar el manual, añadiré un capítulo de biografías donde se detallarán ampliamente los distintos trabajos en los cuales se ha inspirado este manual.

Sistema de correo con Postfix, Cyrus y MySQL

3

II – Tecnologías
Resumiremos a continuación las diferentes tecnologías usadas en la instalación del sistema de correo.

Fedora Core - Linux (kernel-2.6) Fedora es el sistema operativo que siguió con el proyecto de software libre iniciado por el famoso Red Hat. Corre con el núcleo linux y la mayor parte de sus herramientas son de libre distribución y uso. En la última actualización de este manual (junio de 2006), el sistema Fedora alcanza ya su quinta distribución. Las configuraciones de este manual se referirán a la configuración bajo esta distribución. Aunque se ha probado la misma bajo otras distribuciones y versiones, es problable que sean necesarios ciertos cambios para que nuestro sistema de correo funcione de forma adecuada fuera de la versión tratada. Postfix (postfix-2.2.2-2) Postfix es un MTA (Mail Transport Agent) rápido, fácil de administrar y seguro. Aunque no venga al caso, es totalmente compatible con sendmail, manteniendo externamente las formas de éste. Postfix es una combinación de diversos programas que realizan su función determinada dentro del conjunto. Nos podemos hacer una pequeña idea de esto observando la imágen siguiente:

Aunque parezca mentira, el resultado es menos complejo de lo que a primera vista puede parecer, pero no nos extenderemos más. Para más información a cerca de postfix, se puede consultar la documentación de su website: http://www.postfix.org/docs.html . TLS (Transportation Layer Security) y OpenSSL (openssl-0.9.7f-7) Todos los datos que viajan a través de Internet, lo hacen por defecto sin ningún tipo de encriptación ni autenticación fiable. En la práctica, cualquier persona con los conocimientos adecuados y con acceso físico a la línea de datos a través de la cual viaja un paquete, tendría acceso a dicha información. Por supuesto, si dicho acceso se efectúa, el contenido de los distintos paquetes puede ser alterado o redirigido con cualquier propósito. Para evitar este tipo de accesos, la compañía Netscape Inc. introdujo el protocolo de seguridad SSL (Secure Sockets Layer), cuya evolución ha terminado en el actual TLS. Este protocolo aporta encriptación de la comunicación (evitando escuchas no deseadas) y una alta fiabilidad en la autenticación que se asegura de tener correctamente identificadas a las distintas partes de una comunicación para que los datos no puedan ser alterados. Sistema de correo con Postfix, Cyrus y MySQL 4

El protocolo de seguridad será implantado en nuestro sistema gracias a OpenSSL. Para una mayor información sobre el particular, consultar la página web http://www.openssl.org . Cyrus IMAP (cyrus-imapd-2.2.12-6) Cyrus IMAP (Internet Message Access Protocol) es desarrollado y mantenido por Andrew Systems Group, de la Carnegie Mellon University. A diferencia de otros gestores de correo IMAP, Cyrus almacena cada correo en un fichero independiente. Las ventajas son obvias: mayor fiabilidad de almacenamiento y una rapidez de acceso inusitada. Los índices de cada mensaje y su estado se guardan en una base de datos a parte y los mensajes se indexan para una mayor rapidez en el acceso o la búsqueda. No es necesaria una cuenta de sistema linux para cada uno de los usuarios de correo. Esto hace que la creación de usuarios se pueda automatizar y no sea demasiado ardua en el caso de una gran cantidad de las mismas. Como la administración de cada cuenta se realiza mediante comandos específicos, la programación de interfaces dinámicos sirve para tener un mayor control sobre todas las funcionalidades del programa, a la vez que se hace más seguro que la manipulación del /etc/passwd. La versión de Cyrus analizada en este manual utiliza la versión 2 de la librería SASL para la autenticación. Así, Cyrus realizará la autenticación en tres fases o capas: el demonio saslauthdaemon redirigirá la petición al mecanismo definido (en nuestro caso será PAM a través de MySQL), el cual buscará la información del usuario en una base de datos MySQL. Cyrus SASL (cyrus-sasl-2.1.20-5) SASL son las siglas de Simple Authentication and Security Layer, método que añade un soporte adicional para la autenticación de los protocolos que fundamentan su conexión en la estandarización fijada por la IETF (Internet Engineering Task Force). Se usa en servidores, como Cyrus IMAP, para controlar las peticiones de acceso de los clientes. El protocolo de autenticación incluirá comandos para la correcta apertura del canal cliente-servidor y las subsiguientes aperturas del canal para la toma de nuevos datos. Opcionalmente, puede negociarse una capa de seguridad entre el protocolo mismo y la conexión. Cyrus SASL utiliza OpenSSL para encriptar los datos. LMTP (Local Mail Transfer Protocol) SMTP (Simple Mail Transfer Protocol) y sus extensiones ESMTP (SMTP Service Extensions), proporcionan los mecanismos necesarios para el trasporte de correo fiable y eficaz. El servidor bajo SMTP controlará las colas de envío de correo. LMTP actúa de forma que el servidor no tenga que manejar colas de correo, a modo de MDA (Mail Delivery Agent). Aunque LMTP puede utilizar extensiones que en un primer momento estarían definidas para su uso por ESMTP, nunca debería funcionar como receptor de escucha sobre el puerto 25. MySQL (mysql--4.1.12-2) MySQL es un servidor de bases de datos rápido, potente y muy fácil de usar e implementar bajo cualquier plataforma. Ya que Cyrus puede utilizar PAM como mecanismo de autenticación, usaremos la extensión pam_mysql para conectar a Cyrus con una base de datos de usuarios creada en MySQL. A partir de aquí, podemos crear un interface web que nos permita la gestión administrativa completa de todo el servicio de correo. La potencia de PHP y la fiabilidad de MySQL harán del sistema que desarrollaremos en este manual algo seguro, fiable y rápido.

Sistema de correo con Postfix, Cyrus y MySQL

5

el mensaje quedará o no marcado como spam para su posterior filtrado o eliminación. El programa soporta firmas digitales en las actualizaciones y escanea ficheros comprimidos y mensajes de correo en casi cualquier formato. así como también será posible almacenar datos como alias que podrán ser interpretados por Postfix. En definitiva. amavisd-new actúa como un servidor smtp que cumple el estándar RFC 2821 o uno lmtp que cumple con el estándar RFC 2033. han quedado una gran cantidad de módulos de conexión con diferentes tecnologías. las tareas de administración de cada dominio podrán ser delegadas a los propios usuarios de correo. Una vez procesado el mensaje. Sistema de correo con Postfix. ClamAV (clamav-0.Pam_MySQL (pam_mysql-0. lo que permite una integración perfecta bajo cualquier entorno. Es un lenguaje muy sencillo y con órdenes muy limitadas.). Una vez realizado el análisis. Básicamente. Analiza en tiempo real el correo entrante y lo compara con listados de spam y trata de analizar el texto para un mejor filtrado del mismo.88. SpamAssassin (spamassassin-3.1-1) El antivirus Clam es una herramienta bajo licencia GPL desarrollada para sistemas Linux/Unix. El mensaje a filtrar necesita del uso del protocolo RFC822. Sieve Sieve es un pequeño intérprete de órdenes que se encargan de realizar filtrados de correo en el lado del servidor. lo que supone un estándar para una gran cantidad de programas de filtrado. con el consiguiente ahorro de tiempo que eso supone. Uno de esos módulos es Pam_MySQL. Cyrus y MySQL 6 . es preciso recomendar el uso de algún interface que agilice y automatice el uso de Sieve por parte de usuarios sin acceso al servidor. filtrado de correo. lo que asegura su portabilidad y fiabilidad y se comunica con el servidor por medio de casi cualquier protocolo o programa al efecto.. Con Pam_MySQL será posible almacenar las contraseñas de los usuarios del servidor de correo en una base de datos MySQL. Se adapta perfectamente a casi cualquier servidor de correo y su principal función es la de escanear los datos adjuntos de un correo electrónico. Como puede suponerse. gracias a estas tecnologías.1-1. La actualización de la base de datos es constante y la librería en la que se basa el programa es de libre distribución y uso por cualquier programa. se generan notificaciones que los programas de antivirus o antispam usarán para analizar los mensajes y filtrarlos o eliminarlos. tendremos a nuestra disposición una base de datos y un mecanismo de conexión con autenticación que servirán todas las necesidades que pueda tener cualquier administrador/servidor de correo.0.4-1) SpamAssassin es un filtro de correo programado por los creadores de Apache. Está escrito en Perl. Amavisd-New (amavisd-new-2. a la entrega del correo. permitiendo incluso el envío de informes de spam a bases de datos internacionales. Gracias a todos estos elementos. El filtrado de los mensajes de spam es habitualmente muy satisfactorio si el programa se ha configurado correctamente. Las notificaciones se generan bajo las normas RFC 1892 y 1894. antispam.50-6) PAM (Pluggable Authentication module) fue desarrollado en primera instancia por el equipo de desarrollo de Sun Microsystems..3.2) Amavis supone una pasarela o interface que se coloca entre el servidor y uno o varios filtros de contenidos (antivirus. Aún así. pero perfecto para su uso como lenguaje encargado de crear filtros de correo.

soporte MySQL. Las páginas son creadas en HTML sobre la marcha y no se requiere el uso de javascript.5-35) Mailman es un software de gestión de listas de correo y de noticias. Se puede tener una idea mucho más cercana del proyecto accediento a la página web del mismo: http://www. Gracias a la gran cantidad de add-ons disponibles. Mediante esta tecnología de programación. Algunas de las tareas que podemos completar con web-cyradm pueden ser (entre otras) la administración de múltiples dominios virtuales. Para su correcto funcionamiento. Web-cyradm (web-cyradm-0. Squirrelmail (squirrelmail-1. procesar correo rechazado.1.4. Cyrus y MySQL 7 . creación automática de cuentas con el prefijo del dominio. es necesario que de la parte del servidor exista el correspondiente servidor/intérprete de lenguaje php correctamente configurado. lo que nos permite un control absoluto sobre todos sus parámetros. alias de usuario.web-cyradm. etc. proporciona acceso al servidor de correo mediante los protocolos IMAP y SMTP.5. enviar conjuntos de correos como uno solo y mucho más. este lector de correo vía web se convierte en la herramienta perfecta de acceso a la cuenta de correo fuera del lugar habitual de trabajo. así como un uso muy sencillo de cara al usuario de las listas.Mailman (mailman-2. Está escrito en php. lo cual garantiza la máxima compatibilidad en casi cualquier navegador.4-1) Web-cyradm es un interface web que permite la administración de un sistema de correo completo. cuotas de usuario. Web-cyradm está en constante desarrollo por parte de gente de todo el planeta y el listado de sus características y opciones crece día a día.org . Mailman puede crear archivos de correo automáticos.6-0) Squirrelmail es un lector de correo vía web escrito en php. filtrar spam. Su perfecta integración con la web permite una fácil y rápida administración del sistema. Sistema de correo con Postfix.

4 Como medida de seguridad. no siendo imprescindibles para el correcto funcionamiento del servidor de correo.1 mysql-server-4.1. Por nuestra parte. crearemos los ficheros de log: # touch /var/log/mysql/mysql-err. se utilicen las versiones indicadas en el Capítulo II. en la medida de lo posible. Cyrus y MySQL 8 .14-1. haremos un pequeño cambio al fichero de configuración /etc/my.log # chown mysql.FC4.FC4. activamos el servicio mySQL para su ejecución con el inicio del sistema: # chkconfig mysqld on Con esto queda instalado mySQL para el propósito que nos ocupa. Recalcar que la instalación del servidor de correo ha de hacerse bajo Fedora Core 4 o Fedora Core 5.log [mysqld_safe] err-log=/var/log/mysql/mysql-err. así que se recomienda encarecidamente que.14-1.1. Es muy recomendable que las actualizaciones de paquetes bajo el sistema Fedora se hagan con herramientas de actualización automática como yum o apt-get.1 mysql-4.14-1. Acto seguido.mysql /var/log/mysql* Por último. Durante la instalación/actualización de paquetes requerida por este manual.FC4. Es probable que las versiones o paquetes incorporados "de serie" con la distribución.1 php-mysql-5.log Si algún parámetro ya aparece en el fichero.0.log # touch /var/log/mysql/mysql-access. Añadiremos las líneas siguientes a los epígrafes entre corchetes: [mysqld] log=/var/log/mysql/mysql-access.1.cnf para controlar de manera más eficaz el log de acceso y errores de mySQL.com/downloads/ Instalaremos los siguientes paquetes con la herramienta yum (yum update [paquete]) : mysql-devel-4. Sistema de correo con Postfix. Instalando MySQL Sitio web de descarga original: http://www.III – Instalando Software La mayoría del software a instalar viene incluído en la distribución de Fedora al uso.mysql. Fedora añade al usuario mysql al sistema tras la instalación de los paquetes. no coincidan con las utilizadas para la confección de este manual. no garantizándose el correcto funcionamiento del sistema bajo otras distribuciones. se sustituirá por la línea correspondiente. se marcarán en azul aquellos paquetes cuya instalación queda recomendada por el autor.4-10.

20-5 cyrus-imapd-utils-2.2.20-5 cyrus-sasl-md5-2.1.Instalando OpenSSL Sitio web de descarga original: http://www. nos servirá la instalación por defecto del paquete.edu/pub/cyrus-mail/cyrus-sasl-2.rpm y lo instalaremos con la herramienta de paquetería rpm : # rpm -ivh postfix-2.2.9.20. En nuestro caso postfix-2.2.openssl.20-5 cyrus-imapd-murder-2.andrew.1.2.tar.gz ftp://ftp.12-6.2.spec # cd RPMS/i386 Sistema de correo con Postfix.9.10 openssl-perl-0.org/ftp-sites.54-10.html En los sistemas Fedora.spec de los fuentes y modificamos lo siguiente: %define MYSQL 0 --> %define MYSQL 1 Y compilamos e instalamos postfix con la opción mySQL activada: # cd /usr/src/redhat/ # rpmbuild -ba SPEC/postfix.fc4 cyrus-sasl-devel-2.org Paquetes a instalar: openssl-0. el paquete de fuentes sin compilar de postfix.1.12-6.7f-7.fc4 cyrus-sasl-plain-2.7f-7.10 openssl-devel-0. Descargaremos de nuestro repositorio preferido.andrew.src.9. postfix viene de origen compilado sin la opción mySQL activada.20-5 Y añadiremos el servidor de cyrus-imap al script de inicio del sistema: # chkconfig cyrus-imapd on Instalando postfix Sitio web de descarga original: http://www.2-2.1.cmu. mediante la herramienta yum. el paquete rpm del Fedora original no nos sirve para el propósito de este manual.fc4 cyrus-imapd-devel-2.2.2 En el caso de OpenSSL.src.postfix.2-2.12-6.tar.fc4 cyrus-imapd-nntp-2. Cyrus y MySQL 9 .0.fc4 cyrus-sasl-gssapi-2.12-6.cmu.edu/pub/cyrus-mail/cyrus-imapd-2.20-5 cyrus-sasl-2.1.2. Instalando CyrusSASL e IMAP Sitios web de descarga original: ftp://ftp. Por lo tanto.1.10 mod_ssl-2.12.gz Paquetes a instalar: cyrus-imapd-2.12-6.7f-7.2.rpm Seguidamente editamos el fichero /usr/src/redhat/SPECS/postfix.

2.5-2.5 Instalando pam-mySQL Sitio web de descarga original.3. Para ello. la ruta sería /var/www/html/. Instalando PAM Si el sistema PAM no ha quedado instalado por defecto en la instalación de Fedora. leeremos las instrucciones correspondientes de cada programa y obtendremos lo deseado..# rpm -Uvh postfix-2.2.rpm --replacefiles # rpm -Uvh postfix-pflogsumm-2.gz Habilitaremos los ficheros de log para la depuración: # touch /var/log/web-cyradm.log La verión 0.rf clamav-lib-0.rpm --replacefiles # rpm -Uvh postfix-debuginfo-2.2.50-6 Instalando web-cyradm Sitio web de descarga original: http://www.5. Cyrus y MySQL 10 .org No hay binarios pre-compilados de web-cyradm para Fedora..1-1.i386.4 de web-cyradm es la última considerada estable.5. así que descargaremos el paquete comprimido de la web y lo instalaremos sobre la ruta de documentos públicos de nuestro servidor de páginas web. Paquetes a instalar: pam-0.5 pam-devel-0.4.2. http://sourceforge.2-2. para evitar conflictos entre versiones. Utilizaremos la instalación por defecto que nos deje cada paquete: amavisd-new-2. El paquete tar ya viene preparado para descomprimir y usar: # cd /var/www/html # tar -xvzf web-cyradm-0. Suponiendo que tengamos el servidor Apache instalado.5-2.i386.1-1.tar.79-9.fc4 Sistema de correo con Postfix.net/projects/pam-mysql/ Paquetes a instalar: pam_mysql-0. Obviamente. lo instalaremos mediante yum.1.79-9.i386.log # chown nobody /var/log/web-cyradm.1. El resto de paquetes a instalar es el siguiente. Instalando el resto .rpm --replacefiles Antes de proceder con la instalación de los paquetes.88.fc4. es recomendable asegurarse de que ningún paquete de los referidos (o cualquier otro MTA distinto a postfix) está instalado. habremos de configurar yum o apt de forma que no actualice el paquete postfix en ningún momento.web-cyradm.

cvs20050812. crearemos las bases de datos necesarias para el correcto funcionamiento de webcyradm y postfix.fc4 mailman-2. Para el propósito de este manual. Una vez editados los scripts.0. Antes de lanzar los scripts de creación de bases de datos.clamav-data-0.1.88.sql # mysql -p < create_mysql. el sistema postfix y web-cyradm son totalmente configurables a gusto del usuario. Como ya se ha explicado.1-1.fc4 Como se dijo anteriormente. es necesario tener instalado un servidor de páginas web y un servidor de php. Editaremos los scripts y cambiaremos el usuario admin por otro a nuestro gusto y la contraseña test por la preferida.fc4 clamav-server-0. La instalación de web-cyradm nos proporciona varios scripts de configuración y de creación de tablas.sql y create_mysql.fc4 spamassassin-3. fiabilidad y consistencia.fc4 clamav-0. web-cyradm funciona correctamente en sistemas Fedora Core con la versión 5 de php y el servidor Apache.1-1. pudiendo cada uno crear las tablas que considere necesarias para el sistema pensado.6-0. Cyrus y MySQL 11 . se pueden usar herramientas del tipo phpmysqladmin o similares para ejecutar los scripts.88. cambiar los nombres de usuario y claves por defecto y adecuarlas a nuestras necesidades.fc4 clamav-update-0. por no decir que es necesario.1-1.sql Si no se está familiarizado con mySQL.88. es altamente recomendable.88. Sistema de correo con Postfix. los lanzaremos desde la consola de mySQL: # mysql -p < insertuser_mysql. Un último paso: Creación de las bases de datos de web-cyradm Para finalizar con la instalación del software y antes de adentrarnos en la configuración de cada paquete. usuarios y tablas. Bajo el directorio scripts de la instalación tenemos dos que nos ayudaran a formalizar nuestras tablas de mySQL. El resto de scripts realizan funciones de administración y actualización del sistema web-cyradm y no vienen al caso en esta instalación.4. insertuser_mysql.4-1. que es más que suficiente para cualquier sistema de correo que cumpla con amplias garantias de seguridad. nos limitaremos a crear la estructura necesaria para la integración de web-cyradm y postfix con mySQL y PAM.5-35.fc4 squirrelmail-1. además de crear la base de datos mail.sql. El segundo es el encargado de crear las tablas y de rellenarlas con un primer usuario (el administrador) y el usuario cyrus.1.1-1. El primero crea la base de datos de usuarios en nuestro sistema mySQL para el correcto funcionamiento de web-cyradm.

IV – Seguridad en MySQL Daremos en este capítulo algunos pasos para añadir seguridad adicional a nuestro servidor mySQL. Para lograr este objetivo. Para ello.0. En Fedora Core. La forma más sencilla de hacer esto es dirigiendo al demonio mysqld al interface local de red 127.d/mysqld restart) y nos aseguraremos de haber realizado los cambios de forma correcta.0:* LISTEN Configurando el firewall Si tenemos previsto que nuestro servidor de mySQL corra en una máquina distinta a la del servidor de correo.0. Así que usaremos --bind-address para hacer que mysqld se ejecute sólo en el entorno 127.0.0.0. Nos aseguramos de esta forma de que nadie pueda realizar una conexión al demonio de mySQL a través de la red.0. habremos de cerrar el acceso al puerto que utiliza mySQL para la comunicación con otras máquinas: el puerto 3306. Para ello. recurriremos a las páginas del manual de ambos comandos. Sistema de correo con Postfix. necesitamos alguna medida adicional de seguridad. buscaremos la línea que hace referencia al comando mysqld_safe. habremos de realizar una serie de cambios en la configuración de nuestro firewall. Asegurando MySQL Como nuestra intención es utilizar una base de datos corriendo en un servidor de mySQL para autenticar a los usuarios de correo. mysqld_safe se encargará de reiniciar el servidor cuando se produzca algún error que impida el correcto funcionamiento del mismo. En Fedora.1 o loopback: /usr/bin/mysqld_safe --defaults-file=/etc/my.cnf --pidfile="$mypidfile" >/dev/null 2>&1 & A parte de los suyos propios.1:3306 0. la línea en cuestión aparece como sigue: /usr/bin/mysqld_safe --defaults-file=/etc/my. Esto nos permitirá tener asegurada la conexión al demonio mysqld.0. mysqld_safe pasará al demonio mysqld cualquier parámetro compatible con este último. En este caso. reiniciaremos el servidor de mySQL (/etc/init.1 --pid-file="$mypidfile" >/dev/null 2>&1 & Para más información acerca de los parámetros de ejecución de mysqld_safe y mysqld. Una vez cargado el fichero.0. es necesario editar el fichero encargado de iniciar el sistema mySQL. Cyrus y MySQL 12 .d/mysqld.cnf --bindaddress=127. que es un ejecutable especial encargado de llamar al demonio mysqld y de pasarle ciertos parámetros que añaden una seguridad extra y un sistema de información en tiempo real de cualquier tipo de error que se produzca en relación a mySQL.0. podemos hacer uso del siguiente comando: # netstat -an|grep LISTEN Y buscaremos en la salida algo similar a esto: tcp 0 0 127.1. Por ejemplo.0. este fichero se sitúa por defecto en /etc/init. Una vez realizados los cambios.

Cyrus y MySQL 13 . sustituyendo éste al antiguo rinetd. modificaremos el archivo /etc/selinux/config y nos aseguraremos de que el parámetro SELINUX está igualado a disabled: SELINUX = disabled Sistema de correo con Postfix. Las incompatibilidades creadas entre SELinux y otras partes del sistema operativo son tantas que. no se puede recomendar su uso. el programa iptables se encarga de realizar redirecciones de puertos. SELinux Capítulo aparte merece el programa de bloqueos de seguridad sobre el kernel SELinux. siendo altamente recomendable su inutilización. no se adelantará aquí ninguna configuración de iptables. En los sistemas Fedora. Para el caso que nos ocupa y dependiendo de ciertas configuraciones. Por lo tanto. el servidor de mySQL puede no llegar ni a arrancar de forma correcta si SELinux está habilitado. Como podrá suponerse.redirigiremos el puerto 3306 hacia la IP local de nuestro servidor mySQL y daremos acceso desde el firewall a la máquina que vaya a hacer de servidor de correo. En los sistemas Fedora. el kernel viene compilado por defecto con esta característica. por la cantidad de configuraciones que se pueden manejar y por estar este manual orientado a otro tipo de instalación que nada tiene que ver con iptables. hasta que no sea SELinux un sistema altamente probado.

Para nuestros fines. Crearemos un fichero idéntico para cada uno de los servicios que requieran autenticación desde pam_MySQL. crypt. Es aquí donde tendremos que modificar o crear los ficheros necesarios para una correcta autenticación de los usuarios de Cyrus. todos los archivos de configuración de PAM se encuentran bajo el directorio /etc/pam. Cyrus y MySQL 14 . escribiremos un fichero de configuración como el siguiente: auth required pam_mysql.d/. que deberá coincidir con la configuración de encriptación que deseemos y que nos ofrece web-cyradm. La autenticación que se persigue es la siguiente: Petición de acceso -> Intento de login en PAM -> Petición de datos a MySQL mediante pam_MySQL -> Devolución de login erróneo o satisfactorio a Cyrus Así. Hay que poner especial atención al parámetro crypt. Modificando ficheros En los sistemas bajo Fedora (y en casi todos los sistemas linux). usaremos el valor 1 ("encrypt") por ser el más portable. De momento.so verbose=0 host=localhost user=usermail passwd=password db=mail table=accountuser usercolumn=username passwdcolumn=password crypt=1 logtable=log logmsgcolumn=msg logusercolumn=user loghostcolumn=host logpidcolumn=pid logtimecolumn=time El cual guardaremos como /etc/pam. crearemos ficheros para los servicios de pop. Sistema de correo con Postfix. entre otros y los guardaremos con el nombre del servicio y la ruta anterior.V . Hablaremos de las diferentes opciones de encriptación en el capítulo dedicado a la configuración de web-cyradm. sieve o smtp.so verbose=0 host=localhost user=usermail passwd=password db=mail table=accountuser usercolumn=username passwdcolumn=password crypt=1 logtable=log logmsgcolumn=msg logusercolumn=user loghostcolumn=host logpidcolumn=pid logtimecolumn=time account required pam_mysql. habremos de asegurarnos de una sola cosa: que PAM reciba correctamente todos los datos necesarios para autenticar a los usuarios que pasan por el sistema Cyrus.Configuración de PAM Una buena configuración de PAM es imprescindible para la autenticación de todos y cada uno de los usuarios de nuestro sistema de correo. Por ejemplo. user y db.d/imap una vez realizados los cambios pertinentes sobre los parámetros passwd.

com. es establecer de forma correcta los parámetros de nuestro servidor de correo..VI – Postfix En el proceso de configuración del programa postfix atenderemos a los dos ficheros fundamentales que hacen que toda la maquinaria de este MTA engrane de forma perfecta: main. Cyrus y MySQL 15 . En este caso. será necesario utilizar LMTP para la comunicación entre postfix y cyrus.conf. Si el parámetro queda en blanco. El fichero /etc/postfix/master. whatever. el correo Sistema de correo con Postfix. no está de más comentar que el socket creado por el servicio de lmtpunix (en Fedora Core /var/lib/imap/socket/lmtp) tendrá que ser accesible por postfix.cw de configuración de sendmail).. nos fijaremos en otra línea de configuración posterior: # The Cyrus deliver program has changed incompatibly. Por otro lado. cambiaremos el nombre del host: myhostname = foo.cf Ya que es nuestra intención aprovecharnos de las ventajas que nos ofrece Sieve en las tareas de filtrado.cf Lo primero que hay que hacer al abrir por primera vez el fichero /etc/postfix/main.cf.cf En algún caso. ya que cyrus requiere que todas las entregas por LMTP se autentiquen.cf.bar.cf y master. estableciendo que sea el usuario postman el que las realiza. que igualaremos a los nombres de todos los dominios que consideremos locales (similar al fichero sendmail. Aunque nuestra configuración del sistema de correo se está basando principalmente en sistemas Fedora y los permisos ya se aplican con las instalaciones de los paquetes.org. Cada uno de los dominios.n . considerará que toda entrega que se haga a través de un socket será de confianza.bar. irá separado por comas: mydestination = foo. nos veremos en la necesidad de utilizar los servicios de un proveedor para procesar el envío de correo. igualaremos el parámetro relayhost a cada uno de los proveedores de servicios que nos interesen. Tal y como veremos en un capítulo posterior dedicado a la confiuración de Cyrus.domain.lmtp Para terminar.n n . furchbar-grausam. liberaliatempus.ch.pipe flags=R user=cyrus argv=/usr/lib/cyrus-imapd/deliver -e -m ${extension} ${user} Hay que prestar especial atención a la ruta apuntada por el parámetro argv pues en alguna ocasión no refleja bien la situación del programa deliver y las entregas de correo pueden llegar a no efectuarse.org Continuaremos con el parámetro mydestination.cf y observaremos que una línea como esta está presente: lmtp unix . old-cyrus unix . Para empezar. multiple times..tld. El fichero /etc/postfix/main. Abriremos por tanto el fichero /etc/postfix/master. habilitaremos el servicio lmtpunix sobre el fichero de configuración /etc/cyrus. mysql:/etc/postfix/mysql-mydestination. si es que hay más de uno.

por ejemplo.cf sender_canonical_maps = mysql:/etc/postfix/mysql-canonical. o el programa que se encargará de transportar el correo de un programa a otro. Cyrus y MySQL 16 .net Otro parámetro importante a tener en cuenta es el referente al mailtransport. igualaríamos el parámetro al socket correspondiente: mailbox_transport = lmtp:unix:/var/lib/imap/socket/lmtp Finalmente estableceremos bajo postfix el sistema de dominios virtuales y su procesamiento correcto. Para nuestros propósitos..net relay02. sin la dirección completa.cf virtual_alias_maps establece la configuración de acceso a los alias virtuales. mientras que sender_canonical_maps se encarga de reescribir la dirección de correo a su formato correcto.foobar.net relay03. deberíamos usar como programa de procesamiento a Cyrus.foobar. Este último parámetro es necesario para el uso de un interface web. /etc/postfix/mysql-virtual..saliente será procesado directamente por el servicio de smtp que se haya establecido por defecto: relayhost = relay01. ya que los usuarios se crean habitualmente del modo test001. crearemos los ficheros correspondientes. para lo cual igualaremos el parámetro mailbox_transport de la siguiente manera: mailbox_transport = cyrus Si.cf # Usuario y password de acceso al servidor mysql hosts = localhost user = mail password = password # El nombre de la base de datos dbname = mail # El nombre de la tabla table = virtual # select_field = dest where_field = alias additional_conditions = and status = '1' Sistema de correo con Postfix. utilizaremos distintos ficheros de configuración que informarán a postfix del lugar en la base de datos de mysql en el cual se encuentran los dominios virtuales correspondientes y los alias de usuario: virtual_alias_maps = mysql:/etc/postfix/mysql-virtual. Para esto.foobar. Para el correcto funcionamiento de esta última configuración. preferimos usar lmtp.

1).0:* LISTEN tcp 0 0 127.0.. vamos a comprobar que todo lo que hemos hecho hasta ahora se comporta de manera correcta. veremos ante todo que cada uno de los servicios está a la escucha en su lugar correspondiente: # netstat −an|grep LISTEN tcp 0 0 0.0. Connected to webmail. a un buzón local (en negrita los comandos a teclear): # telnet localhost 25 Trying 127..cf # Nombre de usuario y contraseña del servidor mysql hosts = localhost user = mail password = password # Nombre de la base de datos dbname = mail # Nombre de la tabla table = domain # select_field = domain_name where_field = domain_name SMTP con autenticación SASL y la seguridad de PAM Antes de comenzar con la activación en postfix de SASL. A priori. si los tres servicios están activos. ya se podría mandar correo. por ejemplo.0.0:* LISTEN tcp 0 0 0.0.0. esperaremos a la configuración correcta de Cyrus y a un capítulo posterior para hacer todas las comprobaciones. Para ello.0.0. Sistema de correo con Postfix.0.0.0:143 0.0.0.0.0.mailserver.1:2000 0./etc/postfix/mysql-canonical. en el 2000 se encuentra sieve y en el 143 escucha el servicio imap (a configurar en el siguiente capítulo).0:* LISTEN Sobre el puerto 25 tenemos el servicio smtp.1. Cyrus y MySQL 17 .0.0:25 0.com (127. Si alguno de los servicios no aparece activado.cf # Usuario y password de acceso al servidor mysql hosts = localhost user = mail password = password # El nombre de la base de datos dbname = mail # El nombre de la tabla table = virtual # select_field = alias where_field = username #Devuelve la primera ocurrencia additional_conditions = and status = '1' limit 1 /etc/postfix/mysql-mydestination.0.0.

reject_unauth_destination smtpd_sasl_security_options = noanonymous smtpd_sasl_local_domain = broken_sasl_auth_clients = yes Con esto. Más adelante.conf con una única línea: pwcheck_method: saslauthd Y.mailserver. Si smtpd_sasl_local_domain se iguala a algo.com> 250 Ok DATA 354 End data with <CR><LF>. forzaremos la comprobación del usuario entrando en /etc/sasldb2 con [usuario@dominio al que se iguala la opción]. Tendremos que indicar seguidamente el mecanismo a usar a través de SASL y para ello dejaremos. hay que cambiar el método de autenticación con que saslauthd se inicia por defecto.smtpd -v Sabiendo que el log queda alojado en /var/log/maillog en los sistemas con Fedora.. añadiremos el parámetro -v al fichero /etc/postfix/master.Escape character is '^]'. sobre todo en sistemas con RedHat o con Fedora. 220 webmail.com> 250 Ok RCPT TO: < jsa@mailserver. Autenticaremos a los clientes conectados mediante smtp para que puedan hacer relay sobre el servidor de correo.cf.mailserver.com MAIL FROM: < jsf@mailserver.com ESMTP Postfix (Fedora) HELO localhost 250 webmail. aseguraremos la conexión mediante TLS. Para ver un log bastante detallado del proceso de envío de correo. donde cambiaremos el mecanismo por defecto (habitualmente shadow) para igualarlo a pam: MECH=pam Sistema de correo con Postfix. Esto lo haremos sobre el fichero /etc/sysconfig/saslauthd. si no lo está ya. Para ello modificaremos la opción smtpd_recipient_restrictions del fichero /etc/postfix/main. ahora sí. permit_mynetworks. Todo lo demás será rechazado. a activar SASL sobre postfix.<CR><LF> Este es un mensaje de pruebas enviado a traves de telnet.n . los clientes sin autoridad podrán hacer relay sobre el servidor siempre que pertenezcan a las redes indicadas en mynetworks.cf: smtpd_sasl_auth_enable = yes smtpd_recipient_restrictions = permit_sasl_authenticated. 250 Ok: queued as 5F496BEE9 QUIT 221 Bye Connection closed by foreign host. el fichero /usr/lib/sasl2/smtpd. . dejaremos la opción igualada a nada. Para nuestros propósitos de autenticación bajo mysql. Procedamos. Cyrus y MySQL 18 . sobre la línea correspondiente al servicio de smtp: smtp inet n .

localhost. Aunque es necesaria la lectura de la documentación de postfix a este respecto. permit_mynetworks. check_helo_access hash:/etc/postfix/helo_check smtpd_data_restrictions = reject_unauth_pipelining.Para sistemas que no sean Fedora. quedará como sigue. reject_non_fqdn_recipient.cf al completo. hay que indicar al sistema dónde se encuentra el socket saslauthd y para esto habrá que crear un enlace hacia la posición deseada.com mydomain = mailserver. mysql:/etc/postfix/mysql-mydestination. potenciaremos la seguridad en postfix mediante diferentes opciones que iremos añadiendo a smtpd_recipient_restrictions. incluyendo opciones que veremos más adelante. permit_sasl_authenticated. Cyrus y MySQL 19 .0/24 relay_domains = $mydestination mailbox_size_limit = 0 recipient_delimiter = + #mailbox_transport = lmtp:unix:/var/lib/imap/socket/lmtp mailbox_transport = cyrus #SOPORTE SASL smtp_sasl_auth_enable = no Sistema de correo con Postfix.168. reject_unknown_recipient_domain.$mydomain. echemos un vistazo al fichero de configuración /etc/postfix/main. Habitualmente. amén de utilizar opciones como smtpd_helo_required = yes para verificar el uso correcto de nuestro servidor de correo. permit Por último. el fichero /etc/postfix/main.0. reject_unknown_sender_domain. reject_non_fqdn_sender. reject_unauth_destination. $mydomain.0/8.com alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases mydestination = $myhostname. 192.cf podría quedar de esta manera en lo referente a los filtros de autenticación: smtpd_helo_required = yes disable_vrfy_command = yes smtpd_recipient_restrictions = reject_invalid_hostname.cf myorigin = $myhostname mynetworks = 127.0. localhost.0. como el soporte para TLS o el filtrado con amavisd-new: #CONFIGURACIÓN PRINCIPAL POSTFIX setgid_group = postdrop smtpd_banner = $myhostname ESMTP $mail_name (Fedora) biff = no append_dot_mydomain = no delay_warning_time = 4h command_directory = /usr/sbin daemon_directory = /usr/libexec/postfix program_directory = /usr/libexec/postfix myhostname = webmail.mailserver. aunque siempre dependerá de la distribución en uso: # mv /var/run/sasl2 /var/run/sasl2-old # ln -s /var/run/saslauthd /var/run/sasl2 Una vez realizados los cambios.

reject_non_fqdn_recipient.cf sender_canonical_maps = mysql:/etc/postfix/mysql-canonical. reject_unauth_destination. native #OTHERS virtual_alias_maps = mysql:/etc/postfix/mysql-virtual. reject_unknown_sender_domain. Cyrus y MySQL 20 .smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous #smtpd_sasl_local_domain = $myhostname smtpd_sasl_local_domain = broken_sasl_auth_clients = yes #smtp_sasl_password_maps = hash:/etc/postfix/sasl/saslpass #AUTENTICACIÓN VÁLIDA smtpd_helo_required = yes disable_vrfy_command = yes smtpd_recipient_restrictions = reject_invalid_hostname.cf message_size_limit = 20480000 Sistema de correo con Postfix. check_helo_access hash:/etc/postfix/helo_check smtpd_data_restrictions = reject_unauth_pipelining. reject_non_fqdn_sender. reject_unknown_recipient_domain. permit #SOPORTE TLS smtpd_use_tls = yes smtpd_tls_auth_only = yes smtpd_tls_key_file = /etc/postfix/ssl/newreq.pem smtpd_tls_cert_file = /etc/postfix/ssl/newcert. permit_sasl_authenticated.pem smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem smtpd_tls_loglevel = 1 smtpd_tls_received_header = yes smtpd_tls_session_cache_timeout = 3600s tls_random_source = dev:/dev/urandom #Amavisd-New content_filter = smtp-amavis:[localhost]:700024 sendmail_path = /usr/sbin/sendmail html_directory = no manpage_directory = /usr/share/man newaliases_path = /usr/bin/newaliases mailq_path = /usr/bin/mailq queue_directory = /var/spool/postfix mail_owner = postfix unknown_local_recipient_reject_code = 450 smtp_host_lookup = dns. permit_mynetworks.

como ya hemos explicado en anteriores capítulos. Veamos un ejemplo: # saslpasswd2 −c user001 El parámetro -c nos permite añadir un usuario y el parámetro -d lo borraría de la base de datos. Por ejemplo. en las distribuciones bajo Fedora Core.VII . donde se incluye toda la documentación necesaria para la correcta configuración de un sistema Cyrus y sus distintas asociaciones con el programa Postfix. el comando sasldblistusers2 listará los usuarios existentes y el comando saslpasswd2 añadirá usuarios a nuestra conveniencia. El segundo especifica los parámetros de configuración del servicio IMAP de Cyrus. limpiemos de la base de datos el ejemplo: # saslpasswd2 −d user001 Otro uso de saslpasswd2 es el de asociar usuarios a dominios mediante la utilización de la opción -u: # saslpasswd2 −c user002 −u dominio_03. Cyrus y MySQL 21 .Cyrus IMAP y SASL Con la configuración y puesta en marcha de Cyrus IMAP completaremos la primera fase de instalación de nuestro servidor de correo. por supuetso. el sistema de autenticación pasará por el acceso de PAM a una base de datos MySQL. el mecanismo utilizado era la autenticación directa bajo SASLDB. En el primero de ellos se determinan los servicios a ejecutar mediante el inicio de Cyrus. sería altamente recomendable que el lector de este manual leyera. teniendo acceso completo a los buzones de almacenamiento de correo y al sistema de autenticación de usuarios.net Cyrus-IMAP La configuración de la plataforma Cyrus se establece a partir de dos ficheros fundamentales: /etc/cyrus. SASL Recordemos cómo en el capítulo anterior modificábamos el fichero /etc/sysconfig/saslauthd para igualar el mecanismo de autenticación a un sistema con PAM. Con el paquete cyrus-sasl ya instalado tendremos acceso a los diferentes ejecutables que nos permitirán el acceso y la manipulación de las bases de datos de usuarios. Para nuestros propósitos. Para continuar con la configuración. Sistema de correo con Postfix. quedando éste relegado a la autenticación a través de PAM con la introducción de este último sistema en las distintas distribuciones de linux y. aunque fuera de forma somera. Si ahora utilizamos sasldblistusers2: #sasldblistusers2 user001@dominio. entre otras muchas opciones. En sistemas anteriores.conf. Esta última será protegida mediante una capa de seguridad extra entre el protocolo y la conexión.conf y /etc/imapd. la documentación incluida en la rama de directorios /usr/share/doc/cyrus-imapd y /usr/share/doc/cyrussasl.net : userPassword Para finalizar.

START: esta sección lista los scripts que se ejecutarán antes de que se arranquen los servicios. Tenemos en el interior de este fichero una serie de líneas con el formato opción: valor . SERVICES: esta sección es el corazón del fichero /etc/cyrus. El paquete rpm instalado sobre un sistema con Fedora nos deja una configuración por defecto que apenas habrá que cambiar.El fichero /etc/cyrus. 3.conf Sobre este fichero definiremos los parámetros locales para el servidor IMAP. El servicio imaps nos servirá para la configuración de IMAP sobre SSL y el servicio de sieve nos ejecutará el servicio de filtrado de correos.conf Este fichero de configuración se compone de tres partes bien diferenciadas: 1. Sistema de correo con Postfix. Hay que aclarar igualmente que en la configuración descrita se opta por la utilización de sockets UNIX. Típicamente se usa para llevar a cabo tareas programadas de limpieza y mantenimiento.conf. En un contexto diferente (con. Cyrus y MySQL 22 . Para un sistema sólo con IMAP. donde opción es el nombre de la opción a configurar y valor el valor al cual se está estableciendo esa opción. bien sean tipo TCP o UNIX. así que observemos como queda el fichero: START { recover cmd="ctl_cyrusdb -r" idled cmd="idled" } SERVICES { imap cmd="imapd" listen="localhost:imap" prefork=5 imaps cmd="imapd -s" listen="imaps" prefork=1 pop3 cmd="pop3d" listen="pop3" prefork=3 pop3s cmd="pop3d -s" listen="pop3s" prefork=1 sieve cmd="timsieved" listen="sieve" prefork=0 lmtpunix cmd="lmtpd" listen="/var/lib/imap/socket/lmtp" prefork=1 } EVENTS { checkpoint cmd="ctl_cyrusdb -c" period=30 delprune cmd="cyr_expire -E 3" at=0400 tlsprune cmd="tls_prune" at=0400 } Nótese que se han añadido las líneas correspondientes a la ejecución de los servicios de pop3 y pop3s. estas líneas no se incluirían. Cada vez que hagamos cambios sobre el fichero de configuración de Cyrus. EVENTS: esta sección lista los procesos que deberían ejecutarse a intervalos específicos. de modo similar a los trabajos del cron. reiniciaremos el servidor para que estos se apliquen: # service cyrus-imapd restart El fichero /etc/imapd. debido a que toda la configuración seguida en este manual supone que todos los servicios se ejecutarán sobre la misma máquina. los servidores postfix y cyrus corriendo en máquinas distintas) será necesario el uso de sockets TCP. pues describe los procesos que deberán lanzarse para atender las conexiones que los clientes hagan a ciertos sockets. 2. Su uso más característico es inicializar las bases de datos y lanzar los servicios de larga ejecución. por ejemplo.

sasl_mech_list: esta es la lista de los mecanismos de autenticación que se van a soportar. ni tan siquiera son necesarias estas líneas. es decir. admins: esta opción permite definir los usuarios que tendrán permisos de administrador (flag a de la ACL de un buzón) sobre todos los buzones del sistema. es decir. separados por espacios. Debido a que Cyrus diferencia mayúsculas y minúsculas. Cyrus y MySQL 23 . El usuario cyrus. que sirve para forzar que el nombre de usuario se convierta a minúsculas. lmtp_admins: esta opción permite especificar una lista de usuarios. Sobre un sistema con Fedora. nada para el resto). Un valor igual a 1 requiere protección de integridad. umask: esta opción permite definir los permisos con los cuáles se guardarán los ficheros y subdirectorios dentro de /var/spool/cyrus/mail.conf. Lo igualaremos al valor PLAIN. Es útil para evitar que se prueben todos los plugings existentes y para definir el orden de los mismos. que tendrán la categoría de administradores LMTP.La líneas en blanco o con almohadilla (#) al principio serán ignoradas. Si se van a usar socketsUNIX no es necesario quitar el comentario a esta opción. Por defecto tiene el valor 077 (lectura y escritura para el propietario. Este usuario se va a autenticar mediante el método SASL. pues el usuario postman (valor por defecto) es autenticado automáticamente. una vez esté todo funcionando será más sencillo aumentar la seguridad. Carece de sentido a menos que se quieran implementar grupos de noticias. allowplaintext: mediante esta opción decidimos si vamos a permitir uso del mecanismo de autenticación sasl plain. allowanonymouslogin: esta opción permite el acceso anónimo a los buzones en cuyas ACLs se haya añadido al usuario anonymous. es la opción más recomendable. sasl_auxprop_plugin: Esta opción nos permite especificar los plugins del auxpropd que deseamos cargar. sasl_minimum_layer: el SSF (del inglés. Cabe destacar que el valor de lmtpsocket (por defecto /var/lib/imap/socket/lmtp) debe estar en consonancia con el especificado en el fichero /etc/cyrus. Recomienda empezar con un valor de 0 (valor por defecto). que permite login de texto plano. Basta con quitar el comentario a la línea para establecer el valor a yes. • • • • • • • • • • Observemos ahora como quedaría el fichero con las opciones por defecto utilizadas en la configuración de este manual: Sistema de correo con Postfix. Los valores por defecto son correctos. En este artículo usaremos éste último valor. con valor no. de estar usando sasl_pwcheck_method: auxprop. lmtpsocket. sasl_maximum_layer: valor máximo del SSF que el servidor permitirá negociar al cliente. un valor más algo requiere algún tipo de cifrado. que podrán enviar correo a través de LMTP por TCP/IP (además de aquellos definidos en la opción admins anterior). y únicamente él. Es recomendable mantener el valor por defecto yes hasta que tengamos todo el sistema base configurado y funcionando. Es pertinente valor por defecto. por ejemplo amavisd−new (bastará con que añadamos al usuario con el cuál se ejecutan a ese grupo). security strength factor) mínimo que el servidor permitirá negociar cliente. pues de ese modo otras aplicaciones podrán leer el contenido de los emails. pero es conveniente permitir que el grupo (mail por defecto) tenga también permisos de lectura. es una buena idea trabajar con los nombres de usuario siempre en minúsculas (el valor por defecto asume que el usuario es consciente de lo que está haciendo). por lo que se dejará su valor por defecto no. por lo que bastará con descomentar la línea del fichero. idlesocket y notifysocket: estas tres opciones especifican las rutas para los tres sockets UNIX Cyrus. 256. por lo que debe añadirse a la base de datos /etc/sasldb2 mediante el comando saslpasswd2. tal que # saslpasswd2 −c cyrus. Es necesario descomentar esta línea para que use sasldb. Repasemos alguna de las opciones más relevantes: • lmtp_downcase_rcpt: esta opción. viene por defecto comentada. Todas estas configuraciones suelen venir activadas por defecto en las instalaciones base de paquetes bajo Fedora Core.

pm line 118 cyradm: cannot authenticate to server with plain as cyrus Esto es debido a que el demonio saslauthd no se está ejecutando.7 16476 5004 ? S Apr02 0:04 /usr/sbin/saslauthd -m /var/run/saslauthd -a pam Sistema de correo con Postfix. programa incorporado en el paquete perl-Cyrus : # cyradm --user cyrus --server localhost --auth plain Password: IMAP Password: mail. por lo que comprobaremos su ejecución mediante el siguiente comando: # ps aux | grep saslauthd Que nos devolverá.las subcarpetas de usuario se crean debajo de inbox. Cyrus y MySQL 24 .8.serverdomain. admins: cyrus allowanonymouslogin: no allowplaintext: yes sasl_mech_list: PLAIN servername: mail.conf configdirectory: /var/lib/imap partition-default: /var/spool/imap #altnamespace: # no . según diferentes instalaciones): Login failed: generic failure at /usr/lib/perl5/site_perl/5.com autocreatequota: 10000 reject8bit: no quotawarn: 90 timeout: 30 poptimeout: 10 dracinterval: 0 drachost: localhost sievedir: /var/lib/imap/sieve sendmail: /usr/sbin/sendmail hashimapspool: true sasl_pwcheck_method: saslauthd Consideraciones acerca del servidor Cyrus-IMAP Vamos a acceder a la interfaz de comandos para la gestión de Cyrus-IMAP mediante la llamada a cyradm. # yes . Añadir usuarios con saslpasswd2 -c username.serverdomain. Hay que tener en cuenta que el script /etc/init.0 0.com> Saldremos del programa de administración mediante la orden exit.d/cyrus-imapd no ejecuta por defecto saslauth2. en el caso de una ejecución correcta. varias líneas similares a esta: root 2210 0.las subcarpetas del usuario se crearán a la altura de inbox. altnamespace: no lmtp_downcase_rcpt: yes #admins: Usuarios con permisos administrativos sobre todos los buzones. Es posible que al ejecutar cyradm obtengamos el siguiente error (diferenciándose en la ruta o en la línea de error.5/i386linux-thread-multi/Cyrus/IMAP/Admin.#imapd.

inician saslauthd con shadow como sistema de autenticación por defecto.seen.).seen. que los sistemas con Fedora Core o con RedHat. Contiene información de tamaño variable sobre cada uno de los mensajes del buzón de correo. obtendremos un error al intentar autenticar a un usuario concreto bajo Cyrus-IMAP: # cyradm --user mail0001 --server localhost --auth plain Password: IMAP Password: Login failed: authentication failure at /usr/lib/perl5/site_perl/5. ej. Así que recordaremos el cambio en el fichero /etc/sysconfig/saslauthd para dejar el parámetro MECH como sigue: MECH=pam Si esto no se hace así. retornando un error temporal y reintentando el envío durante un par de días. Esto sucede de esta forma ya que si no fuera así.8. que se suele encontrar bajo la rama /var/lib/imap/user. Cyrus y MySQL 25 .En caso contrario. no sólo LF. 102. el resto de ficheros pueden encontrarse bajo la rama /var/spool/imap en un sistema con Fedora Core: • • • • • Ficheros de mensajes. no habría forma de saber cuándo se quiso entregar correo y no se entregó. avisando al usuario una vez recogido el mensaje. Para que un mensaje se pueda insertar en un buzón. que contiene el mensaje en formato RFC 822. Ccontiene información de estado.cache. cyrus.5/i386-linux-threadmulti/Cyrus/IMAP/Admin. ejecutaremos el servicio de forma manual y nos aseguraremos de su correcta activación: # chkconfig saslauthd on # service saslauthd start Recordemos. el envío del correo fallará. Contiene un número mágico e información de tamaño variable sobre el propio buzón de correo. de tamaño variable. lo que origina problemas a la hora de autenticar a los usuarios de los buzones bajo Cyrus-IMAP. En un principio. tal y como indicamos en un capítulo anterior.index. Si la cuota ya está por encima del límite.pm line 118 cyradm: cannot authenticate to server with plain as mail0001 Otro aspecto a tener en cuenta del servidor Cyrus-IMAP es el uso de cuotas. cyrus.conf. sobre cada uno de los usuarios que han leído el buzón de correo y tenían el permiso s. éste debería tener espacio de cuota suficiente. Las líneas del mensaje están separadas por CRLF. El programa reconstruct es el indicado en los casos en que estos ficheros se corrompan de algún modo. Hay uno por mensaje. cuya creación se establece mediante el uso del comando setquota en cyradm y mediante autocreatequota en el fichero /etc/imapd.header. Contiene información de tamaño fijo sobre el propio buzón de correo y cada uno de los mensajes que contiene. El nombre de fichero del mensaje es el UID del mensaje seguido de un punto (p. Reconstrucción de la base de datos de Cyrus-IMAP Los directorios de buzones componen la base de datos más grande de un sistema Cyrus. aunque en el proceso de envío de correo sucede algo curioso: aunque el mensaje a entregar supere la cuota permitida. a excepción de cyrus. Cada directorio se compone de los siguientes ficheros. cyrus. el programa intentará recuperar información a partir de los Sistema de correo con Postfix. cyrus. el mensaje se recogerá de todos modos.

usr001 mail. sam. y la rama /var/lib/imap. ejecutaremos quota -f para restablecer la cuota de cada uno de los buzones a partir de los ficheros raíz. también incluído en el paquete cyrus-imapd-utils. el usuario cyrus : # cyradm --user cyrus --server localhost IMAP Password: mail. podemos restaurar la información a partir de una copia de seguridad de los directorios de usuario y el programa reconstruct. Por lo tanto. respectivamente.serverdomain. que se restaura sin proceso posterior. que recuperaremos mediante reconstruct. En un capítulo posterior a la configuración de web-cyradm repasaremos la configuración haciendo uso del programa imtest. crearemos un buzón de prueba de la manera que sigue (nos suponemos dentro de la consola de cyradm): mail. que lista los buzones disponibles. Utilización de cyradm La administración de los buzones de correo se realiza mediante el programa cyradm o mediante un interfaz al uso como web-cyradm..com> Una vez dentro de la consola.serverdomain. lm. que establece las ACL en un buzón. o rama de configuración.com> lam user. siendo los más importantes cm y dm. nombre de flags. para crear y borrar buzones. Sistema de correo con Postfix. ante un fallo de disco o una pérdida accidental de datos. En nuestro caso.usr001 usr001 lrswipcda Ahora ya deberíamos ser capaces de dar de alta una cuenta de correo usando el protocolo IMAP en nuestro cliente de correo y nos podríamos conectar al servidor. Una vez reconstruidos los ficheros de control. podemos teclear help para obtener un listado de todos los comandos.ficheros de índice y de encabezados. etc. Cyrus y MySQL 26 .serverdomain. Llegados a este punto. cuya configuración detallaremos en un capítulo posterior. Es por lo tanto de extrema importancia hacer copia de seguridad de dos ramas de directorios en un sistema con Fedora Core: La rama /var/spool/imap. tal como fechas. o dam.conf para acceder a la consola de administración. Usaremos alguno de los administradores definidos en /etc/imapd. que borra las ACL de un buzón. recontruyendo el resto de información de la lectura de los propios ficheros de mensajes.comt> cm user.

La máquina que establece la conexión mediante TLS usará la información de los certificados para iniciar un proceso de validación que evitará la intercepción maliciosa de la comunicación. La generación de los certificados Si pretendemos que nuestro servidor ofrezca servicio de correo a terceros y pretendemos que la comunicación con estos se realice de forma cifrada.Cifrado del canal Como complemento a la configuración del sistema de correo con Postfix y Cyrus. Firma del certificado por una entidad certificadora. estudiaremos en este capítulo la implementación de un sistema de cifrado bajo el protocolo TLS para asegurar mediante canales seguros todas las comunicaciones entre el cliente y el servidor de correo. Instalación del certificado.pl -newca • Seguidamente realizaremos la petición del certificado: #/etc/pki/tls/misc/CA. Lo primero que tendremos que hacer será crear el certificado siguiendo los pasos que se detallan a continuación. Adjuntaremos al comando el parámetro -newca para la creación de la nueva CA: #/etc/pki/tls/misc/CA. Cyrus y MySQL 27 . Cada certificado proporcionará información sobre una autoridad que se encargará de validar el certificado enviado a través de una conexión TLS. La ruta de este script quedaría en /etc/pki/tls/misc/CA. Resumiremos por tanto los tres pasos a seguir para generar un certificado: • • • Creación del certificado. A través de las utilidades incluidas en el paquete OpenSSL generaremos certificados de seguridad que aplicaremos a las configuraciones de los programas Postfix y Cyrus-IMAP. por lo que será suficiente con la creación de una autoridad certificadora propia que se encargará de firmar los certificados.pl -newreq-nodes • Finalmente firmaremos el certificado: #/etc/pki/tls/misc/CA.VIII . • Creamos una nueva entidad certificadora mediante el script /etc/pki/tls/misc/CA del paquete openssl (existe otro script más completo que se obtiene de la instalación del paquete openssl-perl y cuyo uso se recomienda. La finalidad de este manual supone el uso del servidor en la red privada de la empresa o para el disfrute de comunicaciones cifradas a título personal. evitándose con la segunda el elevadísimo coste de un certificado de pago.pl).pl -newreq-nodes -sign Sistema de correo con Postfix. atendiendo a una única salvedad: No añadiremos palabra de paso a los certificados para evitar el bloqueo del servidor al iniciarse. Las dos opciones serán igual de seguras. La emisión de un certificado de seguridad tienen un único objetivo: proporcionar información única que prueba que la máquina encargada de cifrar la comunicación es la máquina a través de la cual nuestra máquina cliente quiere establecer una comunicación. es altamente recomendable el uso de un certificado firmado por una autoridad certificadora del tipo Verisign o Thawte.

Para convertir un fichero de clave con palabra de paso en uno sin palabra de paso. para cambiar el estado de la clave de CA generada anteriormente. newkey. añadir el dominio y solicitar la firma del certificado.pem #chmod 400 /etc/postfix/ssl/newkey.pem smtpd_tls_cert_file = /etc/postfix/ssl/newcert. podemos usar los certificados emitidos por asociaciones del tipo CACert.pem: el certificado privado que almacenaremos en el servidor y del cual la parte realmente importante es la clave. Por ejemplo.pem -text -out /etc/pki/CA/private/newkey.pem /etc/postfix/ssl/ #chown root /etc/postfix/ssl/newkey. tendremos que ejecutar openssl rsa sobre el fichero de clave original.pem /etc/postfix/ssl/ #cp newkey. Estos ficheros son los siguientes: • • • cacert. Será necesario realizar un alta en su página web.pem: el certificado de la autoridad certificadora.pem Para evitar los avisos en los clientes de correo originados por la entidad certificadora no reconocida y tener que recurrir al pago a una entidad reconocida comercialmente. Quedará guardado en /etc/pki/CA/cacert. teclaríamos en la consola lo siguiente: # openssl rsa -inform pem -in /etc/pki/CA/private/cakey. que contendrá estas lineas adicionales (que ya se publicaron en el capítulo correspondiente a la configuración de postfix): smtpd_use_tls = yes smtpd_tls_auth_only = yes smtpd_tls_key_file = /etc/postfix/ssl/newkey.pem: el certificado público que enviaremos al cliente para establecer la comunicación segura.cf.pem /etc/postfix/ssl/ #cp newcert. Instalaremos entonces su certificado raíz en cada máquina y tendremos certificados firmados por una entidad reconocida con coste es nulo. Modificaciones en Postfix Las modificaciones para cifrar el canal desde postfix se harán sobre el fichero /etc/postfix/main.org. al cual se remitirá al cliente cuando quiera comprobar la autenticidad del certificado que le ha enviado nuestro servidor Postfix. que debe permanecer secreta.pem Para finalizar la instalación ejecutaremos los siguientes comandos: #cp cacert. reiniciaremos el servidor postfix.pem smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem. newcert.Los ficheros resultantes serán copiados a /etc/postfix/ssl. Sistema de correo con Postfix. Para aplicar los cambios. Cyrus y MySQL 28 .pem smtpd_tls_loglevel = 1 smtpd_tls_received_header = yes smtpd_tls_session_cache_timeout = 3600s tls_random_source = dev:/dev/urandom Así. todas las comunicaciones y autenticaciones que se hagan a través de smtpd se realizarán mediante TLS.

Cyrus y MySQL 29 .pem /etc/ssl/certs/cyrus−global.1.key tls_ca_file: /etc/ssl/certs/cyrus-imapd-ca.key #chmod 600 /etc/ssl/certs/cyrus−global.key #chown cyrus:mail /etc/ssl/certs/cyrus−global.1).pem /etc/ssl/certs/cyrus−imapd−ca.net ESMTP Postfix (Fedora) EHLO localhost 250-mail.cf y la opción smtpd_tls_loglevel en un valor de.net 250-PIPELINING 250-SIZE 20480000 250-ETRN 250-STARTTLS 250 8BITMIME STARTTLS 220 Ready to start TLS QUIT QUIT Connection closed by foreign host. Connected to mail.Modificaciones en Cyrus-IMAP Para activar el cifrado de la comunicación en Cyrus-IMAP atenderemos primero a las dos lineas de configuración referentes al protocolo imap en el fichero /etc/cyrus.pem tls_key_file: /etc/ssl/certs/cyrus-global..pem #cp /etc/postfix/ssl/newkey. los comandos a introducir): # telnet localhost 25 Trying 127. Escape character is '^]'. podemos aumentar el nivel de loggin sobre el fichero /etc/postfix/main.0.server. 220 mail.0. Los distintos métodos de autenticación disponibles se ofrecen antes de comenzar el establecimiento del canal seguro.0. bajo la sección SERVICES: imap imaps cmd="imapd" listen="localhost:imap" prefork=5 cmd="imapd -s" listen="imaps" prefork=1 Donde observamos la ejecución del protocolo seguro de imap (imaps) y la ejecución del protocolo imap sin seguridad sólo bajo localhost (necesario para el uso de cyradm). que auditaremos sobre el fichero /var/log/maillog.conf: tls_cert_file: /etc/ssl/certs/cyrus-global. Sistema de correo con Postfix.key Para finalizar. ya que usaremos los mismos certificados que postfix: #cp /etc/postfix/ssl/newcert. observemos cómo el servidor smtp acepta comunicaciones cifradas al validarse (En azul. Para continuar.net (127. por ejemplo. Si alguna cosa no resultara correcta.pem /etc/ssl/certs/cyrus−global.. añadiremos las siguientes líneas a /etc/imapd.0. 3.conf.server.pem Y ejecutaremos los comandos siguientes.pem #cp /etc/postfix/ssl/cacert.server.

/config/conf. Fedora Core se distribuye con este componente separado del paquete de PEAR principal. Los paquetes a instalar son los siguientes: • • • • php-5. php-pear-DB-1./config/conf. Comprobando las librerías Tal y como ya explicamos en el Capítulo II. de no estar presentes. aunque habrá que tener en cuenta la instalación de ciertos paquetes bajo una distribución de Fedora Core que. El fichero . No es el objetivo de este manual ayudar a la configuración de ninguno de los dos servidores. obviamente. etc. llega a ser una necesidad poder usar un frontend que simplifique lo máximo posible las tareas básicas del administrador.php. A partir de su versión 5. administrar contraseñas.php La distribución por defecto de web-cyradm nos deja un fichero de configuración por defecto llamado .2-5 Paquete contenedor del generador de páginas php 5.. En nuestro caso. Dado que web-cyradm usa PEAR como capa de abstracción durante el acceso a las bases de datos. web-cyradm hará exactamente esto por nosotros desde un amigable interface escrito en php. web-cyradm necesita un intérprete/servidor de php corriendo en la parte administrativa y. php-pear-1. 'ADMIN' => 'cyrus'./config/conf. 'PASS' => 'secret' ). php-mysql-5.dist.1. Inmediatamente después. usaremos MySQL.6-4 (Sólo sobre Fedora Core 5) Clase oficial de abstracción de acceso a bases de datos de php. 'PORT' => 143.2-5 Librería de objetos que añaden soporte MySQL a php. un servidor de páginas web en el mismo sitio.php. como pudieran ser dar de alta o baja a nuevos usuarios.7. El siguiente apartado se refiere a la configuración de la base de datos.. que habrá de ser renombrado o copiado con el nombre de . La primera opción con la que nos encontramos es la opción del lenguaje a utilizar: $DEFAULTLANG = "es_ES". Sistema de correo con Postfix.Web-Cyradm Llegados a este punto.1. sería posible el uso de otros servidores de bases de datos como PostgreSQL. crear nuevos dominios virtuales. Cyrus y MySQL 30 . crear nuevos alias. no permitirían el correcto funcionamiento de web-cyradm. entraremos en la configuración de acceso al servidor Cyrus (las opciones son bastante explícitas y no necesitan de explicación adicional): #The Cyrus login stuff $CYRUS = array( 'HOST' => 'localhost'. teniendo en cuenta que postfix no ofrece soporte nativo para este servidor.IX .4.6-2 Colección de clases de autenticación sobre servidores web PEAR..

cyrus y mysql con una interface de administración web con web-cyradm. 'mail' Seguidamente igualaremos la opción $LOG_DIR a la ruta donde creamos el archivo de log durante la instalación del programa. A partir de este prefijo. el programa nos propone un valor de 1000. Encriptación de contraseñas web-cyradm soporta el almacenamiento de contraseñas encriptadas y desde aquí se recomienda encarecidamente su uso. test002. Nombres de usuarios web-cyradm nos propone dos modos de introducción de usuarios. tendremos que añadir o descomentar una línea en el fichero /etc/imapd. Si optamos por esta opción./config/conf. Sistema de correo con Postfix.. Recordemos que en los ficheros que creamos en el capítulo correspondiente a la configuración de PAM. test). El valor por defecto es 20000. Por defecto. Cyrus y MySQL 31 . usábamos la opción crypt=1.apellido.. 'unix'. La otra opción a nuestra disposición (valor 1) sería el uso de nombres de usuario del tipo nombre. 'mail'. Si preferimos crear manualmente los usuarios a través de MySQL. así como una opción para el usuario que permitirá el acceso al correo a través de la web. dar por válida la configuración por defecto. En este punto habremos terminado la configuración completa de un servidor de correo con postfix. habremos de tener muy en cuenta esta configuración y usar la función crypt() a la hora de introducir la contraseña correspondiente.dominio. los nombres de usuario se asignarán sobre la base de un prefijo predeterminado (por ejemplo.. web-cyradm irá asignando nombres de usuario por defecto siguiendo el patrón prefijo00 + 1 (en el ejemplo anterior. Por defecto (valor 0). Para establecer este nivel de encriptación. test001.conf tal que: unixhierarchysep: yes Hay que tener en cuenta que no se pueden mezclar ambos tipos de usuario. 'mysql'. que no tocaremos a no ser que fuera necesario. igualaremos el parámetro $CRYPT del fichero . En los capítulos posteriores comprobaremos el funcionamiento correcto de nuestra configuración y añadiremos a nuestro servidor la capacidad de filtrado de spam y virus. // set to "tcp" for TCP/IP 'localhost'. $DEFAULT_QUOTA establece la cuota a asignar por defecto a los buzones cuando creamos un nuevo dominio.php al valor "crypt". por lo que se recomienda pensar bien la configuración antes de empezar a añadir usuarios o. 'secret'.net.$DB = array( 'TYPE' => 'USER' => 'PASS' => 'PROTO' => 'HOST' => 'NAME' => ). dependiendo del valor que asignemos a la opción $DOMAIN_AS_PREFIX. en caso de duda. La opción $SESS_TIMEOUT establece el tiempo de inactividad necesario para considerar una sesión finalizada..). que se corresponde con la encriptación requerida. En nuestro caso "/var/log/web-cyradm/".

0.X .0:3306 0.. todos los componentes esenciales para el funcionamiento correcto de un servidor de correo están instalados.0.0.0:* LISTEN tcp 0 0 0.0:* LISTEN tcp 0 0 :::993 :::* LISTEN tcp 0 0 :::995 :::* LISTEN tcp 0 0 :::110 :::* LISTEN tcp 0 0 :::80 :::* LISTEN tcp 0 0 :::2000 :::* LISTEN tcp 0 0 :::443 :::* LISTEN Los puertos.0:995 0. Cyrus y MySQL .0:* LISTEN tcp 0 0 0.. [root@server ~]# service mysqld status Se está ejecutando mysqld (pid 1822).0.0.0. no está de más comprobar que la configuración de todos nuestros servidores funciona de forma adecuada.0. nos aseguraremos de que todos los servicios que nos interesan están a la escucha (del listado original.0. Comprobando servicios Llegados a este punto del manual.0:993 0.0:25 0..0.0. [root@server ~]# service cyrus-imapd status Se está ejecutando cyrus-master (pid 1946).0. sólo se muestran las líneas relativas a los servicios que nos interesan): [root@server ~]# netstat -an|grep LISTEN tcp 0 0 0. comprobaremos que cada uno de los servicios está corriendo. Mediante la herramienta telnet y un puñado de sencillos comandos..0:* LISTEN tcp 0 0 0..1:143 0. las instrucciones a introducir): [root@server ~]# service postfix status Se está ejecutando master (pid 2065). lo lanzaremos mediante la instrucción service <nombre del servicio> start. el comando service..0. en Fedora Core. [root@server ~]# service httpd status Se está ejecutando httpd (pid 25873 17834 17833 17832 15284 21796 21795 21794 21793 21792 21791 21790 21789 2124).0:* LISTEN tcp 0 0 0. suponiendo que no se han cambiado las asignaciones por defecto de los mismos.0.0. Para continuar.0:2000 0.0. A pesar de todo.0.0:* LISTEN tcp 0 0 0. quedan como sigue: 993 995 3306 imap-ssl pop3-ssl MySQL 32 Sistema de correo con Postfix. En el caso de que algún servicio estuviera caído..0. utilizaremos.0. con el cual ejecutaremos las instrucciones que siguen a continuación (en negrita. Para hacer esto. [root@server ~]# service saslauthd status Se está ejecutando saslauthd (pid 2217 2215 2214 2213 2212).0... comprobaremos el funcionamiento correcto de nuestro servidor de correo.0.0.0:* LISTEN tcp 0 0 127..Probando la configuración Antes de continuar con la instalación de componentes adicionales.0.0.0.0.0.0:110 0.0.0.

intetaremos la conexión al servicio de smtp e intentaremos mandar un e-mail (en negrita.mailserver. 220 mail.com 250 Ok RCPT TO: probe@mailserver. Haremos login mediante el uso de las credenciales que asignamos en el capítulo anterior. Escape character is '^]'.. 250 Ok: queued as D78BD469F7B QUIT 221 Bye Connection closed by foreign host.0.110 143 2000 25 80 443 pop3 imap sieve smtp http https Testeando Web-cyradm Conectaremos con el programa Web-cyradm mediante la cadena http://localhost/web-cyradm.<CR><LF> Mensaje de prueba para probar la configuración de postfix. El correo habrá quedado enviado al buzón probe. es bastante recomendable tener abierta una consola con la salida del fichero /var/log/maillog. Tambien habremos de definir el servidor introducido como local en el fichero /etc/postfix/main. Acto seguido.. introduciremos la ruta asignada. que nos ofrecerá información muy valiosa sobre todo el proceso de manipulación de correos.com MAIL FROM: probe@mailserver.mailserver. los comandos a introducir): [root@server ~]# telnet localhost 25 Trying 127. Comprobando el canal de cifrado TLS La primera acción a realizar es la comprobación de la existencia del canal cifrado en nuestro servidor de correo: Sistema de correo con Postfix. aunque podemos saltarnos el posible error validando el servidor en el fichero /etc/hosts.0. En caso contrario. Los dominios han de pertenecer a nuestro servidor.1). En caso de error. Testeando postfix Para comprobar funcionamiento de postfix.cf (mydestination = domain). Connected to mail.com (127.mailserver.1. si hemos mantenido la configuración por defecto. crearemos un nombre de dominio nuevo y alguna cuenta.com ESMTP Postfix (Fedora Core 5) helo localhost 250 mail. . Cyrus y MySQL 33 .com 250 Ok DATA 354 End data with <CR><LF>.0.0.

Escape character is '^]'. asegurándonos de marcar la opción correspondiente cuando se nos pregunte acerca de si queremos o no usar un canal cifrado SSL: Probando Cyrus-Imap Para finalizar. Ya que Cyrus se autentica primero a través de SASL y después a través de IMAP. La segunda contraseña.. será necesario.0. Acto seguido.com Cyrus IMAP4 v2.com (127. probaremos la autenticación mediante TLS a través de nuestro cliente de correo..com 250-PIPELINING 250-SIZE 20480000 250-ETRN 250-STARTTLS 250 8BITMIME STARTTLS 220 Ready to start TLS QUIT QUIT Connection closed by foreign host. una herramientamuy útil que nos devolverá información sobre el servidor de IMAP: [root@server ~]# imtest -m login -a <usuario> -s localhost -w <contraseña> verify error:num=20:unable to get local issuer certificate verify error:num=21:unable to verify the first certificate TLS connection established: TLSv1 with cipher AES256-SHA (256/256 bits) S: * OK mail.0. mediante la herramienta saslpasswd2: saslpasswd2 -c cyrus Password: Again (for verification): Ahora probaremos la autenticación bajo cyradm: [root@server ~]# cyradm --user cyrus --server localhost --auth plain Password: IMAP Password: localhost> La primera contraseña se refiere a la contraseña introducida en la tabla sasldb2.[root@server ~]# telnet localhost 25 Trying 127. utilizaremos imtest. tal y como se vio en el capítulo dedicado a Cyrus. haremos unas pruebas que nos aseguren el correcto funcionamiento del servidor de IMAP. Por último.6.0.com ESMTP Postfix (Fedora Core 5) EHLO localhost 250-mail.12.mailserver. acudiremos al fichero /var/log/maillog y estudiaremos la salida.fc5 server ready Sistema de correo con Postfix.3.mailserver. se refiere a la de la tabla de MySQL accountusers. antes de probar la configuración con las herramientas de Cyrus. Ante cualquier complicación o error inesperado.1).mailserver.mailserver.1.1-Invoca-RPM-2. Esto lo haremos. Connected to mail.0.3. Cyrus y MySQL 34 . 220 mail. asegurarse de que el usuario cyrus está cargado en la base de datos sasldb2.

Cyrus y MySQL 35 . Saldremos de imtest mediante la pulsación de las teclas Control y C.C: C01 CAPABILITY S: * CAPABILITY IMAP4 IMAP4rev1 ACL RIGHTS=kxte QUOTA LITERAL+ MAILBOX-REFERRALS NAMESPACE UIDPLUS ID NO_ATOMIC_RENAME UNSELECT CHILDREN MULTIAPPEND BINARY SORT THREAD=ORDEREDSUBJECT THREAD=REFERENCES ANNOTATEMORE CATENATE IDLE AUTH=PLAIN SASL-IR LISTEXT LIST-SUBSCRIBED X-NETSCAPE URLAUTH S: C01 OK Completed C: L01 LOGIN probe {9} S: + go ahead C: <omitted> S: L01 OK User logged in Authenticated. Sistema de correo con Postfix. Security strength factor: 256 C: Q01 LOGOUT Connection closed.

stop.ascii-numeric"."regex". El uso de Sieve Aunque la forma más sencilla de utilizar Sieve es mediante algún tipo de interfaz que nos facilite la tarea y componga el script por nosotros (de hecho.sieve > ls prueba.net" { fileinto "INBOX.sieve > activate prueba. La herramienta puede ser usada por cualquier usuario que pretenda filtrar o redirigir la entrega de correo. Es necesario para la activación de un script de Sieve que un comando sea ejecutado sobre el mismo servidor mediante la herramienta sieveshell. ejecutaremos man sieveshell en la consola del sistema.XI – Filtrado Tres son las herramientas fundamentales que habremos de configurar para obtener un filtrado de los correos de nuestro servidor. programa con el que filtraremos el correo no deseado y ClamAV. Cyrus y MySQL 36 . siendo imprescindible que el script haya sido escrito y guardado en un archivo simple de texto. no llegando a la decena el número de comandos a nuestra disposición.Proveedores". "imapflags". aunque sea de manera somera. "comparator-i. a la instalación y la configuración de una interfaz que nos permita una generación de estos filtros mucho más amena. SpamAssassin. en el siguiente capítulo atenderemos."reject". Para tener una idea más clara de cuáles y para qué sirven estos comandos. potente antivirus que evitará la entrega de correo infectado. Como ejemplo de uso.Spam". A continuación. al uso de este lenguaje para la composición de filtros. entre otras cosas. no está de más acercarnos. adjuntaremos un ejemplo del uso del lenguaje utilizado por Sieve en los scripts de filtrado. if header :contains "Subject" "[SPAM]" { fileinto "INBOX."vacation". Dicho ejemplo atiende a la cabecera de los mensajes para filtrar según el remitente o el asunto del mensaje: #Script de Sieve require ["fileinto". probaremos el filtrado con el envío de mensajes infectados y con cabeceras que simularán spam. lenguaje con el cual compondremos filtros en la entrega final del correo. vamos a atender a la activación de un script de ejemplo llamado prueba.sieve: $ sieveshell -user info -authname usuario001 localhost connecting to localhost Please enter your password: > put prueba."notify"].).sieve <− active script > quit El uso de la consola de sieveshell es muy sencillo. Sieve. } elseif Sistema de correo con Postfix."relational". Al final de este extenso capítulo. } if header :contains "From" "proveedores.

habremos de proporcionar a SpamAssassin un elevado número de mensajes. como hemos dicho anteriormente. obteniendo una eficiencia similar a la de la ejecución de spamd. como la lectura de directorios por lotes. Para tener un elevado número de aciertos con el filtrado de spam. que llamará al programa mediante el módulo de Perl Mail::SpamAssassin. Este tipo de filtrado requiere un entrenamiento para que sea eficaz en un alto porcentaje de los casos. En nuestro caso. Cyrus y MySQL 37 . el riesgo de tener corriendo un servidor en un puerto siempre está sujeto a posibles vulnerabilidades por errores en el código. Sin embargo. ya que las comunicaciones se establecen a través del puerto 783 y evitan el tener que cargar un ejecutable cada vez que se hagan las comprobaciones referentes al spam.header :contains "From" "proveedor01" { fileinto "INBOX. El principal inconveniente es relativo a la seguridad: aunque bajo. cargaremos SpamAssassin a través de Amavisd-new. tanto de spam como de ham (no-spam). No obstante. que hará de interfaz entre los programas y el servidor. En un sistema con una distribución de Fedora Core. Con esto conseguiremos que el motor con las reglas siempre quede cargado en memoria. por lo que evitaremos la misma mediante el siguiente comando: #chkconfig --del spamassassin La principal ventaja de spamd es su eficiencia. Es necesario leerse las páginas del manual para ejecutar otras opciones. Básicamente. Para ello. tendremos que asegurarnos de que el demonio clamd. Ejecutaremos los comandos siguientes para conseguir nuestros propósitos: Sistema de correo con Postfix. esto no es más que una recomendación. la simple instalación del paquete RPM correspondiente a SpamAssassin dejará este programa completamente instalado y configurado para su uso. En un sistema con Fedora Core y para nuestros propósitos. ClamAV Al igual que nos ocurría con SpamAssassin. la ejecución de sa-learn preferiblemente tendrá que ser a través del usuario amavis.Proveedor01". quedando a gusto del usuario su aplicación. ejecutaremos salearn --spam <directorio> para la recolección de mensajes que sabemos a ciencia cierta son spam. hay que aclarar un punto que puede ser modificado a gusto del usuario y que optimizará el funcionamiento del programa: No es necesaria la ejecución del servidor spamd sobre nuestro sistema. la configuración por defecto de ClamAV es más que suficiente para el filtrado de virus sobre el servidor.amavisd se ejecuta correctamente al inicio del sistema. Con sa-learn --ham <directorio> haremos todo lo contrario: instruiremos al programa en la recolección de correo que no es spam. utilizaremos los llamados filtros bayesianos. } #Fin del script SpamAssassin Tanto SpamAssassin como ClamAV serán utilizados desde Postfix y a través de Amavisd-new. Como SpamAssassin será llamado por Amavisd-new. y esto lo conseguiremos mediante el uso de la herramienta sa-learn (ejecutaremos man sa-learn para documentarnos adecuadamente acerca de este programa).

dominio. La idea para el procesamiento de los correos es la siguiente: Un correo se marca como spam o como contenedor no deseado (virus.(exe|vbs|pif|scr|bat|cmd| com|cpl|dll)\.0. Veamos ahora las líneas del fichero /etc/amavisd/amavisd. archivos exe.conf y tiene alrededor de quinientas líneas.sock (Can't connect to UNIX socket /var/spool/amavisd/clamd.amavisd on #service clamd. Amavisd-new El fichero de configuración de Amavisd-new se encuentra en la ruta /etc/amavisd/amavisd. En caso de encontrarnos con falsos positivos. #Descomentar si se quieren enviar avisos al remitente #$warnbannedsender = 1. #Adjuntamos una cabecera al spam $sa_spam_subject_tag = '[SPAM] '. $forward_method = 'smtp:[127. $MIN_EXPANSION_QUOTA = 100*1024. $myhostname = 'mail. $final_virus_destiny = D_DISCARD.1]:10025'.1]:10025'.conf. #$warnbadhsender = 1.[^. a través de un filtro con Sieve. aunque no es recomendable.0. Cyrus y MySQL 38 . instruiremos a SpamAssassin mediante la opción forget de sa-learn. lo haremos desde el fichero /etc/freshclam. etc. #Rechazamos ficheros adjuntos de los tipos siguientes $banned_filename_re = new_RE( qr'\. #Sólo en caso de necesidad $notify_method = 'smtp:[127. $MAX_EXPANSION_QUOTA = 300*1024*1024. $MAXLEVELS = 14.net'. $MAXFILES = 1500./]*[A-Za-z][^. $final_banned_destiny = D_DISCARD.0. La configuración por defecto puede verse en /etc/cron.net'./]*\.?$'i.0. Para nuestros propósitos solamente será necesario cambiar una decena de ellas.sock El demonio freshclam-sleep. el usuario revisará el contenedor en busca de falsos positivos y borrará el resto.amavisd start De esta forma evitaremos el siguiente error registrado en /var/log/maillog: ClamAV-clamd av-scanner FAILED: Too many retries to talk to /var/spool/amavisd/clamd.#chkconfig clamd. lugar donde.conf que hemos cambiado para adaptarlo a los propósitos de este manual: $mydomain = 'dominio. $final_bad_header_destiny = D_PASS. incluido con el paquete clamav-update será el encargado de actualizar el antivirus mediante cron. #$virus_quarantine_to = "virus−quarantine\@$mydomain".d/clamav-update.) y se deja llegar a su destino. Sistema de correo con Postfix. $final_spam_destiny = D_PASS. Si necesitamos realizar modificaciones a la configuración de freshclam. #Se activa el reenvio a un directorio de los mensajes #infectados. será redirigido hacia un contenedor que alojará todos estos correos. #El siguiente directorio tiene que pertenecer #al usuario amavis $QUARANTINEDIR = "/var/virusmails". Periódicamente.

0/8 -o strict_rfc821_envelopes=yes Sistema de correo con Postfix.. los cambios más importantes a realizar son los siguientes: o final_spam_destiny. banned_filename_re: Se rechazan los correos que contengan ficheros adjuntos con las extensiones mostradas..1:10025 inet n . siendo lo anterior un mero ejemplo que adapta unas necesidades concretas. Cyrus y MySQL 39 .n . final_banned_destiny.0. warnbadhsender: Se activa el envío de un mensaje de aviso al remitente si éste ha sido baneado o las cabeceras de su mensaje están mal formadas.(mim|b64|bhx|hqx|xxe|uu|uue)$'i. virus. Modificaciones en Postfix En primer lugar.0. spam_quarantine_to bad_header_quarantine_to: Se activa la cuarentena de los tipos detectados y se mandan al directorio especificado. ). En principio. banned_quarantine_to. qr'^\.0. final_bad_header_destiny: Mediante D_DISCARD o D_PASS permitiremos que un correo detectado se descarte o siga su curso. qr'^application/x−msdos−program$'i. añadiremos las líneas siguientes al fichero /etc/postfix/master.2 smtp -o smtp_data_done_timeout=1200 -o disable_dns_lookup=yes 127. qr'.d/amavisd restart y será bastante recomendable observar su carga en el fichero /var/log/maillog. y sea enviado al directorio de cuarentena especificado. sa_spam_subject_tag: Se añade un texto a la cabecera para su posterior filtrado mediante Sieve. el fichero final dependerá de las necesidades de cada administrador. Obviamente.\. o o o o Cuando hagamos algún cambio al fichero de Amavisd-new. qr'^message/partial$'i. final_virus_destiny.n . qr'^message/external−body$'i. Los mensajes descartados se guardarán con las etiquetas spam. banned o badh más un código de control.reject -o mynetworks=127. virus_quarantine_to. habremos de reiniciar el servicio con /etc/init. qr'^application/x−msdownload$'i. donde veremos los módulos cargados y los posibles errores.exe$'i.(ade|adp|bas|bat|chm|cmd|com|cpl|crt| exe|hlp|hta|inf|ins|isp|js| jse|lnk|mdb|mde|msc|msi|msp|mst|pcd|pif|reg| scr|sct|shs|shb|vb| vbe|vbs|wsc|wsf|wsh)$'ix.smtpd -o content_filter= -o local_recipient_maps= -o relay_recipient_maps= -o smtpd_restriction_classes= -o smtpd_client_restrictions= -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks.\. warnbannedsender. respectivamente. qr'.cf: # Amavisd-New filtrado smtp-amavis unix .0.qr'[{}]'.

reject_non_fqdn_sender. permit smtpd_data_restrictions = reject_unauth_pipelining. reject_unknown_sender_domain.d/postfix restart. Cyrus y MySQL 40 .org. check_helo_access hash:/etc/postfix/helo_checks. Sistema de correo con Postfix. reiniciaremos Postfix con /etc/init. Una vez hechas las modificaciones. Expliquemos con algo de detalle qué se pretende con las líneas adjuntadas. reject_non_fqdn_hostname. reject_unauth_destination. permit_sasl_authenticated.ordb. Para llevar a cabo nuestros propósitos.-o smtpd_error_sleep_time=0 -o smtpd_soft_error_limit=1001 -o smtpd_hard_error_limit=1000 Y al fichero /etc/postfix/main. Intentaremos denegar el uso del servidor a todo aquello que creamos que no ha sido solicitado.cf: smtpd_helo_required = yes disable_vrfy_command = yes smtpd_recipient_restrictions = reject_invalid_hostname. reject_non_fqdn_recipient.pcre. check_recipient_access pcre:/etc/postfix/recipient_checks. las restricciones aquí mencionadas deberán ser ajustadas a las necesidades de cada servidor de correo.pcre. permit Tal y como hicimos anteriormente con SpamAssassin. donde hemos habilitado smtpd.cf le añadiremos la siguiente línea: #Amavisd-New content_filter = smtp-amavis:[localhost]:10024 Con estas modificaciones haremos que Postfix redirija el tráfico hacia el puerto de loopback de Amavisd-new. permit_mynetworks. Se deshabilita la verificación de las direcciones de correo. check_client_access hash:/etc/postfix/client_checks. habremos de añadir varias líneas al fichero /etc/postfix/main. que procesará el mensaje y lo redigirá hacia el puerto 10025. Filtrado de correo sobre Postfix (anti-UCE) Vamos a habilitar una serie de mecanismos sobre el servidor Postfix que nos permitirán filtrar usos abusivos o malintencionados del mismo. check_client_access pcre:/etc/postfix/client_checks. #reject_rbl_client relays. teniendo en cuenta que el orden de las instrucciones es siempre relevante: • La primera y segunda sentencias aseguran que el proceso de HELO/EHLO y el envoltorio del mensaje son correctos. check_sender_access hash:/etc/postfix/sender_checks. reject_unknown_recipient_domain.

Veamos un ejemplo: # A compilar con postmap . Un ejemplo válido sería el siguiente: # A compilar con postmap .pcre contendrá parámetros para revisar la sintaxis de las direcciones a filtrar.• • • • • • Seguidamente se deshabilitará la concatenación de comandos (reject_unauth_pipelining) para evitar ataques de diccionario por parte de spammers. con el comando postmap <fichero>. sin importar el destino. serán compilados. Permitimos a continuación a los clientes autenticados mediante SASL.. Con check_recipient_access comprobaremos ciertas direcciones de destinatarios antes de aplicar las listas negras locales. spammers. rechazando a los que no se hayan autenticado. Es necesario tener activado el soporte PCRE (Perl Compatible Regular Expressions) en Postfix para su correcto funcionemiento (por defecto en los sistemas con Fedora Core): # Soporte PCRE requerido en Postfix /^\@/ 550 Invalid address format.com OK 172. El fichero /etc/postfix/recipient_checks.com 554 Spam not tolerated here 10 554 Go away! myfriendsdomain.liberaliatempus. que creará la base de datos Berkeley DB correspondiente.com REJECT El fichero /etc/postfix/client_checks contiene clientes no deseados. Cyrus y MySQL 41 .com OK morespammers...com REJECT You are not mail.*\@/ 550 This server disallows weird address syntax. Comprobaremos entonces las listas negras locales. /[!%\@].com localhost REJECT You are not me :C Este y todos los ficheros de tipo hash.com :C webmail. será el siguiente: #Comprobaciones de HELO/EHLO liberaliatempus. En /etc/postfix/sender_checks se incluyen los remitentes a rechazar. Con reject_rbl_client se especifican servidores de listas negras que añadiremos a nuestro gusto (como el especificado ordb. Con permit_mynetworks se acepta cualquier cosa que haya pasado las restricciones de más arriba.com REJECT You are not in dominio. /^postmaster\@/ OK /^hostmaster\@/ OK /^abuse\@/ OK El contenido de /etc/postfix/helo_checks.com 554 Spam not tolerated here someuser@morespammers. spammers.. remitente (origen en el envoltorio) y cliente (servidor que envía)).16 OK Sistema de correo con Postfix. una vez escritos.org). cuyo cometido es comprobar que el comando HELO/EHLO no utilice ni nuestro dominio ni localhost al conectarse.dominio. las listas blancas locales y las listas negras y blancas combinadas (comnprobación de HELO/EHLO.

domain. Comprobaciones finales Para comprobar el correcto funcionamiento de nuestros filtros de contenido. We don't want any! Como hemos hecho hasta ahora. si hemos dejado en la configuración de Amavisd-new la línea $final_spam_destiny = D_PASS.1-Invoca-RPM-2.34X You should send this test mail from an account outside of your network. 26 Jun 2005 15:05:10 +0200 (CEST) X-Quarantine-ID: <dfa8PpZIr6jP> X-Virus-Scanned: amavisd-new at domain.domain.net (Cyrus v2.domain.es Received: from murder ([unix socket]) by pegasus. un mensaje que contendrá lo siguiente en el cuerpo del mismo (el asunto es de libre elección y el destinatario.0.net (Postfix) with ESMTP id 5656C469F7B for user001@mail.pcre : # Soporte PCRE requerido en Postfix /10\.net. se recibirá con el siguiente contenido en su cabecera (variando según los servidores y el gestor de correo utilizado): Return-Path: probe_mail@yahoo.3. the GTUBE provides a test by which you can verify that the filter is installed correctly and is detecting incoming spam. 26 Jun 2005 15:05:10 +0200 X-Sieve: CMU Sieve 2.6. Sun.3 Received: from localhost (pegasus.\d+/ 554 Go away.7/ OK /10\. Para empezar.1-2. mandaremos dos mensajes de correo: uno con spam y otro con el virus de muestra EICAR.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.9\.d/postfix restart. You can send yourself a test mail containing the following string of characters (in upper case and with no white spaces and line breaks): XJS*C4JDBQADN1. preferiblemente desde una cuenta ajena a nuestro dominio.3.net X-Spam-Flag: YES X-Spam-Score: 1005.8\.0.278 Sistema de correo con Postfix.1]) by mail.fc5) with LMTPA.domain. Cyrus y MySQL 42 . the Generic Test for Unsolicited Bulk Email If your spam filter supports it.Lo mismo para /etc/postfix/client_checks.([89]|10)\.net [127.9\. Sun. reiniciaremos Postfix para aplicar cualquier cambio con /etc/init. una cuenta del dominio): This is the GTUBE. mandaremos. El correo.

domain.es -> user001@ail.34]) by mail. quarantine: virus-ijhiU5Tsb3nO.es To: user001@domain.278 tagged_above=2 required=6.re2. será /var/virusmails.domain.31 para ser considerado spam). Para el correcto funcionamiento de esta prueba. Atendamos al fichero /var/log/maillog para observar qué ha pasado cuando Amavisd-new ha terminado de procesar un mensaje con un virus en su interior: Apr 30 18:28:15 pegasus amavis[12544]: (12544-05) local delivery: <> > <virus-quarantine>. en nuestro caso.134.net.plus.53. Como hemos configurado Amavisd-new con $final_virus_destiny = D_DISCARD.yahoo.yahoo.1]:10025): 250 Ok: queued as 9A958469FB3 Apr 30 18:28:15 pegasus amavis[12544]: (12544-05) Blocked INFECTED (Eicar-Test-Signature).941. se le ha dado un valor de 1005.0. 26 Jun 2005 15:05:07 +0200 (CEST) Received: from smtp109. BAYES_50=0. Sun. Message-ID: Sistema de correo con Postfix.2900.net.HTML_50_60=0.1]) (amavisd-new.0.190.0 Ok. nrcpt=1 (queue active) Apr 30 18:28:15 pegasus amavis[12544]: (12544-05) SEND via SMTP: virusalert@domain.re2.122] probe_mail@yahoo.net.txt y adjuntaremos en un correo nuevo que se enviará a una cuenta de nuestro dominio.. Continuaremos con el envío de un archivo adjunto que contendrá la cadena de comprobación EICAR. [88.net [127.domain.net -> virusalert@domain. con el nombre virus-<cadenaID>. size=3227. Sun.plus.. donde se puede comprobar cómo se ha modificado el asunto del mensaje.net. que. HTML_MESSAGE=0.6. quedará guardado en la ruta del parámetro $QUARANTINEDIR.2869 X-MimeOLE: Produced By Microsoft MimeOLE V6.0.mail. una simulación de virus que probará la correcta configuración de ClamAV.X-Spam-Level: ************************************************************* X-Spam-Status: Yes.2869 Observemos las líneas marcadas en azul. 250 2.2900. 26 Jun 2005 13:05:04 0000 From: "Probe" probe_mail@yahoo. port 10024) with ESMTP id dfa8PpZIr6jP for user001@mail.0.00.1]) by localhost (pegasus.mail.31 tests=[AWL=4.278 al análisis (contra un valor requerido de 6.net ([127.com (smtp109.0.net. crearemos un archivo de texto plano con esta única línea en su interior: X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H* Que guardaremos con el nombre probe_av.net (Postfix) with SMTP id 8D0BD478F59 for user001@domain. 26 Jun 2005 15:05:06 +0200 (CEST) Received: (qmail 92799 invoked from network). el mensaje nunca llegará a su destino.9.001. X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6. GTUBE=1000. tiene un nivel de spam bastante largo (****) y se ha adjuntado la cabecera X-Spam-Flag: YES para orientar al gestor de correo sobre su naturaleza. mbx=/var/virusmails/virus-ijhiU5Tsb3nO Apr 30 18:28:15 pegasus postfix/qmgr[2070]: 9A958469FB3: from= virusalert@domain. En vez de eso.00. from MTA([127.com [206. DNS_FROM_RFC_ABUSE=0.246.domain. id=12544-05.net Subject: [SPAM] Prueba de spam . Cyrus y MySQL 43 .domain. score=1005.2.001] Received: from mail.0.

el front-end avelsieve.7. Cyrus y MySQL 44 .domain. Sistema de correo con Postfix. relay=localhost[127.1 Ok. discarded.net. orig_to= user@domain.0.1].<001001c66c73$470b9ca0$6400a8c0@home001>.domain.VIRUS: Eicar-Test-Signature) Apr 30 18:28:15 pegasus postfix/qmgr[2070]: 63BCA469FA9: removed Y observemos alguna /var/virusmails: de las cabeceras de ese mismo mensaje guardado en Return-Path: <> Delivered-To: virus-quarantine X-Envelope-From: probe_mail@yahoo.es X-Envelope-To: user001@mail. message contains virus: Eicar-Test-Signature Como la prueba del funcionamiento de Sieve es bastante personal y depende de los contenedores creados para cada usuario. dejaremos que cada administrador haga las pruebas pertinentes o esperaremos al siguiente capítulo. delay=3.0.1] Apr 30 18:28:15 pegasus postfix/smtp[14137]: 63BCA469FA9: to= user001@mail. entre otras cosas. 2351 ms Apr 30 18:28:15 pegasus postfix/smtpd[14141]: disconnect from pegasus.net. donde configuraremos Squirrelmail y.net X-Quarantine-ID: <ijhiU5Tsb3nO> X-Amavis-Alert: INFECTED.domain.0.net[127. mail_id: ijhiU5Tsb3nO.0. status=sent (250 2. Hits: -. id=12544-05 .

A través de este potente programa de webmail y además de poder acceder a todas las posibilidades del servidor de correo.XII – Squirrelmail Con el servidor de correo ya funcionando. Organization Preferences 2. Todo ello bajo un entorno seguro con cifrado de la conexión. vamos a repasar los puntos del menú que requieren alguna explicación. tenemos a nuestra disposición un script escrito en Perl que nos facilitará enormemente la tarea. Y es ahí donde nos dirigiremos para comenzar con la configuración del programa. Address Books 7.pl Lo cual nos devolverá una interfaz de texto bastante intuitiva que se parecerá bastante a lo siguiente: SquirrelMail Configuration : Read: config. el usuario podrá construir filtros de Sieve de forma casi automática. Se acompañará con la pantala de configuración por defecto para el funcionamiento del servidor de correo instalado a partir de las indicaciones de este manual. atenderemos a la parte del frontend del usuario. Configuración de Squirrelmail La instalación por defecto del paquete de Squirrelmail queda bajo la ruta /usr/share/squirrelmail.4.0) --------------------------------------------------------Main Menu -1. Server Settings 3. Ejecutaremos dicho script tecleando lo siguiente en nuestra consola: # /usr/share/squirrelmail/config/conf. Plugins 9. Themes 6. Message of the Day (MOTD) 8. Cyrus y MySQL 45 . Database 10. General Options 5. preparar mensajes de auto respuesta y muchas otras cosas de utilidad. Aunque podríamos modificar el fichero de configuración a mano. La primera opción del menú principal se refiere a los datos de nuestra compañía y generelmente sirve para rellenar los datos de la página de bienvenida: Sistema de correo con Postfix. la instalación de un programa como Squirrelmail que nos permita realizar las tareas más comunes se hace casi imprescindible. C S Q Set pre-defined settings for specific IMAP servers Turn color off Save data Quit Command >> A continuación.php (1. Languages D. Ya sea porque no queremos usar un gestor de correo o bien porque necesitamos acceder al correo vía web. gestionar su contraseña. Folder Defaults 4.

Drafts 6.com/LT. Sent Folder : INBOX. Show Special Folders Color : true 11.0) --------------------------------------------------------Server Settings General ------1.php (1. Sendmail or SMTP A. Organization Name : servermail. Trash Folder : INBOX. save as draft : true 9.com 8.Sent 5. move to sent : true 8. By default.servermail.com R C S Q Return to Main Menu Turn color off Save data Quit Command >> El segundo punto se refiere a la configuración del servidor de correo: SquirrelMail Configuration : Read: config.0) --------------------------------------------------------Organization Preferences 1. Show 'Contain Sub. Invert Time 3.servermail.4. El autor recomienda dejar la configuración como sigue: SquirrelMail Configuration : Read: config. Default Sub. Default Folder Prefix : 2.0) --------------------------------------------------------Folder Defaults 1. Show Folder Prefix Option : false 3. Signout Page : 6. Provider link : http://www. Auto Expunge : true 12. Logo Width/Height : (135/94) 4. By default. Top Frame : _top 7.SquirrelMail Configuration : Read: config.gif 3.com 2.com : false : SMTP : localhost:993 (cyrus) : localhost:25 Command >> El punto 3 se refiere a la configuración de las carpetas de correo. By default.com $version 5. Domain 2. R C S Q Update IMAP Settings Update SMTP Settings Return to Main Menu Turn color off Save data Quit : servermail. move to trash : true 7.4.php (1. List Special Folders First : true 10. Drafts Folder : INBOX. B.php (1.' Option : false Sistema de correo con Postfix. Provider name : servermail. of INBOX : true 13.4. Organization Logo : http://www.Trash 4. Organization Title : Webmail de servermail. Org. Cyrus y MySQL 46 .

Cyrus y MySQL 47 . Cualquier plugin para Squirrelmail se instalará bajo la rama /usr/share/squirrelmail/plugins/<nombre_del_plugin>.14. R C S Q Default Unseen Notify Default Unseen Type Auto Create Special Folders Folder Delete Bypasses Trash Enable /NoSelect folder fix Return to Main Menu Turn color off Save data Quit : : : : : 2 1 true false false Command >> El punto 8 nos va a servir para la instalación/desinstalación de los plugins que añadirán distintas funcionalidades a Squirrelmail. grabaremos los datos mediante la opción S y saldremos a la consola con la opción Q. 16. Para terminar con la configuración. en su caso. lo cual realizará una conexión al servidor de correo y dará una información de estado del programa. 18. Tecleando el número correspondiente al plugin. los adaptaremos a nuestras necesidades concretas (por ejemplo. 15. según sea su estado. lo instalaremos o desinstalaremos. probaremos que Squirrelmail esté configurado de forma adecuada (el paquete por defecto deja instalada la extensión para apache. lo cual nos dejará una pantalla similar a esta: Podemos terminar de probar la configuración de Squirrelmail mediante el añadido de /webmail/src/configtest. Sistema de correo con Postfix. teclearemos la dirección del servidor en el navegador seguida de /webmail. 17. así que. Suponiendo lanzado el servidor de apache. Para ello. no tenemos que modificar ningún fichero del servidor de web para lanzar Squirrelmail).php a la dirección del servidor. El resto de puntos se dejarán con su valor por defecto o. el punto 10 se adaptará a nuestras preferencias de idioma). de momento.

Si pulsamos sobre esta opción. Cyrus y MySQL 48 . veremos como una nueva opción llamada Filtros se ha añadido al menú superior de nuestro gestor de mail. Hecho esto.tar. ejecutaremos Squirrelmail desde nuestro navegador y.gz El programa creará un directorio llamado avelsieve con todos los ficheros necesarios para su ejecución.php.sample al fichero . borrar la extensión .9. Sistema de correo con Postfix.sample../avelsieve/config/config. posteriormente.Instalación y configuración de avelsieve Para instalar el plugin. tendremos una pantalla parecida a esta: Pulsando sobre el botón "Añadir una nueva regla" entraremos al menú de edición de reglas. tras validarnos como un usuario de correo.6. Tendremos que cargar el plugin en Squirrelmail desde la opción correspondiente del programa de configuración y. nos situaremos a la altura de /usr/share/squirrelmail/plugins y descomprimiremos el archivo tar: # tar xvzf avelsieve-1.

Esto aplicará el parche y ya podremos crear nuestro archivo config. Instalación y configuración de change_sqlpass Con change_sqlpass permitiremos que un usuario de nuestro sistema de correo gestione su propia contraseña. pulsaremos sobre el botón Añadir una nueva regla y la regla quedará añadida y habilitada. $csp_debug.6.tar Para el correcto funcionamiento de este plugin.6.4.php en el directorio /usr/share/squirrelmail/plugins/change_sqlpass. Podemos añadir tantos campos como sea necesario. Sistema de correo con Postfix. Esto es muy útil si no queremos tener que estar accediendo a web-cyradm constantemente o deseamos que el usuario cree su propia contraseña para cumplir con determinados requisitos legales. $password_update_queries. $csp_secure_port. $lookup_password_query.php quedaría como sigue: <?php global $csp_dsn. La instalación de este plugin empezará con la extracción del correspondiente archivo tar sobre /usr/share/squirrelmail/plugins de la misma forma que hicimos con change_sqlpass. $min_password_length. como puede observarse en la imagen. en este caso la 1. Cyrus y MySQL 49 . es muy intuitivo. por lo que descomprimiremos el archivo tar a la altura de /usr/share/squirrelmail/plugins: # tar xvzf change_sqlpass-3. $include_digit_in_password.diff Suponiendo que estamos situados en el directorio plugins de Squirrelmail. La instalación del plugin es similar al anterior.El menú. $csp_delimiter. es necesaria la descarga y aplicación del parche compatibility. Por último. Para una configuración similar a la seguida por este manual. que asegurará la compatibilidad de change_sqlpass con nuestra versión de Squirrelmail. Seguidamente. El archivo diff a cargar debe de corresponderse con nuestra versión de Squirrelmail. aplicaremos el parche de la forma siguiente: # patch -p0 < compatibility/patches/compatibility_patch-1.3-1. En el apartado Condición introduciremos los campos sobre los que aplicaremos las distintas condiciones. el archivo config. etc. Una vez terminada la definición de la regla. con Acciones adicionales. tendremos la opción de seguir comprobando reglas sobre el mismo mensaje. $max_password_length. $csp_salt_static. El campo Acción ejecutará la acción correspondiente si las reglas se cumplen.2. $csp_non_standard_http_port. $password_encryption. $force_change_password_check_query. almacenarlo. $csp_salt_query.4.

$password_update_queries = array( 'UPDATE accountuser SET password = %4 WHERE username = "%2"'. pero es recomendable visitar la página oficial del proyecto (http://www. $min_password_length = 6. "$". Con esta acción. $include_nonalphanumeric_in_password = 0. Con la puesta en funcionamiento de Squirrelmail. $password_encryption = 'MYSQLENCRYPT'.squirrelmail. ). Tras introducir la contraseña anterior y la nueva. $csp_secure_port = 443. $csp_dsn = 'mysql://useradmin:password@localhost/mail'. Cyrus y MySQL 50 . $csp_salt_query = 'SELECT SUBSTRING_INDEX(password. tendremos. $csp_salt_static = ''. como explicamos al principio de este capítulo. nuestro sistema de correo queda configurado por completo y ofrece funcionalidad a los usuarios para poder acceder vía web.php. el cambio de clave quedará realizado sobre la base de datos.sample. $csp_debug = 0. una vez en el interior de Squirrelmail y bajo el menú Opciones. $include_lowercase_letter_in_password = 0. En él encontraremos casi cualquier cosa que permitirá adaptar el programa a nuestras necesidades.$include_uppercase_letter_in_password. $include_lowercase_letter_in_password. $max_password_length = 0. $include_nonalphanumeric_in_password. la verdadera potencia de Squirrelmail reside en la capacidad de adoptar plugins de terceros que añadirán casi cualquier tipo de funcionalidad a nuestro gestor webmail. $force_change_password_check_query = ''. añadiremos el plugin en el menú de configuración de Squirrelmail.org/) y rebuscar por el directorio de plugins a nuestra disposión. $csp_non_standard_http_port = 0. $include_uppercase_letter_in_password = 0. Una vez creado y guardado el archivo. 1) FROM accountuser WHERE username = "%2"'. deberíamos abrir y leer las indicaciones que se dan en el fichero de ejemplo config. veremos cómo añadir una nueva funcionalidad a nuestro sistema de correo: aprenderemos a crear un sistema de listas para dar soporte a los usuarios o crear plataformas de información que repartirán correo y comentarios a todo aquel que esté registrado y se una a dicha lista. por si nuestra configuración difiere de la aquí mostrada. $csp_delimiter = '@'. Aquí hemos explicado la instalación de dos de ellos. $lookup_password_query = 'SELECT count(*) FROM accountuser WHERE username = "%2" AND password = %4'. Conclusión Como hemos visto. en el último capítulo de este manual. un link llamado Cambiar Contraseña. Sin embargo. $include_digit_in_password = 0. Sistema de correo con Postfix. ?> Para una mejor comprensión de todos los parámetros.

Cyrus y MySQL 51 . usaremos un fichero de alias propio de Mailman. pudiendose generar en otros sistemas sobre /usr/lib/mailman/data/ u otras rutas). tendremos que indicar a Mailman que el MTA por defecto es Postfix y lo haremos añadiendo la línea siguiente al final del fichero de configuración /etc/mailman/mm_cfg. por cuestiones de agilidad.com' Postfix nos deja el parámetros alias_maps apuntando a /etc/aliases. de anuncios. el primer paso antes de usarlo. Si no es así. Por supuesto.db (en distribuciones de Fedora Core 5. Así.liberaliatempus.com' DEFAULT_EMAIL_HOST = 'liberaliatempus.cf: alias_maps = hash:/etc/aliases hash:/etc/mailman/aliases Además. tener que estar ejecutando el comando newaliases de Postfix cada vez que lo retoquemos. nos aseguraremos de que en el fichero /etc/aliases existe un alias para el usuario root que apunte a un usuario real de correo. para ajustar los envíos a las listas de forma correcta: DEFAULT_URL_HOST = 'www. de distribución.XIII . el mantenimiento de los mismos se hace relativamente sencillo y automatizado a la vez que se ofrecen opciones de privacidad ajustadas a cada necesidad. sería conveniente añadir las líneas siguientes a dicho fichero. Configuración inicial En primer lugar. que. lo añadiremos de la forma siguiente: # echo -e root:usuario >> /etc/aliases Una vez hecho esto. En las líneas que siguen. a los cuales tendremos que hacer refrencia en el fichero de configuración de Postfix /etc/postfix/main. será generarlo: [root@server ~]# cd /usr/lib/mailman [root@server mailman]# bin/genaliases Esto generará los ficheros /etc/mailman/aliases y /etc/mailman/aliases. etc.py: MTA = 'Postfix' Tampoco es mala idea retocar un par de parámetros de este mismo fichero. Dicho fichero será automáticamente actualizado mediante los comandos newlist y rmlist.Mailman Con el programa Mailman crearemos y administraremos listas de correo electrónico de casi cualquier tipo: de discusión general. Mailman está orientado a mantener las listas atendiendo a los suscriptores. aprenderemos a integrar Mailman en nuestro sistema de correo con Postfix. de soporte técnico. aunque no imprescindibles. Como vamos a tener que añadir lineas a este fichero y no nos interesa. a la larga ayudarán a la gestión de Mailman: mailman_destination_recipient_limit = 1 unknown_local_recipient_reject_code = 550 owner_request_special = no Sistema de correo con Postfix.

d/mailman start Iniciando mailman: [ OK ] Si todo ha ido bien.d/postfix reload Recargando postfix: [ OK ] El siguiente paso necesario para arrancar de forma correcta Mailman.d/mailman. la salida del comando nos mostraría un listado con los alias necesarios a añadir en el fichero /etc/aliases. que crearemos de la forma siguiente (seguimos sobre el directorio /usr/lib/mailman): [root@server mailman]# bin/newlist mailman Indique la dirección de correo de la persona que gestionará la lista: user@server. Si algo no ha salido bien.recipient_delimiter = + Realizados los cambios. Cyrus y MySQL 52 . Ésta ha de ser necesariamente una lista llamada mailman.conf. recibiremos en el e-mail introducido cuando ejecutamos el comando newlist.com Clave inicial de mailman: Presione el retorno de carro para notificar al propietario de la lista mailman. configuraremos el servicio de Mailman para su ejecución desde el inicio del sistema: [root@server ~]# chkconfig mailman on Configurar Apache En los sistemas con Fedora Core. a los cuales podemos echar un vistazo para observar las líneas que se han añadido. todos esos alias quedan registrados en los ficheros indicados. recargaremos la configuración de Postfix: [root@server ~]# /etc/init. del cual habremos de quitar el comentario a la última línea para adaptar el dominio a nuestras necesidades: RedirectMatch ^/mailman[/]*$ http://[dominio]/mailman/listinfo Una vez realizado el cambio. teniendo en cuenta que Postfix tardará un par de minutos en reconocer los nuevos ficheros de alias. habrá que repasar los ficheros /var/log/maillog y /var/log/mailman/errors y encontrar el fallo. Para finalizar.liberaliatempus. nos deja un fichero de configuración en la ruta /etc/httpd/conf. Mediante la forma que hemos indicado. Ahora podemos iniciar el servicio de Mailman sin ningún contratiempo mediante el siguiente comando: [root@server mailman]# /etc/init. un correo de bienvenida a la nueva lista de correo. será crear una primera lista de correo. la instalación del paquete que contiene el programa Mailman... Si no hubieramos configurado los alias como hemos indicado más arriba. reiniciaremos el demonio de Apache: Sistema de correo con Postfix. El resto de listas de correo se crearán mediante el comando newlist <nombre de la lista> y seguiremos los mismos pasos que seguimos durante la creación de la lista mailman.

como la página principal. Para terminar Si hemos seguido los pasos de configuración de forma correcta. bien en modo usuario con http://dominio/mailman/lista.list. Cyrus y MySQL 53 . como hemos podido observar al acceder por primera vez al interface de Mailman.d/httpd restart Parando httpd: [ OK ] Iniciando httpd: [ OK ] Ahora ya podemos acceder a las listas de correo. la aparición de determinadas listas. Sin embargo. Si no especificamos lista. la traducción del programa. Un buen punto para comenzar debería ser la página web de Mailman (http://www. la de registro. hay muchas cosas que pueden ser personalizadas. Como se puede uno imaginar. Mailman devolverá un listado con todas las listas de corro accesibles. bien en modo administrador mediante http://dominio/mailman/admin/lista. este trabajo ha de ser realizado por cada administrador y quedará a su discrección el realizarlos o no.org) y los manuales del programa. Mailman ya estará instalado y los usuarios podrán acceder sin mayor problema a las diferentes listas que vayamos creando.[root@anna mailman]# /etc/init. que habitualmente estarán ubicados en la rama /usr/share/doc/mailman. Sistema de correo con Postfix. etc.

org. escritor del artículo Postfix-Cyrus-Web-cyradm-HOWTO y programador de web-cyradm.XIV . de Luc de Louw. Wietse Venema. 30-03-2004. creador y mantenedor del programa postfix. Cyrus y MySQL 54 . de Jaume Sabater.web-cyradm. Postfix-Cyrus-Web-cyradm-HOWTO.Apéndice Agradecimientos El autor de este manual quiere agradecer sinceramente el trabajo de las siguietes personas. escritor del artículo Configuración de un completo servidor de correo seguro con Postfix y Cyrus. Sistema de correo con Postfix.org.org. Luc de Louw. www. www. www.squirrelmail. The Web-cyradm Archives. Bibliografía • • • • • • Configuración de un completo servidor de correo seguro con Postfix y Cyrus. sin el cual la redacción éste manual no hubiera sido posible. 23-05-2005. • • • Jaume Sabater.postfix.

Sign up to vote on this title
UsefulNot useful