Sistema de Correo Con Postfix

download Sistema de Correo Con Postfix

of 54

Transcript of Sistema de Correo Con Postfix

Sistema de correo con Postfix, Cyrus y MySQL

Copyright 2006 Liberalia Tempus, S.L.

ndiceI. Introduccin .. II. Tecnologas .. 03 04 08 12 14 15 21 27 30 32 36 45 51 54

III. Instalando software

IV. Seguridad en MySQL V. Configuracin de PAM ..

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

IX. Web-Cyradm .. X. Probando la configuracin ..

XI. Filtrado .. XII. Squirrelmail

XIII. Mailman . XIV. Apndice

Copyright 2006 Liberalia Tempus, S.L. Todos los derechos reservados. El manual queda publicado sin coste alguno y es de libre distribucin siempre que se respete la inclusin de su procedencia en los medios donde sea publicado y no sea modificado de ninguna forma. Se prohbe expresamente la publicacin parcial del contenido de este manual sin permiso de su autor. Se prohbe expresamente la modificacin de este manual y su posterior publicacin en cualquier medio.

Sistema de correo con Postfix, Cyrus y MySQL

2

I IntroduccinA 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 potentsimo sistema de correo que abarcar las ltimas tecnologas en servidores y seguridad. Se potenciar, una vez realizada dicha instalacin, la facilidad de administracin del sistema, que procuraremos sea independiente de la configuracin 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 garantas de seguridad. El objetivo de nuestra instalacin ser completar un sistema de correo con las siguientes caractersticas: Cuentas de correo independientes del sistema operativo. Opcin de gestionar varios dominios desde una misma mquina. Dominios virtuales redirigidos a la cuenta principal. Auteticacin 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 conexin. 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, aadir un captulo de biografas donde se detallarn ampliamente los distintos trabajos en los cuales se ha inspirado este manual.

Sistema de correo con Postfix, Cyrus y MySQL

3

II TecnologasResumiremos a continuacin las diferentes tecnologas usadas en la instalacin 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 ncleo linux y la mayor parte de sus herramientas son de libre distribucin y uso. En la ltima actualizacin de este manual (junio de 2006), el sistema Fedora alcanza ya su quinta distribucin. Las configuraciones de este manual se referirn a la configuracin bajo esta distribucin. 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 versin tratada. Postfix (postfix-2.2.2-2) Postfix es un MTA (Mail Transport Agent) rpido, fcil de administrar y seguro. Aunque no venga al caso, es totalmente compatible con sendmail, manteniendo externamente las formas de ste. Postfix es una combinacin de diversos programas que realizan su funcin determinada dentro del conjunto. Nos podemos hacer una pequea idea de esto observando la imgen siguiente:

Aunque parezca mentira, el resultado es menos complejo de lo que a primera vista puede parecer, pero no nos extenderemos ms. Para ms informacin a cerca de postfix, se puede consultar la documentacin 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 travs de Internet, lo hacen por defecto sin ningn tipo de encriptacin ni autenticacin fiable. En la prctica, cualquier persona con los conocimientos adecuados y con acceso fsico a la lnea de datos a travs de la cual viaja un paquete, tendra acceso a dicha informacin. Por supuesto, si dicho acceso se efecta, el contenido de los distintos paquetes puede ser alterado o redirigido con cualquier propsito. Para evitar este tipo de accesos, la compaa Netscape Inc. introdujo el protocolo de seguridad SSL (Secure Sockets Layer), cuya evolucin ha terminado en el actual TLS. Este protocolo aporta encriptacin de la comunicacin (evitando escuchas no deseadas) y una alta fiabilidad en la autenticacin que se asegura de tener correctamente identificadas a las distintas partes de una comunicacin 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 informacin sobre el particular, consultar la pgina 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 bsqueda. No es necesaria una cuenta de sistema linux para cada uno de los usuarios de correo. Esto hace que la creacin de usuarios se pueda automatizar y no sea demasiado ardua en el caso de una gran cantidad de las mismas. Como la administracin de cada cuenta se realiza mediante comandos especficos, la programacin de interfaces dinmicos sirve para tener un mayor control sobre todas las funcionalidades del programa, a la vez que se hace ms seguro que la manipulacin del /etc/passwd. La versin de Cyrus analizada en este manual utiliza la versin 2 de la librera SASL para la autenticacin. As, Cyrus realizar la autenticacin en tres fases o capas: el demonio saslauthdaemon redirigir la peticin al mecanismo definido (en nuestro caso ser PAM a travs de MySQL), el cual buscar la informacin 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, mtodo que aade un soporte adicional para la autenticacin de los protocolos que fundamentan su conexin en la estandarizacin 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 autenticacin 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 conexin. 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 envo de correo. LMTP acta 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 estaran definidas para su uso por ESMTP, nunca debera funcionar como receptor de escucha sobre el puerto 25. MySQL (mysql--4.1.12-2) MySQL es un servidor de bases de datos rpido, potente y muy fcil de usar e implementar bajo cualquier plataforma. Ya que Cyrus puede utilizar PAM como mecanismo de autenticacin, usaremos la extensin 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 gestin administrativa completa de todo el servicio de correo. La potencia de PHP y la fiabilidad de MySQL harn del sistema que desarrollaremos en este manual algo seguro, fiable y rpido.

Sistema de correo con Postfix, Cyrus y MySQL

5

Pam_MySQL (pam_mysql-0.50-6) PAM (Pluggable Authentication module) fue desarrollado en primera instancia por el equipo de desarrollo de Sun Microsystems. Como puede suponerse, han quedado una gran cantidad de mdulos de conexin con diferentes tecnologas. Uno de esos mdulos es Pam_MySQL. Con Pam_MySQL ser posible almacenar las contraseas de los usuarios del servidor de correo en una base de datos MySQL, as como tambin ser posible almacenar datos como alias que podrn ser interpretados por Postfix. En definitiva, gracias a estas tecnologas, tendremos a nuestra disposicin una base de datos y un mecanismo de conexin con autenticacin que servirn todas las necesidades que pueda tener cualquier administrador/servidor de correo. Gracias a todos estos elementos, las tareas de administracin de cada dominio podrn ser delegadas a los propios usuarios de correo, con el consiguiente ahorro de tiempo que eso supone. Sieve Sieve es un pequeo intrprete de rdenes que se encargan de realizar filtrados de correo en el lado del servidor, a la entrega del correo. El mensaje a filtrar necesita del uso del protocolo RFC822. Es un lenguaje muy sencillo y con rdenes muy limitadas, pero perfecto para su uso como lenguaje encargado de crear filtros de correo. An as, es preciso recomendar el uso de algn interface que agilice y automatice el uso de Sieve por parte de usuarios sin acceso al servidor. Amavisd-New (amavisd-new-2.3.1-1.2) Amavis supone una pasarela o interface que se coloca entre el servidor y uno o varios filtros de contenidos (antivirus, antispam, filtrado de correo...). Est escrito en Perl, lo que asegura su portabilidad y fiabilidad y se comunica con el servidor por medio de casi cualquier protocolo o programa al efecto. Bsicamente, amavisd-new acta como un servidor smtp que cumple el estndar RFC 2821 o uno lmtp que cumple con el estndar RFC 2033. Una vez procesado el mensaje, se generan notificaciones que los programas de antivirus o antispam usarn para analizar los mensajes y filtrarlos o eliminarlos. Las notificaciones se generan bajo las normas RFC 1892 y 1894, lo que supone un estndar para una gran cantidad de programas de filtrado. SpamAssassin (spamassassin-3.0.4-1) SpamAssassin es un filtro de correo programado por los creadores de Apache. 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. Una vez realizado el anlisis, el mensaje quedar o no marcado como spam para su posterior filtrado o eliminacin. El filtrado de los mensajes de spam es habitualmente muy satisfactorio si el programa se ha configurado correctamente, permitiendo incluso el envo de informes de spam a bases de datos internacionales. ClamAV (clamav-0.88.1-1) El antivirus Clam es una herramienta bajo licencia GPL desarrollada para sistemas Linux/Unix. Se adapta perfectamente a casi cualquier servidor de correo y su principal funcin es la de escanear los datos adjuntos de un correo electrnico. La actualizacin de la base de datos es constante y la librera en la que se basa el programa es de libre distribucin y uso por cualquier programa, lo que permite una integracin perfecta bajo cualquier entorno. El programa soporta firmas digitales en las actualizaciones y escanea ficheros comprimidos y mensajes de correo en casi cualquier formato.

Sistema de correo con Postfix, Cyrus y MySQL

6

Mailman (mailman-2.1.5-35) Mailman es un software de gestin de listas de correo y de noticias. Su perfecta integracin con la web permite una fcil y rpida administracin del sistema, as como un uso muy sencillo de cara al usuario de las listas. Mailman puede crear archivos de correo automticos, procesar correo rechazado, filtrar spam, enviar conjuntos de correos como uno solo y mucho ms. Squirrelmail (squirrelmail-1.4.6-0) Squirrelmail es un lector de correo va web escrito en php. Mediante esta tecnologa de programacin, proporciona acceso al servidor de correo mediante los protocolos IMAP y SMTP. Las pginas son creadas en HTML sobre la marcha y no se requiere el uso de javascript, lo cual garantiza la mxima compatibilidad en casi cualquier navegador. Gracias a la gran cantidad de add-ons disponibles, este lector de correo va web se convierte en la herramienta perfecta de acceso a la cuenta de correo fuera del lugar habitual de trabajo. Web-cyradm (web-cyradm-0.5.4-1) Web-cyradm es un interface web que permite la administracin de un sistema de correo completo. Est escrito en php, lo que nos permite un control absoluto sobre todos sus parmetros. Para su correcto funcionamiento, es necesario que de la parte del servidor exista el correspondiente servidor/intrprete de lenguaje php correctamente configurado. Web-cyradm est en constante desarrollo por parte de gente de todo el planeta y el listado de sus caractersticas y opciones crece da a da. Se puede tener una idea mucho ms cercana del proyecto accediento a la pgina web del mismo: http://www.web-cyradm.org .

Algunas de las tareas que podemos completar con web-cyradm pueden ser (entre otras) la administracin de mltiples dominios virtuales, cuotas de usuario, creacin automtica de cuentas con el prefijo del dominio, alias de usuario, soporte MySQL, etc. Sistema de correo con Postfix, Cyrus y MySQL 7

III Instalando SoftwareLa mayora del software a instalar viene includo en la distribucin de Fedora al uso. Es probable que las versiones o paquetes incorporados "de serie" con la distribucin, no coincidan con las utilizadas para la confeccin de este manual, as que se recomienda encarecidamente que, en la medida de lo posible, se utilicen las versiones indicadas en el Captulo II. Es muy recomendable que las actualizaciones de paquetes bajo el sistema Fedora se hagan con herramientas de actualizacin automtica como yum o apt-get. Recalcar que la instalacin del servidor de correo ha de hacerse bajo Fedora Core 4 o Fedora Core 5, no garantizndose el correcto funcionamiento del sistema bajo otras distribuciones. Durante la instalacin/actualizacin de paquetes requerida por este manual, se marcarn en azul aquellos paquetes cuya instalacin queda recomendada por el autor, no siendo imprescindibles para el correcto funcionamiento del servidor de correo. Instalando MySQL Sitio web de descarga original: http://www.mysql.com/downloads/ Instalaremos los siguientes paquetes con la herramienta yum (yum update [paquete]) : mysql-devel-4.1.14-1.FC4.1 mysql-4.1.14-1.FC4.1 mysql-server-4.1.14-1.FC4.1 php-mysql-5.0.4-10.4 Como medida de seguridad, Fedora aade al usuario mysql al sistema tras la instalacin de los paquetes. Por nuestra parte, haremos un pequeo cambio al fichero de configuracin /etc/my.cnf para controlar de manera ms eficaz el log de acceso y errores de mySQL. Aadiremos las lneas siguientes a los epgrafes entre corchetes: [mysqld] log=/var/log/mysql/mysql-access.log [mysqld_safe] err-log=/var/log/mysql/mysql-err.log Si algn parmetro ya aparece en el fichero, se sustituir por la lnea correspondiente. Acto seguido, crearemos los ficheros de log: # touch /var/log/mysql/mysql-err.log # touch /var/log/mysql/mysql-access.log # chown mysql.mysql /var/log/mysql* Por ltimo, activamos el servicio mySQL para su ejecucin con el inicio del sistema: # chkconfig mysqld on Con esto queda instalado mySQL para el propsito que nos ocupa.

Sistema de correo con Postfix, Cyrus y MySQL

8

Instalando OpenSSL Sitio web de descarga original: http://www.openssl.org Paquetes a instalar: openssl-0.9.7f-7.10 openssl-devel-0.9.7f-7.10 openssl-perl-0.9.7f-7.10 mod_ssl-2.0.54-10.2 En el caso de OpenSSL, nos servir la instalacin por defecto del paquete. Instalando CyrusSASL e IMAP Sitios web de descarga original: ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/cyrus-sasl-2.1.20.tar.gz ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/cyrus-imapd-2.2.12.tar.gz Paquetes a instalar: cyrus-imapd-2.2.12-6.fc4 cyrus-imapd-devel-2.2.12-6.fc4 cyrus-imapd-nntp-2.2.12-6.fc4 cyrus-sasl-devel-2.1.20-5 cyrus-sasl-2.1.20-5 cyrus-imapd-utils-2.2.12-6.fc4 cyrus-sasl-plain-2.1.20-5 cyrus-imapd-murder-2.2.12-6.fc4 cyrus-sasl-gssapi-2.1.20-5 cyrus-sasl-md5-2.1.20-5 Y aadiremos el servidor de cyrus-imap al script de inicio del sistema: # chkconfig cyrus-imapd on Instalando postfix Sitio web de descarga original: http://www.postfix.org/ftp-sites.html En los sistemas Fedora, postfix viene de origen compilado sin la opcin mySQL activada. Por lo tanto, el paquete rpm del Fedora original no nos sirve para el propsito de este manual. Descargaremos de nuestro repositorio preferido, mediante la herramienta yum, el paquete de fuentes sin compilar de postfix. En nuestro caso postfix-2.2.2-2.src.rpm y lo instalaremos con la herramienta de paquetera rpm : # rpm -ivh postfix-2.2.2-2.src.rpm Seguidamente editamos el fichero /usr/src/redhat/SPECS/postfix.spec de los fuentes y modificamos lo siguiente: %define MYSQL 0 --> %define MYSQL 1 Y compilamos e instalamos postfix con la opcin mySQL activada: # cd /usr/src/redhat/ # rpmbuild -ba SPEC/postfix.spec # cd RPMS/i386 Sistema de correo con Postfix, Cyrus y MySQL 9

# rpm -Uvh postfix-2.2.2-2.i386.rpm --replacefiles # rpm -Uvh postfix-debuginfo-2.1.5-2.2.i386.rpm --replacefiles # rpm -Uvh postfix-pflogsumm-2.1.5-2.2.i386.rpm --replacefiles Antes de proceder con la instalacin de los paquetes, es recomendable asegurarse de que ningn paquete de los referidos (o cualquier otro MTA distinto a postfix) est instalado, para evitar conflictos entre versiones. Obviamente, habremos de configurar yum o apt de forma que no actualice el paquete postfix en ningn momento. Para ello, leeremos las instrucciones correspondientes de cada programa y obtendremos lo deseado. Instalando PAM Si el sistema PAM no ha quedado instalado por defecto en la instalacin de Fedora, lo instalaremos mediante yum. Paquetes a instalar: pam-0.79-9.5 pam-devel-0.79-9.5 Instalando pam-mySQL Sitio web de descarga original. http://sourceforge.net/projects/pam-mysql/ Paquetes a instalar: pam_mysql-0.50-6 Instalando web-cyradm Sitio web de descarga original: http://www.web-cyradm.org No hay binarios pre-compilados de web-cyradm para Fedora, as que descargaremos el paquete comprimido de la web y lo instalaremos sobre la ruta de documentos pblicos de nuestro servidor de pginas web. Suponiendo que tengamos el servidor Apache instalado, la ruta sera /var/www/html/. El paquete tar ya viene preparado para descomprimir y usar: # cd /var/www/html # tar -xvzf web-cyradm-0.5.4.tar.gz Habilitaremos los ficheros de log para la depuracin: # touch /var/log/web-cyradm.log # chown nobody /var/log/web-cyradm.log La verin 0.5.4 de web-cyradm es la ltima considerada estable. Instalando el resto ... El resto de paquetes a instalar es el siguiente. Utilizaremos la instalacin por defecto que nos deje cada paquete: amavisd-new-2.3.1-1.2.fc4.rf clamav-lib-0.88.1-1.fc4 Sistema de correo con Postfix, Cyrus y MySQL 10

clamav-data-0.88.1-1.fc4 clamav-update-0.88.1-1.fc4 clamav-0.88.1-1.fc4 clamav-server-0.88.1-1.fc4 squirrelmail-1.4.6-0.cvs20050812.1.fc4 spamassassin-3.0.4-1.fc4 mailman-2.1.5-35.fc4 Como se dijo anteriormente, es necesario tener instalado un servidor de pginas web y un servidor de php. web-cyradm funciona correctamente en sistemas Fedora Core con la versin 5 de php y el servidor Apache. Un ltimo paso: Creacin de las bases de datos de web-cyradm Para finalizar con la instalacin del software y antes de adentrarnos en la configuracin de cada paquete, crearemos las bases de datos necesarias para el correcto funcionamiento de webcyradm y postfix. Como ya se ha explicado, el sistema postfix y web-cyradm son totalmente configurables a gusto del usuario, pudiendo cada uno crear las tablas que considere necesarias para el sistema pensado. Para el propsito de este manual, nos limitaremos a crear la estructura necesaria para la integracin de web-cyradm y postfix con mySQL y PAM, que es ms que suficiente para cualquier sistema de correo que cumpla con amplias garantias de seguridad, fiabilidad y consistencia. La instalacin de web-cyradm nos proporciona varios scripts de configuracin y de creacin de tablas. Bajo el directorio scripts de la instalacin tenemos dos que nos ayudaran a formalizar nuestras tablas de mySQL, insertuser_mysql.sql y create_mysql.sql. El primero crea la base de datos de usuarios en nuestro sistema mySQL para el correcto funcionamiento de web-cyradm, adems de crear la base de datos mail. El segundo es el encargado de crear las tablas y de rellenarlas con un primer usuario (el administrador) y el usuario cyrus. El resto de scripts realizan funciones de administracin y actualizacin del sistema web-cyradm y no vienen al caso en esta instalacin. Antes de lanzar los scripts de creacin de bases de datos, usuarios y tablas, es altamente recomendable, por no decir que es necesario, cambiar los nombres de usuario y claves por defecto y adecuarlas a nuestras necesidades. Editaremos los scripts y cambiaremos el usuario admin por otro a nuestro gusto y la contrasea test por la preferida. Una vez editados los scripts, los lanzaremos desde la consola de mySQL: # mysql -p < insertuser_mysql.sql # mysql -p < create_mysql.sql Si no se est familiarizado con mySQL, se pueden usar herramientas del tipo phpmysqladmin o similares para ejecutar los scripts.

Sistema de correo con Postfix, Cyrus y MySQL

11

IV Seguridad en MySQLDaremos en este captulo algunos pasos para aadir seguridad adicional a nuestro servidor mySQL. Asegurando MySQL Como nuestra intencin es utilizar una base de datos corriendo en un servidor de mySQL para autenticar a los usuarios de correo, necesitamos alguna medida adicional de seguridad. En este caso, habremos de cerrar el acceso al puerto que utiliza mySQL para la comunicacin con otras mquinas: el puerto 3306. La forma ms sencilla de hacer esto es dirigiendo al demonio mysqld al interface local de red 127.0.0.1. Nos aseguramos de esta forma de que nadie pueda realizar una conexin al demonio de mySQL a travs de la red. Para lograr este objetivo, es necesario editar el fichero encargado de iniciar el sistema mySQL. En Fedora, este fichero se sita por defecto en /etc/init.d/mysqld. Una vez cargado el fichero, buscaremos la lnea que hace referencia al comando mysqld_safe, que es un ejecutable especial encargado de llamar al demonio mysqld y de pasarle ciertos parmetros que aaden una seguridad extra y un sistema de informacin en tiempo real de cualquier tipo de error que se produzca en relacin a mySQL. Por ejemplo, mysqld_safe se encargar de reiniciar el servidor cuando se produzca algn error que impida el correcto funcionamiento del mismo. En Fedora Core, la lnea en cuestin aparece como sigue: /usr/bin/mysqld_safe --defaults-file=/etc/my.cnf --pidfile="$mypidfile" >/dev/null 2>&1 & A parte de los suyos propios, mysqld_safe pasar al demonio mysqld cualquier parmetro compatible con este ltimo. As que usaremos --bind-address para hacer que mysqld se ejecute slo en el entorno 127.0.0.1 o loopback: /usr/bin/mysqld_safe --defaults-file=/etc/my.cnf --bindaddress=127.0.0.1 --pid-file="$mypidfile" >/dev/null 2>&1 & Para ms informacin acerca de los parmetros de ejecucin de mysqld_safe y mysqld, recurriremos a las pginas del manual de ambos comandos. Una vez realizados los cambios, reiniciaremos el servidor de mySQL (/etc/init.d/mysqld restart) y nos aseguraremos de haber realizado los cambios de forma correcta. Para ello, podemos hacer uso del siguiente comando: # netstat -an|grep LISTEN Y buscaremos en la salida algo similar a esto: tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN Configurando el firewall Si tenemos previsto que nuestro servidor de mySQL corra en una mquina distinta a la del servidor de correo, habremos de realizar una serie de cambios en la configuracin de nuestro firewall. Esto nos permitir tener asegurada la conexin al demonio mysqld. Para ello, Sistema de correo con Postfix, Cyrus y MySQL 12

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

Sistema de correo con Postfix, Cyrus y MySQL

13

V - Configuracin de PAMUna buena configuracin de PAM es imprescindible para la autenticacin de todos y cada uno de los usuarios de nuestro sistema de correo. Para nuestros fines, 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.

Modificando ficheros En los sistemas bajo Fedora (y en casi todos los sistemas linux), todos los archivos de configuracin de PAM se encuentran bajo el directorio /etc/pam.d/. Es aqu donde tendremos que modificar o crear los ficheros necesarios para una correcta autenticacin de los usuarios de Cyrus. La autenticacin que se persigue es la siguiente: Peticin de acceso -> Intento de login en PAM -> Peticin de datos a MySQL mediante pam_MySQL -> Devolucin de login errneo o satisfactorio a Cyrus As, escribiremos un fichero de configuracin como el siguiente: auth required pam_mysql.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.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.d/imap una vez realizados los cambios pertinentes sobre los parmetros passwd, crypt, user y db. Crearemos un fichero idntico para cada uno de los servicios que requieran autenticacin desde pam_MySQL. Por ejemplo, crearemos ficheros para los servicios de pop, sieve o smtp, entre otros y los guardaremos con el nombre del servicio y la ruta anterior. Hay que poner especial atencin al parmetro crypt, que deber coincidir con la configuracin de encriptacin que deseemos y que nos ofrece web-cyradm. Hablaremos de las diferentes opciones de encriptacin en el captulo dedicado a la configuracin de web-cyradm. De momento, usaremos el valor 1 ("encrypt") por ser el ms portable.

Sistema de correo con Postfix, Cyrus y MySQL

14

VI PostfixEn el proceso de configuracin del programa postfix atenderemos a los dos ficheros fundamentales que hacen que toda la maquinaria de este MTA engrane de forma perfecta: main.cf y master.cf.

El fichero /etc/postfix/master.cf Ya que es nuestra intencin aprovecharnos de las ventajas que nos ofrece Sieve en las tareas de filtrado, ser necesario utilizar LMTP para la comunicacin entre postfix y cyrus. Tal y como veremos en un captulo posterior dedicado a la confiuracin de Cyrus, habilitaremos el servicio lmtpunix sobre el fichero de configuracin /etc/cyrus.conf. Aunque nuestra configuracin del sistema de correo se est basando principalmente en sistemas Fedora y los permisos ya se aplican con las instalaciones de los paquetes, no est de ms comentar que el socket creado por el servicio de lmtpunix (en Fedora Core /var/lib/imap/socket/lmtp) tendr que ser accesible por postfix. Por otro lado, ya que cyrus requiere que todas las entregas por LMTP se autentiquen, considerar que toda entrega que se haga a travs de un socket ser de confianza, estableciendo que sea el usuario postman el que las realiza. Abriremos por tanto el fichero /etc/postfix/master.cf y observaremos que una lnea como esta est presente: lmtp unix - - n - - lmtp Para terminar, nos fijaremos en otra lnea de configuracin posterior: # The Cyrus deliver program has changed incompatibly, multiple times. old-cyrus unix - n n - - pipe flags=R user=cyrus argv=/usr/lib/cyrus-imapd/deliver -e -m ${extension} ${user} Hay que prestar especial atencin a la ruta apuntada por el parmetro argv pues en alguna ocasin no refleja bien la situacin del programa deliver y las entregas de correo pueden llegar a no efectuarse.

El fichero /etc/postfix/main.cf Lo primero que hay que hacer al abrir por primera vez el fichero /etc/postfix/main.cf, es establecer de forma correcta los parmetros de nuestro servidor de correo. Para empezar, cambiaremos el nombre del host: myhostname = foo.bar.org Continuaremos con el parmetro mydestination, que igualaremos a los nombres de todos los dominios que consideremos locales (similar al fichero sendmail.cw de configuracin de sendmail). Cada uno de los dominios, si es que hay ms de uno, ir separado por comas: mydestination = foo.bar.org, liberaliatempus.com, furchbar-grausam.ch, whatever.domain.tld, mysql:/etc/postfix/mysql-mydestination.cf En algn caso, nos veremos en la necesidad de utilizar los servicios de un proveedor para procesar el envo de correo. En este caso, igualaremos el parmetro relayhost a cada uno de los proveedores de servicios que nos interesen. Si el parmetro queda en blanco, el correo Sistema de correo con Postfix, Cyrus y MySQL 15

saliente ser procesado directamente por el servicio de smtp que se haya establecido por defecto: relayhost = relay01.foobar.net relay02.foobar.net relay03.foobar.net Otro parmetro importante a tener en cuenta es el referente al mailtransport, o el programa que se encargar de transportar el correo de un programa a otro. Para nuestros propsitos, deberamos usar como programa de procesamiento a Cyrus, para lo cual igualaremos el parmetro mailbox_transport de la siguiente manera: mailbox_transport = cyrus Si, por ejemplo, preferimos usar lmtp, igualaramos el parmetro 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 esto, utilizaremos distintos ficheros de configuracin que informarn 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.cf sender_canonical_maps = mysql:/etc/postfix/mysql-canonical.cf virtual_alias_maps establece la configuracin de acceso a los alias virtuales, mientras que sender_canonical_maps se encarga de reescribir la direccin de correo a su formato correcto. Este ltimo parmetro es necesario para el uso de un interface web, ya que los usuarios se crean habitualmente del modo test001, sin la direccin completa. Para el correcto funcionamiento de esta ltima configuracin, crearemos los ficheros correspondientes...

/etc/postfix/mysql-virtual.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, Cyrus y MySQL

16

/etc/postfix/mysql-canonical.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.cf # Nombre de usuario y contrasea 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 autenticacin SASL y la seguridad de PAM Antes de comenzar con la activacin en postfix de SASL, vamos a comprobar que todo lo que hemos hecho hasta ahora se comporta de manera correcta. Para ello, 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.0.0:143 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:2000 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN Sobre el puerto 25 tenemos el servicio smtp, en el 2000 se encuentra sieve y en el 143 escucha el servicio imap (a configurar en el siguiente captulo). Si alguno de los servicios no aparece activado, esperaremos a la configuracin correcta de Cyrus y a un captulo posterior para hacer todas las comprobaciones. A priori, si los tres servicios estn activos, ya se podra mandar correo, por ejemplo, a un buzn local (en negrita los comandos a teclear): # telnet localhost 25 Trying 127.0.0.1... Connected to webmail.mailserver.com (127.0.0.1). Sistema de correo con Postfix, Cyrus y MySQL 17

Escape character is '^]'. 220 webmail.mailserver.com ESMTP Postfix (Fedora) HELO localhost 250 webmail.mailserver.com MAIL FROM: < [email protected]> 250 Ok RCPT TO: < [email protected]> 250 Ok DATA 354 End data with . Este es un mensaje de pruebas enviado a traves de telnet. . 250 Ok: queued as 5F496BEE9 QUIT 221 Bye Connection closed by foreign host. Para ver un log bastante detallado del proceso de envo de correo, aadiremos el parmetro -v al fichero /etc/postfix/master.cf, sobre la lnea correspondiente al servicio de smtp: smtp inet n - n - - smtpd -v Sabiendo que el log queda alojado en /var/log/maillog en los sistemas con Fedora. Procedamos, ahora s, a activar SASL sobre postfix. Autenticaremos a los clientes conectados mediante smtp para que puedan hacer relay sobre el servidor de correo. Para ello modificaremos la opcin smtpd_recipient_restrictions del fichero /etc/postfix/main.cf: smtpd_sasl_auth_enable = yes smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination smtpd_sasl_security_options = noanonymous smtpd_sasl_local_domain = broken_sasl_auth_clients = yes Con esto, los clientes sin autoridad podrn hacer relay sobre el servidor siempre que pertenezcan a las redes indicadas en mynetworks. Todo lo dems ser rechazado. Ms adelante, aseguraremos la conexin mediante TLS. Si smtpd_sasl_local_domain se iguala a algo, forzaremos la comprobacin del usuario entrando en /etc/sasldb2 con [usuario@dominio al que se iguala la opcin]. Para nuestros propsitos de autenticacin bajo mysql, dejaremos la opcin igualada a nada. Tendremos que indicar seguidamente el mecanismo a usar a travs de SASL y para ello dejaremos, si no lo est ya, el fichero /usr/lib/sasl2/smtpd.conf con una nica lnea: pwcheck_method: saslauthd Y, sobre todo en sistemas con RedHat o con Fedora, hay que cambiar el mtodo de autenticacin con que saslauthd se inicia por defecto. Esto lo haremos sobre el fichero /etc/sysconfig/saslauthd, donde cambiaremos el mecanismo por defecto (habitualmente shadow) para igualarlo a pam: MECH=pam

Sistema de correo con Postfix, Cyrus y MySQL

18

Para sistemas que no sean Fedora, hay que indicar al sistema dnde se encuentra el socket saslauthd y para esto habr que crear un enlace hacia la posicin deseada. Habitualmente, quedar como sigue, aunque siempre depender de la distribucin en uso: # mv /var/run/sasl2 /var/run/sasl2-old # ln -s /var/run/saslauthd /var/run/sasl2 Una vez realizados los cambios, potenciaremos la seguridad en postfix mediante diferentes opciones que iremos aadiendo a smtpd_recipient_restrictions, amn de utilizar opciones como smtpd_helo_required = yes para verificar el uso correcto de nuestro servidor de correo. Aunque es necesaria la lectura de la documentacin de postfix a este respecto, el fichero /etc/postfix/main.cf podra quedar de esta manera en lo referente a los filtros de autenticacin: smtpd_helo_required = yes disable_vrfy_command = yes smtpd_recipient_restrictions = reject_invalid_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unknown_sender_domain, reject_unknown_recipient_domain, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_helo_access hash:/etc/postfix/helo_check smtpd_data_restrictions = reject_unauth_pipelining, permit Por ltimo, echemos un vistazo al fichero de configuracin /etc/postfix/main.cf al completo, incluyendo opciones que veremos ms adelante, como el soporte para TLS o el filtrado con amavisd-new: #CONFIGURACIN 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.com mydomain = mailserver.com alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases mydestination = $myhostname, $mydomain, localhost.$mydomain, localhost, mysql:/etc/postfix/mysql-mydestination.cf myorigin = $myhostname mynetworks = 127.0.0.0/8, 192.168.0.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, Cyrus y MySQL 19

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 #AUTENTICACIN VLIDA smtpd_helo_required = yes disable_vrfy_command = yes smtpd_recipient_restrictions = reject_invalid_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unknown_sender_domain, reject_unknown_recipient_domain, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_helo_access hash:/etc/postfix/helo_check smtpd_data_restrictions = reject_unauth_pipelining, 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.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, native #OTHERS virtual_alias_maps = mysql:/etc/postfix/mysql-virtual.cf sender_canonical_maps = mysql:/etc/postfix/mysql-canonical.cf message_size_limit = 20480000

Sistema de correo con Postfix, Cyrus y MySQL

20

VII - Cyrus IMAP y SASLCon la configuracin y puesta en marcha de Cyrus IMAP completaremos la primera fase de instalacin de nuestro servidor de correo, teniendo acceso completo a los buzones de almacenamiento de correo y al sistema de autenticacin de usuarios. Esta ltima ser protegida mediante una capa de seguridad extra entre el protocolo y la conexin.

SASL Recordemos cmo en el captulo anterior modificbamos el fichero /etc/sysconfig/saslauthd para igualar el mecanismo de autenticacin a un sistema con PAM. En sistemas anteriores, el mecanismo utilizado era la autenticacin directa bajo SASLDB, quedando ste relegado a la autenticacin a travs de PAM con la introduccin de este ltimo sistema en las distintas distribuciones de linux y, por supuetso, en las distribuciones bajo Fedora Core. Para nuestros propsitos, el sistema de autenticacin pasar por el acceso de PAM a una base de datos MySQL, como ya hemos explicado en anteriores captulos. Con el paquete cyrus-sasl ya instalado tendremos acceso a los diferentes ejecutables que nos permitirn el acceso y la manipulacin de las bases de datos de usuarios, entre otras muchas opciones. Por ejemplo, el comando sasldblistusers2 listar los usuarios existentes y el comando saslpasswd2 aadir usuarios a nuestra conveniencia. Veamos un ejemplo: # saslpasswd2 c user001 El parmetro -c nos permite aadir un usuario y el parmetro -d lo borrara de la base de datos. Si ahora utilizamos sasldblistusers2: #sasldblistusers2 [email protected] : userPassword Para finalizar, limpiemos de la base de datos el ejemplo: # saslpasswd2 d user001 Otro uso de saslpasswd2 es el de asociar usuarios a dominios mediante la utilizacin de la opcin -u: # saslpasswd2 c user002 u dominio_03.net

Cyrus-IMAP La configuracin de la plataforma Cyrus se establece a partir de dos ficheros fundamentales: /etc/cyrus.conf y /etc/imapd.conf. En el primero de ellos se determinan los servicios a ejecutar mediante el inicio de Cyrus. El segundo especifica los parmetros de configuracin del servicio IMAP de Cyrus. Para continuar con la configuracin, sera altamente recomendable que el lector de este manual leyera, aunque fuera de forma somera, la documentacin incluida en la rama de directorios /usr/share/doc/cyrus-imapd y /usr/share/doc/cyrussasl, donde se incluye toda la documentacin necesaria para la correcta configuracin de un sistema Cyrus y sus distintas asociaciones con el programa Postfix.

Sistema de correo con Postfix, Cyrus y MySQL

21

El fichero /etc/cyrus.conf Este fichero de configuracin se compone de tres partes bien diferenciadas: 1. START: esta seccin lista los scripts que se ejecutarn antes de que se arranquen los servicios. Su uso ms caracterstico es inicializar las bases de datos y lanzar los servicios de larga ejecucin. 2. SERVICES: esta seccin es el corazn del fichero /etc/cyrus.conf, pues describe los procesos que debern lanzarse para atender las conexiones que los clientes hagan a ciertos sockets, bien sean tipo TCP o UNIX. 3. EVENTS: esta seccin lista los procesos que deberan ejecutarse a intervalos especficos, de modo similar a los trabajos del cron. Tpicamente se usa para llevar a cabo tareas programadas de limpieza y mantenimiento. El paquete rpm instalado sobre un sistema con Fedora nos deja una configuracin por defecto que apenas habr que cambiar, 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 } Ntese que se han aadido las lneas correspondientes a la ejecucin de los servicios de pop3 y pop3s. Para un sistema slo con IMAP, estas lneas no se incluiran. El servicio imaps nos servir para la configuracin de IMAP sobre SSL y el servicio de sieve nos ejecutar el servicio de filtrado de correos. Hay que aclarar igualmente que en la configuracin descrita se opta por la utilizacin de sockets UNIX, debido a que toda la configuracin seguida en este manual supone que todos los servicios se ejecutarn sobre la misma mquina. En un contexto diferente (con, por ejemplo, los servidores postfix y cyrus corriendo en mquinas distintas) ser necesario el uso de sockets TCP. Cada vez que hagamos cambios sobre el fichero de configuracin de Cyrus, reiniciaremos el servidor para que estos se apliquen: # service cyrus-imapd restart

El fichero /etc/imapd.conf Sobre este fichero definiremos los parmetros locales para el servidor IMAP. Tenemos en el interior de este fichero una serie de lneas con el formato opcin: valor , donde opcin es el nombre de la opcin a configurar y valor el valor al cual se est estableciendo esa opcin. Sistema de correo con Postfix, Cyrus y MySQL 22

La lneas en blanco o con almohadilla (#) al principio sern ignoradas. Repasemos alguna de las opciones ms relevantes: lmtp_downcase_rcpt: esta opcin, que sirve para forzar que el nombre de usuario se convierta a minsculas, viene por defecto comentada, es decir, con valor no. Debido a que Cyrus diferencia maysculas y minsculas, es una buena idea trabajar con los nombres de usuario siempre en minsculas (el valor por defecto asume que el usuario es consciente de lo que est haciendo). Basta con quitar el comentario a la lnea para establecer el valor a yes. En este artculo usaremos ste ltimo valor. admins: esta opcin permite definir los usuarios que tendrn permisos de administrador (flag a de la ACL de un buzn) sobre todos los buzones del sistema. El usuario cyrus, y nicamente l, es la opcin ms recomendable, por lo que bastar con descomentar la lnea del fichero. Este usuario se va a autenticar mediante el mtodo SASL, por lo que debe aadirse a la base de datos /etc/sasldb2 mediante el comando saslpasswd2, tal que # saslpasswd2 c cyrus. lmtp_admins: esta opcin permite especificar una lista de usuarios, separados por espacios, que tendrn la categora de administradores LMTP, es decir, que podrn enviar correo a travs de LMTP por TCP/IP (adems de aquellos definidos en la opcin admins anterior). Si se van a usar socketsUNIX no es necesario quitar el comentario a esta opcin, pues el usuario postman (valor por defecto) es autenticado automticamente. allowanonymouslogin: esta opcin permite el acceso annimo a los buzones en cuyas ACLs se haya aadido al usuario anonymous. Carece de sentido a menos que se quieran implementar grupos de noticias, por lo que se dejar su valor por defecto no. umask: esta opcin permite definir los permisos con los cules se guardarn los ficheros y subdirectorios dentro de /var/spool/cyrus/mail. Por defecto tiene el valor 077 (lectura y escritura para el propietario, nada para el resto), pero es conveniente permitir que el grupo (mail por defecto) tenga tambin permisos de lectura, pues de ese modo otras aplicaciones podrn leer el contenido de los emails, por ejemplo amavisdnew (bastar con que aadamos al usuario con el cul se ejecutan a ese grupo). Todas estas configuraciones suelen venir activadas por defecto en las instalaciones base de paquetes bajo Fedora Core. allowplaintext: mediante esta opcin decidimos si vamos a permitir uso del mecanismo de autenticacin sasl plain. Es recomendable mantener el valor por defecto yes hasta que tengamos todo el sistema base configurado y funcionando. sasl_mech_list: esta es la lista de los mecanismos de autenticacin que se van a soportar. Es til para evitar que se prueben todos los plugings existentes y para definir el orden de los mismos. Lo igualaremos al valor PLAIN. sasl_minimum_layer: el SSF (del ingls, security strength factor) mnimo que el servidor permitir negociar cliente. Un valor igual a 1 requiere proteccin de integridad; un valor ms algo requiere algn tipo de cifrado. Recomienda empezar con un valor de 0 (valor por defecto), que permite login de texto plano, una vez est todo funcionando ser ms sencillo aumentar la seguridad. sasl_maximum_layer: valor mximo del SSF que el servidor permitir negociar al cliente. Es pertinente valor por defecto, 256. sasl_auxprop_plugin: Esta opcin nos permite especificar los plugins del auxpropd que deseamos cargar, de estar usando sasl_pwcheck_method: auxprop. Es necesario descomentar esta lnea para que use sasldb. lmtpsocket, idlesocket y notifysocket: estas tres opciones especifican las rutas para los tres sockets UNIX Cyrus. Los valores por defecto son correctos. 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.conf. Sobre un sistema con Fedora, ni tan siquiera son necesarias estas lneas.

Observemos ahora como quedara el fichero con las opciones por defecto utilizadas en la configuracin de este manual: Sistema de correo con Postfix, Cyrus y MySQL 23

#imapd.conf configdirectory: /var/lib/imap partition-default: /var/spool/imap #altnamespace: # no - las subcarpetas de usuario se crean debajo de inbox. # yes - las subcarpetas del usuario se crearn a la altura de inbox. altnamespace: no lmtp_downcase_rcpt: yes #admins: Usuarios con permisos administrativos sobre todos los buzones. Aadir usuarios con saslpasswd2 -c username. admins: cyrus allowanonymouslogin: no allowplaintext: yes sasl_mech_list: PLAIN servername: mail.serverdomain.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 gestin de Cyrus-IMAP mediante la llamada a cyradm, programa incorporado en el paquete perl-Cyrus : # cyradm --user cyrus --server localhost --auth plain Password: IMAP Password: mail.serverdomain.com> Saldremos del programa de administracin mediante la orden exit. Es posible que al ejecutar cyradm obtengamos el siguiente error (diferencindose en la ruta o en la lnea de error, segn diferentes instalaciones): Login failed: generic failure at /usr/lib/perl5/site_perl/5.8.5/i386linux-thread-multi/Cyrus/IMAP/Admin.pm line 118 cyradm: cannot authenticate to server with plain as cyrus Esto es debido a que el demonio saslauthd no se est ejecutando. Hay que tener en cuenta que el script /etc/init.d/cyrus-imapd no ejecuta por defecto saslauth2, por lo que comprobaremos su ejecucin mediante el siguiente comando: # ps aux | grep saslauthd Que nos devolver, en el caso de una ejecucin correcta, varias lneas similares a esta: root 2210 0.0 0.7 16476 5004 ? S Apr02 0:04 /usr/sbin/saslauthd -m /var/run/saslauthd -a pam

Sistema de correo con Postfix, Cyrus y MySQL

24

En caso contrario, ejecutaremos el servicio de forma manual y nos aseguraremos de su correcta activacin: # chkconfig saslauthd on # service saslauthd start Recordemos, tal y como indicamos en un captulo anterior, que los sistemas con Fedora Core o con RedHat, inician saslauthd con shadow como sistema de autenticacin por defecto, lo que origina problemas a la hora de autenticar a los usuarios de los buzones bajo Cyrus-IMAP. As que recordaremos el cambio en el fichero /etc/sysconfig/saslauthd para dejar el parmetro MECH como sigue: MECH=pam Si esto no se hace as, 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.8.5/i386-linux-threadmulti/Cyrus/IMAP/Admin.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, cuya creacin se establece mediante el uso del comando setquota en cyradm y mediante autocreatequota en el fichero /etc/imapd.conf. Para que un mensaje se pueda insertar en un buzn, ste debera tener espacio de cuota suficiente, aunque en el proceso de envo de correo sucede algo curioso: aunque el mensaje a entregar supere la cuota permitida, el mensaje se recoger de todos modos, avisando al usuario una vez recogido el mensaje. Esto sucede de esta forma ya que si no fuera as, no habra forma de saber cundo se quiso entregar correo y no se entreg. Si la cuota ya est por encima del lmite, el envo del correo fallar, retornando un error temporal y reintentando el envo durante un par de das.

Reconstruccin de la base de datos de Cyrus-IMAP Los directorios de buzones componen la base de datos ms grande de un sistema Cyrus. Cada directorio se compone de los siguientes ficheros, a excepcin de cyrus.seen, que se suele encontrar bajo la rama /var/lib/imap/user, el resto de ficheros pueden encontrarse bajo la rama /var/spool/imap en un sistema con Fedora Core: Ficheros de mensajes. Hay uno por mensaje, que contiene el mensaje en formato RFC 822. Las lneas del mensaje estn separadas por CRLF, no slo LF. El nombre de fichero del mensaje es el UID del mensaje seguido de un punto (p. ej. 102.). cyrus.header. Contiene un nmero mgico e informacin de tamao variable sobre el propio buzn de correo. cyrus.index. Contiene informacin de tamao fijo sobre el propio buzn de correo y cada uno de los mensajes que contiene. cyrus.cache. Contiene informacin de tamao variable sobre cada uno de los mensajes del buzn de correo. cyrus.seen. Ccontiene informacin de estado, de tamao variable, sobre cada uno de los usuarios que han ledo el buzn de correo y tenan el permiso s.

El programa reconstruct es el indicado en los casos en que estos ficheros se corrompan de algn modo. En un principio, el programa intentar recuperar informacin a partir de los Sistema de correo con Postfix, Cyrus y MySQL 25

ficheros de ndice y de encabezados, tal como fechas, nombre de flags, etc., recontruyendo el resto de informacin de la lectura de los propios ficheros de mensajes. Por lo tanto, ante un fallo de disco o una prdida accidental de datos, podemos restaurar la informacin a partir de una copia de seguridad de los directorios de usuario y el programa reconstruct. Una vez reconstruidos los ficheros de control, ejecutaremos quota -f para restablecer la cuota de cada uno de los buzones a partir de los ficheros raz. 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, que recuperaremos mediante reconstruct, y la rama /var/lib/imap, o rama de configuracin, que se restaura sin proceso posterior.

Utilizacin de cyradm La administracin de los buzones de correo se realiza mediante el programa cyradm o mediante un interfaz al uso como web-cyradm, cuya configuracin detallaremos en un captulo posterior. Usaremos alguno de los administradores definidos en /etc/imapd.conf para acceder a la consola de administracin. En nuestro caso, el usuario cyrus : # cyradm --user cyrus --server localhost IMAP Password: mail.serverdomain.com> Una vez dentro de la consola, podemos teclear help para obtener un listado de todos los comandos, siendo los ms importantes cm y dm, para crear y borrar buzones, respectivamente, lm, que lista los buzones disponibles, sam, que establece las ACL en un buzn, o dam, que borra las ACL de un buzn. Llegados a este punto, crearemos un buzn de prueba de la manera que sigue (nos suponemos dentro de la consola de cyradm): mail.serverdomain.comt> cm user.usr001 mail.serverdomain.com> lam user.usr001 usr001 lrswipcda Ahora ya deberamos ser capaces de dar de alta una cuenta de correo usando el protocolo IMAP en nuestro cliente de correo y nos podramos conectar al servidor. En un captulo posterior a la configuracin de web-cyradm repasaremos la configuracin haciendo uso del programa imtest, tambin includo en el paquete cyrus-imapd-utils.

Sistema de correo con Postfix, Cyrus y MySQL

26

VIII - Cifrado del canalComo complemento a la configuracin del sistema de correo con Postfix y Cyrus, estudiaremos en este captulo la implementacin 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. A travs de las utilidades incluidas en el paquete OpenSSL generaremos certificados de seguridad que aplicaremos a las configuraciones de los programas Postfix y Cyrus-IMAP. La emisin de un certificado de seguridad tienen un nico objetivo: proporcionar informacin nica que prueba que la mquina encargada de cifrar la comunicacin es la mquina a travs de la cual nuestra mquina cliente quiere establecer una comunicacin. La mquina que establece la conexin mediante TLS usar la informacin de los certificados para iniciar un proceso de validacin que evitar la intercepcin maliciosa de la comunicacin. Cada certificado proporcionar informacin sobre una autoridad que se encargar de validar el certificado enviado a travs de una conexin TLS.

La generacin de los certificados Si pretendemos que nuestro servidor ofrezca servicio de correo a terceros y pretendemos que la comunicacin con estos se realice de forma cifrada, es altamente recomendable el uso de un certificado firmado por una autoridad certificadora del tipo Verisign o Thawte. 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 ttulo personal, por lo que ser suficiente con la creacin de una autoridad certificadora propia que se encargar de firmar los certificados. Las dos opciones sern igual de seguras, evitndose con la segunda el elevadsimo coste de un certificado de pago. Resumiremos por tanto los tres pasos a seguir para generar un certificado: Creacin del certificado. Firma del certificado por una entidad certificadora. Instalacin del certificado.

Lo primero que tendremos que hacer ser crear el certificado siguiendo los pasos que se detallan a continuacin, atendiendo a una nica salvedad: No aadiremos palabra de paso a los certificados para evitar el bloqueo del servidor al iniciarse. Creamos una nueva entidad certificadora mediante el script /etc/pki/tls/misc/CA del paquete openssl (existe otro script ms completo que se obtiene de la instalacin del paquete openssl-perl y cuyo uso se recomienda. La ruta de este script quedara en /etc/pki/tls/misc/CA.pl). Adjuntaremos al comando el parmetro -newca para la creacin de la nueva CA: #/etc/pki/tls/misc/CA.pl -newca Seguidamente realizaremos la peticin del certificado: #/etc/pki/tls/misc/CA.pl -newreq-nodes Finalmente firmaremos el certificado: #/etc/pki/tls/misc/CA.pl -newreq-nodes -sign

Sistema de correo con Postfix, Cyrus y MySQL

27

Los ficheros resultantes sern copiados a /etc/postfix/ssl. Estos ficheros son los siguientes: cacert.pem: el certificado de la autoridad certificadora, al cual se remitir al cliente cuando quiera comprobar la autenticidad del certificado que le ha enviado nuestro servidor Postfix. Quedar guardado en /etc/pki/CA/cacert.pem. newcert.pem: el certificado pblico que enviaremos al cliente para establecer la comunicacin segura. newkey.pem: el certificado privado que almacenaremos en el servidor y del cual la parte realmente importante es la clave, que debe permanecer secreta.

Para convertir un fichero de clave con palabra de paso en uno sin palabra de paso, tendremos que ejecutar openssl rsa sobre el fichero de clave original. Por ejemplo, para cambiar el estado de la clave de CA generada anteriormente, teclaramos en la consola lo siguiente: # openssl rsa -inform pem -in /etc/pki/CA/private/cakey.pem -text -out /etc/pki/CA/private/newkey.pem Para finalizar la instalacin ejecutaremos los siguientes comandos: #cp cacert.pem /etc/postfix/ssl/ #cp newcert.pem /etc/postfix/ssl/ #cp newkey.pem /etc/postfix/ssl/ #chown root /etc/postfix/ssl/newkey.pem #chmod 400 /etc/postfix/ssl/newkey.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, podemos usar los certificados emitidos por asociaciones del tipo CACert.org. Ser necesario realizar un alta en su pgina web, aadir el dominio y solicitar la firma del certificado. Instalaremos entonces su certificado raz en cada mquina y tendremos certificados firmados por una entidad reconocida con coste es nulo.

Modificaciones en Postfix Las modificaciones para cifrar el canal desde postfix se harn sobre el fichero /etc/postfix/main.cf, que contendr estas lineas adicionales (que ya se publicaron en el captulo correspondiente a la configuracin de postfix): smtpd_use_tls = yes smtpd_tls_auth_only = yes smtpd_tls_key_file = /etc/postfix/ssl/newkey.pem smtpd_tls_cert_file = /etc/postfix/ssl/newcert.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 As, todas las comunicaciones y autenticaciones que se hagan a travs de smtpd se realizarn mediante TLS. Para aplicar los cambios, reiniciaremos el servidor postfix.

Sistema de correo con Postfix, Cyrus y MySQL

28

Modificaciones en Cyrus-IMAP Para activar el cifrado de la comunicacin en Cyrus-IMAP atenderemos primero a las dos lineas de configuracin referentes al protocolo imap en el fichero /etc/cyrus.conf, bajo la seccin SERVICES: imap imaps cmd="imapd" listen="localhost:imap" prefork=5 cmd="imapd -s" listen="imaps" prefork=1

Donde observamos la ejecucin del protocolo seguro de imap (imaps) y la ejecucin del protocolo imap sin seguridad slo bajo localhost (necesario para el uso de cyradm). Para continuar, aadiremos las siguientes lneas a /etc/imapd.conf: tls_cert_file: /etc/ssl/certs/cyrus-global.pem tls_key_file: /etc/ssl/certs/cyrus-global.key tls_ca_file: /etc/ssl/certs/cyrus-imapd-ca.pem Y ejecutaremos los comandos siguientes, ya que usaremos los mismos certificados que postfix: #cp /etc/postfix/ssl/newcert.pem /etc/ssl/certs/cyrusglobal.pem #cp /etc/postfix/ssl/cacert.pem /etc/ssl/certs/cyrusimapdca.pem #cp /etc/postfix/ssl/newkey.pem /etc/ssl/certs/cyrusglobal.key #chown cyrus:mail /etc/ssl/certs/cyrusglobal.key #chmod 600 /etc/ssl/certs/cyrusglobal.key Para finalizar, observemos cmo el servidor smtp acepta comunicaciones cifradas al validarse (En azul, los comandos a introducir): # telnet localhost 25 Trying 127.0.0.1... Connected to mail.server.net (127.0.0.1). Escape character is '^]'. 220 mail.server.net ESMTP Postfix (Fedora) EHLO localhost 250-mail.server.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. Los distintos mtodos de autenticacin disponibles se ofrecen antes de comenzar el establecimiento del canal seguro. Si alguna cosa no resultara correcta, podemos aumentar el nivel de loggin sobre el fichero /etc/postfix/main.cf y la opcin smtpd_tls_loglevel en un valor de, por ejemplo, 3, que auditaremos sobre el fichero /var/log/maillog.

Sistema de correo con Postfix, Cyrus y MySQL

29

IX - Web-CyradmLlegados a este punto, llega a ser una necesidad poder usar un frontend que simplifique lo mximo posible las tareas bsicas del administrador, como pudieran ser dar de alta o baja a nuevos usuarios, crear nuevos alias, crear nuevos dominios virtuales, administrar contraseas, etc. web-cyradm har exactamente esto por nosotros desde un amigable interface escrito en php.

Comprobando las libreras Tal y como ya explicamos en el Captulo II, web-cyradm necesita un intrprete/servidor de php corriendo en la parte administrativa y, obviamente, un servidor de pginas web en el mismo sitio. No es el objetivo de este manual ayudar a la configuracin de ninguno de los dos servidores, aunque habr que tener en cuenta la instalacin de ciertos paquetes bajo una distribucin de Fedora Core que, de no estar presentes, no permitiran el correcto funcionamiento de web-cyradm. Los paquetes a instalar son los siguientes: php-5.1.2-5 Paquete contenedor del generador de pginas php 5. php-pear-1.4.6-2 Coleccin de clases de autenticacin sobre servidores web PEAR. php-mysql-5.1.2-5 Librera de objetos que aaden soporte MySQL a php. php-pear-DB-1.7.6-4 (Slo sobre Fedora Core 5) Clase oficial de abstraccin de acceso a bases de datos de php. A partir de su versin 5, Fedora Core se distribuye con este componente separado del paquete de PEAR principal.

El fichero ../config/conf.php La distribucin por defecto de web-cyradm nos deja un fichero de configuracin por defecto llamado ../config/conf.php.dist, que habr de ser renombrado o copiado con el nombre de ../config/conf.php. La primera opcin con la que nos encontramos es la opcin del lenguaje a utilizar: $DEFAULTLANG = "es_ES"; Inmediatamente despus, entraremos en la configuracin de acceso al servidor Cyrus (las opciones son bastante explcitas y no necesitan de explicacin adicional): #The Cyrus login stuff $CYRUS = array( 'HOST' => 'localhost', 'PORT' => 143, 'ADMIN' => 'cyrus', 'PASS' => 'secret' ); El siguiente apartado se refiere a la configuracin de la base de datos. En nuestro caso, usaremos MySQL. Dado que web-cyradm usa PEAR como capa de abstraccin durante el acceso a las bases de datos, sera posible el uso de otros servidores de bases de datos como PostgreSQL, teniendo en cuenta que postfix no ofrece soporte nativo para este servidor.

Sistema de correo con Postfix, Cyrus y MySQL

30

$DB = array( 'TYPE' => 'USER' => 'PASS' => 'PROTO' => 'HOST' => 'NAME' => );

'mysql', 'mail', 'secret', 'unix', // set to "tcp" for TCP/IP 'localhost', 'mail'

Seguidamente igualaremos la opcin $LOG_DIR a la ruta donde creamos el archivo de log durante la instalacin del programa. En nuestro caso "/var/log/web-cyradm/". La opcin $SESS_TIMEOUT establece el tiempo de inactividad necesario para considerar una sesin finalizada. Por defecto, el programa nos propone un valor de 1000, que no tocaremos a no ser que fuera necesario. $DEFAULT_QUOTA establece la cuota a asignar por defecto a los buzones cuando creamos un nuevo dominio. El valor por defecto es 20000.

Encriptacin de contraseas web-cyradm soporta el almacenamiento de contraseas encriptadas y desde aqu se recomienda encarecidamente su uso. Para establecer este nivel de encriptacin, igualaremos el parmetro $CRYPT del fichero ../config/conf.php al valor "crypt". Recordemos que en los ficheros que creamos en el captulo correspondiente a la configuracin de PAM, usbamos la opcin crypt=1, que se corresponde con la encriptacin requerida. Si preferimos crear manualmente los usuarios a travs de MySQL, habremos de tener muy en cuenta esta configuracin y usar la funcin crypt() a la hora de introducir la contrasea correspondiente.

Nombres de usuarios web-cyradm nos propone dos modos de introduccin de usuarios, dependiendo del valor que asignemos a la opcin $DOMAIN_AS_PREFIX. Por defecto (valor 0), los nombres de usuario se asignarn sobre la base de un prefijo predeterminado (por ejemplo, test). A partir de este prefijo, web-cyradm ir asignando nombres de usuario por defecto siguiendo el patrn prefijo00 + 1 (en el ejemplo anterior, test001, test002,...). La otra opcin a nuestra disposicin (valor 1) sera el uso de nombres de usuario del tipo nombre.apellido.dominio.net. Si optamos por esta opcin, tendremos que aadir o descomentar una lnea en el fichero /etc/imapd.conf tal que: unixhierarchysep: yes Hay que tener en cuenta que no se pueden mezclar ambos tipos de usuario, por lo que se recomienda pensar bien la configuracin antes de empezar a aadir usuarios o, en caso de duda, dar por vlida la configuracin por defecto. En este punto habremos terminado la configuracin completa de un servidor de correo con postfix, cyrus y mysql con una interface de administracin web con web-cyradm. En los captulos posteriores comprobaremos el funcionamiento correcto de nuestra configuracin y aadiremos a nuestro servidor la capacidad de filtrado de spam y virus, as como una opcin para el usuario que permitir el acceso al correo a travs de la web.

Sistema de correo con Postfix, Cyrus y MySQL

31

X - Probando la configuracinAntes de continuar con la instalacin de componentes adicionales, no est de ms comprobar que la configuracin de todos nuestros servidores funciona de forma adecuada. Mediante la herramienta telnet y un puado de sencillos comandos, comprobaremos el funcionamiento correcto de nuestro servidor de correo.

Comprobando servicios Llegados a este punto del manual, todos los componentes esenciales para el funcionamiento correcto de un servidor de correo estn instalados. A pesar de todo, comprobaremos que cada uno de los servicios est corriendo. Para hacer esto, utilizaremos, en Fedora Core, el comando service, con el cual ejecutaremos las instrucciones que siguen a continuacin (en negrita, las instrucciones a introducir): [root@server ~]# service postfix status Se est ejecutando master (pid 2065)... [root@server ~]# service cyrus-imapd status Se est ejecutando cyrus-master (pid 1946)... [root@server ~]# service mysqld status Se est ejecutando mysqld (pid 1822)... [root@server ~]# service saslauthd status Se est ejecutando saslauthd (pid 2217 2215 2214 2213 2212)... [root@server ~]# service httpd status Se est ejecutando httpd (pid 25873 17834 17833 17832 15284 21796 21795 21794 21793 21792 21791 21790 21789 2124)... En el caso de que algn servicio estuviera cado, lo lanzaremos mediante la instruccin service start. Para continuar, nos aseguraremos de que todos los servicios que nos interesan estn a la escucha (del listado original, slo se muestran las lneas relativas a los servicios que nos interesan): [root@server ~]# netstat -an|grep LISTEN tcp 0 0 0.0.0.0:993 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:995 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:143 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:2000 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:25 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, suponiendo que no se han cambiado las asignaciones por defecto de los mismos, quedan como sigue: 993 995 3306 imap-ssl pop3-ssl MySQL 32

Sistema de correo con Postfix, Cyrus y MySQL

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, si hemos mantenido la configuracin por defecto. En caso contrario, introduciremos la ruta asignada. Haremos login mediante el uso de las credenciales que asignamos en el captulo anterior. Acto seguido, crearemos un nombre de dominio nuevo y alguna cuenta. Los dominios han de pertenecer a nuestro servidor, aunque podemos saltarnos el posible error validando el servidor en el fichero /etc/hosts. Tambien habremos de definir el servidor introducido como local en el fichero /etc/postfix/main.cf (mydestination = domain).

Testeando postfix Para comprobar funcionamiento de postfix, intetaremos la conexin al servicio de smtp e intentaremos mandar un e-mail (en negrita, los comandos a introducir): [root@server ~]# telnet localhost 25 Trying 127.0.0.1... Connected to mail.mailserver.com (127.0.0.1). Escape character is '^]'. 220 mail.mailserver.com ESMTP Postfix (Fedora Core 5) helo localhost 250 mail.mailserver.com MAIL FROM: [email protected] 250 Ok RCPT TO: [email protected] 250 Ok DATA 354 End data with . Mensaje de prueba para probar la configuracin de postfix. . 250 Ok: queued as D78BD469F7B QUIT 221 Bye Connection closed by foreign host. El correo habr quedado enviado al buzn probe. En caso de error, es bastante recomendable tener abierta una consola con la salida del fichero /var/log/maillog, que nos ofrecer informacin muy valiosa sobre todo el proceso de manipulacin de correos.

Comprobando el canal de cifrado TLS La primera accin a realizar es la comprobacin de la existencia del canal cifrado en nuestro servidor de correo: Sistema de correo con Postfix, Cyrus y MySQL 33

[root@server ~]# telnet localhost 25 Trying 127.0.0.1... Connected to mail.mailserver.com (127.0.0.1). Escape character is '^]'. 220 mail.mailserver.com ESMTP Postfix (Fedora Core 5) EHLO localhost 250-mail.mailserver.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. Acto seguido, probaremos la autenticacin mediante TLS a travs de nuestro cliente de correo, asegurndonos de marcar la opcin correspondiente cuando se nos pregunte acerca de si queremos o no usar un canal cifrado SSL:

Probando Cyrus-Imap Para finalizar, haremos unas pruebas que nos aseguren el correcto funcionamiento del servidor de IMAP. Ya que Cyrus se autentica primero a travs de SASL y despus a travs de IMAP, ser necesario, antes de probar la configuracin con las herramientas de Cyrus, asegurarse de que el usuario cyrus est cargado en la base de datos sasldb2. Esto lo haremos, tal y como se vio en el captulo dedicado a Cyrus, mediante la herramienta saslpasswd2: saslpasswd2 -c cyrus Password: Again (for verification): Ahora probaremos la autenticacin bajo cyradm: [root@server ~]# cyradm --user cyrus --server localhost --auth plain Password: IMAP Password: localhost> La primera contrasea se refiere a la contrasea introducida en la tabla sasldb2. La segunda contrasea, se refiere a la de la tabla de MySQL accountusers. Ante cualquier complicacin o error inesperado, acudiremos al fichero /var/log/maillog y estudiaremos la salida. Por ltimo, utilizaremos imtest, una herramientamuy til que nos devolver informacin sobre el servidor de IMAP: [root@server ~]# imtest -m login -a -s localhost -w 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.mailserver.com Cyrus IMAP4 v2.3.1-Invoca-RPM-2.3.12.6.fc5 server ready Sistema de correo con Postfix, Cyrus y MySQL 34

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: S: L01 OK User logged in Authenticated. Security strength factor: 256 C: Q01 LOGOUT Connection closed. Saldremos de imtest mediante la pulsacin de las teclas Control y C.

Sistema de correo con Postfix, Cyrus y MySQL

35

XI FiltradoTres son las herramientas fundamentales que habremos de configurar para obtener un filtrado de los correos de nuestro servidor. Sieve, lenguaje con el cual compondremos filtros en la entrega final del correo, SpamAssassin, programa con el que filtraremos el correo no deseado y ClamAV, potente antivirus que evitar la entrega de correo infectado. Al final de este extenso captulo, probaremos el filtrado con el envo de mensajes infectados y con cabeceras que simularn spam.

El uso de Sieve Aunque la forma ms sencilla de utilizar Sieve es mediante algn tipo de interfaz que nos facilite la tarea y componga el script por nosotros (de hecho, en el siguiente captulo atenderemos, entre otras cosas, a la instalacin y la configuracin de una interfaz que nos permita una generacin de estos filtros mucho ms amena.), no est de ms acercarnos, aunque sea de manera somera, al uso de este lenguaje para la composicin de filtros. Es necesario para la activacin de un script de Sieve que un comando sea ejecutado sobre el mismo servidor mediante la herramienta sieveshell. La herramienta puede ser usada por cualquier usuario que pretenda filtrar o redirigir la entrega de correo, siendo imprescindible que el script haya sido escrito y guardado en un archivo simple de texto. Como ejemplo de uso, vamos a atender a la activacin de un script de ejemplo llamado prueba.sieve: $ sieveshell -user info -authname usuario001 localhost connecting to localhost Please enter your password: > put prueba.sieve > activate prueba.sieve > ls prueba.sieve quit El uso de la consola de sieveshell es muy sencillo, no llegando a la decena el nmero de comandos a nuestra disposicin. Para tener una idea ms clara de cules y para qu sirven estos comandos, ejecutaremos man sieveshell en la consola del sistema. A continuacin, adjuntaremos un ejemplo del uso del lenguaje utilizado por Sieve en los scripts de filtrado. Dicho ejemplo atiende a la cabecera de los mensajes para filtrar segn el remitente o el asunto del mensaje: #Script de Sieve require ["fileinto","reject","vacation", "imapflags","relational", "comparator-i;ascii-numeric","regex","notify"]; if header :contains "Subject" "[SPAM]" { fileinto "INBOX.Spam"; stop; } if header :contains "From" "proveedores.net" { fileinto "INBOX.Proveedores"; } elseif Sistema de correo con Postfix, Cyrus y MySQL 36

header :contains "From" "proveedor01" { fileinto "INBOX.Proveedor01"; } #Fin del script

SpamAssassin Tanto SpamAssassin como ClamAV sern utilizados desde Postfix y a travs de Amavisd-new, que har de interfaz entre los programas y el servidor. En un sistema con una distribucin de Fedora Core, la simple instalacin del paquete RPM correspondiente a SpamAssassin dejar este programa completamente instalado y configurado para su uso. Sin embargo, hay que aclarar un punto que puede ser modificado a gusto del usuario y que optimizar el funcionamiento del programa: No es necesaria la ejecucin del servidor spamd sobre nuestro sistema, por lo que evitaremos la misma mediante el siguiente comando: #chkconfig --del spamassassin La principal ventaja de spamd es su eficiencia, ya que las comunicaciones se establecen a travs del puerto 783 y evitan el tener que cargar un ejecutable cada vez que se hagan las comprobaciones referentes al spam. El principal inconveniente es relativo a la seguridad: aunque bajo, el riesgo de tener corriendo un servidor en un puerto siempre est sujeto a posibles vulnerabilidades por errores en el cdigo. En nuestro caso, cargaremos SpamAssassin a travs de Amavisd-new, que llamar al programa mediante el mdulo de Perl Mail::SpamAssassin. Con esto conseguiremos que el motor con las reglas siempre quede cargado en memoria, obteniendo una eficiencia similar a la de la ejecucin de spamd. No obstante, como hemos dicho anteriormente, esto no es ms que una recomendacin, quedando a gusto del usuario su aplicacin. Para tener un elevado nmero de aciertos con el filtrado de spam, utilizaremos los llamados filtros bayesianos. Este tipo de filtrado requiere un entrenamiento para que sea eficaz en un alto porcentaje de los casos. Para ello, habremos de proporcionar a SpamAssassin un elevado nmero de mensajes, tanto de spam como de ham (no-spam), y esto lo conseguiremos mediante el uso de la herramienta sa-learn (ejecutaremos man sa-learn para documentarnos adecuadamente acerca de este programa). Bsicamente, ejecutaremos salearn --spam para la recoleccin de mensajes que sabemos a ciencia cierta son spam. Con sa-learn --ham haremos todo lo contrario: instruiremos al programa en la recoleccin de correo que no es spam. Es necesario leerse las pginas del manual para ejecutar otras opciones, como la lectura de directorios por lotes. Como SpamAssassin ser llamado por Amavisd-new, la ejecucin de sa-learn preferiblemente tendr que ser a travs del usuario amavis.

ClamAV Al igual que nos ocurra con SpamAssassin, la configuracin por defecto de ClamAV es ms que suficiente para el filtrado de virus sobre el servidor. En un sistema con Fedora Core y para nuestros propsitos, tendremos que asegurarnos de que el demonio clamd.amavisd se ejecuta correctamente al inicio del sistema. Ejecutaremos los comandos siguientes para conseguir nuestros propsitos:

Sistema de correo con Postfix, Cyrus y MySQL

37

#chkconfig clamd.amavisd on #service clamd.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.sock (Can't connect to UNIX socket /var/spool/amavisd/clamd.sock El demonio freshclam-sleep, incluido con el paquete clamav-update ser el encargado de actualizar el antivirus mediante cron. La configuracin por defecto puede verse en /etc/cron.d/clamav-update. Si necesitamos realizar modificaciones a la configuracin de freshclam, lo haremos desde el fichero /etc/freshclam.conf, aunque no es recomendable.

Amavisd-new El fichero de configuracin de Amavisd-new se encuentra en la ruta /etc/amavisd/amavisd.conf y tiene alrededor de quinientas lneas. Para nuestros propsitos solamente ser necesario cambiar una decena de ellas. La idea para el procesamiento de los correos es la siguiente: Un correo se marca como spam o como contenedor no deseado (virus, archivos exe, etc.) y se deja llegar a su destino, lugar donde, a travs de un filtro con Sieve, ser redirigido hacia un contenedor que alojar todos estos correos. Peridicamente, el usuario revisar el contenedor en busca de falsos positivos y borrar el resto. En caso de encontrarnos con falsos positivos, instruiremos a SpamAssassin mediante la opcin forget de sa-learn. Veamos ahora las lneas del fichero /etc/amavisd/amavisd.conf que hemos cambiado para adaptarlo a los propsitos de este manual: $mydomain = 'dominio.net'; #El siguiente directorio tiene que pertenecer #al usuario amavis $QUARANTINEDIR = "/var/virusmails"; $MAXLEVELS = 14; $MAXFILES = 1500; $MIN_EXPANSION_QUOTA = 100*1024; $MAX_EXPANSION_QUOTA = 300*1024*1024; $myhostname = 'mail.dominio.net'; #Slo en caso de necesidad $notify_method = 'smtp:[127.0.0.1]:10025'; $forward_method = 'smtp:[127.0.0.1]:10025'; $final_virus_destiny = D_DISCARD; $final_banned_destiny = D_DISCARD; $final_spam_destiny = D_PASS; $final_bad_header_destiny = D_PASS; #Descomentar si se quieren enviar avisos al remitente #$warnbannedsender = 1; #$warnbadhsender = 1; #Se activa el reenvio a un directorio de los mensajes #infectados. #$virus_quarantine_to = "virusquarantine\@$mydomain"; #Adjuntamos una cabecera al spam $sa_spam_subject_tag = '[SPAM] '; #Rechazamos ficheros adjuntos de los tipos siguientes $banned_filename_re = new_RE( qr'\.[^./]*[A-Za-z][^./]*\.(exe|vbs|pif|scr|bat|cmd| com|cpl|dll)\.?$'i, Sistema de correo con Postfix, Cyrus y MySQL 38

qr'[{}]', qr'.\.(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, qr'.\.(mim|b64|bhx|hqx|xxe|uu|uue)$'i, qr'^\.exe$'i, qr'^application/xmsdownload$'i, qr'^application/xmsdosprogram$'i, qr'^message/partial$'i, qr'^message/externalbody$'i, ); Obviamente, el fichero final depender de las necesidades de cada administrador, siendo lo anterior un mero ejemplo que adapta unas necesidades concretas. En principio, los cambios ms importantes a realizar son los siguientes: o final_spam_destiny, final_virus_destiny, final_banned_destiny, final_bad_header_destiny: Mediante D_DISCARD o D_PASS permitiremos que un correo detectado se descarte o siga su curso, respectivamente, y sea enviado al directorio de cuarentena especificado. Los mensajes descartados se guardarn con las etiquetas spam, virus, banned o badh ms un cdigo de control. warnbannedsender, warnbadhsender: Se activa el envo de un mensaje de aviso al remitente si ste ha sido baneado o las cabeceras de su mensaje estn mal formadas. virus_quarantine_to, banned_quarantine_to, spam_quarantine_to bad_header_quarantine_to: Se activa la cuarentena de los tipos detectados y se mandan al directorio especificado. sa_spam_subject_tag: Se aade un texto a la cabecera para su posterior filtrado mediante Sieve. banned_filename_re: Se rechazan los correos que contengan ficheros adjuntos con las extensiones mostradas.

o o o o

Cuando hagamos algn cambio al fichero de Amavisd-new, habremos de reiniciar el servicio con /etc/init.d/amavisd restart y ser bastante recomendable observar su carga en el fichero /var/log/maillog, donde veremos los mdulos cargados y los posibles errores.

Modificaciones en Postfix En primer lugar, aadiremos las lneas siguientes al fichero /etc/postfix/master.cf: # Amavisd-New filtrado smtp-amavis unix - - n - 2 smtp -o smtp_data_done_timeout=1200 -o disable_dns_lookup=yes 127.0.0.1:10025 inet n - n - - 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,reject -o mynetworks=127.0.0.0/8 -o strict_rfc821_envelopes=yes Sistema de correo con Postfix, Cyrus y MySQL 39

-o smtpd_error_sleep_time=0 -o smtpd_soft_error_limit=1001 -o smtpd_hard_error_limit=1000 Y al fichero /etc/postfix/main.cf le aadiremos la siguiente lnea: #Amavisd-New content_filter = smtp-amavis:[localhost]:10024 Con estas modificaciones haremos que Postfix redirija el trfico hacia el puerto de loopback de Amavisd-new, que procesar el mensaje y lo redigir hacia el puerto 10025, donde hemos habilitado smtpd. Una vez hechas las modificaciones, reiniciaremos Postfix con /etc/init.d/postfix restart.

Filtrado de correo sobre Postfix (anti-UCE) Vamos a habilitar una serie de mecanismos sobre el servidor Postfix que nos permitirn filtrar usos abusivos o malintencionados del mismo. Intentaremos denegar el uso del servidor a todo aquello que creamos que no ha sido solicitado. Para llevar a cabo nuestros propsitos, habremos de aadir varias lneas al fichero /etc/postfix/main.cf: smtpd_helo_required = yes disable_vrfy_command = yes smtpd_recipient_restrictions = reject_invalid_hostname, reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unknown_sender_domain, reject_unknown_recipient_domain, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_recipient_access pcre:/etc/postfix/recipient_checks.pcre, check_helo_access hash:/etc/postfix/helo_checks, check_sender_access hash:/etc/postfix/sender_checks, check_client_access hash:/etc/postfix/client_checks, check_client_access pcre:/etc/postfix/client_checks.pcre, #reject_rbl_client relays.ordb.org, permit smtpd_data_restrictions = reject_unauth_pipelining, permit Tal y como hicimos anteriormente con SpamAssassin, las restricciones aqu mencionadas debern ser ajustadas a las necesidades de cada servidor de correo. Expliquemos con algo de detalle qu se pretende con las lneas adjuntadas, 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. Se deshabilita la verificacin de las direcciones de correo.

Sistema de correo con Postfix, Cyrus y MySQL

40

Seguidamente se deshabilitar la concatenacin de comandos (reject_unauth_pipelining) para evitar ataques de diccionario por parte de spammers. Con permit_mynetworks se acepta cualquier cosa que haya pasado las restricciones de ms arriba, sin importar el destino. Permitimos a continuacin a los clientes autenticados mediante SASL, rechazando a los que no se hayan autenticado. Con check_recipient_access comprobaremos ciertas direcciones de destinatarios antes de aplicar las listas negras locales. Comprobaremos entonces las listas negras locales, las listas blancas locales y las listas negras y blancas combinadas (comnprobacin de HELO/EHLO, remitente (origen en el envoltorio) y cliente (servidor que enva)). Con reject_rbl_client se especifican servidores de listas negras que aadiremos a nuestro gusto (como el especificado ordb.org).

El fichero /etc/postfix/recipient_checks.pcre contendr parmetros para revisar la sintaxis de las direcciones a filtrar. 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. /[!%\@].*\@/ 550 This server disallows weird address syntax. /^postmaster\@/ OK /^hostmaster\@/ OK /^abuse\@/ OK El contenido de /etc/postfix/helo_checks, cuyo cometido es comprobar que el comando HELO/EHLO no utilice ni nuestro dominio ni localhost al conectarse, ser el siguiente: #Comprobaciones de HELO/EHLO liberaliatempus.com REJECT You are not in dominio.com :C webmail.liberaliatempus.com REJECT You are not mail.dominio.com localhost REJECT You are not me :C Este y todos los ficheros de tipo hash, sern compilados, una vez escritos, con el comando postmap , que crear la base de datos Berkeley DB correspondiente. En /etc/postfix/sender_checks se incluyen los remitentes a rechazar. Veamos un ejemplo: # A compilar con postmap ... spammers.com 554 Spam not tolerated here [email protected] OK morespammers.com REJECT El fichero /etc/postfix/client_checks contiene clientes no deseados. Un ejemplo vlido sera el siguiente: # A compilar con postmap ... spammers.com 554 Spam not tolerated here 10 554 Go away! myfriendsdomain.com OK 172.16 OK

Sistema de correo con Postfix, Cyrus y MySQL

41

Lo mismo para /etc/postfix/client_checks.pcre : # Soporte PCRE requerido en Postfix /10\.9\.8\.7/ OK /10\.9\.([89]|10)\.\d+/ 554 Go away. We don't want any! Como hemos he