Tabla de Contenidos

Instalando un sistema de correo electrónico con Ubuntu Hardy, Postfix, Cyrus y Amavisd-new

Adaptado por Félix Molinuevo, FMSI Sistemas de Informática

Introducción

Necesitaba un sistema de correo electrónico completo para mi empresa. Quería conexiones encriptadas y autenticación tanto para enviar como para recibir, así como utilizar IMAP en vez de POP3. La configuración final me permite manejar grandes cantidad de correo-e de envío y recepción, es fácil de usar y muy flexible.

De ninguna manera se ofrecen aquí explicaciones específicas sobre el funcionamiento de un sistema de correo-e, ni de los sistemas mencionados, de manera que es necesario que la persona que inicie este procedimiento tenga conocimientos sobre los mismos, o lea primero su documentación, para aprender así por qué se necesita cada parte aquí explicada.

Generalidades

Cuentas

Para manejar las cuentas existen varias posibilidades. Cada cuenta válida puede estar relacionada a un usuario válido en el sistema, o se puede configurar un backend como una base de datos SQL o LDAP para manejar la autenticación, sin quedar limitado a crear usuarios en el sistema para cada cuenta.

Debido a mis necesidades, y un potencial bajo número de clientes, decidí utilizar autenticación contra cuentas SASL, lo que me evita crear una cuenta en el sistema por cada cuenta de correo-e necesaria, a la vez que mantengo el soporte para dominios virtuales. De esta manera puedo brindar soporte a cualquier dominio con un registro MX apuntando al servidor de correo-e, no sólo mi propio dominio, pero el correo será distribuido a las cuentas autenticadas contra SASL.

Software

Debido a que uso mayoritariamente Debian y sus derivados, este instructivo está orientado a ellos, especialmente a Ubuntu Hardy. Pero puede ser empleado para cualquier distribución de Linux con unas pocas adaptaciones.

El software usado es:

Instalación

Antes de empezar

Antes de empezar a instalar el software, asegurarse que el sistema esté actualizado:

aptitude update
aptitude upgrade -V

En este punto, todo debería estar listo para empezar. El MTA por defaul en Debian, Exim, será desinstalado por Apt automáticamenet cuando Postfix sea instalado. El resto es probablemente todo software nuevo.

Postfix

aptitude install postfix

Esto instalará un sistema Postfix listo para utilizar conexiones encriptadas TLS (SSL). Elegí algunos valores por defecto razonables a las preguntas del instalador de Debian. Cualquier cosa que necesite ser cambiada, podrá serlo más tarde sin demasiados inconvenientes. En este punto, la entrega de correo-e local debería funcionar, pero el sistema aún no está completo.

Cyrus SASL and IMAP

A continuación, se instalarán todos los paquetes necesarios del proyecto Cyrus, como las librerías SASL, el administrador de Cyrus y los programas clientes, así como el demonio Cyrus IMAP. Aunque está disponible, no se va a instalar el demonio POP3 correspondiente. Es una configuración exclusivamente IMAP.

aptitude install libsasl2 libsasl2-modules sasl2-bin
aptitude install cyrus-admin-2.2 cyrus-clients-2.2 cyrus-common-2.2 cyrus-imapd-2.2

Configuración

Se empezará con la configuración de la autenticación Cyrus-SASL. Tanto el servidor SMTP, Postfix, como el servidor IMAP, Cyrus-IMAP, autenticarán usando otro demonio, saslauthd. Saslauthd manejará la autenticación de los usuarios. Con esto en mente, primero se debe comenzar configurando SASL.

SASL

Editar /etc/default/saslauthd para habilitar el demonio y configurar el mecanismo de autenticación.

START=yes
MECHANISMS="sasldb"

Si se desea otro mecanismo de autenticación, aquí es donde debe ser configurado. Aquí el sistema autentica contra cuentas SASL, por lo que sasldb es el método relevante.

Probando SASL

Iniciar el servidor y probarlo.

/etc/init.d/saslauthd start

Ahora se debe crear alguna cuenta en SASL:

saslpasswd2 -c usuario

Y entonces, testearlo:

testsaslauthd -u usuario -p contraseña

Si funciona, se verá

0: OK "Success."

Como resultado. Si es así, saslauthd funciona bien. A continuación, se debe detenerlo

/etc/init.d/saslauthd stop

Finalizando la configuración de SASL

Para que Postfix pueda comunicarse con SASL y Cyrus (revise la configuración más adelante), se debe montar /var/run/saslauthd y /var/run/cyrus dentro de la jaula chroot de Postfix. Esto puede ser hecho usando un montaje bind. Para implementar esto, agregar las siguientes líneas en fstab.

/var/run/saslauthd      /var/spool/postfix/var/run/saslauthd    none    rw,bind         0       0
/var/run/cyrus          /var/spool/postfix/var/run/cyrus        none    rw,bind         0       0

Asimismo, crear los puntos de montaje.

mkdir -p /var/spool/postfix/var/run/saslauthd
mkdir -p /var/spool/postfix/var/run/cyrus

Y entonces, montarlos.

mount /var/spool/postfix/var/run/saslauthd
mount /var/spool/postfix/var/run/cyrus

La misma ubicacion es ahora accesible desde fuera de la jaula chroot en /var/run/saslauthd y desde dentro de ella en /var/spool/postfix/var/run/saslauthd (lo que Postfix ve como /var/run/saslauthd). Esto evita tener que editar el script de inicio de saslauthd, tratar con dpkg, y crear links simbólicos. El único efecto visible será unas líneas adicionales si se ejecuta el comando “df”, ya que éste no sabe que un montaje bind no es un disco por separado.

Como advertencia, no se deben cambiar otras cosas relacionadas con la autenticación SASL, tal como se describe en README.Debian en el paquete de Postfix, porque aquí se está usando otro método para hacer que Postfix se comunique con SASL.

Postfix

Hay varios pasos necesarios para lograr que Postfix quede listo y funcionando. Es necesario configurarlo para conectarse a saslauthd, así como unir Cyrus-IMAP y SquirrelMail. Esta sección explicará sobre las primeras instancias de configuración de Postfix, y las siguiente cubrirán los otros aspectos.

Editar el archivo /etc/postfix/main.cf y agregar las siguientes líneas al final del mismo.

# SASL Auth Settings
smtpd_sasl_local_domain =
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

Asegurarse de tener el nombre correcto del servidor:

myhostname = host.domain.com

Este nombre de host debe ser un host que resuelva en una IP pública válida, y preferentemente que la resolución inversa de ésta sea el mismo nombre de host. Esto evitará rebotes de los mensajes, si los servidores SMTP de destino están configurados más estrictamente.

Luego configurar el destino final, el relay host y aceptar mensajes desde la red interna, si así se necesita:

mydestination = host, host.domain.com, localhost.localdomain, localhost.localdomain, localhost, whatever.com
relayhost = aaa.bbb.ccc.ddd
mynetworks = 127.0.0.0/8 192.168.1.0/24

Autenticación contra relayhost

Si se necesita autenticación SASL en el relayhost/smarthost, agregar las siguientes líneas:

# Authentication on smarthost
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/etc/postfix/client_passwords
smtp_sasl_loglevel = 2

Si se necesita esto, se debe agregar en /etc/postfix/client_passwords el par usuario/contraseña correspondiente al relayhost:

relayhost.domain.com           username:password

y luego ejecutar postmap para compilar esa información:

postmap /etc/postfix/client_passwords

Finalizando y probando

También se debe editar /etc/postfix/sasl/smtpd.conf y poner lo siguiente:

pwcheck_method: saslauthd
mech_list: PLAIN LOGIN

Además, se debe agregar al usuario “postfix” al grupo “sasl”:

adduser postfix sasl

Reiniciar Postfix y revisar si la autenticación está habilitada:

/etc/init.d/postfix reload
telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 dev.ev-15.com ESMTP Postfix (Debian/GNU)

Escribir allí “EHLO domain.com”. Si el servidor responde con algo como lo siguiente, la autenticación está habilitada en el servidor. Escribir “quit” para salir.

250-mail.domain.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250 8BITMIME

Postfix debería estar ahora configurado para autenticar usando saslauthd. Notar que los métodos de anuncio de autenticación son solamente PLAIN y LOGIN, los que son basados en texto. Para habilitar alguno de los métodos de compartición de claves, como CRAM-MD5 o DIGEST-MD5, un método de autenticación diferente debería ser usado. Para evitar entregar estas contraseñas planas a través de Internet, se encapsulará la comunicación dentro de una capa de encriptación usando SSL/TLS.

SSL/TLS

Nota: esta sección no se necesita más, porque Postfix ahora incluye soporte TLS, pero se deja aquí porque se pueden tomar algunas ideas si algo relacionado con SSL falla ;).

Certificates are required to use TLS and SSL. There are generally two classes of certificates: self-signed certificates and certificates signed by one of the major certificate authorities. If you need implicitly trusted certificates that you can use and let your customers be comfortable with, you'll probably want to go to a CA and purchase them. With smaller sites and users who understand certficate warnings, self-signed certificates are easy to create and still allow encryption. They will throw up warnings in mail clients and web browsers, but the certificates can usually be permanently accepted by users.

If the primary goal is encryption and the trust issues are not major, then a self-signed certificate is adequate.

Certificate Creation

The following steps will create a new CA, certificate request, and certificate.

Start with making a new CA.

cd /usr/lib/ssl/misc
./CA.pl -newca

Answer the questions as they come with reasonable information. The value for CN (Common Name) should be the hostname of the server that the certificates will be used on.

Now make the server certificate request.

./CA.pl -newreq-nodes

Now sign it

./CA.pl -sign

Copy the files to /etc/ssl/certs

cp -iva newcert.pem /etc/ssl/certs/
cp -iva newreq.pem /etc/ssl/certs/
cp -iva newkey.pem /etc/ssl/certs/
cp -iva demoCA/cacert.pem /etc/ssl/certs/

Add SSL to Postfix

Edit /etc/postfix/main.cf again and add the following lines to the file.

# TLS Information
smtpd_use_tls = yes
#smtpd_tls_auth_only = yes
smtpd_tls_key_file = /etc/ssl/certs/newkey.pem
smtpd_tls_cert_file = /etc/ssl/certs/newcert.pem
smtpd_tls_CAfile = /etc/ssl/certs/cacert.pem
smtpd_tls_loglevel = 3
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom

Edit /etc/postfix/master.cf and uncomment the following lines.

tlsmgr     fifo   -  -  n  300   1  tlsmgr
smtps   inet   n  -  n  -  -  smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes
587     inet   n  -  n  -  -  smtpd -o smtpd_enforce_tls=yes -o smtpd_sasl_auth_enable=yes

This will enable TLS, the smtps port, and the dedicated port 587 for mail submission.

The line #smtpd_tls_auth_only = yes will be uncommented later so that users are required to encrypt their connections. For now though leave it alone until testing is complete. To test, telnet in again, as above, and see if the line 250-STARTTLS is there. If so then TLS should be available.

Cyrus IMAP

Esta guía usa Cyrus-IMAP, en gran parte por su alta performance, y por el filtro basado en el servidor SIEVE. Una cosa a notar sobre este paquete es que toma un planteo de “caja negra” a la entrega de correo-e IMAP. El correo no es entregado a una carpeta del home del usuario, sino a una serie de carpetas Cyrus dedicadas. Si se desea en cambio que el correo-e sea entregado a maildirs o archivos mbox, entonces los servidores Courier- o UW-IMAP deberían ser mejores elecciones. Más tarde, SquirrelMail y un plugin para editar fácilmente scripts SIEVE serán instalados.

Editar el archivo /etc/cyrus.conf y elegir qué servicios ejecutar. A menos que se desee acceso POP, dejar solamente IMAP, IMAP seguro, y SIEVE. Para seguridad extra, desactivar IMAP para forzar a los usuarios a conectarse utilizando SSL. Dentro de la sección SERVICES, descomentar la línea

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

y comentar las líneas pop3.

Descomentar la siguiente línea, para que Squatter pueda indexar diariamente todas las cuentas:

# reindex all mailboxes (fulltext) daily
squatter_a      cmd="/usr/sbin/squatter" at=0517

Esta configuración usa LMTP. El socket por default en el archivo debería estar bien.

lmtpunix        cmd="lmtpd" listen="/var/run/cyrus/socket/lmtp" prefork=0 maxchild=20

La línea para sieve debería estar ya descomentada, pero se debe chequearlo para estar seguro.

sieve           cmd="timsieved" listen="localhost:sieve" prefork=0 maxchild=100

El resto en el archivo debe dejarse tal como está.

Ahora abrir /etc/imapd.conf. La mayor parte de la configuración debe dejarse como está, pero se deben cambiar algunas pocas cosas. Como siempre, se debe leer los comentarios sobre las diferentes configuraciones en el archivo. La directiva “sieveusehomedir” debe ser puesta a “false” para que la administración remota de Sieve con SquirrelMail funcione.

Para que esta configuración funcione, los siguientes valores deben estar indicados:

admins: cyrus
allowplaintext: yes
sasl_mech_list: DIGEST-MD5 CRAM-MD5 PLAIN LOGIN
sasl_pwcheck_method: saslauthd

Notas sobre sasl_mech_list: DIGEST-MD5 es el mejor mecanismo. CRAM-MD5 es mejor que PLAIN y LOGIN. Los dos últimos son necesarios sólo por las dudas.

IMAP y SSL

Configurar los siguientes valores en imapd.conf, dejando el resto como está.

tls_cert_file: /etc/ssl/certs/newcert.pem
tls_key_file: /etc/ssl/certs/newkey.pem
tls_ca_file: /etc/ssl/certs/cacert.pem
tls_ca_path: /etc/ssl/certs

Terminando la configuración de Cyrus

Cambiar la propiedad de los archivos dentro de /var/lib/cyrus y /var/spool/cyrus:

chown -R cyrus: /var/lib/cyrus/*
chown -R cyrus: /var/spool/cyrus/*

Reiniciar cyrus.

/etc/init.d/cyrus2.2 restart

Luego, iniciar saslauthd otra vez.

/etc/init.d/saslauthd start

Se debe crear al usuario cyrus en SASL, también:

saslpasswd2 -c cyrus

Tal como las cosas han sido configuradas, sólo el usuario cyrus puede administrar el servidor cyrus. Se debe configurar una contraseña para el usuario cyrus y entonces ejecutar un su al usuario cyrus.

passwd cyrus
su - cyrus

Ahora se debe agregar al usuario IMAP, es decir crear la cuenta para el usuario en el servidor CyrusIMAP. Los nombres de usuario deben ser prefijados con “user.”, seguido por el login name para el usuario. Para una cuenta de usuario martin, la mailbox debe ser llamada “user.martin”.

Ingresar en la herramienta de administración de cyrus y crear un nuevo usuario de correo-e igualando un nombre de entrega local que Postfix conozca. Hacer esto para cada cuenta local que reciba correo.

$ cyradm localhost
cyradm> cm user.usuario
... repeat for all users ...
cyradm> quit

Se puede ingresar dentro de cyradm como el usuario cyrus directamente también, sin usar una cuenta de systema de cyrus:

cyradm -u cyrus localhost

Adicionalmente, se debe agregar un alias de mail para esta cuenta de mail, debido a que se están usando cuentas creadas en SASL, pero no en el sistema, y Postfix necesita saber dónde entregarlas.

Editar /etc/aliases y agregar para cada cuenta algo como:

usuario: usuario

Es decir, crear un alias para la propia cuenta. Y luego ejecutar el comando “newaliases” para compilar esos alias nuevos.

Cyrus y Postfix

Editar el archivo /etc/postfix/main.cf y agregar la siguiente línea al archivo, removiendo o comentando cualquier otra línea “mailbox_transport =”.

mailbox_transport = lmtp:unix:/var/run/cyrus/socket/lmtp

Este transporte sólo si se ha montado /var/run/cyrus dentro de la jaula chroot de Postfix, tal como fue explicado anteriormente.

Crear el grupo “lmtp” y agregar al usuario “postfix” a este grupo.

addgroup lmtp
adduser postfix lmtp

Fijar los permisos del directorio de sockets y reiniciar ambos servidores.

dpkg-statoverride --force --update --add cyrus lmtp 750 /var/run/cyrus/socket
/etc/init.d/postfix restart
/etc/init.d/cyrus2.2 restart

Cyrus debería estar ahora unido a Postfix. Todo el correo de Postfix será manejado por Cyrus para ser entregado. Esto fallará si Postfix trata de entregar correo para un usuario que Cyrus no conozca.

Postfix y múltiples dominios

Si el servidor de mail maneja más de un dominio, pero entrega el correo a cuentas locales, el siguiente procedimiento configurará eso. Esto está basado en la guía encontrada en http://www.postfix.org/VIRTUAL_README.html.

Crear el archivo /etc/postfix/virtual y completarlo con entradas como las siguientes

user1@domain1.com  realuser1
user2@domain1.com  realuser2
user3@domain2.com  realuser1
# enviar todo el mail para el domain3 al realuser3
@domain3.com       realuser3

La columna izquierda mapea las direcciones de mail a la cual la gente enviará el correo, mientras que la de la derecha mapea las cuentas locales para las cuales ese correo será entregado (a través de Cyrus IMAP). Una vez que este archivo ha sido creado, se necesita compilarlo para que Postfix lo use; para ello es necesario ejecutar el comando postmap:

postmap /etc/postfix/virtual

Editar /etc/postfix/main.cf y agregar las siguientes líneas.

# Virtual Domain Settings
virtual_alias_domains = domain1.com, domain2.com, domain3.com
virtual_alias_maps = hash:/etc/postfix/virtual

Esto le dice a Postfix a cuáles dominios entregar, y qué archivo usar para chequear dónde entregar el correo. Finalmente reiniciar Postfix y todo debería estar funcionando. El sistema básico debería estar completo en este punto.

Resolución de problemas

La información más útil para la resolución de problemas se encuentra en el archivo /var/log/mail.log. Se debe abrir una console y usar el comando

tail -f /var/log/mail.log

para ver la actividad del servidor. Enviar algunos test de correo a alguna dirección en el servidor, y luego enviar mensajes a otras cuentas fuera del mismo. Si ocurre algún error, usar la información en el log de mail para tratar de encontrar la causa.

Después que todo esté funcionando correctamente, es una buena idea descomentar la línea “smtpd_tls_auth_only = yes” y cambiar el valor de “smtpd_tls_loglevel” a algo más bajo, como 2.

Cyrus

Cuando se está testeando, algunas veces se necesita desactivar la funcionalidad de supresión de duplicados de Cyrus. Hacerlo agregando en /etc/imapd.conf lo siguiente:

duplicatesuppression: no

Filtrado de spam y virus

Spamassassin

aptitude install spamassassin spamc

No se necesita más configuración.

ClamAV

aptitude install rar unrar lha arj unzoo zip unzip bzip2 gzip cpio file lzop nomarch cabextract ripole \
rpm pax p7zip zoo ncompress
aptitude install clamav clamav-base clamav-daemon clamav-freshclam clamav-docs

Libclamav y otros paquetes serán automáticamente instalados.

Asegurarse que la directiva “AllowSupplementaryGroups” exista en el archivo /etc/clamav/clamd.conf.

Amavis

aptitude install amavisd-new

Agregar el usuario “clamav” al grupo “amavis”:

adduser clamav amavis

Reiniciar los demonios:

/etc/init.d/clamav-daemon restart
/etc/init.d/clamav-freshclam restart

Si el hostname en /etc/hostname no es un FQDN (Fully Qualified Domain Name), es necesario modificar el archivo /etc/amavis/conf.d/50-user, agregando:

$myhostname = "mail.domain.com";

para que Amavis tenga el valor correcto de la variable $myhostname.

En el mismo archivo, agregar las siguientes dos líneas para que Amavis envíe los spam/virus en cuarentena a cuentas de correo-e:

$virus_quarantine_to  = "virus-police\@mail.domain.com";
$spam_quarantine_to = "spam-police\@mail.domain.com";

Activar el uso de ClamAV y el filtro de spam SpamAssassin en la configuración de Amavis, editando el archivo /etc/amavis/conf.d/15-content_filter_mode y descomentando las siguientes líneas:

@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);

Si se desea que el spam sea bloqueado y enviado a una cuenta “spam-police”, editar /etc/amavis/conf.d/20-debian_defaults:

$final_spam_destiny       = D_DISCARD;

y comentar la siguiente linea si no se desea que Amavis modifique el subject de los mensajes marcados como spam:

# $sa_spam_subject_tag = '***SPAM*** ';

Si se desea que el spam llegue a las cuentas de los usuarios, editar /etc/amavis/conf.d/20-debian_defaults:

$final_spam_destiny       = D_PASS;

agregar a /etc/amavis/conf.d/50-user cambiando los nombres en la siguiente línea según se necesite, y comentando la línea que habla sobre mail para spam:

@local_domains_maps = ([ ".$mydomain", 'sub.example.net', '.example.com', 'localhost' ]);
# $spam_quarantine_to = "spam-police\@mail.domain.com";

Finalmente, descomentar la siguiente línea si se quiere que Amavis modifique el subject de los mensajes marcados como spam:

$sa_spam_subject_tag = '***SPAM*** ';

De esta manera se deja que los mensajes marcados como spam pasen a las cuentas, mientras que se confía en que el usuario utilice los filtros SIEVE (o los filtros provistos por su cliente de correo-e) para filtrar el spam revisando los headers. Los virus son descartados.

Aquí está la configuración recomendada para permitir y eliminar adosados. Se debe evaluar las necesidades del sistema y poner a punto lo necesario. Descomentar las siguientes líneas:

qr'^application/x-msmetafile$'i,
qr'^\.wmf$',
qr'^message/partial$'i, qr'^message/external-body$'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)$',

Las siguientes líneas se pueden configurar con los siguientes valores (filtro de spam muy estricto):

$sa_tag_level_deflt  = -1000;  # add spam info headers if at, or above that level
$sa_tag2_level_deflt = 1.0; # add 'spam detected' headers at that level
$sa_kill_level_deflt = $sa_tag2_level_deflt; # triggers spam evasive actions
$sa_dsn_cutoff_level = 10;   # spam level beyond which a DSN is not sent

Modificar la configuración de Postfix

Agregar esto a /etc/postfix/master.cf:

smtp-amavis unix -      -       y     -       2  smtp
    -o smtp_data_done_timeout=1200
    -o smtp_send_xforward_command=yes
    -o disable_dns_lookups=yes
    -o max_use=20

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

Y agregar esto a /etc/postfix/main.cf:

content_filter=smtp-amavis:[127.0.0.1]:10024

Reiniciar Postfix:

/etc/init.d/postfix restart

Software adicional

Adicionalmente al servicio de correo-e básico, es posible proveer servicio de webmail usando SquirrelMail, el filtro de spam SpamAssassin y filtro de correo-e de servidor con SIEVE.

Webmail

Para usar el webmail, primero se debe configurar Apache si no está ya hecho. Para instalar Apache y servicios necesarios:

aptitude install apache2 libapache2-mod-php5 php5-imap

Desde que los usuarios ingresarán en SquirrelMail usando un formulario web, es una buena idea activar SSL en el servidor. Apache usa un certificado en una forma algo diferente a la que ha sido usada en esta guía. Combina el certificado del sitio con la clave privada del pedido del certificado. Para crear este archivo, copiar la clave privada de newreq.pem y el certificado firmado de newcert.pem en un nuevo archivo /etc/apache2/ssl/apache.pem.

Activar el módulo SSL.

a2enmod ssl

Copiar el archivo de configuración por defecto en /etc/apache2/sites-available/default a un nuevo archivo en /etc/apache2/sites-available, como “default-ssl”. Editar este archivo. Cambiar la línea “<NameVirtualHost *>” a “<NameVirtualHost *:443>”, la línea “<VirtualHost *>” a “<VirtualHost *:443>” y agregar las siguientes líneas al archivo, dentro de la directiva VirtualHost:

SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.pem

Editar el archivo por defecto del sitio y cambiar la línea “<NameVirtualHost *>” a “<NameVirtualHost *:80>”, y la línea “<VirtualHost *>” a “<VirtualHost *:80>”.

Ahora abrir el archivo /etc/apache2/ports.conf y agregar la siguiente línea al mismo.

Listen 443

Activar el nuevo sitio con SSL..

a2ensite default-ssl

Reiniciar Apache.

/etc/init.d/apache2 force-reload

Ahora que Apache está ejecutándose, instalar el paquete SquirrelMail.

aptitude install squirrelmail

Ejecutar la configuración de SquirrelMail y ajustar los parámetros necesarios.

squirrelmail-configure

La configuración es sencilla. Una vez que está hecho, probar de ingresar en el nuevo sitio de SquirrelMail (la línea “Include /etc/squirrelmail/apache.conf” quizá sea necesario que sea agregada a /etc/apache2/apache2.conf). Si es posible ingresar al sitio, entonces el webmail está listo y funcionando.

Filtros SIEVE

SIEVE es una simple pero poderosa forma de filtrar correo-e en el servidor. En esta configuración es parte del paquete del servidor Cyrus IMAP y se ejecuta en el puerto 2000. La forma más fácil de crear scripts SIEVE es usando el plugin AvelSIEVE para SquirrelMail. Primero se debe bajar el plugin del sitio de SquirrelMail y descomprimirlo en la carpeta de plugins de SquirrelMail. Copiar entonces la configuración de ejemplo al archivo real y editarlo. Quizá no haya que cambiar demasiado.

Ejecutar el script de configuración de SquirrelMail y seleccionar “plugins” para ver la lista de los disponibles. Tipear el número del plugin avelsieve para habilitarlo. Guardar las preferencias y salir, volviendo a la página de SquirrelMail para testearlo.

Pulsar sobre el enlace de nuevos filtros en la barra superior. Si se recibe un error al conectarse, revisar /etc/cyrus.conf. Si se recibe un error de conexión rechazada, testear sieve usando sivtest. Si es posible conectarse a localhost pero no al nombre de host completo a través del DNS, habrá que editar el archivo dicho archivo de configuración para corregir el inconveniente. Quizá haya que remover el parámetro “localhost” de la línea de inicio de sieve, reemplazándolo por el nombre del servidor. Esto hará que sieve escuche sobre la dirección IP del servidor en vez de hacerlo sobre localhost.

Si se obtiene un diálogo que permite agregar una nueva regla, el sistema está listo para ser usado. Es útil crear reglas basadas en el header X-Spam-Flag para mover el mensaje a la carpeta INBOX.Basura, y otros para mover por ejemplo listas de mail a sus respectivas carpetas. Siempre se debe asegurar de grabar las reglas antes de dejar la página, ya que de otra manera no funcionarán.

Lo interesante de los filtros sieve es que aunque han sido configurados a través de SquirrelMail, se ejecutan al nivel del servidor IMAP y todo el correo recibido a través de IMAP seguirá las reglas configuradas.

Conclusion

That's pretty much it. The mail server can now send and receive mail, authenticate users, encrypt connections with SSL, and provide webmail and server-side mail filtering. Good luck with it.

Félix Molinuevo
FMSI Sistemas de Informática
Based on documentation written by Steve Block, 29 January 2005

Agradecimientos

Esta guía no hubiera sido posible sin los desarrolladores de todo el software usado aquí. Me gustaría extender mis agradecimiento a todos ellos. Gracias también a los desarrolladores de Debian y a los mantenedores de paquetes por su excelente configuración de base de Debian y sus correspondientes paquetes.

Gracias a Steve Block por enseñarme cómo crear mi primer servidor de correo-e. Gracias también a él por mostrarme DokuWiki, el wiki que estoy usando ahora, simple, sencillo y rápido.

Bibliografía

  1. Installing a Mail System on Debian Sarge: http://wiki.ev-15.com/debian:mail_system
  2. Postfix, SASL, Cyrus IMAP, MySQL, Amavis, Postgrey, SpamAssassin, ClamAV, Squirrelmail, Mailman, Mailgraph and Openmailadmin: http://openmailadmin.ossdl.de/wiki/howto/Postfix-SASL-Cyrus-MySQL-Amavis-Postgrey-SpamAssassin-ClamAV-Squirrelmail-Mailman-Mailgraph-OMA
  3. Postfix documentation: http://www.postfix.org/docs.html
  4. Tutorial: ISP-style Email Service with Debian-Sarge and Postfix 2.1: http://workaround.org/articles/ispmail-sarge/
  5. How to set up a mail server on a GNU/Linux system: http://flurdy.com/docs/postfix/