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.
Autor: Marble
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! 😀
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?
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.
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?
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!
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
me fascina encontrar que hay guias asi, BREVES, claras y concisas en castellano. y el grafico aporta mucho. – adeu.
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
otra muy buena ayuda me sirvió bastante gracias.
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
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!!
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
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.
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
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.