Para configurar el servidor, vamos a asumir que, teniendo una dirección IP dinámica, se cuenta con un nombre de dominio dinámico, por ejemplo como el que ofrece DynDNS.
Recordar que el MTA, Mail Transfer Agent es el encargado de mandar los mensajes de correo que salgan del servidor, así como de recibir en primer instancia los mismos para entregárselos al MDA que los debe dejar en los buzones correctos.
Como MTA utilizaremos Postfix, un MTA bastante popular hoy en día en servidores GNU/Linux.
Cabe decir que si no se tiene MTA, el comando mail nativo de GNU/Linux permite enviar emails únicamente a los usuarios de la misma máquina que funge como servidor. Fuera de eso no se puede enviar ningún tipo de correo (ni en la misma LAN ni por internet a otros dominios de correo): se necesita configurar el MTA (además de que para usar solamente mail este tutorial pierde todo su sentido...)
Instalación
El primer paso será instalar Postfix.
Se puede descargar el código fuente del sitio oficial, o se puede instalar la versión que venga en la distribución GNU/Linux que se esté utilizando.
En el caso de Debian Lenny, se debe instalar el paquete llamado postfix
En esta distribución, esto instala por default también libsasl2-2, paquete necesario para la autenticación con gmail que se pretende instalar.
En otras palabras, la instalación requiere de instalar Postfix con soporte para SASL.
Además, para los certificados públicos de autenticación, se requerirá instalar OpenSSL (paquete openssl), que incluya los certificados Thawte y Equifax. Estos se encuentran en el paquete ca-certificates.
Configuración
El siguiente paso es configurar el software.
Postfix se configura en los archivos del directorio /etc/postfix (o al menos ahí es por default en Debian)
- main.cf
Las configuraciones principales son:
#poner aqui el nombre de tu dominiomyorigin = nombredominio.homelinux.net
#autenticación para Gmailsmtp_use_tls=yes
smtp_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
#mas abajo explicamos como generar el archivo cacert.pemsmtp_tls_CAfile = /etc/postfix/cacert.pem
#SASL para autenticación con Gmailsmtp_sasl_auth_enable = yes
#mas abajo explicamos sobre el archivo passwd
smtp_sasl_password_maps = hash:/etc/postfix/sasl/passwd
smtp_sasl_security_options = noanonymous
#nombre del dominio, con que coincida con myorigin bastamydomain = $myorigin
#el nombre del host seria el nombre de la maquina servidor
#que tenga tu servidor cuando instalaste GNU/Linux y el
#nombre de tu dominiomyhostname = nombremaquinaservidor.$mydomain
#con que nombres se identifica tu destino de correo localmydestination = $mydomain, $myhostname, localhost.$mydomain, localhost
#quienes pueden enviar correos usando este servidor. es
#MUY importante ajustar esta opcion a lo que se quiera. Yo
#lo tengo asi (valor 'host') para solo enviar desde mi
#maquina servidor. El valor 'subnet' (default) permite que
#maquinas en la misma subred del servidor envien correos
#desde el server. El valor 'class' permite que el server
#envie correos desde cualquier máquina en la misma clase
#de red (A,B,C) en que se esté - con una máquina con IP
#dinámica proporcionada por un ISP provocaría que todas
#las máquinas de la subred del ISP envíen correos desde el
#servidor, MUCHO CUIDADO CON ESTO!
mynetworks_style = host
#si se quiere que otras maquinas puedan enviar correos
#desde este servidor, tambien se puede establecer la
#opcion mynetworks a un rango de IPs (en notación CIDR).
#MUCHO CUIDADO con esto, no dejarlo abierto a todo el
#internet, o los spammers abusarán de tu servidor para
#enviar correos desde aquí. Esto además seguro que
#provocará la cancelación de tu servicio con tu ISP...
#este es importante: con el se le dice a postfix que se
#conecte al relay de gmail para enviar correosrelayhost = [smtp.gmail.com]:587
#que tipo de mensajes loggeara postfix. Yo lo deje asi por
#hacer pruebas, pero no tiene que ser tan detalladonotify_classes = 2bounce, delay, policy, protocol, resource, software
#desde que interfaces de red de tu maquina se puede enviar
#correos...
inet_interfaces = all
#en donde estaran los alias para usar en las direcciones
#de correo usuario@dominio (se explica mas adelante)
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
#postfix debe saber como acceder al MDA. En este caso
#usamos procmail...mailbox_command = procmail -a "$EXTENSION"
#otras opciones...mailbox_size_limit = 0
recipient_delimiter = +
html_directory = /usr/share/doc/postfix/html
#con esta opcion le decimos a Postfix que queremos que los
#mails se reciban en un directorio Mail dentro del
#directorio $HOME del usuario... podriamos especificar un
#archivo estilo /var/mail (sin / al final) para que
#coloque todos los emails en un solo archivo. Pero para
#configurar correcta y facilmente procmail y sobre todo
#spambayes, y para tener mejor control, va a ir todo en un
#directorio especificado aqui...
home_mailbox = Mail/
- sasl/passwd
[smtp.gmail.com]:587 unacuenta@gmail.com:unacontraseña
Es importante proteger este archivo correctamente, cambiando sus permisos:$ chmod 600 /etc/postfix/sasl/passwd
Por último, hay que convertir el archivo a un formato adecuado para Postfix, para lo cual existe la utilidad postmap:$ postmap /etc/postfix/sasl/passwd
- cacert.pem
$ cat /etc/ssl/certs/Thawte_Premium_Server_CA.pem >> /etc/postfix/cacert.pem
$ cat /etc/ssl/certs/Equifax_Secure_CA.pem >> /etc/postfix/cacert.pem
Obviamente, es importante localizar los archivos origen *.pem en la instalación que se tenga.
- /etc/aliases
root: nombreusuario
spam: nombreusuario
ham: nombreusuario
El primer alias es para los correos que se dirijan a la cuenta root del sistema. Los otros dos se usarán para spambayes. Podría haber otros alias también, como postmaster, entre otros. Lo mejor por ahora es no moverlos y dejarlos tal como estén.
Por último hay que dejar el archivo de alias en un formato que Postfix pueda usar:
$ postalias aliases
- firewall
Aquí cabe hacer una aclaración. Mi ISP es Prodigy Infinitum, y luego de unos quebraderos de cabeza, me di cuenta utilizando nmap que el puerto 25 lo podía tener abierto en mi servidor, pero visto desde afuera parecía como si estuviera cerrado (con lo que podría tener un servidor de correo para mi LAN, pero no más). Investigando supe que Telmex, la compañía que lleva el servicio de Prodigy Infinitum en México, cierra por defecto a sus usuarios de domicilio particular el puerto 25, para evitar abusos y spam y demás. Lo que tuve que hacer (quien sabe si tu lo tengas que hacer también, dependerá de tus condiciones) fue interactuar con ellos, así que tuve que salirme de mi segura consola dentro de mi servidor, llamar por teléfono a Telmex y pedir que me abrieran el puerto 25. Según lo que estipula la medida es posible hacer esto para que se abra el puerto 25. Aclaré que sería para propósitos de 'mi trabajo' y de uso particular exclusivamente. Prometiendo no solamente no mandar spam ni abusar del servicio, sino también configurar correctamente mi máquina (jamás dije que era un servidor, no fueran a sospechar equivocadamente que haría otra cosa) para que nadie abusara del servicio (recuerda la configuración my_networks_style y my_networks en main.cf). Y está claro que no abuso del servicio... el sistema de correo electrónico es muy quisquilloso (y con razón), y es capaz de detectar la fuente de spam fácilmente, etiquetar a los servidores que son fuente del mismo, y si se reporta esto a Telmex, bien podría cerrarme el puerto, o cancelarme el servicio! incluso si no soy yo la fuente del spam, bastará que lo configure mal para provocar esto...
- Gmail
Para ello, se tiene que acceder a la cuenta de Gmail, acceder a Configuración y ahí a la pestaña de Cuentas e Importación. Agregar la cuenta del servidor y realizar el proceso de verificación, que consiste en introducir un código de verificación que debe llegar al correo indicado... ups, aún falta configurar el correo entrante para hacer esto. Volveremos a ello hasta el final, pero más valía anotarlo aquí para saber que aún es parte de la configuración del MTA y que queda pendiente a que podamos recibir correos...
Uso del MTA
Postfix ya puede usarse, y de hecho vamos a probarlo en breve.
Por ahora resumiremos los comandos de Postfix más importantes.
En primera instancia, una vez configurado todo, debe reiniciarse el servicio de Postfix, lo cual puede hacerse con
$ /etc/init.d/postfix restart(o donde quiera que residan los scripts que dan inicio a los servicios del sistema). Pero en vez de ello, Postfix también cuenta con una opción que permite reinciar y cargar las configuraciones de nueva cuenta, sin necesidad de reiniciar el servicio del sistema:
Si existen correos en cola de espera para ser enviados, puede pedírsele a Postfix que los envíe, vaciando la cola, con:$ postfix reload
Para ver la mencionada cola de salida de correos se utiliza el comando$ postfix flush
Así mismo, es importante saber en donde se almacenan los logs del sistema. Postfix genera por default tres archivos de históricos en /var/log:$ mailq
mail.error : con los errores que hubiera encontrado
mail.warn : con las advertencias que hubieran surgido
mail.info : con el resto de información de logging que se hubiera presentado
Prueba del MTA
Para probar Postfix, podemos hacer uso, por ahora, del comando mail de GNU/Linux.
Previamente debemos crear el subdirectorio $HOME/Mail (o donde quiera que lo hayamos configurado en el archivo main.cf de Postfix).
Hecho eso usamos:
Con direcciondestino alguna cuenta de correo de prueba fuera del servidor.$ mail direcciondestino@dominio.com
Luego ponemos el subject, INTRO, y escribimos el correo. Al terminar tecleamos ^D (Ctrl + D) y nada en el campo Cc: y el correo debería de llegar a la dirección especificada.
Hay que monitorear los logs para checar y corregir cualquier problema que pudiera surgir.
Claro está, si no se ha configurado Gmail, el correo parecerá venir de parte de la cuenta de Gmail.
Otra forma de probar el servidor es mediante una sesión en Telnet, sabiendo previamente como funciona el protocolo SMTP...
Y obviamente, aún queda configurar la recepción de correos, para poder recibir respuesta...
Continuamos entonces con el MDA...
APORTE ESPECTACULAR NO SE PRO QUE NADIE COMENTO ESTO, ESTA DE LUJO MUCHAS GRACIAS AMIGO DE VERDAD PARA 10 ESTRELLAS
ResponderEliminarMe acabas de salvar la vida. Gracias por el aporte.
ResponderEliminarmuchisimas gracias por los agradecimientos, sobre todo lo que me da gusto es saber que supe entender bien el tema, redactarlo como se debe, y explicarlo adecuadamente para compartir un pedazo de conocimiento que, de todas formas, no genero yo, sino la comunidad en general ;)
ResponderEliminarsaludos!
Oyes, una pregunta, en la linea
ResponderEliminarmyorigin = nombredominio.homelinux.net
aun no entiendo de donde saco ese dato, mi intención es instalar postfix en mi maquina con conexión a internet, mi ISP es Telmex(aca en México).
Alguna idea?
es el nombre de tu host, de tu maquina donde instalaras postfix. El nombre es el del dominio.
ResponderEliminarDepende donde instalaras postfix, podria ser que el servidor ya tenga nombre y no tengas que hacer mas nada. Por lo que entiendo es una maquina de tu casa, entonces necesitas antes que nada asignarle un nombre de dominio a tu direccion IP y hacer que el ruteador de Telmex asigne su IP a la de tu maquina, para mas informacion checate estos how-tos que yo mismo publique aqui: http://micro-howto.blogspot.mx/2009/03/servidor-linux-desde-tu-hogar-en-tres.html
Estoy parado en la parte de los certificados, estoy trabajando con centos
ResponderEliminarCentOS también tiene un paquete llamado ca-certificates (que puedes instalar con yum), ya lo has visto? contiene algún certificado que te sirva para esto?
ResponderEliminarEstimado Javier, no quiero salir del tema, pero te comento. Yo tengo varios servidores linux con CentOS 6.5 y quiero que cada servidor envíe un correo con el comando mail a una cuenta (admin@dominio.com) de un servidor Zimbra que está en la misma red. Lo he intentado y en los log del zimbra veo un mensaje: Domain not found. Alguna ayuda.....!!!!!
ResponderEliminarestas usando postfix en el servidor Zimbra?
ResponderEliminarEstimado, gracias por responder. El zimbra usa sendmail, si es que no me equivoco en la salida: alternatives --config mta.
ResponderEliminarLos Centos 6 creo que por default vienen con postfix como mta, pero tambien he instalado el sendmail y no logro enviar un correo de alerta al zimbra que esta en mi red. Gracias de antemano por la ayuda. :)
a ver, yo lo que haría sería depurar cada parte del sistema para ver donde está el problema. Me dices que los logs de Zimbra te dan un mensaje de error, pero que no eran los servidores CentOS los que iban a enviar los correos? Luego entonces, si los servidores CentOS si estan enviando los correos (ya estas seguro de eso?), el problema no es el MTA de Zimbra, sino quien recibe los correos. Podría ser una configuración donde zimbra, al recibir un correo, lo este reenviando a algun dominio no conocido? Pero si el correo se debe recibir en el mismo servidor zimbra, supongo que debería ser algo como localhost. Checa esas configuraciones!
ResponderEliminarGracias Javier, mira he podido probar que los Server CentOS si envían el correo, porque a una cuenta @gmail.com lo envían y llega normal.
ResponderEliminarPor ejem. el hostname de uno de los servers es srv01.empresa.com y cuando envío un correo por consola: mail -s Prueba destinatario1@gmail.com a la cuenta de Gmail llega como remitente: root@srv01.empresa.com
Lo mismo quiero hacer pero hacia un servidor Zimbra que tengo en mi red (que también tiene dominio público), y en los logs de zimbra como en el mismo server Centos me sale: Domain not found, que es lo único diferente a los logs de correos que si tienen llegada.
He configurado el /etc/hosts en ambos lados pero sin exito. Gracias,
pues yo me iría por partes.
ResponderEliminar1) desde CentOS puedes pingear el server de zimbra? y al reves? Usando los mismos nombres de dominio o direccion IP que estes usando en el correo. (Alternativa, haz la prueba con puras direcciones IP en lugar de nombres de dominio! que pasa ahi?)
2) el firewall de zimbra esta correctamente configurado?
2b) puedes recibir mails desde otro lugar que no sea CentOS, en zimbra?
2c) ...o al menos desde zimbra hacia zimbra mismo?
3) la configuracion del MTA de zimbra esta correctamente configurado para recibir emails y depositarlos en un buzon valido?
y asi...
OK Javier, revisé todo eso.
ResponderEliminar1. Hago ping por ip y por nombre.
2. El firewall está abajo.
2b. El Zimbra funciona bien, llegan correos de cualquier dominio, del mismo zimbra, tengo 600 cuentas en ese server en POP, IMAP y Web.
2c. También desde cuentas del mismo zimbra.
3. El MTA está configurado para recibir y depositar Email a las cuentas.
Es extraño...cuando envío a gmail llega bien, cuando envío a hotmail llega aunque sea como no deseado y no llega a mi server zimbra:
El log que sale srv01
===============
postfix/smtpd[23287]: NOQUEUE: reject: RCPT from unknown[192.168.1.9]: 450 4.1.8 : Sender address rejected: Domain not found; from= to= proto=SMTP helo=
El log que sale en zimbra
===================
postfix/smtp[1430]: 3B1774033D: to=, relay=mail.domzimbra.com[192.168.1.4]:25, delay=0.06, delays=0.02/0.01/0.01/0.02, dsn=4.1.8, status=deferred (host mail.domzimbra.com[192.168.1.4] said: 450 4.1.8 : Sender address rejected: Domain not found (in reply to RCPT TO command))
ok, investigando un poco en google, encontre esto: http://www.howtoforge.com/forums/showthread.php?t=42664
ResponderEliminarpor lo que entiendo el error te aparece porque el postfix no esta resolviendo correctamente el dominio desde donde estas enviando. Como dije, revisa las configuraciones
Estimado Javier, gracias por todo, en verdad muchas gracias. Lo solucioné, tenía activado postfix_recipient_restrictions.cf, agregué la IP de los servidores centos y llegan los correos sin ningún problema. El link que me pasastes me dió la luz. Graciaassssssssssssss
ResponderEliminar