Manual de Postfix + SASL + MySQL + POP + IMAP + VDA + Clamav + Spamassassin bajo Debian

Ya se me olvidaba de este manual. Es el que escribí para un curso de Postfix bajo GNU/Linux que dí a trabajadores en activo. Se explica como, bajo Debian, instalar Postfix y configurarlo, de modo que autentique contra MySQL, como hará también Courier para el servicio POP e IMAP. Todo el sistema será con usuarios virtuales, tocando las listas negras, los filtros de correo, antivirus con Amavis y Clamav, Spamassassin. También se explican numerosas UCE Controls y la configuración de SMTP, POP3 e IMAP bajo capa TLS. Por último, los buzones se crearán automáticamente y se podrá entender el funcionamiento de las colas de Postfix, tipos de buzones, etc. He explicado conceptos básicos y las órdenes para echarlo a andar. Desde mi punto de vista, si se quiere montar un servidor de correo para uno o varios dominios no estaría de más echarle un ojo, o si no os hace falta, leeroslo y me reportáis errores🙂.

Tenéis todos los ficheros en mi directorio web público.
A diferencia de lo escrito en éste blog, el manual está liberado bajo la licencia GFDL, cuya traducción no oficial al castellano podéis leer.

Lo más probable es que adapte la guía a un sistema Gentoo GNU/Linux y al terminar el verano a uno FreeBSD por lo que tendríamos 3 manuales diferentes si se diese el caso🙂

43 Responses to “Manual de Postfix + SASL + MySQL + POP + IMAP + VDA + Clamav + Spamassassin bajo Debian”


  1. 1 broadcast 5 julio 2006 a las 08:30

    Cuando quieras lo adaptamos a FreeBSD!

  2. 2 igayoso 5 julio 2006 a las 15:35

    Tiene muy buena pinta ese manual, yo tengo gran parte hecho en el igServer, pero para lo que me falta seguro que leo tu HOW-TO, además así tengo Support personalizada😀 .

    También estaba bien traducirlo a otros idiomas…

  3. 3 Gura 5 julio 2006 a las 15:52

    Pues me las puedo apañar solo broadcast, pero gracias, contaré contigo. A finales del verano casi seguro que está a punto.

  4. 4 karina 11 agosto 2006 a las 19:07

    Hola lei el articulo, y me parece interesante realizarlo en debian, queria saber si pueden publicar alguna guia pero en suse. eso seria muy importante y la verdad necesito una guia.

  5. 5 Gura 14 agosto 2006 a las 17:27

    La verdad es que no tengo intención de hacerlo. Ya no utilizo suse y las cosas pueden complicarse bien por no encontrar el paquete en RPM, o porque esté compilado de una determinada forma… Sí que tengo pensado hacerlo para otros SO, como quizá sea el caso de FreeBSD.

  6. 6 txipi 2 septiembre 2006 a las 23:47

    Muy buen HOWTO, me ha gustado mucho que uses apt-build, muy limpio y actualizado con las fuentes y parches. Gracias por el documento😉

  7. 7 Xus 2 septiembre 2006 a las 23:57

    De todos los manuales que hay por internet, éste es de lo más completito que hay para montarte un estupendo sistema de correo. Aunque está basado en una debian sarge, he comprobado que todos sus componentes funcionan tal cual se explica sobre debian sid (menos el amavisd-new, que ha cambiado el sistema de configuración, pero son 2 retoques). Suerte con el port a FreeBSD !

  8. 8 Gura 3 septiembre 2006 a las 00:02

    En realidad el curso se dio sobre SID, pero con planes de que alguna vez se usase de guía para hacer una implementación seria, usé Sarge. En FreeBSD ya veremos si se complica la cosa o no🙂.

    Gracias.

  9. 9 Joseph 3 noviembre 2006 a las 17:25

    Buen Manual , ricardo le envie los archivos authdaemonrc authmysqlrc para que los analice ya que siempre me da este error cuando quiero bajar correos

    Jan 4 07:58:58 himesa2 courierpop3login: LOGIN FAILED, ip=[::ffff:127.0.0.1]
    Jan 4 08:01:27 himesa2 courierpop3login: Connection, ip=[::ffff:127.0.0.1]
    Jan 4 08:01:44 himesa2 authdaemond.mysql: failed to connect to mysql server (server=localhost , userid=joseph .)
    Jan 4 08:01:49 himesa2 courierpop3login: LOGIN FAILED, ip=[::ffff:127.0.0.1]
    Jan 4 08:01:49 himesa2 courierpop3login: LOGOUT, ip=[::ffff:127.0.0.1]
    Jan 4 08:01:51 himesa2 courierpop3login: Connection, ip=[::ffff:127.0.0.1]
    Jan 4 08:02:01 himesa2 courierpop3login: LOGOUT, ip=[::ffff:127.0.0.1]

  10. 10 Gura 3 noviembre 2006 a las 23:02

    Parece que el problema es en una capa inferior, la conexión de Courier con MySQL. Revisa lo que te mandé en el correo. Si no tienes nada más que trabaje contra MySQL cambia en /etc/mysql/my.cnf que el socket lo ponga en /var/spool/postfix/var/run/mysqld/mysqld.sock (Si no recuerdo mal). Luego Postfix déjalo tal cual, ya que para él (Muchos de sus procesos), con el chroot activado su sistema de ficheros raíz es /var/spool/postfix. El problema lo tiene Courier, que corre libremente y en /var/run/mysql/mysqld.sock no tiene un socket para conectar con MySQL. O haces un enlace simbólico a /var/spool/postfix/var/run/mysqld/mysqld.sock o configuras en authdaemonrc que el socket está en determinado sitio (Por que lo has cambiado). Para comprobar la conexión con MySQL puedes usar:
    # mysql -uUsuario -p -s /var/spool/postfix/var/run/mysqld/mysqld.sock

    PD: Creo que los directorios y rutas sean correctos, pero no he mirado las rutas exactas en Debian, aunque tal cual, te servirá como guía.

  11. 11 DrEam 19 noviembre 2006 a las 21:27

    Excelente manual,me ha servidor #mucho,ya que explica varias cosas que otros manuales dan por sabidas y a nosotros los noob nos deja colgados.
    lo otro tengo estos problemas

    seria interesante ver si solucionaste el problema joseph😀,ya q tengo el mismo😛.

    eso,slds

  12. 12 DrEam 20 noviembre 2006 a las 01:08

    esto me tira el /var/log/mail.log
    que podra ser?

    localhost courierpop3login: LOGIN: DEBUG: ip=[::ffff:127.0.0.1], command=USER
    Nov 19 05:58:15 localhost courierpop3login: LOGIN: DEBUG: ip=[::ffff:127.0.0.1], command=PASS
    Nov 19 05:58:15 localhost courierpop3login: LOGIN: DEBUG: ip=[::ffff:127.0.0.1], username=usuario2@localdomain
    Nov 19 05:58:15 localhost courierpop3login: LOGIN: DEBUG: ip=[::ffff:127.0.0.1], password=12345
    Nov 19 05:58:15 localhost courierpop3login: authdaemon: starting client module
    Nov 19 05:58:15 localhost courierpop3login: authdaemon: TEMPFAIL – no more modules will be tried
    Nov 19 05:58:20 localhost courierpop3login: LOGIN FAILED, ip=[::ffff:127.0.0.1]
    Nov 19 05:58:24 localhost courierpop3login: LOGIN: DEBUG: ip=[::ffff:127.0.0.1], command=QUIR

  13. 13 Gura 20 noviembre 2006 a las 15:14

    Hombre, mira a ver, @localdomain dudo que sea tu dominio. Me da que te has saltado la sección de la configuración del hostname.

    usuario2@localdomain

    Bye

  14. 14 DrEaM 20 noviembre 2006 a las 17:54

    mira,lo de local domain es porque no tengocontratado un dns,y estoy haciendolo con al resolucion de los archivos hostname…para efectos de prueba,al tenerlo listo pienso hacerlo,pero pormientras lo pruebo localmente.me temo que el error ese va por el lado de courier y mysql,ehm use los archivos .sql q estan en el sitio,me gutaria enviarte un par de archivos para q los mires😀

  15. 15 Gabriel 22 noviembre 2006 a las 14:57

    Hola se muy bien el manual, lo que andaba buscando , mi pregunta es la siguiente existe alguna manera de instalar SquirrelMail o algo parecido? , como se prodria y que es necesario. HELP

  16. 16 Gura 22 noviembre 2006 a las 21:30

    Si, el manual no lo contempla. Necesitas un servidor web como Apache, con el módulo PHP4. En Debian instala el paquete squirrelmail y ya tendrá lo más probable, como dependencia, a apache2 y libapache2-mod_php4. Tan solo eso y configurarlo, claro, pero hay manuales por internet que lo explican.

  17. 17 Manuel Lopez 13 diciembre 2006 a las 15:24

    Buenas,

    Ante todo, gracias por el manual.
    El tema, es que me he quedado clavado y ya no se por dónde tirar. Estoy en el punto de la página 22 en que intento establecer una conexión con el servicio POP3 y autenticarnos.

    Hago lo siguiente:

    toton:/# telnet localhost 110
    Trying 127.0.0.1
    Connected to localhost.localdomain
    Escape character i ‘^]’
    +OK Hello there
    user usuario1@hrsantcamil.es
    +OK Password required
    pass 12345
    -ERR Login Failed

    En en log tan solo tengo lo siguiente:

    Dec 13 15:28:44 toton postfix/postfix-script: starting the Postfix mail system
    Dec 13 15:28:44 toton postfix/master[1354]: daemon started — version 2.1.5
    Dec 13 15:28:49 toton courierpop3login: Connection, ip=[::ffff:127.0.0.1]
    Dec 13 15:29:06 toton courierpop3login: LOGIN FAILED, ip=[::ffff:127.0.0.1]
    Dec 13 15:29:20 toton courierpop3login: LOGIN FAILED, ip=[::ffff:127.0.0.1]
    Dec 13 15:29:24 toton courierpop3login: LOGOUT, ip=[::ffff:127.0.0.1]

    Y ya no se que más hacer. He comprobado permisos, he mirado en la tabla de users que el usuario esté creado con su contraseña 12345…etc, etc…

    Lo que no me queda claro, y perdonad porque soy algo novato en todo esto, es lo que comentas al principio de crear un registro HOST A y un MX. Decir que tanto en /etc/hostname y /etc/mailname tengo puesto:
    toton.hrsantcamil.es
    (toton es el nombre de máquina, y hrsantcamil.es el nombre que he decidido como dominio, que no se si se ha de crear antes o algo…)

    Saludos y gracias de antemano.

  18. 18 Manuel Lopez 13 diciembre 2006 a las 16:38

    Ahh, perdón, se me olvidaba dar los detalles de mi configuración de mi Debian Sarge.
    Tengo dos tarjetas de red, la eth0 con ip 172.168.100.1 que es la que da Internet a los clientes y la eth1 con ip 10.0.0.4 con gateway 10.0.0.2 que es un router que sale a Internet.

    Saludos!

  19. 19 Jose 8 marzo 2007 a las 18:14

    Hola
    Estoy tratando de configurar SASL+MYSQL con Postfix en Gentoo y tengo ciertos problemas. Cómo puedo indicar en el fichero saslauthd que se autentifique con los usuarios de la base de datos.
    Saludos

  20. 20 Gura 8 marzo 2007 a las 21:56

    Hola Jose. Aquí tienes la documentación que proporciona gentoo acerca del virtual hosting en Gentoo con MySQL como backend.

    http://www.gentoo.org/doc/en/virt-mail-howto.xml

    Echale un vistazo, yo cuando lo monté me leí esa guía, me basé en ella y luego modifiqué varias cosas a mi gusto, pues esa guía aunque como orientación está bien, puede mejorarse.

  21. 21 Jose 29 marzo 2007 a las 18:03

    Hola de nuevo

    Parece que he avanzado algo en la configuración del SASL con Mysql pero a medias. El problema es que si por ejemplo envío un correo sin configurarlo para que se autentifique, lo envía de igual manera. Si configuro el cliente para que lo haga, entonces sí me pide el uauario y la contraseña y aquí funciona bien. Cómo puedo solventar esto, así es como si no tuviese nada configurado. Tengo Gentoo instalado.

    Saludos

  22. 22 Gura 29 marzo 2007 a las 22:49

    Revisa el proceso desde el final de la página 23. Asegurate de tener la directiva permit_sasl_authenticated en la UCE smtpd_recipient_restrictions y smtpd_client_restrictions.

  23. 23 jorge 30 marzo 2007 a las 18:16

    Hola, estoy siguiendo la guía y hasta el momento iba todo bien, pero me ha empezado a tirar el mismo fallo que a Manuel Lopez. En mi caso si que tengo creado lo del Host A y el MX, pero no hay manera. Mismo error que a Manuel. Alguna sugerencia?

    Un saludo y gracias

  24. 24 Gura 30 marzo 2007 a las 20:44

    El error de Manuel no tiene que ver con el registro A o MX del dominio, sino con la autenticación POP3. Si te refieres a los registros que comenta al final de su artículo, te explico:

    Digamos que el fichero hostname da igual, es de caracter local, pero basándose en el fichero mailname es como saludará nuestro servidor al resto de servidores. Por defecto puede que sea localhost.localdomain, y eso es una burrada de cara a un servidor en internet. En mi caso es mail.elgura.com. mail.elgura.com es un Host A que apunta a mi IP pública. elgura.com tiene como registro MX a mail.elgura.com.

    Salida de host:

    $ host -t a elgura.com
    elgura.com has address 80.38.79.153

    $ host -t mx elgura.com
    elgura.com mail is handled by 1 mail.elgura.com.

    $ host -t a mail.elgura.com
    mail.elgura.com has address 80.38.79.153

    Es conveniente contratar antes el dominio, pues… ¿De que sirve configurar todo en base al dominio ejemplo.com si luego los correos jamás llegarán a él porque no existe? Suerte.

    Ante todo tened presente que el problema de autenticación NO tiene que ver con los registros MX del dominio.

  25. 25 Jose 2 abril 2007 a las 16:52

    Hola

    Me faltaba la UCE smtpd_client_restrictions pero sigue igual. Tengo configurado el /etc/sasl2/smtpd.conf así :
    pwcheck_method: auxprop
    auxprop_plugin: sql
    allowanonymouslogin: no
    mech_list: LOGIN PLAIN
    allowplaintext: yes
    sql_engine: mysql
    sql_hostnames: localhost
    sql_user: user
    sql_passwd: password
    sql_database: mailsql

    y el fichero /etc/conf.d/saslauthd como indica el manual del gentoo :

    SASLAUTHD_OPTS=”${SASLAUTH_MECH}-a rimap -r”
    SASLAUTHD_OPTS=”${SASLAUTH_OPTS} -O localhost”

    En el log del mail no me sale referencia alguna a chequeo para el smtp a no ser que ponga el verbose al master.cf. Sin embargo, donde sí sale información es en el /var/log/auth.log.

    Un saludo

  26. 26 Jose 2 abril 2007 a las 17:00

    Disculpad, es que no entraba todo en el mismo mensaje.

    Cuando está activado el cliente de correo para la autentificación, sale información correcta sin errores en el auth.log, pero cuando no está configurado esto en el cliente, envía los correos igualmente pero pone en el auth.log algo como esto :

    Mar 30 11:13:43 s_dgram@smtp postfix/smtpd[7834]: sql auxprop plugin using mysql engine
    Mar 30 11:14:00 s_dgram@smtp postfix/smtpd[7848]: sql auxprop plugin using mysql engine

    La verdad es que de momento estoy atascado con esto, no sé ya qué mirar.He reinstalado los paquetes y sigue igual.

    Gracias y un saludo

  27. 27 Hernan 12 junio 2007 a las 23:32

    buenas.. sabes
    que he tenido problemas similares a manuel.
    es el registro de autentificacion con pop3:
    Servidor-Web:/etc/mysql# telnet localhost 110
    Trying 127.0.0.1…
    Connected to localhost.
    Escape character is ‘^]’.
    +OK Hello there.
    user hernan@redian.cl
    +OK Password required.
    pass passwd
    -ERR Temporary problem, please try again later
    Connection closed by foreign host.

    eso escribo y el mail.log muestra:
    Jun 12 12:22:49 Servidor-Web courierpop3login: Connection, ip=[::ffff:127.0.0.1]
    Jun 12 12:23:00 Servidor-Web courierpop3login: LOGIN FAILED, user=hernan@redian.cl, ip=[::ffff:127.0.0.1]
    Jun 12 12:23:00 Servidor-Web courierpop3login: authentication error: Input/output error

    revise las tablas de mysql y estan cprrectas incluso creo q por defecto tu dejaste creadas algunas para hacer los mismo test, he intentado con esas, y con unas nuevas que he creado pero nada de nada…
    creo que la autentificacion entre courier y mysql es positiva, ya que probe ingresando un user totalmente diferente en el authmysql y me tiro el error de user incorrecto, le tire el usuario realmente correcto y no tiro problemas, pero si al momento de registrar un usuario por telnet…
    que sera?
    algun problema de courier?

    saludos

    espero tu ayuda…

  28. 28 Gura 12 junio 2007 a las 23:59

    Ayer estaba con un amigo mirandolo, que él también lo montó, y el problema, si no recuerdo mal estaba en que el Courier solicitaba la columna crypt, inexistente, en vez de la columna clear. Para averiguar el problema, activa el log de MySQL y utiliza un tail -f contra el fichero de log para ver qué consulta. Copia la consulta completa y lánzala tu contra MySQL a ver qué error da.

    Como bien has analizado, Courier autentica correctamente contra MySQL, pero acto seguido tiene que realizar una consulta para obtener la contraseña del usuario, comprobar que el usuario existe, obtener la ubicación del maildir, etc

    Lo dicho, revisa eso. Busca en el fichero authmysqlrc la palabra crypt que el fregao andará por ahí.

    Un saludo.

  29. 29 Hernan 13 junio 2007 a las 01:56

    hola buenas. nuevamente

    verifique el crypt enel authmysqlrc
    pero esta en clear
    intente revisar el log de mysql pero estan vacios , sabes donde activarlo…

    saludos

  30. 30 Hernan 13 junio 2007 a las 01:57

    acabo de activar el mysql.log
    en my.cf

    ahora verifique que me sale esto al intentar conectar.
    10 Quit
    11 Connect user@localhost on
    11 Init DB correo
    ——–
    hasta ahi creo que va bien… conecto la base y identifico la tabla

    aqui va el resto

  31. 31 Hernan 13 junio 2007 a las 02:00

    mm algo pasa en tu web que no me deja poner una linea de sql.. y me tira a un error interno :S

  32. 32 Hernan 13 junio 2007 a las 02:02

    ya no pude ponerlo aqui, pero te lo deje aqui para q lo mirases y me des tu opinion
    http://www.redian.cl/log.log

    saludos

  33. 33 Gura 13 junio 2007 a las 18:00

    Hola Hernan.

    Por lo que puedes ver conecta correctamente a MySQL y escoge la base de datos correo.

    He visto el log que me has dejado y lo le lanzado contra mi base de datos. Lo primero que ocurre es el la columna address no existe, en este caso es email (Al menos en mi caso). Modifícalo en el fichero de configuración.

    Una cosa he de decir también, y es que yo no lo monté igual que ese manual, sobretodo porque está sobre otra distro, los paquetes cambian algo, etc.

    Bueno, suerte con ello que hasta el Lunes que viene no estaré por aquí.

  34. 34 Hernan 13 junio 2007 a las 20:44

    hola GUra
    sabes que he cambiado en el authmysqlrc el nombre address por email

    ahora ya no me tira el error de
    ERR Temporary problem, please try again later
    Connection closed by foreign host.
    pero me tira

    ERR LOGIN FAIL
    Almenos ahora no acepta el login…

    pero he revisado el query y esta = que antes con la diferencia que hace la peticion a email, pero sigue sin logear… ademas no muestra mensajes de error… no entiendo como darme cuenta porque esta fallando el logeo…
    tienes alguna idea…

  35. 35 Edgar 20 junio 2007 a las 19:09

    Gracias viejo, pude sacarme un problema del sasl gracias a tu comentario con la config del smtpd.conf para configurar el acceso a una db mysql.

    muchas gracias.

  36. 37 Eva 25 junio 2007 a las 17:20

    Hola Gura, tu manual me parece muy interesante, lo estoy poniendo en práctica, pero en el punto donde intentamos establecer conexión con el servidor, (telnet localhost 110), aparecer el siguiente error. Hay que destacar que le pongamos el usuario y clave que sea, siempre da el mismo error,

    ¿Esto puede ser por autentificacion entre courier y mysql ?

    ¿Que puedo hacer?

    Jun 25 16:00:10 EQ25 courierpop3login: Connection, ip=[::ffff:127.0.0.1]
    Jun 25 16:00:25 EQ25 courierpop3login: LOGIN: ip=[::ffff:127.0.0.1], command=USER
    Jun 25 16:00:37 EQ25 courierpop3login: LOGIN: ip=[::ffff:127.0.0.1], command=PASS
    Jun 25 16:00:37 EQ25 courierpop3login: LOGIN: ip=[::ffff:127.0.0.1], username=usuario1@ejemplo.local
    Jun 25 16:00:37 EQ25 courierpop3login: LOGIN: ip=[::ffff:127.0.0.1], password=pass
    Jun 25 16:00:38 EQ25 courierpop3login: LOGIN FAILED, user=usuario1@ejemplo.local, ip=[::ffff:127.0.0.1]
    Jun 25 16:00:38 EQ25 courierpop3login: authentication error:Input/output error

    Gracias.

  37. 38 Eva 25 junio 2007 a las 17:33

    Aclaraciones del mensaje anterior:
    el SO es Debian ‘eatch’, y en vez de instalar el paquete courier-authmysql como para esta distribución no estaba he instalado el paquete courier-authlib-mysql.

  38. 39 Eva 26 junio 2007 a las 13:26

    SOLUCIÓN: hola cuento mi solución para los que tengais el mismo problema que yo, podeis mirar los dos mensajes anteriores. La solución a sido: en el fichero /etc/courier/authmysqlrc además de las modificaciones que dice el manual tenemos que comentar la linea de
    #MYSQL_CRYPT_PWFIELD crypt

    y modificar la linea de
    MYSQL_LOGIN_FIELD email

    Hay que poner que mire en el campo email , ya que por defecto te mira en id, y según el script de ejemplo tiene que mirar en el campo email.

  39. 40 Gura 26 junio 2007 a las 17:20

    Gracias por las aportaciones. Un día que tenga tiempo y ánimo, lo corregiré todo.

  40. 41 Cesar 23 agosto 2007 a las 04:37

    Hola, sabes que estaba leyendo tu guía, y al momento de agregar los datos en la db correo, intente bajarlos desde tu pagina, pero da el error 500, no deja bajar los ficheros sql😦

  41. 42 Gura 23 agosto 2007 a las 08:48

    Te remcomiendo que utilices PostfixAdmin que es un paquete en PHP para la gestión de dominios y buzones virtuales, soporte para quota, vacation mode, etc, y que contiene ya las tablas SQL necesarias para que funcione. Creo que en su web también está la documentación con los .cf necesarios para que Postfix obtenga la información de la base de datos.

    http://postfixadmin.com

  42. 43 Noel 23 marzo 2008 a las 22:38

    Tiene muy buena pinta el manual. Un saludo desde Asturias.


Comments are currently closed.



Las opiniones reflejadas en este blog son personales o ni siquiera son opiniones, y bajo ningún concepto representan las estrategias, opiniones o posturas de mi empresa actual, ni de ninguna en las que he trabajado, así como tampoco de ninguno de los clientes o proveedores de todas ellas.
La información se proporciona como está, sin garantías de ninguna clase, y no otorga ningún derecho. Los comentarios pertenecen a sus autores y bajo ningún concepto el autor del blog se hará responsable de los mismos.

Categorías

Archivos


A %d blogueros les gusta esto: