Está en la página 1de 22

BULMA: Servidor de correo con Postfix, Cyrus y MySQL administrado desde OpenMailAdmin

Bisoos Usuarios de GNU/Linux de Mallorca y Alrededores | Bergantells Usuaris de GNU/Linux de Ma

Servidor de correo con Postfix, Cyrus y MySQL administrado desde OpenMailAdmin


Per Jaume Sabater, Primetime (http://www.linuxsilo.net/)
Creat el 11/10/2006 14:04 modificat el 11/10/2006 14:04

El propsito de este tutorial es instalar y configurar un servidor de correo electrnico totalmente funcional y de alto rendim
dominios virtuales y alias virtuales. Ser til si se trabaja con un montn de dominios en propiedad y se reciben emails en
desde uno. Este tutorial, una evolucin de mi anterior artculo Configuracin de un completo servidor de correo seguro co
recomendada pues es ms detallado que ste, no est pensado para implementar una solucin del estilo ISP, con buzones d
manual se utilizan las ms modernas tecnologas y protocolos (a excepcin de LMTP) que permiten obtener un sistema efi
Asimismo, se proporcionan muchas facilidades de gestin gracias a la interfaz web OpenMailAdmin.

ndice
1. Introduccin
2. Instalacin de paquetes
3. Configuracin de PAM
4. Configuracin de MySQL
5. Configuracin de Apache y OpenMailAdmin
6. Configuracin de saslauthd
7. Configuracin de Postfix
8. Configuracin de Cyrus IMAP
9. Cifrado del canal (TLS/SSL)
10. SpamAssassin
11. Clam AntiVirus
12. Amavisdnew
13. Medidas antispam (antiUCE) en Postfix
14. Postgrey
15. Mailman
16. SquirrelMail y SIEVE
17. Mailgraph
18. Preguntas frecuentes
19. Bibliografa
20. Historial de revisiones

Introduccin

El propsito de este tutorial es instalar y configurar un servidor de correo electrnico totalmente funcional y de alto rendimiento co
mailboxes), dominios virtuales (del ingls, virtual domains) y alias virtuales (del ingls, virtual aliases). Ser til si se trabaja con u
reciben emails en todos ellos pero slo se enva desde uno. Este tutorial, una evolucin de mi anterior artculo Configuracin de un
Postfix y Cyrus(1), de lectura recomendada pues es ms detallado que ste, no est pensado para implementar una solucin del estilo
Provider), con buzones de correo virtuales (del ingls, virtual mailboxes). En este manual se utilizan las ms modernas tecnologas
permiten obtener un sistema eficiente, robusto, flexible y seguro. Asimismo, se proporcionan muchas facilidades de gestin gracias

Este artculo est basado en Debian Etch(2). Debian(3) es un sistema operativo (SO) libre(4) para ordenadores. El sistema operativo e
utilidades que hacen que funcione el ordenador. Debian utiliza el ncleo Linux(5) (el corazn del sistema operativo), pero la mayor
del Proyecto GNU(6); de ah el nombre GNU/Linux. Debian GNU/Linux ofrece ms que un SO puro; viene con miles de paquetes(7
en un formato que hace ms fcil la instalacin en su ordenador.
Al final del artculo conseguiremos tener un sistema de correo con las siguientes caractersticas:
1/22

BULMA: Servidor de correo con Postfix, Cyrus y MySQL administrado desde OpenMailAdmin

Independencia entre los usuarios de sistema y las cuentas de correo electrnico.


Informacin de las cuentas de correo almacenada en base de datos MySQL(8).
Un dominio local donde se crean cuentas de correo.
Mltiples alias de dominios virtuales con redirecciones a las cuentas del dominio principal.
Autenticacin a travs de SASL (Simple Authentication and Security Layer(9)), con mtodos de texto plano o login.
Transporte seguro del trfico mediante TLS.
Acceso a los buzones por IMAP (Cyrus IMAP(10)) sobre SSL y por webmail (SquirrelMail(11)) sobre SSL.
Filtrado de correo en el servidor a travs de SIEVE(12).
Filtros antivirus (Clam AntiVirus(13)) y antispam (SpamAssassin(14) y Postgrey(15)).
Listas de correo con Mailman(16).
Gestin del servidor a travs de la interfaz web OpenMailAdmin(17).

Instalacin de paquetes

Las siguientes instrucciones toman como punto de partida un sistema Debian Etch(3) funcional con un kernel compilado a medida o
instalador y con una nica interfaz de red con direccin IP pblica pero, por supuesto, puede servir como base para que el lector las
sentencias deben ejecutarse como usuario root o con permisos de root.
aptget
aptget
aptget
aptget
aptget
aptget

install
install
install
install
install
install

postfix postfixdoc postfixmysql postfixpcre openssl cacertificates


libsasl2 libsasl2modules sasl2bin
cyrusadmin2.2 cyrusclients2.2 cyruscommon2.2 cyrusdoc2.2 cyrusimapd2.2 libcyrus
mysqlserver5.0 mysqlclient5.0 libpammysql
apache2mpmprefork libapache2modphp5 php5 php5cli php5mysql libphpadodb
apache2utils nmap ntpdate ccze less wget bzip2

Configuracin de PAM
Acerca de PAM

Desde los inicios de UNIX, la autenticacin del usuario se ha llevado a cabo mediante la solicitud de una contrasea que el sistema
equivalente en el fichero /etc/passwd. La idea es que el usuario es quien dice ser si, y slo si, es capaz de introducir su contrasea s

Eso fueron los inicios. Desde entonces, un gran nmero de formas de autenticacin han ido apareciendo, incluyendo sustitutos ms
dispositivos de hardware como Smart Cards, etc. El problema es que, cada vez que se desarrolla un nuevo mecanismo de autenticac
(login, ftpd, etc) se reescriban para soportarlo.

PAM(18) (del ingls, Pluggable Authentication Modules) proporciona una manera de desarrollar programas que son independientes
programas necesitan cargar mdulos de autenticacin en tiempo de ejecucin para poder funcionar. Qu mdulo de autenticacin s
sistema local y queda a discrecin del administrador de sistemas.
Instalacin y configuracin
Editamos /etc/pam.d/imap para que contenga nicamente las directivas siguientes:
auth sufficient

pam_mysql.so user=postfix passwd=my_passwd host=localhost db=postfix table=user usercolum


passwdcolumn=pass_md5 crypt=3
account required pam_mysql.so user=postfix passwd=my_passwd host=localhost db=postfix table=user usercolum
passwdcolumn=pass_md5 crypt=3

Nota: deben eliminarse las barras invertidas, de modo que queden dos sentencias sin saltos de lnea. En el artculo aparecen para ev
pantalla. Opcionalmente, se puede agregar verbose=1 para que se aada ms informacin a los logs y ayudar a depurar la configura
crear la tabla log en la base de datos y agregar los siguientes parmetros al final de las dos lneas de configuracin:

logtable=log logmsgcolumn=msg logusercolumn=user loghostcolumn=host logpidcolumn=pid logtimecolumn=time sq

Nota: verbose=1 basta que aparezca una nica vez en cada lnea. Con estas sentencias almacenaremos toda la informacin enviada
datos MySQL. Deberemos aadir a la tabla los campos usados en la lnea de cdigo anterior, pero eso lo podremos hacer una vez la
apartado). Establecemos ahora los permisos y enlaces adecuados en /etc/pam.d/:
2/22

BULMA: Servidor de correo con Postfix, Cyrus y MySQL administrado desde OpenMailAdmin
chmod 600 /etc/pam.d/imap
rm force /etc/pam.d/sieve /etc/pam.d/lmtp
ln symbolic /etc/pam.d/imap /etc/pam.d/sieve
ln symbolic /etc/pam.d/imap /etc/pam.d/lmtp
ln symbolic /etc/pam.d/imap /etc/pam.d/smtp

La versin actual de libpammysql, la 0.6.21, no viene con soporte para MD5(19), por lo que deberemos recompilar los fuentes co
mkdir /usr/src/libpammysql
cd /usr/src/libpammysql
aptget source pammysql
aptget builddep pammysql
cd pammysql0.6.2

Para poder bajar los fuentes de un paquete es preciso tener activas las directivas debsrc correspondientes en nuestro /etc/apt/sourc
fichero debian/rules para que quede tal que:
./configure prefix=/usr withopenssl

Modificamos la lnea 109 en el Makefile.in para que sea as:


DEFS = @DEFS@ I. I$(srcdir) I. DHAVE_OPENSSL

Modificamos la lnea 6 del fichero debian/control para que quede as:


BuildDepends: libpam0gdev, libmysqlclient15dev, libssldev, debhelper (>= 4.0.0)

Y construimos el nuevo paquete:


aptget install libssldev
dpkgbuildpackage
cd ..
dpkg install libpammysql_0.6.21_i386.deb

Para que aptget no nos sobreescriba nuestro paquete compilado a medida, podemos ponerlo on hold, de tal manera que un aptge
tiempo podemos ir viendo el changelog del paquete en la web de Debian(20) hasta que veamos una situacin que satisfaga nuestra in
echo libpammysql hold | dpkg setselections

Para quitar el estado on hold:


echo libpammysql install | dpkg setselections

En el caso de que la construccin del paquete (el .deb) no finalice adecuadamente pero la compilacin haya sido exitosa, los siguien
compartida .so con soporte para MD5:
mv /lib/security/pam_mysql.so /lib/security/pam_mysql.so.bak
cp /usr/src/libpammysql/pammysql0.6.2/debian/libpammysql/usr/lib/security/pam_mysql.so /lib/security/
chmod 644 /lib/security/pam_mysql.so
chown root:root /lib/security/pam_mysql.so

Nota: este tutorial ha sido probado en las arquitecturas x86 y x86_64. En la primera la construccin del paquete no finaliz adecuad
finaliz satisfactoriamente.

Configuracin de MySQL
Acerca de MySQL

MySQL es el servidor de bases de datos relacionales ms popular del mundo, desarrollado y proporcionado por MySQL AB. MySQ
generacin cuyo negocio consiste en proporcionar servicios en torno al servidor de bases de datos MySQL. Una de las razones para
de MySQL es que se trata de un producto de cdigo abierto, y por lo tanto, va de la mano con este movimiento.

3/22

BULMA: Servidor de correo con Postfix, Cyrus y MySQL administrado desde OpenMailAdmin

El software de bases de datos MySQL consiste de un sistema cliente/servidor que se compone de un servidor SQL multihilo, varios
herramientas administrativas, y una gran variedad de interfaces de programacin (APIs). Se puede obtener tambin como una biblio
dentro de otras aplicaciones para obtener un producto ms pequeo, ms rpido, y ms fcil de manejar.
Instalacin y configuracin
Establecemos una contrasea para el usuario root:
mysqladmin u root password my_root_passwd

Creamos la base de datos postfix y el usuario postfix:


mysql user=root password mysql
Enter password:
mysql> CREATE DATABASE `postfix` ;
mysql> GRANT USAGE ON *.* TO 'postfix'@'localhost' IDENTIFIED BY 'my_passwd' ;
mysql> GRANT ALL PRIVILEGES ON `postfix`.* TO 'postfix'@'localhost' WITH GRANT OPTION ;
mysql> FLUSH PRIVILEGES ;
mysql> quit

Configuracin de Apache y OpenMailAdmin


Acerca de OpenMailAdmin

OpenMailAdmin(17) es una pequea interfaz para la administracin de cualquier servidor de correo IMAP. Soporta todas las caracte
a la mayora de las configuraciones de los MTAs. Una caracterstica clave es la jerarqua de administracin, la cul no slo separa l
administradores, sino que permite al administrador maestro del servidor crear instancias entre ellos. As, ser posible permitir que o
subusuarios y, de esa manera, compartir un nico servidor de correo entre diferentes organizaciones o proyectos. Sobresale gracias
regulares y a la gestin de las ACLs (del ingls, Access Control Lists) sobre carpetas.
Instalacin y configuracin
Bajamos y descomprimimos OpenMailAdmin y establecemos los permisos adecuados:
mkdir mode=755 /var/www
cd /var/www
wget http://static.ossdl.de/openmailadmin/downloads/openmailadmin0.9.3.tbz2
tar xjf openmailadmin0.9.3.tbz2
mv openmailadmin0.9.3 openmailadmin
chown recursive wwwdata:root /var/www/openmailadmin
chmod 6770 /var/www/openmailadmin
find /var/www/openmailadmin/ type d exec chmod 6770 '{}' ';'
find /var/www/openmailadmin/ type f exec chmod 660 '{}' ';'

Ordenamos a Apache que escuche en el puerto 443 a partir de ahora. Para ello aadimos la directiva NameVirtualHost *:443 al fich
y tambin la directiva Listen 443 al fichero /etc/apache2/ports.conf. Editamos luego el dominio virtual que vayamos a usar para acc
SSL (en este tutorial se usar el dominio fictcio mail.dominio.com, por lo que crearemos el fichero /etc/apache2/sitesavailable/m
<VirtualHost *:443>
ServerAdmin webmaster@dominio.com
ServerName mail.dominio.com
SSLEngine on
SSLCertificateFile "/etc/ssl/local/mail.dominio.com_newcert.pem"
SSLCertificateKeyFile "/etc/ssl/private/mail.dominio.com_newkey.pem"
ErrorLog /var/log/apache2/error_mail.dominio.com.log
CustomLog /var/log/apache2/access_mail.dominio.com.log combined
Alias /openmailadmin /var/www/openmailadmin
<Directory /var/www/openmailadmin/>
AllowOverride All
Order Deny,Allow
Deny From All
Allow From 127.0.0.1

4/22

BULMA: Servidor de correo con Postfix, Cyrus y MySQL administrado desde OpenMailAdmin
Allow From x.y.z.t
<IfModule mod_php5.c>
php_flag file_uploads 0
php_flag ignore_repeated_errors 1
php_flag ignore_repeated_source 1
php_flag display_errors 0
php_flag log_errors 1
</IfModule>
</Directory>
</VirtualHost>

Donde x.y.z.t es la IP pblica de la mquina desde la que accederemos al servidor (nuestro PC). A continuacin creamos el certifica

openssl req new nodes out /etc/ssl/certs/mail.dominio.com_newreq.pem keyout /etc/ssl/private/mail.domi


Country Name (2 letter code) [AU]:
State or Province Name (full name) [SomeState]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:mail.dominio.com
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

La ejecucin de ste comando nos genera dos ficheros:

1. La peticin de nuevo certificado, que una autoridad certificadora (CA) tendr que firmar, en /etc/ssl/certs/mail.dominio.co
2. La clave privada del certificado en /etc/ssl/private/mail.dominio.com_newkey.pem.

Podemos usar CAcert.org(21) para firmar la peticin de certificado. Debido a que CAcert.org tan slo puede verificar la informacin
lo que introduzcamos en los otros campos (el resto lo descarta). El certificado resultante lo dejaremos en el fichero /etc/ssl/certs/ma
permisos 644 para el usuario y grupo root y la clave privada en /etc/ssl/private/mail.dominio.com_newkey.pem con permisos 640 pa
siguiente accin es activar el nuevo dominio virtual:
a2enmod ssl
a2ensite mail.dominio.com
/etc/init.d/apache2 forcereload

Ahora ya podemos comenzar con la configuracin de OpenMailAdmin. Para ello cargamos la direccin siguiente en nuestro naveg
https://mail.dominio.com/openmailadmin/setup.php

Comprobamos que la configuracin del sistema sea la requerida por el software y, de ser as, pasamos al paso siguiente, donde nece
db connection settings

DSN: mysql://postfix:my_passwd@127.0.0.1/postfix
tablenames' prefix:
IMAP connection settings

type: Cyrus IMAPd


host: localhost
port: 143
imap admin: cyrus
... password: my_passwd
first superuser

mailbox of superuser: postmaster


... password: my_passwd

5/22

BULMA: Servidor de correo con Postfix, Cyrus y MySQL administrado desde OpenMailAdmin

Si pretendemos usar las capacidades multiservidor de OpenMailAdmin, adems de leernos la documentacin, ser conveniente aa
opcin tablenames' prefix. El proceso de instalacin crear el fichero /var/www/openmailadmin/inc/config.local.inc.php con la conf
las cinco tablas siguientes en la base de datos postfix:
domains
imap_demo
user
virtual
virtual_regexp

A partir de este momento ya podemos acceder al sistema mediante la cuenta postmaster y la clave my_passwd. En adelante, accede
la URL siguiente:
https://mail.dominio.com/openmailadmin/

Configuracin de saslauthd
Acerca de saslauthd

SASL(9) son las siglas de Simple Authentication and Security Layer, un mtodo para aadir soporte para la autenticacin a protocol
estandarizado por la IETF(22) (Internet Engineering Task Force). Se usa en servidores (en este caso Cyrus IMAP) para manejar las p
Para ello, el protocolo incluye un comando para identificar y autenticar un usuario contra un servidor y para, opcionalmente, negoc
interacciones del protocolo. Si se negocia su uso, una capa de seguridad es aadida entre el protocolo y la conexin.

La librera SASL de Cyrus(23) tambin usa la librera OpenSSL para cifrar los datos. El lector encontrar ms informacin en la pg
Instalacin y configuracin
Editamos /etc/default/saslauthd para ordenar al sistema que arranque el daemon automticamente:
START=yes
MECHANISMS="pam"

Editamos /etc/init.d/saslauthd para conseguir, aadiendo el parmetro r, que la ruta de retorno de un correo sea vlida para nuestr
PARAMS="${PARAMS} a ${MECHANISMS} r"

Opcionalmente, se puede aadir tambin el parmetro V al final de la variable PARAMS para conseguir un mayor nivel de inform
saslauthd dentro de la jaula de Postfix para que ste tenga acceso a l y creamos un enlace simblico en su lugar para que saslauthd
mkdir parents mode=755 /var/spool/postfix/var/run
mv /var/run/saslauthd /var/spool/postfix/var/run/saslauthd
ln symbolic /var/spool/postfix/var/run/saslauthd /var/run/saslauthd
chown root:sasl /var/run/saslauthd

Configuracin de Postfix
Acerca de Postfix

El MTA (Mail Transportation Agent) Postfix(25) pretende ser rpido, fcil de administrar y seguro, a la vez que suficientemente com
los usuarios existentes no se asusten. Por lo tanto, externamente mantiene el estilo de Sendmail, mientras que internamente es comp

A diferencia de Sendmail, Postfix no es un programa monoltico, sino una combinacin de pequeos programas, cada uno de los cu
especializada. En este documento, el lector encontrar la informacin necesaria para tener el sistema funcionando junto a otros com
un sistema de correo electrnico. Puede encontrarse ms informacin sobre Postfix en la documentacin online(27) de su website.

6/22

BULMA: Servidor de correo con Postfix, Cyrus y MySQL administrado desde OpenMailAdmin

Instalacin y configuracin
Empezamos configurando en los ficheros /etc/mailname y /etc/hostname nuestro nombre de dominio:
echo "mail.dominio.com" > /etc/mailname
echo "mail.dominio.com" > /etc/hostname

Deberemos modificar tambin los ficheros /etc/resolv.conf y /etc/hosts de acuerdo a nuestras necesidades. Acto seguido indicaremo
datos MySQL para obtener la informacin que necesita. Creamos el fichero /etc/postfix/canonical.mysql:
hosts = 127.0.0.1
user = postfix
password = my_passwd
dbname = postfix
table = user
select_field = canonical
where_field = mbox
additional_conditions = and active = '1' limit 1

Creamos el fichero /etc/postfix/mydestination.mysql:


hosts = 127.0.0.1
user = postfix
password = my_passwd
dbname = postfix
table = domains
select_field = domain
where_field = domain

Creamos el fichero /etc/postfix/virtual.mysql:


hosts = 127.0.0.1
user = postfix
password = my_passwd
dbname = postfix
table = virtual
select_field = dest
where_field = address
additional_conditions = and active = '1'

Establecemos los permisos adecuados en los ficheros que hemos creado:

chown root:postfix /etc/postfix/canonical.mysql /etc/postfix/mydestination.mysql /etc/postfix/virtual.mysq


chmod 640 /etc/postfix/canonical.mysql /etc/postfix/mydestination.mysql /etc/postfix/virtual.mysql

Editamos el fichero principal de configuracin de Postfix /etc/postfix/main.cf:


7/22

BULMA: Servidor de correo con Postfix, Cyrus y MySQL administrado desde OpenMailAdmin
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
append_dot_mydomain = no
delay_warning_time = 4h
myhostname = mail.dominio.com
mydomain = $myhostname
myorigin = $mydomain
mydestination = $myhostname, $mydomain, localhost.$mydomain, localhost
mynetworks = 127.0.0.0/8, x.y.z.t
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mailbox_size_limit = 0
recipient_delimiter = +
unknown_local_recipient_reject_code = 550
mailbox_transport = cyrus
virtual_alias_domains = mysql:/etc/postfix/mydestination.mysql
virtual_alias_maps = mysql:/etc/postfix/virtual.mysql
sender_canonical_maps = mysql:/etc/postfix/canonical.mysql
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

Donde x.y.z.t es la IP pblica de la mquina. Si el servidor tuviera una IP privada, tambin deberamos aadirla a la lista. Editamos
aadir la siguiente lnea:
cyrus
unix
n
n

pipe
flags= user=cyrus argv=/usr/sbin/cyrdeliver r ${sender} m ${extension} ${user}

Como puede apreciarse, usaremos el programa cyrdeliver para depositar los correos en el buzn en lugar de LMTP. Se puede aadi
para aumentar el nivel de informacin enviada a los logs:
smtp

inet

smtpd v

Creamos /etc/postfix/sasl/smtpd.conf con permisos 644 (root:postfix) con el siguiente contenido:


pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
log_level: 0

Puede darse al parmetro log_level un valor de 7 para aumentar la cantidad de informacin que se aade a los logs y facilitar as la
usuario postfix al grupo sasl para que pueda leer el socket de saslauthd:
adduser postfix sasl

Aadimos etc/postfix/sasl/smtpd.conf a la variable FILES del script /etc/init.d/postfix para que se copie el fichero a la jaula de Postf

El siguiente paso es aadir soporte a Postfix para las expresiones regulares de OpenMailAdmin. Editamos /var/www/openmailadmi
cambiamos la primera lnea para que apunte correctamente al intrprete y el script se ejecute adecuadamente:
#!/usr/bin/env php

Luego modificamos las siguientes variables para que queden as:


$MTA['virtual']
$MTA['regexp']
$MTA['domains']
$PASSWD_CACHE
$DB

8/22

=
=
=
=

'/etc/postfix/virtual';
'/etc/postfix/virtual.regex';
'/etc/postfix/domains';
NULL;

= array('TYPE'
'HOST'

=> 'mysql',
=> 'localhost',

BULMA: Servidor de correo con Postfix, Cyrus y MySQL administrado desde OpenMailAdmin
'USER' =>
'PASS' =>
'DB'
=>
'PREFIX'=>
);

'postfix',
'my_passwd',
'postfix',
'',

Establecemos los permisos correctos en el fichero:


chmod 770 /var/www/openmailadmin/samples/oma_mail.daimon.php

Editar el crontab de root con crontab e y aadimos la siguiente lnea:


0 */2 * * * /var/www/openmailadmin/samples/oma_mail.daimon.php

Alternativamente, podemos crear /etc/cron.d/oma_mail.daimon con el siguiente contenido:


0 */2 * * * root /var/www/openmailadmin/samples/oma_mail.daimon.php

Y solicitamos al daemon que recargue la configuracin con el comando siguiente:


/etc/init.d/cron reload

Esta configuracin har que el script se ejecute cada media hora, con lo cual habr que tener en cuenta que, si aadimos una nueva
deberemos ejecutar manualmente el script desde la consola, o bien esperar unos minutos. El script nos generar un fichero llamado
contendr un volcado de la tabla virtual_regexp. Configuraremos Postfix para que interprete ese fichero y podamos usar as el sopo
OpenMailAdmin (muy til cuando tenemos muchos dominios). Editamos /etc/postfix/main.cf:
virtual_alias_maps = mysql:/etc/postfix/virtual.mysql, regexp:/etc/postfix/virtual.regex

Finalmente, solicitamos a Postfix que actualice su configuracin con las modificaciones realizadas con el comando siguiente:
/etc/init.d/postfix reload

Configuracin de Cyrus IMAP


Acerca de Cyrus IMAP

Cyrus IMAP(10) (Internet Message Access Protocol) es desarrollado y mantenido por el Andrew Systems Group(28) de la Carnegie M

A diferencia de otros servidores IMAP, Cyrus usa su propio mtodo para almacenar el correo de los usuarios. Cada mensaje es alm
de usar ficheros separados es una mayor fiabilidad ya que slo un mensaje se pierde en caso de error del sistema de ficheros. Los m
mensaje (ledo, etc.) se almacenan en una base de datos. Adems, los mensajes son indexados para mejorar el rendimiento de Cyrus
ingentes cantidades de mensajes. No hay nada tan rpido como el servidor IMAP Cyrus.

Otra caracterstica muy importante es que no son necesarias cuentas locales de Linux para cada usuario. Todos los usuarios son aut
convierte en una magnfica solucin cuando se tiene una gran cantidad de usuarios.

La administracin es llevada a cabo mediante comandos especiales de IMAP. Esto le permite usar tanto la interfaz de lnea de coma
mtodo es mucho ms seguro que un interfaz web para /etc/passwd.

Desde la versin 2.1 de Cyrus, se usa la versin 2 de la librera SASL para la autenticacin. En la configuracin descrita en este art
tres capas. Cyrus se autentica con saslauthdaemon, quien redirige la peticin al mecanismo que le hayamos definido, por ejemplo P
usuario en la base de datos MySQL(8).
Instalacin y configuracin

Editamos el fichero de configuracin /etc/cyrus.conf para comentar las lneas de los servicios POP3 y NNTP, pues slo usaremos IM
editamos el fichero /etc/imapd.conf y aadimos o modificamos las siguientes directivas de configuracin:
admins: cyrus

9/22

BULMA: Servidor de correo con Postfix, Cyrus y MySQL administrado desde OpenMailAdmin
sasl_pwcheck_method: saslauthd
allowusermoves: yes
duplicatesuppression: 0
sasl_mech_list: PLAIN LOGIN
sasl_minimum_layer: 0
umask: 027

El manual de Cyrus IMAP contiene informacin acerca de todas las directivas (man imapd.conf). Si se desea poder usar puntos en e
foo.bar@dominio.com, entonces deberemos aadir tambin la siguiente directiva:
unixhierarchysep: yes

Se puede descomentar la lnea siguiente en /etc/default/cyrus2.2 para aumentar el nivel de informacin enviada a los logs:
CYRUS_VERBOSE=1

(Re)iniciamos los servicios para activar la nueva configuracin:


/etc/init.d/saslauthd start
/etc/init.d/cyrus2.2 restart
/etc/init.d/postfix restart

A estas alturas ya deberamos ser capaces de conectarnos al sevidor IMAP y administrarlo mediante la herramienta de consola cyra
acceder:
cyradm user cyrus server localhost auth login

Para monitorizar los logs podemos usar los siguientes comandos:


tail f /var/log/mail.log | ccze
tail f /var/log/auth.log | ccze

Cifrado del canal (TLS/SSL)


Acerca de TLS/SSL

Por defecto, toda comunicacin en Internet se hace sin ningn tipo de cifrado y sin una autenticacin fiable. Esto significa que cual
por la que viaja un paquete puede espiar dicha comunicacin. An peor, es posible redirigir o alterar esa comunicacin para que la
pierda y nadie se d cuenta.

De cara a solventar estos problemas de seguridad, Netscape, Inc.(30) introdujo el protocolo SSL(31) (Secure Sockets Layer), que ha i
estandarizado TLS(32) (Transportation Layer Security). Ofrece tanto cifrado de la comunicacin (frenando las escuchas) como auten
partes de una comunicacin son correctamente identificadas y que la comunicacin no puede ser alterada).

Postfix/TLS no implementa el protocolo TLS por s mismo, sino que usa el paquete OpenSSL(33) para esta tarea. En el website de O
documentacin que profundiza en el protocolo y sus caractersticas.
Instalacin y configuracin

En estos momentos tenemos envo por SMTP en el puerto 25 y recepcin por IMAP en el puerto 143, suficiente para comprobar el
Vamos a aadir cifrado del canal mediante TLS y SSL para proteger tanto las contraseas como el contenido de los mensajes de co
editando el fichero /etc/cyrus.conf:
imap
imaps

cmd="imapd U 30" listen="localhost:imap" prefork=0 maxchild=100


cmd="imapd s U 30" listen="imaps" prefork=0 maxchild=100

Aadimos el usuario cyrus al grupo sslcert para que pueda acceder a la clave privada del certificado:
adduser cyrus sslcert

10/22

BULMA: Servidor de correo con Postfix, Cyrus y MySQL administrado desde OpenMailAdmin

Editamos ahora el fichero de configuracin /etc/imapd.conf:


sasl_minimum_layer: 128
tls_cert_file: /etc/ssl/certs/mail.dominio.com_newcert.pem
tls_key_file: /etc/ssl/private/mail.dominio.com_newkey.pem
tls_ca_file: /etc/ssl/certs/cacert.org.pem

Y reinciamos Cyrus IMAP para que se activen los cambios (recargar la configuracin en este caso no basta pues no se vera que he
sslcert):
/etc/init.d/cyrus2.2 restart

Con estos cambios ya tenemos soporte de SSL para IMAP en el puerto 993 y acceso al 143 nicamente por el localhost (para Squir
podremos comprobar la correctitud de los cambios:
imtest a <username> w <passwd> m login s localhost

Ahora nos falta activar el TLS en Postfix. Para ello editamos el fichero /etc/postfix/main.cf:
smtpd_use_tls = yes
smtpd_tls_auth_only = yes
smtpd_tls_key_file = /etc/ssl/private/mail.dominio.com_newkey.pem
smtpd_tls_cert_file = /etc/ssl/certs/mail.dominio.com_newcert.pem
smtpd_tls_CAfile = /etc/ssl/certs/cacert.org.pem
smtpd_tls_loglevel = 3
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom

Es conveniente cambiar la directiva smtpd_tls_auth_only a yes una vez tengamos el servidor en produccin para que acepte nicam
adems de conexiones sin cifrar. Mientra tanto, dejar este parmetro con el valor no nos puede ayudar a depurar errores.

SpamAssassin
Acerca de SpamAssassin

SpamAssassin(14) es un filtro de correo que trata de identificar el spam mediante el anlisis del texto y el uso en tiempo real de algu
partir de su base de datos de reglas, utiliza un amplio abanico de pruebas heursticas en las cabeceras y el cuerpo de los correos para
como correo electrnico comercial no solicitado. Una vez identificado, el correo puede ser opcionalmente marcado como spam o m
correo del usuario.

SpamAssassin normalmente identifica acertadamente entre un 95 y un 99% del spam, dependiendo del tipo de correo que se reciba
de mensajes de spam, automtica o manualmente, a bases de datos como Vipul's Razor(34).
Instalacin y configuracin
Ms sencillo, imposible:
aptget install spamassassin spamc

Clam AntiVirus
Acerca de ClamAV

ClamAV(13) es una herramienta antivirus GPL para UNIX. El propsito principal de este software es la integracin con los servidor
El paquete proporciona un servicio multihilo flexible y escalable, un analizador de lnea de comandos y una utilidad para la actualiz
programas estn basados en una librera distribuida con el paquete Clam AntiVirus, la cual puede ser usada por su propio software.
mantiene actualizada constantemente.
11/22

BULMA: Servidor de correo con Postfix, Cyrus y MySQL administrado desde OpenMailAdmin

Otras caractersticas destacables son el soporte de firmas digitales en la actualizacin de la base de datos, el anlisis durante el acce
deteccin de ms de 20000 virus, gusanos y troyanos, el soporte integrado para archivos comprimidos con Rar(37), Zip, Gzip(38) y B
Maildir(41) y ficheros crudos de correo.
Instalacin y configuracin
Casi tan sencillo como SpamAssassin. Primero instalamos los paquetes necesarios:
aptget install rar unrar lha arj unzoo zip unzip bzip2 gzip cpio file lzop nomarch
aptget install clamav clamavbase clamavdaemon clamavfreshclam libclamav1 clamavdocs

Luego nos aseguramos de que la directiva AllowSupplementaryGroups existe en el fichero /etc/clamav/clamd.conf. Finalmente, aa
y reiniciamos los servicios:
adduser clamav amavis
/etc/init.d/clamavdaemon restart
/etc/init.d/clamavfreshclam restart

Amavisdnew
Acerca de Amavisdnew

Amavisdnew(42) es un interfaz de alto rendimiento y fiabilidad entre el MTA y uno o ms filtros de contenidos: antivirus o el md
escrito en Perl, asegurando alta fiabilidad, portabilidad y facilidad de mantenimiento. Se comunica con el MTA via (E)SMTP o LM
No existen problemas de sincronizacin en su diseo que pudieran causar prdidas de correos.
Normalmente se posiciona dentro o cerca del gestor de correo principal, no necesariamente donde se ubiquen las cuentas de correo
final). Si se est buscando una solucin que soporte configuracin por usuario y ratios de mensajes pequeas que se ubique al final
procmail o en sustitucin de un agente local de envo), posiblemente puedan encontrarse otras soluciones ms apropiadas.

Cuando est habilitado el uso de Mail::SpamAssassin (SA), se llama a SA una sola vez por mensaje (independientemente del nme
beneficia del uso del mdulo de Perl Net::Server, el cul ofrece un rpido entorno multihilo. Amavisdnew ofrece un servidor SMT
servidor LMTP que cumple con el RFC 2033, un cliente SMTP y genera notificaciones de estado de envo (o no) que cumplen los R
para mltiples analizadores de virus y de correo publicitario en plataformas de correo donde la fiabilidad y el cumplimiento de los e
Instalacin y configuracin
En primer lugar, instalaremos el paquete amavisdnew:
aptget install amavisdnew

Si nuestro /etc/hostname no es un FQDN, es decir, si es un nombre del estilo servidor en lugar de mail.dominio.com, deberemos mo
/etc/amavis/conf.d/50user, aadiendo mail.dominio.com para que Amavis tenga un valor adecuado de esa variable $myhostname.
$myhostname = "mail.dominio.com";

Activamos el uso del antivirus ClamAV y el filtro antispam SpamAssassin en la configuracin de Amavis editando el fichero /etc/a
donde descomentaremos las lneas:
@bypass_virus_checks_maps = (
\%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);
@bypass_spam_checks_maps = (
\%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);

De esta forma, dejaremos pasar los correos identificados como spam, aunque siguen siendo marcados como tales mediante cabecer
destinatarios seguirn recibiendo toda su correspondencia pero podrn filtrarla fcilmente usando SIEVE y las cabeceras que amav
para que se produzca el comportamiento descrito, deberemos tambin editar el fichero /etc/amavis/conf.d/20debian_defaults y ase
final_spam_destiny tenga el valor D_PASS:
12/22

BULMA: Servidor de correo con Postfix, Cyrus y MySQL administrado desde OpenMailAdmin
$final_spam_destiny = D_PASS;

A continuacin se presenta una configuracin recomendada, pero opcional, de adjuntos permitidos y no permitidos. Es preciso que
particulares de cada caso, pues la siguiente configuracin es bastante restrictiva. La conseguimos descomentando las siguientes lne
/etc/amavis/conf.d/20debian_defaults:
qr'^application/xmsmetafile$'i,
qr'^\.wmf$',
qr'^message/partial$'i, qr'^message/externalbody$'i,
[ qr'^\.(Z|gz|bz2)$'
=> 0 ],
[ qr'^\.(rpm|cpio|tar)$'
=> 0 ],
[ qr'^\.(zip|rar|arc|arj|zoo)$'=> 0 ],
qr'.\.(ade|adp|app|bas|bat|chm|cmd|com|cpl|crt|emf|exe|fxp|grp|hlp|hta|
inf|ins|isp|js|jse|lnk|mda|mdb|mde|mdw|mdt|mdz|msc|msi|msp|mst|
ops|pcd|pif|prg|reg|scr|sct|shb|shs|vb|vbe|vbs|
wmf|wsc|wsf|wsh)$'ix,
qr'.\.(mim|b64|bhx|hqx|xxe|uu|uue)$'i,
qr'^\.(exe|lha|tnef|cab|dll)$',

Esta configuracin permite el paso de cualquier adjunto comprimido en formato gzip, bzip2, rpm, cpio, tar, zip, rar, arc, arj y zoo e
extensiones que aparecen (wmf, ade, adp, app, etc). Finalmente, de manera opcional tambin, podemos decirle a Amavis que modif
***SPAM*** cuando identifique un correo como spam (tambin en el fichero /etc/amavis/conf.d/20debian_defaults):
$sa_spam_subject_tag = '***SPAM*** ';

Una vez hayamos configurado amavisdnew a nuestra medida, deberemos reiniciar el daemon para que se actie la nueva configura
/etc/init.d/amavis restart

Ahora que ya tenemos amavisdnew funcionando, vamos a decirle a Postfix que haga uso del nuevo filtro de contenidos. Para ello
/etc/postfix/master.cf, al cul aadiremos las dos siguientes directivas en su seccin Interfaces to nonPostfix software:
smtpamavis unix

o smtp_data_done_timeout=1200
o smtp_send_xforward_command=yes
o disable_dns_lookups=yes
o max_use=20

smtp

127.0.0.1:10025 inet n
y

smtpd
o content_filter=
o local_recipient_maps=
o relay_recipient_maps=
o smtpd_restriction_classes=
o smtpd_delay_reject=no
o smtpd_client_restrictions=permit_mynetworks,reject
o smtpd_helo_restrictions=
o smtpd_sender_restrictions=
o smtpd_recipient_restrictions=permit_mynetworks,reject
o smtpd_data_restrictions=reject_unauth_pipelining
o smtpd_end_of_data_restrictions=
o mynetworks=127.0.0.0/8
o smtpd_error_sleep_time=0
o smtpd_soft_error_limit=1001
o smtpd_hard_error_limit=1000
o smtpd_client_connection_count_limit=0
o smtpd_client_connection_rate_limit=0
o receive_override_options=no_header_body_checks,no_unknown_recipient_checks

Por ltimo, en el fichero /etc/postfix/main.cf, indicaremos a Postfix que utilice un nuevo filtro de contenidos. Postfix redirigir el tr
loopback. Una vez amavisdnew haya finalizado su trabajo, devolver el mensaje a Postfix a travs del puerto 10025, donde hemos
content_filter=smtpamavis:[127.0.0.1]:10024

Ahora tan slo queda reiniciar el servidor Postfix mediante el comando:


/etc/init.d/postfix restart

13/22

BULMA: Servidor de correo con Postfix, Cyrus y MySQL administrado desde OpenMailAdmin

Medidas antispam (antiUCE) en Postfix

Las medidas antiUCE (del ingls, Unsolicited Commercial Email) son una serie de mecanismos que se habilitarn en Postfix para
y tratar de denegar la entrada de una buena parte del correo no solicitado en l. En primer lugar, aadimos las siguientes lneas al fi
smtpd_helo_required = yes
disable_vrfy_command = yes
strict_rfc821_envelopes = 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_helo_access pcre:/etc/postfix/helo_checks.pcre,
reject_rbl_client relays.ordb.org,
reject_rbl_client sbl.spamhaus.org,
#
check_policy_service inet:127.0.0.1:60000,
permit
smtpd_data_restrictions =
reject_unauth_pipelining,
permit

Nota: la lnea check_policy_service inet:127.0.0.1:60000, que indica a Postfix que haga uso del servidor de polticas del puerto 600
instalar en el apartado siguiente.

De este modo, a falta de especificar los ficheros referenciados, establecemos el siguiente flujo en las restricciones aplicadas al smtp
orden es relevante):

1. Las primeras sentencias nos aseguran que el proceso de HELO/EHLO y el envoltorio del mensaje son correctos. Y en la l
direcciones de correo.
2. Deshabilitamos la concatenacin (del ingls, pipelining) de comandos (generalmente slo los spammers tratan de concaten
diccionario).
3. Permitimos cualquier cosa que pase las restricciones de ms arriba y que pertenezca a mynetworks (el destino no importa).
4. Permitimos a los clientes que se han autenticado por SASL.
5. Rechazamos clientes sin autenticar.
6. Comprobamos ciertas direcciones de destinatarios antes de aplicar cualquier lista negra local o de DNS.
7. Comprobamos las listas negras locales, las listas blancas locales y las listas negras y blancas combinadas (comnprobacin
envoltorio) y cliente (servidor que enva)).
8. Comprobamos las listas negras de DNS y de hosts que permiten relay abiertamente.
9. Comprobamos las listas grises de Postgrey (desactivado hasta el punto siguiente del artculo).

Slo aparecen los dos servidores de listas negras de DNS y RHS que utilizo. El primero es el que, particularmente, considero mejor
que tienen relay abierto o activado (tcnicamente es una respuesta de s o no con criterios totalmente objetivos). Queda a merced de
pero, en cualquier caso, es muy recomendable pasarse primero por sus respectivas webs y tener bien claro qu criterios siguen para
digno de aparecer en sus listas negras.

Mediante la directiva check_recipient_access aplicamos sobre el destinatario del mensaje las comprobaciones detalladas en el fiche
se resumen en revisar la sintaxis de las direcciones:
# This file requires PCRE support built into Postfix
/^\@/
550 Invalid address format.
/[!%\@].*\@/
550 This server disallows weird address syntax.
/^postmaster\@/ OK
/^hostmaster\@/ OK
/^abuse\@/
OK

14/22

BULMA: Servidor de correo con Postfix, Cyrus y MySQL administrado desde OpenMailAdmin

Ntese que para poder referenciar ficheros con expresiones regulares, por ejemplo en el /etc/postfix/main.cf la lnea pcre:/etc/postfi
instalado el paquete postfixpcre. Por otra parte, las referencias del tipo dbm:/etc/postfix/helo_checks requieren de la ejecucin del
cree el fichero en formato Berkeley Database con extensin .db.

En la directiva check_helo_access se lleva a cabo una comprobacin muy sencilla pero muy eficiente a la hora de evitar el spam. E
el que sigue:
# This file must be "compiled" with
linuxsilo.net
REJECT You
genma.linuxsilo.net
REJECT You
webmail.linuxsilo.net
REJECT You
66.79.182.201
REJECT You
localhost
REJECT You

"postmap"
are not in linuxsilo.net
are not genma.linuxsilo.net
are not webmail.linuxsilo.net
are not 66.79.182.201
are not me

Aunque parezcan algo triviales, estas comprobaciones son enormemente efectivas y sencillas. Simplemente se verifica que el coma
se conecta a nuestro servidor no use ni nuestro dominio, ni nuestra IP pblica o privada, ni localhost. Otra comprobacin que podr
sera la de la sintaxis del host, que debe cumplir el estndar del RFC. Esta comprobacin aparece comentada en el main.cf de ms a
cualquier caso, ste sera el contenido del fichero referenciado:
# This file requires PCRE support built into Postfix
/^[09]+(\.[09]+){3}$/
REJECT Invalid hostname

Con la directiva check_sender_access podemos realizar comprobaciones sobre el remitente del mensaje. En mi caso particular, este
comentario inicial, pues no le doy uso alguno, pero puede que el lector quiera darle algn tipo de uso parecido al que se propone a c
/etc/postfix/sender_checks:
# This file must be "compiled" with "postmap"
spammers.com
554 Spam not tolerated here
someuser@morespammers.com
OK
morespammers.com
REJECT

Segn este contenido, rechazaramos todo el correo de los dominios spammers.com y morespammers.com excepto el del usuario so

Mediante la directiva check_client_access podemos realizar comprobaciones sobre el cliente que enva el mensaje. En el main.cf pr
referencias a esta directiva, una usando una tabla de hashing y otra expresiones regulares. El autor del artculo tampoco las usa en e
contienen ms que la lnea de comentario inicial pero, de todas maneras, a continuacin se proponen posibles usos. Este sera un eje
/etc/postfix/client_checks:
# This file must be "compiled" with "postmap"
spammers.com
554 Spam not tolerated here
10
554 Go away!
myfriendsdomain.com
OK
172.16
OK

De este modo, pese a que el dominio myfriendsdomain.com y la IP 172.11.0.0/16 pertenezcan a listas negras, nosotros decidimos ac
Asimismo, rechazamos todas las conexiones que provengan del dominio spammers.com y del rango de IPs 10.0.0.0/8. Con expresio
resultados ms complejos, como los del fichero /etc/postfix/client_checks.pcre:
# This file requires PCRE support built into Postfix
/10\.9\.8\.7/
OK
/10\.9\.([89]|10)\.\d+/ 554 Go away. We don't want any!

Esta expresin regular rechazara las conexiones desde el rango 10.9.8.0 10.9.10.255 excepto la direccin 10.9.8.7.
Tras ejecutar los comandos postmap necesarios sobre los ficheros hash tan slo nos queda reinicar Postfix con el comando:
/etc/init.d/postfix restart

Terminologa y notas acerca de las restricciones y las listas de acceso

HELO/EHLO es lo que la mquina que enva le dice que es a nuestra mquina. Puede disfrazarse fcilmente y frecuentemente se c
HELO/EHLO se comprueba a travs de las restricciones en el helo y el hostname del smtpd.

15/22

BULMA: Servidor de correo con Postfix, Cyrus y MySQL administrado desde OpenMailAdmin

Sender es el envoltorio de la direccin remitente (Mail From en la comunicacin SMTP), no la direccin IP de la mquina cliente n
From: de las cabeceras (aunque el envoltorio del remitente perfectamente puede ser el mismo que el From: de las cabeceras). Send
del remitente en el smtpd.

Client es la direccin IP de la mquina que realiza el envo, y posiblemente el hostname (si puede obtenerse alguno de la resolucin
comprueba con las restricciones del cliente en el smtpd.
Recipient hace referencia a la direccin de correo pasada en el comando RCPT TO durante la comunicacin SMTP, no el To: ni el
Recipient se comprueba mediante las restricciones del destinatario en el smtpd.

Si se sitan las listas de acceso antes de las comprobaciones de listas negras de DNS, tal y como se muestra en la configuracin del
como listas negras que como listas blancas. Pero es muy importante ser cauteloso a la hora de usar las listas blancas pues, por ejem
smtpd_recipient_restrictions antes del reject_unauth_destination, podramos dejar el servidor haciendo relay abierto para todo aque
falsificables.

Postgrey
Acerca de Postgrey

Postgrey(15) (Postfix Greylisting Policy Server) es un servidor de polticas para Postfix que implementa listas grises (del ingls, grey
Schweikert(43) del ISG.EE.(44) Cuando Postfix recibe una peticin de envo de un correo electrnico via SMTP, ste construye el tr
Si es la primera vez que se tiene constancia de esta combinacin o si la primera vez que se vio fue hace menos de 5 minutos, entonc
de error temporal. Es de esperar que los servidores que envan correo no deseado o virus no reintentarn el envo, aunque es un requ
ingls, Request For Comments). El siguiente grfico muestra la efectividad de Postgrey:

Instalacin y configuracin

La instalacin y configuracin de Postgrey es muy sencilla. En primer lugar instalamos el paquete postgrey, que ya nos deja una co
necesidades:
aptget install postgrey

Y en segundo lugar, tal y como se comenta en el punto anterior de este tutorial, descomentamos la lnea siguiente de la directiva sm
/etc/postfix/main.cf:
check_policy_service inet:127.0.0.1:60000

Finalmente, solicitamos al daemon de Postfix que recargue la configuracin:


/etc/init.d/postfix reload

Mailman

16/22

BULMA: Servidor de correo con Postfix, Cyrus y MySQL administrado desde OpenMailAdmin

Acerca de Mailman

Mailman(16) es un software libre que permite gestionar listas de distribucin, noticias y correo electrnicos. Mailman est integrado
una fcil administracin de sus cuentas, as como a sus propietarios administrar las listas. Mailman incluye soporte para crear archi
de correo rechazado, filtrado de contenido, envo en modo compendio o resumen, filtros de spam, etc.
Instalacin y configuracin

A continuacin se instalar y configurar Mailman para ser accedido a travs de https y se integrar con Postfix. An as, tras la ins
la documentacin disponible en /usr/share/doc/mailman , principalmente en /usr/share/doc/mailman/README.Debian.gz y en
/usr/share/doc/mailman/README.POSTFIX.gz . En ella se detallan las modificaciones necesarias en Apache para el correcto funci
forma de integrar Postfix y Mailman. Acto seguido se va a configurar mailman, integrndolo con Postfix, para el dominio local.
Primero procederemos a instalar el paquete Debian de Mailman mediante el comando:
aptget install mailman

Editaremos ahora el fichero del site de Apache que hemos venido configurando durante el tutorial, /etc/apache2/sitesavailable/ma
siguientes directivas:
ScriptAlias /mailman/ /usr/lib/cgibin/mailman/
Alias /pipermail/ /var/lib/mailman/archives/public/
Alias /images/mailman/ /usr/share/images/mailman/

Una solicitud de recarga de configuracin a Apache bastar para activar los cambios:
/etc/init.d/apache2 reload

Luego pasaremos a modificar el fichero /etc/mailman/mm_cfg.py de Mailman, del cul modificaremos las dos siguientes variables:
DEFAULT_URL_PATTERN = 'https://%s/cgibin/mailman/'
MTA='Postfix'

Forzamos a Mailman que genere los alias mediante la ejecucin del script genaliases:
/var/lib/mailman/bin/genaliases

Y pasamos a modificar la configuracin de Postfix para integrar ambos programas. Aadiremos o modificaremos los siguientes par
alias_maps = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases
alias_database = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases
mailman_destination_recipient_limit = 1
unknown_local_recipient_reject_code = 550
owner_request_special = no
recipient_delimiter = +

Solicitando a Postfix que recargue la configuracin y regenerando los alias habremos terminado con Postfix:
/etc/init.d/postfix reload
newaliases

la instalacin de Mailman nos avisa de que es necesario crear una site list llamada mailman y que hasta que no la creemos el daemo
momento de crearla y, para ello, ejecutamos el siguiente comando:
newlist mailman

Nota: Es muy recomendable usar una contrasea temporal pues se manda por email. Ms adelante podemos cambiarlo a uno defini
reminders desactivada. Arrancamos el daemon:
/etc/init.d/mailman start

Y ya podemos cargar la pgina web de gestin de listas de Mailman:


17/22

BULMA: Servidor de correo con Postfix, Cyrus y MySQL administrado desde OpenMailAdmin
https://mail.dominio.com/mailman/admin/mailman/

Ntese que las listas creadas lo sern sobre el dominio local mail.dominio.com. Si creamos la lista marketing, el email al cual deber
marketing@mail.dominio.com. Pero podemos usar OpenMailAdmin para establecer alias sobre la cuenta postmaster usando la pest
marketing@dominio.com se redirija a marketing@mail.dominio.com y as hacer las cosas ms fciles para los usuarios.

SquirrelMail y SIEVE
Acerca de SquirrelMail

SquirrelMail(11) es un paquete de correo por web basado en estndares y escrito en PHP(45) 4. Incorpora soporte PHP para los proto
se crean en puro HTML 4.0(46) (sin requerir el uso de JavaScript), de modo que se garantize la mxima compatibilidad entre navega
es muy fcil de instalar y configurar. SquirrelMail tiene toda la funcionalidad que se espera de un cliente de correo electrnico, incl
contactos y gestin de carpetas.
Instalacin y configuracin

Si bien es, estrictamente hablando, suficiente con la instalacin del paquete squirrelmail, es recomendable instalar los paquetes squ
multiidioma) y php5recode (soporte para la recodificacin de juegos de caracteres en PHP):
aptget install squirrelmail squirrelmaildecode squirrelmaillocales php5recode

Debemos cambiar algunos parmetros de configuracin de SquirrelMail para adaptarlos a nuestra instalacin. Ejecutamos el script
paquete:
/usr/sbin/squirrelmailconfigure

Y utilizamos el juego de valores predefinidos para Cyrus:


Set predefined settings for specific IMAP servers = cyrus

Si, y slo si, se estableci la direciva unixhierarchysep: yes en /etc/imapd.conf, entonces ser necesario realizar tambin los siguien
Server
Folder
Folder
Folder

Settings:
Defaults:
Defaults:
Defaults:

Update IMAP Settings: Delimiter = /


Trash Folder = INBOX/Trash
Sent Folder = INBOX/Sent
Drafts Folder = INBOX/Drafts

Opcionalmente, podemos cambiar tambin:


Organization Preferences: Organization Name
Organization Preferences: Organization Logo
Organization Preferences: Organization Title
Message of the Day (MOTD): Edit the MOTD

El siguiente paso es modificar Apache para poder acceder a SquirrelMail a travs suyo. Editamos /etc/apache2/sitesavailable/mai
Alias /squirrelmail /usr/share/squirrelmail
<Directory /usr/share/squirrelmail>
php_flag register_globals off
Options Indexes FollowSymLinks
<IfModule mod_dir.c>
DirectoryIndex index.php
</IfModule>
# access to configtest is limited by default to prevent information leak
<Files configtest.php>
order deny,allow
deny from all
allow from 127.0.0.1
</Files>
</Directory>

18/22

BULMA: Servidor de correo con Postfix, Cyrus y MySQL administrado desde OpenMailAdmin

Recargamos la configuracin de Apache para que surjan efecto los cambios:


/etc/init.d/apache2 reload

Y ya podemos acceder a nuestro correo por interfaz web:


https://mail.dominio.com/squirrelmail/

Habitualmente, los usuarios preferirn un acceso tipo https://webmail.dominio.com/. Para sto ser necesario configurar la entrada p
en el artculo, pues no es su propsito) y otro dominio virtual de Apache de similares caractersticas al que se usa en este artculo:
<VirtualHost *>
ServerName webmail.dominio.com
RewriteEngine on
RewriteCond %{HTTP_HOST} ^webmail\.dominio\.com$ [NC]
RewriteRule ^(.*)$ https://mail.dominio.com/squirrelmail/$1 [R=301,L]
</VirtualHost>

De este modo nos aseguramos un acceso siempre sobre canal cifrado y aprovechamos el certificado que hemos creado con anteriori
Acerca de SIEVE

SIEVE(12) es un lenguaje que puede usarse para crear filtros de correo electrnico en el momento de la entrega final del correo (en e
ningn sistema operativo o servidor de correo en particular. Requiere el uso de la especificacin de mensajes del RFC 822. El lengu
til, pero est limitado de modo que permita la creacin de sistemas de filtrado seguros en el lado del servidor. El objetivo es no pe
complejo (y peligroso) que escribir sencillos filtros de correo, adems de facilitar editores basados en interfaces grficas de usuario
funciones, ni tampoco proporciona variables.

Se supone que el uso del lenguaje tiene lugar al final de la entrega, cuando el mensaje se mueve a una cuenta accesible por el usuar
(Mail Transport Agent) realiza la entrega final (como es tradicional en los sistemas UNIX), es razonable clasificar cuando el MTA
Sin embargo, los filtros Sieve pueden ser usados por varios "puntos finales de entrega" del sistema de correo: por el servidor SMTP
archive una o ms cuentas de usuario, o por un cliente de correo (MUA, Mail User Agent) que acte como gestor de las entregas (p
conexin).

Avelsieve(47) (SIEVE Mail Filters Plugin for SquirrelMail) es un plugin para SquirrelMail(48) que permite crear scripts hechos con S
tenga habilitado el soporte para dicho lenguaje (Tim's SIEVE daemon). Avelsieve es parte de Cyrusmaster(49), una herramienta de a
Debera proporcionar una interfaz similar a la de los filtros de usuario a los administradores y personal de soporte tcnico.
Instalacin y configuracin

Para gestionar los scripts de SIEVE podemos usar el plugin de SquirrelMail Avelsieve SIEVE Mail Filters(47)'. Los siguientes co
de descargas(50) y lo instalarn en el directorio de SquirrelMail:

cd /usr/share/squirrelmail/plugins/
wget http://email.uoa.gr/download/squirrelmail/avelsieve/avelsieve1.9.6.tar.gz
tar xzf avelsieve1.9.6.tar.gz
rm force avelsieve1.9.6.tar.gz
chown recursive root.root avelsieve
cp archive /usr/share/squirrelmail/plugins/avelsieve/config/config_sample.php /usr/share/squirrelmail/pl

Tan slo nos queda activar el plugin usando el script de configuracin de SquirrelMail /etc/squirrelmail/conf.pl. En su seccin Plu
editar el fichero de configuracin /usr/share/squirrelmail/plugins/avelsieve/config/config.php y cambiar las opciones que deseemos

Mailgraph
Acerca de Mailgraph

Mailgraph es un frontend muy sencillo de estadsticas de correo electrnico generadas con RRDtool(51) para Postix y Sendmail que
anuales de todo el correo recibido, enviado, rechazado y rebotado.

19/22

BULMA: Servidor de correo con Postfix, Cyrus y MySQL administrado desde OpenMailAdmin

Instalacin y configuracin
La instalacin consta de dos pasos. El primero es la instalacin del paquete:
aptget install mailgraph

Respecto de las dos cuestiones que nos plantear el instalador, nos interesa que Mailgraph arranque como daemon al iniciarse el sis
entrante como saliente, pues estamos usando filtros de contenidos. El segundo paso ser congigurar Apache para hacer accesible M
configuracin de nuestro dominio, /etc/apache2/sitesavailable/mail.dominio.com, y aadimos la siguiente directiva:
ScriptAlias /mailgraph/ /usr/lib/cgibin/

Solicitamos a Apache que recargue la configuracin:


/etc/init.d/apache2 reload

Y ya podemos acceder a las grficas mediante la URL siguiente:


https://mail.dominio.com/mailgraph/mailgraph.cgi

Preguntas frecuentes
P: Puede Postfix consultar directamente la base de datos MySQL?
R: No

P: Por qu se usa libpammysql si saslauthd soporta SQL nativamente?


R: Porque saslauthd slo soporta contraseas no cifradas y se utiliza una base de datos en el sistema de autenticacin. Esa es la raz
en cambio, puede usar cualquier cosa.
P: He ledo que /etc/postfix/sasl/smtpd.conf debera contener pwcheck_method: pam.
R: Eso es cierto para versiones de SASL anteriores a la 2. Ahora hay que usar saslauthd.

P: Por qu hay que ejecutar saslauthd con el parmetro r?


R: Para que la ruta de retorno sea correcta y para que, en un futuro, cuando los usuarios se autentiquen como usuario@dominio.com
problemas, no te olvides de monitorizar /var/log/auth.log.
P: Por qu se mueve el socket de saslauthd a /var/spool/postfix/var/run/saslauthd?
R: Porque el servicio smtp se ejecuta enjaulado (del ingls, chroot'ed).

P: Por qu se ha aadido etc/postfix/sasl/smtpd.conf a la variable FILES?


R: Porque Postfix necesita acceder al fichero desde dentro de la jaula. El script en /etc/init.d copia la ltima versin de ese fichero d
el servicio.

P: Cmo funciona la cadena de autenticacin?


R: Postfix se conecta a saslauthd a travs del socket, el cul solicita a PAM que autentique el usuario, la cul consulta la tabla adec

P: Por qu se utiliza 127.0.0.1 en lugar de localhost en la configuracin de Postfix?


R: Para que se use un socket de TCP en lugar de un socket UNIX. De este modo no tenemos que mover el socket de MySQL dentro

Bibliografa
Configuracin de un completo servidor de correo seguro con Postfix y Cyrus(1)
Greylisting: the next step in the spam control war(52)
ISP Mailserver Solution Howto(53)
Postfix SMTP AUTH with TLS on Debian GNU/Linux(54)
Postfix MySQL Howto(55)
Enabling SASL in Postfix(56)
20/22

BULMA: Servidor de correo con Postfix, Cyrus y MySQL administrado desde OpenMailAdmin

Postfix FAQ(57)
Postfix Virtual Domain Hosting Howto(58)
Postfix SMTPAUTH 4 DUMMIES(59)
Running Cyrus IMAP. Configuring virtual domains with Cyrus+Postfix in FreeBSD 5.4(60)
ISPstyle Email Service with DebianSarge and Postfix 2.1(61)
Sarge postfix/saslauthd issues(62)
OpenMailAdmin PostfixSASLCyrusMySQLHOWTO(63)
OpenMailAdmin Configure Support for Multiple Servers(64)
OpenMailAdmin Detailed Installation Instructions(65)
OpenMailAdmin Compiling Postfix with TLS/SSL(66)
PostfixCyrusWebcyradmHOWTO(67)
Postfix and SpamAssassin(68)

Historial de revisiones
Fecha

Versin

Cambios

08/10/2006

1.0

Documento inicial

Lista de enlaces de este artculo:


1. http://linuxsilo.net/articles/postfix.html
2. http://www.debian.org/releases/etch/
3. http://www.debian.org/
4. http://www.debian.org/intro/free
5. http://www.kernel.org/
6. http://www.gnu.org
7. http://www.debian.org/distrib/packages
8. http://www.mysql.com/
9. http://www.imc.org/ietfsasl/
10. http://asg.web.cmu.edu/cyrus/imapd/
11. http://www.squirrelmail.org/
12. http://www.cyrusoft.com/sieve/
13. http://www.clamav.net/
14. http://www.spamassassin.org/
15. http://isg.ee.ethz.ch/tools/postgrey/
16. http://www.gnu.org/software/mailman/
17. http://www.openmailadmin.org/
18. http://www.kernel.org/pub/linux/libs/pam/
19. http://bugs.debian.org/cgibin/bugreport.cgi?bug=373834
20. http://packages.debian.org/unstable/admin/libpammysql
21. http://www.cacert.org/
22. http://www.ietf.org/
23. http://asg.web.cmu.edu/sasl/sasllibrary.html
24. http://asg.web.cmu.edu/sasl/
25. http://www.postfix.org/
26. http://www.sendmail.org/
27. http://www.postfix.org/documentation.html
28. http://asg.web.cmu.edu/
29. http://www.cmu.edu/
30. http://www.netscape.com/
31. http://wp.netscape.com/eng/ssl3/
32. http://www.ietf.org/html.charters/tlscharter.html
33. http://www.openssl.org/
34. http://razor.sourceforge.net/
35. http://www.linux.org/
36. http://www.freebsd.org/
21/22

BULMA: Servidor de correo con Postfix, Cyrus y MySQL administrado desde OpenMailAdmin

37. http://www.rarlab.com/
38. http://www.gzip.org/
39. http://sources.redhat.com/bzip2/
40. http://www.qmail.org/qmailmanualhtml/man5/mbox.html
41. http://www.qmail.org/qmailmanualhtml/man5/maildir.html
42. http://www.ijs.si/software/amavisd/
43. http://people.ee.ethz.ch/~dws/
44. http://isg.ee.ethz.ch/
45. http://www.php.net/
46. http://www.w3.org/TR/1998/REChtml4019980424/
47. http://email.uoa.gr/projects/squirrelmail/avelsieve.php
48. http://www.squirrelmail.org/plugin_view.php?id=73
49. http://email.uoa.gr/projects/cyrusmaster/
50. http://email.uoa.gr/projects/squirrelmail/avelsieve_download.php
51. http://oss.oetiker.ch/rrdtool/
52. http://projects.puremagic.com/greylisting/
53. http://www.marlow.dk/site.php/tech/postfix
54. http://archives.neohapsis.com/archives/postfix/200307/2992.html
55. http://www.postfix.org/MYSQL_README.html
56. http://linsec.ca/misc_services/postfix_sasl.php
57. http://www.seaglass.com/postfix/faq.html
58. http://www.postfix.org/VIRTUAL_README.html
59. http://www.nervous.it/txt/PostfixSMTPAUTH4DUMMIES.html
60. http://www.onlamp.com/pub/a/onlamp/2005/10/06/cyrus_imap.html
61. http://workaround.org/articles/ispmailsarge/
62. http://www.webservertalk.com/archive99200591127395.html
63. http://openmailadmin.ossdl.de/wiki/howto/PostfixSASLCyrusMySQL
64. http://openmailadmin.ossdl.de/wiki/Documentation/Installation/MultiServer
65. http://openmailadmin.ossdl.de/wiki/Documentation/Installation/Detailed
66. http://openmailadmin.ossdl.de/wiki/howto/Postfix
67. http://www.delouw.ch/linux/PostfixCyrusWebcyradmHOWTO/html/
68. http://ezine.daemonnews.org/200309/postfixspamassassin.html
Email del autor: jsabater _ARROBA_ linuxsilo.net
Podrs encontrar este artculo e informacin adicional en: http://bulma.net/body.phtml?nIdNoticia=2349

22/22