{"id":549,"date":"2006-02-18T21:41:56","date_gmt":"2006-02-18T19:41:56","guid":{"rendered":"http:\/\/www.marblestation.com\/blog\/?p=549"},"modified":"2012-04-26T17:05:44","modified_gmt":"2012-04-26T15:05:44","slug":"guia-de-referencia-rapida-para-postfix-amavis-new-clamav-spamassassin-procmail-y-dovecot-en-ubuntu","status":"publish","type":"post","link":"https:\/\/www.marblestation.com\/?p=549","title":{"rendered":"Guia de referencia r\u00e1pida para Postfix, amavis-new, clamav, spamassassin, procmail y dovecot en Ubuntu"},"content":{"rendered":"<h2>Esquema general<\/h2>\n<p><center><br \/>\n<img decoding=\"async\" src=\"http:\/\/static.flickr.com\/38\/101282047_ff800105d5.jpg?v=0\"\n<\/center\/><br \/>\n<!--more--><\/p>\n<h2>Acceso IMAP\/POP3 seguro con Dovecot<\/h2>\n<p>Podremos acceder a nuestro correo utilizando los protocolos IMAP o POP3 gracias a Dovecot. Lo instalaremos mediante:<\/p>\n<pre>\r\naptitude install dovecot-imapd dovecot-pop3d\r\n<\/pre>\n<p>Dado que se recomienda un acceso cifrado (IMAPs\/POP3s), vamos crear los certificados necesarios:<\/p>\n<pre>\r\nmkdir \/etc\/dovecot\/ssl\r\ncd \/etc\/dovecot\/ssl\r\nopenssl req -new -x509 -nodes -out dovecot.pem -keyout dovecot.pem -days 3650\r\n<\/pre>\n<p>Respondemos a las preguntas, por ejemplo:<\/p>\n<pre>\r\nCountry Name (2 letter code) [AU]:ES\r\nState or Province Name (full name) [Some-State]:Catalunya\r\nLocality Name (eg, city) []:Tarragona\r\nOrganization Name (eg, company) [Internet Widgits Pty Ltd]:Marble Station\r\nOrganizational Unit Name (eg, section) []:MS\r\nCommon Name (eg, YOUR name) []:localhost\r\nEmail Address []:marble@localhost\r\n<\/pre>\n<p>Ahora podemos configurar Dovecot editando &#8220;\/etc\/dovecot.conf&#8221;, indicaremos que queremos que se activen los protocolos IMAPs y POP3s (cifrados). Para IMAP3, el usuario tendr\u00e1 acceso a su buz\u00f3n principal ubicado en &#8220;\/var\/mail\/usuario&#8221; y a todos los buzones que tenga en el directorio &#8220;mail&#8221; de su directorio personal:<\/p>\n<pre>\r\nprotocols = imaps pop3s\r\n\r\n...\r\n\r\nssl_cert_file = \/etc\/dovecot\/ssl\/dovecot.pem\r\nssl_key_file = \/etc\/dovecot\/ssl\/dovecot.pem\r\n\r\n...\r\n\r\ndefault_mail_env = mbox:~\/mail\/:INBOX=\/var\/mail\/%u\r\n<\/pre>\n<p>Iniciamos el servicio:<\/p>\n<pre>\r\n\/etc\/init.d\/dovecot start\r\n<\/pre>\n<p>Ahora ya es posible acceder a nuestro mail mediante un cliente como Evolution. Si utilizamos el protocolo POP3 el correo se bajar\u00e1 a nuestra m\u00e1quina y se eliminar\u00e1 del servidor, sin embargo, si usamos IMAP podremos acceder a los mails de forma remota, conservandose en el servidor.<\/p>\n<h2>Postfix<\/h2>\n<p>Postfix ser\u00e1 el servidor SMTP. Para configurarlo m\u00ednimamente:<\/p>\n<pre>\r\ndpkg-reconfigure postfix\r\n<\/pre>\n<p>Contestamos:<\/p>\n<ol>\n<li>Tipo configuraci\u00f3n: Internet Site<\/li>\n<li>Destino de los mails dirigidos a root: NONE<\/li>\n<li>Dominio: server1.example.com<\/li>\n<li>Otros destinos para los que aceptar correo: server1.example.com, localhost.example.com, localhost<\/li>\n<li>Actualizaciones sincronizadas (m\u00e1s seguro, no se pierden mails): Yes<\/li>\n<li>Redes locales: 127.0.0.0\/8<\/li>\n<li>Usar procmail para entrega local: Yes<\/li>\n<li>Limite del tama\u00f1o de buz\u00f3n: 0<\/li>\n<li>Caracter extensi\u00f3n: +<\/li>\n<\/ol>\n<p>Instalamos antivirus Clam:<\/p>\n<pre>\r\naptitude install clamav-daemon\r\n<\/pre>\n<p>Instalamos diversos decompresores para que el antivirus sea capaz de analizar ficheros comprimidos:<\/p>\n<pre>\r\naptitude install unrar-nonfree lha arj unzoo zip unzip bzip2 gzip cpio file lzop\r\n<\/pre>\n<p>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.<\/p>\n<pre>\r\naptitude install pyzor razor\r\n<\/pre>\n<p>Instalamos el bloqueador de correo basura spamassasin:<\/p>\n<pre>\r\naptitude install spamassassin\r\n<\/pre>\n<p>A continuaci\u00f3n instalamos el agente intermediario que conectar\u00e1 nuestro servidor de correo Exim con spamassasin y clamav:<\/p>\n<pre>\r\naptitude install amavisd-new\r\n<\/pre>\n<p>Editamos &#8220;\/etc\/amavis\/amavisd.conf&#8221; y modificamos:<\/p>\n<pre>\r\n# \u00datil para a\u00f1adir a la cabecera del mail:\r\n#    X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at marblestation.homeip.net\r\n$mydomain = 'marblestation.homeip.net';\r\n\r\n...\r\n\r\n# Dejar pasar los spams, filtraremos por procmailrc. \r\n# Si los correos pasan antes por otro MX \"cercano\" o local (por ejemplo lo baj\u00e1is con el fetchmail)\r\n# no hag\u00e1is un REJECT, que estar\u00e9is tirando piedras a vuestro propio tejado.\r\n$final_spam_destiny = D_PASS;\r\n\r\n...\r\n\r\n# Descomentamos las siguientes lineas.\r\n# Enviara los mails analizados de vuelta al puerto 10025 de localhost.\r\n$forward_method = 'smtp:127.0.0.1:10025';  # where to forward checked mail\r\n$notify_method = $forward_method;\r\n\r\n...\r\n\r\n# Comentamos la siguiente linea para que los avisos de virus no los reciba una persona concreta\r\n#$virus_admin = \"postmaster\\@$mydomain\";\r\n\r\n....\r\n\r\n# Dejamos pasar los mails infectados, los filtraremos por procmail\r\n$final_virus_destiny      = D_PASS;  # (defaults to D_BOUNCE)\r\n\r\n...\r\n\r\n# Comentamos las siguientes l\u00edneas para no poner los virus\/spam en cuarentena\r\n#$virus_quarantine_to  = 'virus-quarantine';\r\n...\r\n#$spam_quarantine_to = 'spam-quarantine';\r\n\r\n...\r\n\r\n# Comentamos la siguiente linea para que no se modifiquen los subjects de correos spam, los\r\n# filtraremos por otras cabeceras con procmail.\r\n#$sa_spam_subject_tag = '***SPAM*** ';\r\n<\/pre>\n<p>Editamos el archivo de configuraci\u00f3n de Postfix &#8220;\/etc\/postfix\/master.cf&#8221; y a\u00f1adimos al final:<\/p>\n<pre>\r\nsmtp-amavis unix -      -       n     -        2  smtp\r\n    -o smtp_data_done_timeout=1200\r\n    -o disable_dns_lookups=yes\r\n127.0.0.1:10025 inet n  -       n     -       -  smtpd\r\n    -o content_filter=\r\n    -o disable_dns_lookups=yes\r\n    -o local_recipient_maps=\r\n    -o relay_recipient_maps=\r\n    -o smtpd_restriction_classes=\r\n    -o smtpd_client_restrictions=\r\n    -o smtpd_helo_restrictions=\r\n    -o smtpd_sender_restrictions=\r\n    -o smtpd_recipient_restrictions=permit_mynetworks,reject\r\n    -o mynetworks=127.0.0.0\/8\r\n    -o strict_rfc821_envelopes=yes\r\n    -o smtpd_error_sleep_time=0\r\n    -o smtpd_soft_error_limit=1001\r\n    -o smtpd_hard_error_limit=1000\r\n<\/pre>\n<p>Con esto escucharemos por el puerto 10025 de forma local (no aceptaremos conexiones desde otras m\u00e1quinas), dado que por ah\u00ed ser\u00e1 por donde recibiremos los mails ya analizados de amavis-new.<\/p>\n<p>Ejecutamos:<\/p>\n<pre>\r\npostconf -e 'content_filter = smtp-amavis:[127.0.0.1]:10024'\r\n<\/pre>\n<p>Esto a\u00f1adir\u00e1 al final del archivo &#8220;\/etc\/postfix\/main.cf&#8221; la linea &#8220;content_filter = smtp-amavis:[127.0.0.1]:10024&#8221;. As\u00ed se enviar\u00e1 todo mail recibido a amavis, el cual escucha por el puerto 10024 en nuestra m\u00e1quina.<\/p>\n<p>Reiniciamos los servicios y todo estar\u00e1 listo:<\/p>\n<pre>\r\n\/etc\/init.d\/amavis restart\r\n\/etc\/init.d\/postfix restart\r\n<\/pre>\n<p>En el directorio de nuestro usuario, por ejemplo &#8220;marble&#8221;, creamos el fichero &#8220;.procmailrc&#8221;:<\/p>\n<pre>\r\n## Si es un spam se lo indico al bogofilter...\r\n#:0 c\r\n#* ^X-Spam-Status: Yes\r\n#|bogofilter -s -l\r\n\r\n# ...y luego lo pongo en ~\/mail\/spams\r\n:0:\r\n* ^X-Spam-Status: Yes\r\nmail\/spams\r\n\r\n# Compruebo si es un virus...\r\n:0:\r\n* ^X-Amavis-Alert: INFECTED\r\nmail\/virus\r\n\r\n## Hago el segundo filtrado antispam\r\n#:0HB\r\n#* ? bogofilter -u -l\r\n#mail\/spams\r\n<\/pre>\n<p>Podemos comprobar el correcto funcionamiento enviando un mail manualmente (a un usuario existente), haciendo telnet al puerto 25 de nuestro propio ordenador:<\/p>\n<pre>\r\n$ telnet localhost 25\r\nTrying 127.0.0.1...\r\nConnected to localhost.localdomain.\r\nEscape character is '^]'.\r\n220 localhost.localdomain ESMTP Postfix (Ubuntu)\r\nMAIL FROM: marble@localhost\r\n250 Ok\r\nRCPT TO: marble@localhost\r\n250 Ok\r\nDATA\r\n354 End data with .\r\nSubject: Hola!!\r\n\r\nQue tal?\r\n\r\n.\r\n250 Ok: queued as 1AF8722D564\r\nquit\r\n221 Bye\r\nConnection closed by foreign host.\r\n<\/pre>\n<p>Si se ha recibido correctamente el correo, este estar\u00e1 almacenado en &#8220;\/var\/mail\/marble&#8221; (dado que se ha enviado al usuario marble@localhost).<\/p>\n<p>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\u00f3n &#8220;\/var\/mail\/marble&#8221;) y el envio mediante SMTP (localhost).<\/p>\n<h3>TLS<\/h3>\n<p>Veamos como activar la encriptaci\u00f3n por el puerto 25 para poder enviar correos de forma segura.<\/p>\n<pre>\r\nmkdir \/etc\/postfix\/ssl\r\ncd \/etc\/postfix\/ssl\r\nopenssl req -new -x509 -nodes -out smtpd.pem -keyout smtpd.pem -days 3650\r\n<\/pre>\n<p>A las preguntas contestamos seg\u00fan sea nuestro caso, por ejemplo:<\/p>\n<pre>\r\nCountry Name (2 letter code) [AU]:ES\r\nState or Province Name (full name) [Some-State]:Catalunya\r\nLocality Name (eg, city) []:Tarragona\r\nOrganization Name (eg, company) [Internet Widgits Pty Ltd]:Marble Station\r\nOrganizational Unit Name (eg, section) []:MS\r\nCommon Name (eg, YOUR name) []:localhost\r\nEmail Address []:marble@localhost\r\n\r\nPlease enter the following 'extra' attributes\r\nto be sent with your certificate request\r\nA challenge password []:\r\nAn optional company name []:\r\n<\/pre>\n<p>Modificamos la configuraci\u00f3n de Postfix ejecutando:<\/p>\n<pre>\r\npostconf -e 'smtp_use_tls = yes'\r\npostconf -e 'smtpd_use_tls = yes'\r\npostconf -e 'smtp_tls_note_starttls_offer = yes'\r\npostconf -e 'smtpd_tls_key_file = \/etc\/postfix\/ssl\/smtpd.pem'\r\npostconf -e 'smtpd_tls_cert_file = \/etc\/postfix\/ssl\/smtpd.pem'\r\npostconf -e 'smtpd_tls_CAfile = \/etc\/postfix\/ssl\/smtpd.pem'\r\npostconf -e 'smtpd_tls_loglevel = 1'\r\npostconf -e 'smtpd_tls_received_header = yes'\r\npostconf -e 'smtpd_tls_session_cache_timeout = 3600s'\r\npostconf -e 'tls_random_source = dev:\/dev\/urandom'\r\n<\/pre>\n<p>Recargamos Postfix:<\/p>\n<pre>\r\n\/etc\/init.d\/postfix reload\r\n<\/pre>\n<p>Comprobamos que ya tenemos activa la opci\u00f3n TLS conectandonos por telnet al puerto 25 e indicando &#8220;EHLO localhost&#8221;, si en el listado que imprime se muestra &#8220;STARTTLS&#8221; es que todo ha ido correctamente:<\/p>\n<pre>\r\n$ telnet localhost 25\r\nTrying 127.0.0.1...\r\nConnected to localhost.localdomain.\r\nEscape character is '^]'.\r\n220 localhost.localdomain ESMTP Postfix (Ubuntu)\r\nEHLO localhost\r\n250-localhost.localdomain\r\n250-PIPELINING\r\n250-SIZE 10240000\r\n250-VRFY\r\n250-ETRN\r\n250-STARTTLS\r\n250 8BITMIME\r\nquit\r\n221 Bye\r\nConnection closed by foreign host.\r\n<\/pre>\n<p>Si queremos que clientes como Evolution o Outlook conecten correctamente de forma segura con nuestro SMTP, vamos a tener que a\u00f1adir la siguietne linea a &#8220;\/etc\/postfix\/master.cf&#8221;:<\/p>\n<pre>\r\n## Abre el puerto 465 para SMTPS (usado por Outlook o Evolution para conexiones seguras)\r\nsmtps    inet  n       -       n       -       -       smtpd\r\n      -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes\r\n<\/pre>\n<p>Y a continuaci\u00f3n habr\u00e1 que reiniciar Postfix:<\/p>\n<pre>\r\n\/etc\/init.d\/postfix reload\r\n<\/pre>\n<p>M\u00e1s informaci\u00f3n sobre Postfix TLS: http:\/\/www.postfix.org\/TLS_README.html<\/p>\n<h3>Autentificaci\u00f3n<\/h3>\n<p>Postfix utiliza SASL para la autentificaci\u00f3n de usuarios, por tanto instalaremos los ejecutables que gestionan SASL:<\/p>\n<pre>\r\naptitude install sasl2-bin\r\n<\/pre>\n<p>Descomentamos de &#8220;\/etc\/default\/saslauthd&#8221; la l\u00ednea:<\/p>\n<pre>\r\nSTART=yes\r\n...\r\n<\/pre>\n<p>Iniciamos el demonio:<\/p>\n<pre>\r\n\/etc\/init.d\/saslauthd start\r\n<\/pre>\n<p>Este esperar\u00e1 peticiones de autentificaci\u00f3n mediante el socket UNIX &#8220;\/var\/run\/saslauthd\/mux&#8221;, podemos comprobar su correcto funcionamiento mediante:<\/p>\n<pre>\r\ntestsaslauthd -f \/var\/run\/saslauthd\/mux -u [USUARIO] -p [PASSWORD]\r\n<\/pre>\n<p>A continuaci\u00f3n podemos configurar Postfix para que utilice la autentificaci\u00f3n, permitiendo que esta solo sea llevada a cabo cuando se utilizan conexiones seguras (TLS):<\/p>\n<pre>\r\npostconf -e 'smtpd_tls_auth_only = yes'\r\npostconf -e 'smtpd_sasl_auth_enable = yes'\r\npostconf -e 'smtpd_sasl_security_options = noanonymous'\r\npostconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'\r\npostconf -e 'broken_sasl_auth_clients = yes'\r\n<\/pre>\n<p>A continuaci\u00f3n indicamos a Postfix que utilice slasauthd para la autentificaci\u00f3n:<\/p>\n<pre>\r\necho 'pwcheck_method: saslauthd' >> \/etc\/postfix\/sasl\/smtpd.conf\r\necho 'mech_list: plain login' >> \/etc\/postfix\/sasl\/smtpd.conf\r\n<\/pre>\n<p>Para que Postfix tenga permisos para consultar slasauthd, tendremos que editar &#8220;\/etc\/group&#8221; para a\u00f1adir el usuario &#8220;postfix&#8221; al grupo &#8220;sasl&#8221;:<\/p>\n<pre>\r\n...\r\nsasl:x:45:postfix\r\n...\r\n<\/pre>\n<p>Finalmente reinciamos Postfix:<\/p>\n<pre>\r\n\/etc\/init.d\/postfix reload\r\n<\/pre>\n<p>Ya podemos probar el envio de mails con alg\u00fan cliente como Evolution, desde el cual se podr\u00e1 especificar que el servidor SMTP requiere autentificaci\u00f3n.<\/center><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Esquema general<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,6],"tags":[],"class_list":["post-549","post","type-post","status-publish","format-standard","hentry","category-espanyol","category-tecnologia"],"_links":{"self":[{"href":"https:\/\/www.marblestation.com\/index.php?rest_route=\/wp\/v2\/posts\/549","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.marblestation.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.marblestation.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.marblestation.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.marblestation.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=549"}],"version-history":[{"count":1,"href":"https:\/\/www.marblestation.com\/index.php?rest_route=\/wp\/v2\/posts\/549\/revisions"}],"predecessor-version":[{"id":1363,"href":"https:\/\/www.marblestation.com\/index.php?rest_route=\/wp\/v2\/posts\/549\/revisions\/1363"}],"wp:attachment":[{"href":"https:\/\/www.marblestation.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=549"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.marblestation.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=549"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.marblestation.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=549"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}