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:
- Tipo configuración: Internet Site
- Destino de los mails dirigidos a root: NONE
- Dominio: server1.example.com
- Otros destinos para los que aceptar correo: server1.example.com, localhost.example.com, localhost
- Actualizaciones sincronizadas (más seguro, no se pierden mails): Yes
- Redes locales: 127.0.0.0/8
- Usar procmail para entrega local: Yes
- Limite del tamaño de buzón: 0
- 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.
Con que aplicación has hecho el esquemita de arriba? 😛
Con dia, es muy simple pero justo lo que se necesita para hacer diagramas comodamente 🙂 Encima es multiplataforma (tb para Windows) 😀
Pq no mandas el articulo a Gpltarragona pa que podamos meterlo en portada?
Ah, ya lo se..buscas fama y dinero!! xDDDDDD
Buenas:
Me parece muy bien explicado y detallado tu manual de implementación de servidor de correo. Estoy montando un servidor de correo de postfix en Ubuntu 7.04 Server pero cuando instale Amavisd-new, los archivos de configuración han cambiado (estan todos en una carpeta conf.d y son varios) y estoy supremamente confundido, seria posible que me dijeras cual es la equivalencia entre las lineas de configuración del amavisd.conf que tienes en tu tutorial con los nuevos archivos que aparecen en conf.d. De antemano Muchas Gracias.
Hola , primero decirte que es un excelente manual, pero tengo una duda, he configurado el evolution para enviar un correo y me pide contraseña de autenficacion smtp, cual es esa password
Hola, estoy teniendo un problema para conectar el amavis-new a un servidor de spamassassin remoto que tengo para toma mi red.
Conoces si hay alguna restricción en esta nueva versión que no permita hacer el filtrado en el servidor externo?
Gracias!
Mi postfix dejo de funcionar correctamente ayer y esta mandando mensajes de “dsn=4.3.0 status=deferred (mail transport unavailable)” en el log.
Intente realizar los pasos que listas, pero ahora me sale “dsn=4.4.1 (delivery temporarily suspended: conect to midominio.com [private/dovecot-lmtp]:No such file or directory)”
Ya no se que mas se pueda hacer.