Instalación y bastionamiento de un servidor de correo bajo GNU/Linux

Aprovechando el trasteo que me permite el nuevo servidor de NireBlog, me he decidido a poner en un mini-howto la instalación de un servidor de correo bajo Debian Sarge y usando exclusivamente software libre.

Se ha elegido Postfix como MTA. A Postfix se le han agregado los siguientes mecanismos de seguridad: TLS (Transport Layer Security) para cifrar las conexiones y SASL (Simple Authentication and Security Layer) como sistema de autentificación.

Todo el correo que pase a través del servidor SMTP será revisado en busca de virus y SPAM. Para llevar a cabo esta tarea se utilizará AMaViSd-new como interfaz entre el servidor de correo SMTP y las aplicaciones ClamAV y Spamassassin, las cuales analizarán el correo en busca de virus y SPAM respectivamente.

Para la consulta de mensajes por parte de los usuarios se dispondrá de un servidor POP3 e IMAP, con sus respectivas versiones seguras con protocolo SSL, para lo cual se hará uso de Courier (courier-pop y courier-pop-ssl, courier-imap y courier-imap-ssl).

Los usuarios del correo no serán usuarios físicos de la máquina sino que serán usuarios virtuales almacenados en una Base de Datos MySQL.

Para crear una autoridad certificadora y generar certificados propios se ha dispuesto de OpenSSL 0.9.7e.

Aquí os dejo el documento. Cualquier metedura de pata que encontréis (algo bastante probable dada mi facilidad para decir burradas), os agradecería que me la notificaseis (bien en un comentario a este post o vía correo), para corregirla.

Manual [pdf / 465 KB]

Lorena Fernández Álvarez (@loretahur)

Ingeniera salsera. Actualmente, directora de comunicación digital de la Universidad de Deusto. Miembro del grupo experto de la Comisión Europea Gendered Innovations para analizar el impacto de no incorporar la perspectiva de género en la Inteligencia Artificial. Colabora en el programa de radio “Hoy por Hoy Bilbao” de la Cadena SER desde 2009 con una sección sobre nuevas tecnologías. Además, es jurado del premio Ada Byron a la mujer tecnóloga y mentora del proyecto Inspira STEAM, un proyecto que busca el fomento de la vocación científico-tecnológica entre las niñas. Ha creado junto a Pablo Garaizar e Iñigo Maestro el juego de mesa Nobel Run.

25 thoughts on “Instalación y bastionamiento de un servidor de correo bajo GNU/Linux

  1. OMG Gracias, andaba buscando algo así para montar una máquina con servidor de correo. ¡Qué grande! xD

  2. Excelente documento. Te aconsejaría añadir un mecanismo de greylisting a todo el sistema. Funciona realmente bien. Por otro lado, ordb.org ha cerrado y la lista combinada de sbl+xbl de spamhaus también quita mucha porquería. Además puedes habilitar la directiva smtpd_delay_reject = no, de esta manera rechazas la conexión en tiempo de smtp en cuanto alguno de los checks determina que el correo no es válido. Te evitas llegar al final del proceso, que consume más recursos.

    Y ya para terminar, alguna comprobación de spf, a ver si conseguimos entre todos extenderla 😉 En la distribución fuente de postfix viene un pequeño script en perl para tal fin.

    Un saludo y de nuevo, genial el documento. Muy bien explicado.

  3. Joe.. te me has adelantado.. tengo preparado un documento sobre como instalar un servidor de correo y dns que subiré por partes a mi blog. Buen trabajo!

  4. Muy buen documento, claro y conciso… y quería decir lo mismo que bockbilbo: ¡te nos has adelantado! xD

    Pero me estaba preguntando, ¿no sería mejor poner esto en una wiki? Aunque en mi caso es sobre Gentoo, así que cambian algunas cosas, me parecería interesante añadirle firmado de DomainKeys o autenticación SASL contra MySQL, que permitirá mantenerla sincronizada con el Cyrus.

    Erratas: página 12, aparece dos veces «notify_clases», debería ser «notify_classes».

  5. Características de Postfix: es mejor que Sendmail. Eso siempre me ha sonado mal, como algo pobre 😉

    Al final no es un documento RTFM, veo que te has extendido mucho más.

    ¿En tu implementación con MySQL no has inclído soporte para alias ni múltiples dominios? No es nada complicado hacerlo y así lo tienes TODO gestionado por MySQL (hacer una mini herramienta en PHP para controlar estas cosas sería trivial).

    ¿Qué opinas de las listas negras? En el documento lo explicas, pero no sé si realmente recomiendas que se usen (yo no lo recomiendo).

    Espero que no te molesten mis comentarios :D, por lo demás me parece un documento muy correcto (si acaso te falta comentar qué pasa cuando te firmas tu mismo los certificados, el echo de que el el certificado sea el mismo que la entidad certificadora hace que algunos MUA sean algo alarmistas… y el usuario suele tener miedo de lo que no entiede).

  6. @cib3r: me alegro que te sirva 😀

    @iñaki: lo primero muchísimas gracias por tus aportaciones. Acabo de borrar ordb y he agregado sbl+xbl. También he agregado la directiva smtpd_delay_reject (no la conocía). Lo de SPF se quedará para próximas entregas porque me parece LA MEDIDA contra el SPAM y tiene mucha miga.

    @bockbilbo: gracias 😀

    @liamngls: muchas de nadas (espero ese jamoncito que tú pides en tu blog :P)

    @jarfil: corregida la errata 😉
    A ver si saca algo de tiempo (cosa que no tengo ahora :S) y monto ese wiki

    @juanjo: ya te dije que no era tan RTFM 😉 También me pongo en la lista de to-do el tema de los alias (efectivamente es una tontería).

    A mí sí me convencen las listas negras siempre que se usen con precaución y con un grupo selecto y de confianza. Sé que es mayor la pérdida cuando se produce un falso positivo pero ahora mismo, con el problema que hay de spam, todo lo implementado es poco (SPF espero nos libre de estas cosas :D).

  7. @lorena: con un grupo selecto y de confianza

    Ah, es que eso no existe. Siempre se trata de permitir que decidan terceros qué correos entran o no en tu servidor.

    Todas las listas negras empiezan con las mejores intenciones, pero al final, todas acaban igual (abuso de poder, extorsión, castigando a inocentes, etc).

    Además creo que si las listas negras se corrompen es solo porque los administradores les dan poder sobre los servidores que administran.

    Bueno, tampoco es mi intención que esto sea una conversación pro/anti listas negras. Solo apuntar que no es ni de lejos tan bonito como parece 🙂

  8. Ayer, cuando era joven e inexperto, y tan sólo por trastear desde el lado oscuro, me lo supe montar con sendmail..luego, le puse los cuernos con qmail, y ahí me quedé…uh, por cierto, buen curro clever girl 🙂
    ot
    Me perdí la kdda.. snif

  9. seria todo un detalle, que en el howto tambien se pusiese como hacerlo para una intranet, es decir como recoger el correo de isp y repartirlo entre cuentas locales, ya que a mi entender seria de muchisima utilidad para las pequeñas empresas que quieren un servidor local de correo.

  10. Buenas,

    buen documento Lorena 🙂

    Una par de cosillas que se están hablando:

    – smtpd_delay_reject, hay que tener cuidado con esta directiva porque puede causar problemas en algunos clientes. Además, si te rechaza la conexión por ejemplo a nivel smtpd_client_restrictions no tendrás logs ni del from, ni del to ni nada…para buscar correos «perdidos» en logs, es peor y tampoco creo que ahorre muchísimos recursos.

    – las listas negras; está claro que hay que usarlas con cuidado (y con una buena whitelist a su lado), pero no es lo mismo un servidor con 1000 mails al día que uno con 1 millón (imagina la proporción de SPAM que se recibe) por lo que el uso de RBLs puede estar más que justificado. Usar listas como spamcop, spamhaus y demás no lo veo mal, sobre todo porque permiten que se pueda dar de baja la IP de la lista _fácilmente_.

    agur!

  11. @juanjo: en respuesta te remito al comentario de Álvaro que sabe infinito más que yo.

    @racaneando: [OT] Se te echó de menos. Necesitábamos un Doctor House para vacilar un poco 😛

    @anakein: me lo apunto para futuras ampliaciones.

    @álvaro marín: el documento es gracias a los maestros que andan por el e-ghost y que explican perfecto postfix en los Masters 😉
    De hecho, una de mis referencias es una recetita tuya 😀

    Añado la explicación de smtpd_delay_reject que me parece muy interesante.

    @anónimo: ya lo siento pero no conozco ninguno.

  12. Habría que empezar con ETCHE… amavisd es algo distinto en la proxima verion de debian, estoy trabajando en hacer un documento pero nunca me da el tiempo.

    IGUAL… es un EXCELENTE Documento, que no perdera vigencia de aqui a un par de años… Muchas gracias!!!

  13. Hola, estoy leyendo tu documento, felicitaciones por el trabajo. Solo tengo una duda. Cuando se instala Debian, él trae por defecto Exim como MTA, la duda es: ¿Se debe desinstalar Exim antes de instalar Postfix, o pueden convivir los dos?

  14. Bastionamiento??

    vaya… creo que es la primera vez que leo la palabra (o ese… uso?) y no termino de entender el significado 🙁

  15. @drixdel: es recomendable desinstalar cualquier otro MTA.

    @luciano: jeje. Cuando hablo de bastionar me refiero a poner todo como un fortín (es decir, como un bastión)

  16. Hola Lorena!!!

    Muy muy completo el documento… enhorabuena!!!

    Gracias por lo que me corresponde ;-))

    Solo hecho de menos a estas alturas un documento sobre debian Etch o Ubuntu 6.06 (LTS) server. Si te animas haznoslo saber.

    Un abrazo majisima ^_^

  17. muy buen documento a ver si me ayudan si quiero instalar multiples dominios un buen webmail y algo para administrar algo asi como un panel atte.

  18. socorro
    No me funciona
    Me tiene loco
    Socorro
    No estoy seguro de que busque en el mysql el usuario, hay alguna forma de comprobarlo?
    Luego cada vez que arranco el servidor me da errores.
    Los errores son estos

    Aug 4 12:14:17 pruebas postfix/master[9442]: daemon started — version 2.3.8, configuration /etc/postfix
    Aug 4 12:14:30 pruebas postfix/smtpd[9466]: warning: cannot get private key from file /etc/postfix/ssl/smtpd_key.pem
    Aug 4 12:14:30 pruebas postfix/smtpd[9466]: warning: TLS library problem: 9466:error:0906D06C:PEM routines:PEM_read_bio:no $Aug 4 12:14:30 pruebas postfix/smtpd[9466]: warning: TLS library problem: 9466:error:140B0009:SSL routines:SSL_CTX_use_Priv$Aug 4 12:14:30 pruebas postfix/smtpd[9466]: cannot load RSA certificate and key data
    Aug 4 12:14:30 pruebas postfix/smtpd[9466]: connect from localhost[127.0.0.1]
    Aug 4 12:14:31 pruebas postfix/trivial-rewrite[9470]: warning: connect to mysql server unix:mysqld.sock: Can’t connect to l$Aug 4 12:14:31 pruebas postfix/trivial-rewrite[9470]: fatal: mysql:/etc/postfix/mysql_virt.cf(0,lock|fold_fix): table looku$Aug 4 12:14:32 pruebas postfix/master[9442]: warning: process /usr/lib/postfix/trivial-rewrite pid 9470 exit status 1
    Aug 4 12:14:32 pruebas postfix/smtpd[9466]: warning: premature end-of-input on private/rewrite socket while reading input a$Aug 4 12:14:33 pruebas postfix/trivial-rewrite[9471]: warning: connect to mysql server unix:mysqld.sock: Can’t connect to l$Aug 4 12:14:33 pruebas postfix/trivial-rewrite[9471]: fatal: mysql:/etc/postfix/mysql_virt.cf(0,lock|fold_fix): table looku$Aug 4 12:14:34 pruebas postfix/master[9442]: warning: process /usr/lib/postfix/trivial-rewrite pid 9471 exit status 1
    Aug 4 12:14:34 pruebas postfix/master[9442]: warning: /usr/lib/postfix/trivial-rewrite: bad command startup — throttling
    Aug 4 12:14:34 pruebas postfix/smtpd[9466]: warning: premature end-of-input on private/rewrite socket while reading input a$Aug 4 12:14:34 pruebas postfix/smtpd[9466]: warning: problem talking to service rewrite: Success
    Aug 4 12:14:37 pruebas courierpop3login: Connection, ip=[::ffff:127.0.0.1]
    Aug 4 12:14:37 pruebas courierpop3login: LOGIN FAILED, user=juanluep, ip=[::ffff:127.0.0.1]
    Aug 4 12:15:03 pruebas last message repeated 2 times
    Aug 4 12:15:13 pruebas courierpop3login: LOGOUT, ip=[::ffff:127.0.0.1]
    Aug 4 12:15:13 pruebas courierpop3login: Disconnected, ip=[::ffff:127.0.0.1]

    El tema es qu ni me valida ni na,

    Socorro, insisto

    Gracias

  19. Hola execelente manual. pero no encuentro el archivo main.cf
    utilizo kubuntu, tengdra algo que ver esto o tengo que crear el archivo yo??

  20. Hola lore la por consola con sudo aptitude postfix, gracias por responderme

  21. @juan: no recuerdo muy bien los pasos en la instalación, pero ¿te preguntaba si querías una instalación por defecto tras lanzar el aptitude? Si le decías que no, igual no te crea el main.cf.

    Créalo a mano y ponle de owner a postfix

  22. hola q tal mira es que yo trabajo en sistemas pero me pidieron que ayudara a montar un servidor de correo bajo linux pero e tratado de buscar todo lo que me pides en los requerimentos pero hay cosas que no encuentro no se si tu me ayudes para descargar todo lo que necesito mandandome algunas direcciones de donde bajar los programas.

    gracias por tu atencion.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *