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 ![]()
Escrito por Gura
05.Jul.06 y almacenado en las caterorías Clases o cursos, Debian, GNU/Linux, Software.
También puede escribir un comentario, o referenciar esta entrada (trackback) desde su web.
Cuando quieras lo adaptamos a FreeBSD!
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…
Pues me las puedo apañar solo broadcast, pero gracias, contaré contigo. A finales del verano casi seguro que está a punto.
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.
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.
Muy buen HOWTO, me ha gustado mucho que uses apt-build, muy limpio y actualizado con las fuentes y parches. Gracias por el documento
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 !
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.
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]
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.
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 :D,ya q tengo el mismo :P.
eso,slds
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
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
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
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
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.
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.
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!
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
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.
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
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.
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
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:
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.
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
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
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…
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.
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
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
mm algo pasa en tu web que no me deja poner una linea de sql.. y me tira a un error interno :S
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
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í.
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…
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.
De nada
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.
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.
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.
Gracias por las aportaciones. Un día que tenga tiempo y ánimo, lo corregiré todo.
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
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
Tiene muy buena pinta el manual. Un saludo desde Asturias.