Guia de referencia rápida para Postfix, amavis-new, clamav, spamassassin, procmail y dovecot en Ubuntu

Esquema general



Acceso IMAP/POP3 seguro con Dovecot

Podremos acceder a nuestro correo utilizando los protocolos IMAP o POP3 gracias a Dovecot. Lo instalaremos mediante:

aptitude install dovecot-imapd dovecot-pop3d

Dado que se recomienda un acceso cifrado (IMAPs/POP3s), vamos crear los certificados necesarios:

mkdir /etc/dovecot/ssl
cd /etc/dovecot/ssl
openssl req -new -x509 -nodes -out dovecot.pem -keyout dovecot.pem -days 3650

Respondemos a las preguntas, por ejemplo:

Country Name (2 letter code) [AU]:ES
State or Province Name (full name) [Some-State]:Catalunya
Locality Name (eg, city) []:Tarragona
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Marble Station
Organizational Unit Name (eg, section) []:MS
Common Name (eg, YOUR name) []:localhost
Email Address []:marble@localhost

Ahora podemos configurar Dovecot editando “/etc/dovecot.conf”, indicaremos que queremos que se activen los protocolos IMAPs y POP3s (cifrados). Para IMAP3, el usuario tendrá acceso a su buzón principal ubicado en “/var/mail/usuario” y a todos los buzones que tenga en el directorio “mail” de su directorio personal:

protocols = imaps pop3s

...

ssl_cert_file = /etc/dovecot/ssl/dovecot.pem
ssl_key_file = /etc/dovecot/ssl/dovecot.pem

...

default_mail_env = mbox:~/mail/:INBOX=/var/mail/%u

Iniciamos el servicio:

/etc/init.d/dovecot start

Ahora ya es posible acceder a nuestro mail mediante un cliente como Evolution. Si utilizamos el protocolo POP3 el correo se bajará a nuestra máquina y se eliminará del servidor, sin embargo, si usamos IMAP podremos acceder a los mails de forma remota, conservandose en el servidor.

Postfix

Postfix será el servidor SMTP. Para configurarlo mínimamente:

dpkg-reconfigure postfix

Contestamos:

  1. Tipo configuración: Internet Site
  2. Destino de los mails dirigidos a root: NONE
  3. Dominio: server1.example.com
  4. Otros destinos para los que aceptar correo: server1.example.com, localhost.example.com, localhost
  5. Actualizaciones sincronizadas (más seguro, no se pierden mails): Yes
  6. Redes locales: 127.0.0.0/8
  7. Usar procmail para entrega local: Yes
  8. Limite del tamaño de buzón: 0
  9. Caracter extensión: +

Instalamos antivirus Clam:

aptitude install clamav-daemon

Instalamos diversos decompresores para que el antivirus sea capaz de analizar ficheros comprimidos:

aptitude install unrar-nonfree lha arj unzoo zip unzip bzip2 gzip cpio file lzop

Instalamos los protectores colaborativos contra Spam, Pyzor y Razor. Ambos calculan un hash del mensaje y consultan a un servidor de internet si corresponde a un mail de publicidad. Este paso es opcional.

aptitude install pyzor razor

Instalamos el bloqueador de correo basura spamassasin:

aptitude install spamassassin

A continuación instalamos el agente intermediario que conectará nuestro servidor de correo Exim con spamassasin y clamav:

aptitude install amavisd-new

Editamos “/etc/amavis/amavisd.conf” y modificamos:

# Útil para añadir a la cabecera del mail:
#    X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at marblestation.homeip.net
$mydomain = 'marblestation.homeip.net';

...

# Dejar pasar los spams, filtraremos por procmailrc. 
# Si los correos pasan antes por otro MX "cercano" o local (por ejemplo lo bajáis con el fetchmail)
# no hagáis un REJECT, que estaréis tirando piedras a vuestro propio tejado.
$final_spam_destiny = D_PASS;

...

# Descomentamos las siguientes lineas.
# Enviara los mails analizados de vuelta al puerto 10025 de localhost.
$forward_method = 'smtp:127.0.0.1:10025';  # where to forward checked mail
$notify_method = $forward_method;

...

# Comentamos la siguiente linea para que los avisos de virus no los reciba una persona concreta
#$virus_admin = "postmaster\@$mydomain";

....

# Dejamos pasar los mails infectados, los filtraremos por procmail
$final_virus_destiny      = D_PASS;  # (defaults to D_BOUNCE)

...

# Comentamos las siguientes líneas para no poner los virus/spam en cuarentena
#$virus_quarantine_to  = 'virus-quarantine';
...
#$spam_quarantine_to = 'spam-quarantine';

...

# Comentamos la siguiente linea para que no se modifiquen los subjects de correos spam, los
# filtraremos por otras cabeceras con procmail.
#$sa_spam_subject_tag = '***SPAM*** ';

Editamos el archivo de configuración de Postfix “/etc/postfix/master.cf” y añadimos al final:

smtp-amavis unix -      -       n     -        2  smtp
    -o smtp_data_done_timeout=1200
    -o disable_dns_lookups=yes
127.0.0.1:10025 inet n  -       n     -       -  smtpd
    -o content_filter=
    -o disable_dns_lookups=yes
    -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
    -o smtpd_error_sleep_time=0
    -o smtpd_soft_error_limit=1001
    -o smtpd_hard_error_limit=1000

Con esto escucharemos por el puerto 10025 de forma local (no aceptaremos conexiones desde otras máquinas), dado que por ahí será por donde recibiremos los mails ya analizados de amavis-new.

Ejecutamos:

postconf -e 'content_filter = smtp-amavis:[127.0.0.1]:10024'

Esto añadirá al final del archivo “/etc/postfix/main.cf” la linea “content_filter = smtp-amavis:[127.0.0.1]:10024”. Así se enviará todo mail recibido a amavis, el cual escucha por el puerto 10024 en nuestra máquina.

Reiniciamos los servicios y todo estará listo:

/etc/init.d/amavis restart
/etc/init.d/postfix restart

En el directorio de nuestro usuario, por ejemplo “marble”, creamos el fichero “.procmailrc”:

## Si es un spam se lo indico al bogofilter...
#:0 c
#* ^X-Spam-Status: Yes
#|bogofilter -s -l

# ...y luego lo pongo en ~/mail/spams
:0:
* ^X-Spam-Status: Yes
mail/spams

# Compruebo si es un virus...
:0:
* ^X-Amavis-Alert: INFECTED
mail/virus

## Hago el segundo filtrado antispam
#:0HB
#* ? bogofilter -u -l
#mail/spams

Podemos comprobar el correcto funcionamiento enviando un mail manualmente (a un usuario existente), haciendo telnet al puerto 25 de nuestro propio ordenador:

$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
220 localhost.localdomain ESMTP Postfix (Ubuntu)
MAIL FROM: marble@localhost
250 Ok
RCPT TO: marble@localhost
250 Ok
DATA
354 End data with .
Subject: Hola!!

Que tal?

.
250 Ok: queued as 1AF8722D564
quit
221 Bye
Connection closed by foreign host.

Si se ha recibido correctamente el correo, este estará almacenado en “/var/mail/marble” (dado que se ha enviado al usuario marble@localhost).

Para acceder al mail es posible utilizar un cliente de correo como mutt o configurar Evolution para correo local con buzones tipo MBOX (usando el buzón “/var/mail/marble”) y el envio mediante SMTP (localhost).

TLS

Veamos como activar la encriptación por el puerto 25 para poder enviar correos de forma segura.

mkdir /etc/postfix/ssl
cd /etc/postfix/ssl
openssl req -new -x509 -nodes -out smtpd.pem -keyout smtpd.pem -days 3650

A las preguntas contestamos según sea nuestro caso, por ejemplo:

Country Name (2 letter code) [AU]:ES
State or Province Name (full name) [Some-State]:Catalunya
Locality Name (eg, city) []:Tarragona
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Marble Station
Organizational Unit Name (eg, section) []:MS
Common Name (eg, YOUR name) []:localhost
Email Address []:marble@localhost

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Modificamos la configuración de Postfix ejecutando:

postconf -e 'smtp_use_tls = yes'
postconf -e 'smtpd_use_tls = yes'
postconf -e 'smtp_tls_note_starttls_offer = yes'
postconf -e 'smtpd_tls_key_file = /etc/postfix/ssl/smtpd.pem'
postconf -e 'smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.pem'
postconf -e 'smtpd_tls_CAfile = /etc/postfix/ssl/smtpd.pem'
postconf -e 'smtpd_tls_loglevel = 1'
postconf -e 'smtpd_tls_received_header = yes'
postconf -e 'smtpd_tls_session_cache_timeout = 3600s'
postconf -e 'tls_random_source = dev:/dev/urandom'

Recargamos Postfix:

/etc/init.d/postfix reload

Comprobamos que ya tenemos activa la opción TLS conectandonos por telnet al puerto 25 e indicando “EHLO localhost”, si en el listado que imprime se muestra “STARTTLS” es que todo ha ido correctamente:

$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
220 localhost.localdomain ESMTP Postfix (Ubuntu)
EHLO localhost
250-localhost.localdomain
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250 8BITMIME
quit
221 Bye
Connection closed by foreign host.

Si queremos que clientes como Evolution o Outlook conecten correctamente de forma segura con nuestro SMTP, vamos a tener que añadir la siguietne linea a “/etc/postfix/master.cf”:

## Abre el puerto 465 para SMTPS (usado por Outlook o Evolution para conexiones seguras)
smtps    inet  n       -       n       -       -       smtpd
      -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes

Y a continuación habrá que reiniciar Postfix:

/etc/init.d/postfix reload

Más información sobre Postfix TLS: http://www.postfix.org/TLS_README.html

Autentificación

Postfix utiliza SASL para la autentificación de usuarios, por tanto instalaremos los ejecutables que gestionan SASL:

aptitude install sasl2-bin

Descomentamos de “/etc/default/saslauthd” la línea:

START=yes
...

Iniciamos el demonio:

/etc/init.d/saslauthd start

Este esperará peticiones de autentificación mediante el socket UNIX “/var/run/saslauthd/mux”, podemos comprobar su correcto funcionamiento mediante:

testsaslauthd -f /var/run/saslauthd/mux -u [USUARIO] -p [PASSWORD]

A continuación podemos configurar Postfix para que utilice la autentificación, permitiendo que esta solo sea llevada a cabo cuando se utilizan conexiones seguras (TLS):

postconf -e 'smtpd_tls_auth_only = yes'
postconf -e 'smtpd_sasl_auth_enable = yes'
postconf -e 'smtpd_sasl_security_options = noanonymous'
postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'
postconf -e 'broken_sasl_auth_clients = yes'

A continuación indicamos a Postfix que utilice slasauthd para la autentificación:

echo 'pwcheck_method: saslauthd' >> /etc/postfix/sasl/smtpd.conf
echo 'mech_list: plain login' >> /etc/postfix/sasl/smtpd.conf

Para que Postfix tenga permisos para consultar slasauthd, tendremos que editar “/etc/group” para añadir el usuario “postfix” al grupo “sasl”:

...
sasl:x:45:postfix
...

Finalmente reinciamos Postfix:

/etc/init.d/postfix reload

Ya podemos probar el envio de mails con algún cliente como Evolution, desde el cual se podrá especificar que el servidor SMTP requiere autentificación.

Autor: Marble

This entry was posted in GPL Tarragona. Bookmark the permalink.

15 Responses to Guia de referencia rápida para Postfix, amavis-new, clamav, spamassassin, procmail y dovecot en Ubuntu

  1. Osiris says:

    Ja fa temps vaig intentar configurar tot això per un projecte de navegació via e-mail (una paranoia) i no em vaig sortir. Ho tornaré a intentar ara que sembla que ho has “mascat” tot prou bé!

    si em surto et dec una birra! 😀

  2. Omar Salazar says:

    Saludos, quisiera saber donde obtuviste la documentación para montar los servicios de los cuales hablas en este tema.
    Hiciste algún curso o algo?

  3. Administrator says:

    No entiendo muy bien la pregunta, pero la documentación que utilice fue la que encontré por internet… y esto mismo lo utilizamos en los cursos que damos.

  4. javi says:

    Muy buen articulo, simple y comodo
    solo queria hacer una pregunta
    me da el siguiente error cuando restarteo por primera vez el postfix
    Stopping Postfix Mail Transport Agent: postfixpostfix: fatal: /etc/postfix/main.cf, line 33: missing ‘=’ after attribute name: “smtp-amavis unix – – n – 2 smtp -o smtp_data_done_timeout = 1200 -o disable_dns_lookups = yes

    cuando lo puse igual que arriba
    alguna idea?

  5. javi says:

    perdon estaba dormido lo habia tipeado mal.
    Con respecto a un warning smt-amavis que salia en el log (no such file)
    con postsuper -r ALL
    deja de aparecer
    saludos!

  6. Seba says:

    hola. muy buen articulo.
    por lo que vi lo hiciste en ubuntu. en sarge es igual solo que tenes que crear el directorio sasl y el smtpd.conf porque no lo instala.. esta bien lo q hice o le erre en algo.
    Saludos

  7. kenneth says:

    me fascina encontrar que hay guias asi, BREVES, claras y concisas en castellano. y el grafico aporta mucho. – adeu.

  8. Gracias por publicar estas ayudas. Espero no molestar y puedas ayudarme.
    Tengo lo siguiente:
    SUSE LINUX ENTERPRISE 10
    postfix-2.2.9-10.2
    clamav-0.88.6-0.1
    spamassassin-3.1.3-2.2
    cyrus-imapd-2.2.12-27.2

    EL PROBLEMA ES QUE AL ENVIAR CORREO TANTO INTERNO COMO DESDE EL EXTERIOR TENGO EL SIGUIENTE MENSAJE
    to=, relay=none, delay=1, status=bounced (Host or domain name not found. Name service error for name=localhost type=AAAA: Host not found)

    El problema surge al activar amavis. También he puesto la configuración que explicas y sigo teniendo el problema.

    Puedo enviar correo
    hacer telnet tanto a localhost como al dominio al puerto 25 y 110
    hacer telnet localhost 10024 y al 10025

    Esta es mas información

    mail:/etc/postfix # nslookup localhost
    Server: 192.168.105.2
    Address: 192.168.105.2#53

    Name: localhost
    Address: 127.0.0.1

    Dec 3 00:32:13 mail postfix/smtpd[26191]: connect from mail.fisa.ec[200.93.204.82]
    Dec 3 00:32:13 mail postfix/smtpd[26191]: CC2E8281D: client=mail.fisa.ec[200.93.204.82]
    Dec 3 00:32:13 mail postfix/cleanup[26237]: CC2E8281D:

    message-id=
    Dec 3 00:32:14 mail postfix/qmgr[26077]: CC2E8281D: from=, size=2084, nrcpt=1 (queue active)
    Dec 3 00:32:14 mail postfix/smtpd[26191]: disconnect from mail.fisa.ec[200.93.204.82]
    Dec 3 00:32:14 mail postfix/smtp[26137]: CC2E8281D: to=, relay=none, delay=1, status=bounced (Host or domain name not found. Name service error for name=localhost type=AAAA: Host not found)
    Dec 3 00:32:14 mail postfix/cleanup[26237]: 4E0802820: message-id=
    Dec 3 00:32:14 mail postfix/qmgr[26077]: 4E0802820: from=, size=3858, nrcpt=1 (queue active)
    Dec 3 00:32:14 mail postfix/qmgr[26077]: CC2E8281D: removed
    Dec 3 00:32:14 mail postfix/smtp[26137]: 4E0802820: to=, relay=mail.fisa.ec[200.93.204.82], delay=0, status=sent (250 2.6.0 Queued mail for delivery)
    Dec 3 00:32:14 mail postfix/qmgr[26077]: 4E0802820: removed

    Gracias

  9. carlos Calderón says:

    otra muy buena ayuda me sirvió bastante gracias.

  10. Ibai says:

    Hola! Soy novato en linux y estoy configurando el servidor de correo siguiendo tus pautas, pero nose como configurar evolution para recibir los emails locales (ni con pop ni con reparto local). Creo que los envio bien.
    Gracias

  11. Miguel Angel Moreno says:

    Felicitaciones y gracias por tu artículo …… muy bueno!

    Segun tu experiencia… ¿Como puedo hacer para que ciertos tipos de extensiones en los adjuntos de los correos (Ej: .exe) no me los rechaze, sino que me los envíe a una cuenta determinada (Ej: rechazados@midominio.com)?

    Gracias por tu ayuda!!

  12. chuletrax says:

    Como configuras esta seccion, si en ubuntu dapper, no tienes este archivo, solamente posees los otros ficheros dentro del directorio conf.d/

    “/etc/amavis/amavisd.conf”

    Regards,

    Diego

  13. Norman says:

    Hola amigos.

    Tengo instalado en postfix y dovecot en Fedora 10. El envio esta esta bien, si reviso el buzon de los usuarios /var/mail/ los correos que se le han enviado estan ahi, el unico problema que tengo es que no puedo descargarlos en Evolution.

  14. Manu says:

    Hola,

    veras etsamos haciendo lo que tu explicas en tu memoria….y no nos va, te cuento:

    Tenemos Kubuntu 9.04

    y

    Mozilla Thunderbird

    ¿Alguna idea de por qué no va? Lo hemos seguido tal y como lo pones tu.

    Gracias

  15. Leto says:

    Hola, a ver si podéis orientarme un poco por que estoy perdido en algo que parece muy simple.

    Tengo un postfix funcionando sin problemas, y un procmail que no me hace caso. En principio la configuración es muy facil, en el main.cf del postfix añado mailbox_command = /usr/bin/procmail, que es donde está el ejecutable y en el buzón destino creo un .procmailrc con

    :0
    * ^From.*usuario1@ejemplo.com
    ! usuario1@ejemplo.com

    recargo el postfix y nada. Y no encuentro ningún log para trazar el error.
    Gracias.

Leave a Reply