[INTRO]
Continuando con la línea de estos mini-mini-howto, esta vez regreso a la escena con un pequeño documento para tener nuestro propio servidor de correo basado en Postfix (http://www.postfix.org). Postfix es un MTA (Mail Transfer Agent) que nace como una alternativa para sustituir al viejo y archi reconocido Sendmail (http://www.sendmail.org). ¿Qué cual es la diferencia entonces? Sendmail ha sido un MTA (al igual que Postfix) que ha evolucionado con el tiempo, inicialmente Sendmail fue un MTA que nació con muchas deficiencias, incluso aquellos geeks (like me) que han leído un poco sobre el tema, se acordarán del famoso gusano Morris (http://en.wikipedia.org/wiki/Morris_worm) el cual, entre otros atributos (que recomiendo lean), explotaba una vulnerabilidad de Sendmail. Incluso, durante aquella época, populaba un chiste entre los geeks el cual decía: "¿y cual es la nueva vulnerabilidad de Sendmail para hoy?". Bien, no es que Sendmail sea malo, por el contrario, como cualquier software, éste ha evolucionado con el tiempo y mejorado mucho más. Si algo hay que saber sobre Sendmail, es que es uno de los servidores de correo más utilizados en el mundo. De hecho, yo todavía tengo que seguir manteniendo y administrando bastantes servidores de correo basados en Sendmail.
Pero bueno, no vinimos aquí a saber de Sendmail, como lo dije al principio, esta vez vamos a conocer a un viejo también archi conocido Postfix. Postfix nace como una alternativa más segura, más rápida, más simple de administrar y lo suficientemente compatible con Sendmail. Postfix es una creación de Wietse Zweitze Venema (http://www.porcupine.org/wietse/).
Para este documento asumo como distribución de Linux, las siguientes: Redhat 9, Fedora Core 3 ó Fedora Core 4.
[HOWTO]
rpm -i postfix-1.1.12-1.i386.rpm
- Si ya tenemos Sendmail funcionando en nuestra máquina, es bueno que detengamos el servicio para no entrar en conflicto con nuestra nueva adquisición. Para ello basta con que ejecuten los siguientes comandos:
/etc/init.d/sendmail stop chkconfig --level 345 sendmail off- Si lo que tenemos es un Sendmail levantado por Gateways antivirus como MailScanner (http://www.mailscanner.info), entonces hacemos lo siguiente:
/etc/init.d/MailScanner stop
cd /etc/postfix
cp main.cf main.cf.ori
El ".ori" no es de "orines", "orinoco" ni nada por el estilo, el ".ori" es de "original". Esto es bueno hacerlo por si no somos muy diestros al editar archivos y por si algo va mal, pues ponemos el archivo de configuración original y listo, "no ha pasado nada".
Antes de meternos como loquitos a hacer cosas en el archivo de configuración de Postfix, vamos a ver que es lo que vamos a meter y POR QUÉ. Es que saber POR QUÉ también es importante. Quién quita que un día cualquiera en "Quién quiere ser Millonario le pregunten: ¿Porque en el archivo de configuración de Postfix...?".
Nota al pie:
- Quién quiere ser millonario es un programa concurso en donde se gana dinero respondiendo a preguntas.
- Quién quiere ser millonario y su productora/programadora/creadora no tienen nada que ver con este sitio. Es decir, ellos no me dan dinero para mantener este sitio.
- Yo, Juan F. Muñoz - Fernández declaro que no conozco a nadie de ese programa y que tampoco tengo familiares en su productora/programadora/creadora.
Las directivas mínimas, para tener nuestro Postfix corriendo a las mil maravillas son las siguientes:
mydomain = <Dominio de Internet de este sistema de correo>
El nombre del dominio de Internet para este sistema de correo; por defecto se utiliza el valor de la variable $myhostname sin el primer componente del valor de la misma. El valor de la variable $mydomain se utiliza por defecto en muchos otros parámetros de la configuración de Postfix.
Ej:
mydomain = diginet.com.co
myhostname = <Nombre de Internet de este host>
Especifique el nombre de Internet para este host. El valor de esta variable debe ser un nombre FQDN resoluble a través de consultas DNS.
Ej:
myhostname = mail.diginet.com.coUstedes saben que el servicio de correo va muy de la mano con el DNS, quizá en otro artículo haga más detalle sobre el DNS, pero por ahora solo puedo decirles lo que explico aquí. Por ejemplo, el valor de esta directiva aparece en el banner SMTP cuando se establece una sesión SMTP con nuestro servidor de correo Postfix, por ejemplo:
telnet 192.168.1.1 25 220 mail.diginet.com.co ESMTP PostfixAquí solo estoy ejemplificando el uso de esta variable, pero la verdad es que se utiliza para más parámetros de la configuración de Postfix.
myorigin = <Dominio de Internet>
Especifique el dominio de Internet con el que se originan los mensajes de correo salientes de este servidor de correo. Este es el dominio que aparece en el campo “From” de los mensajes de correo.
Ej:
myorigin = $mydomainó bien,
myorigin = diginet.com.coEn otras palabra, cuando ustedes envíen un mensaje de correo a través del servidor Postfix, el destinatario final verá en el campo "From:" ó en el campo "De:" (para los hispano hablantes) del mensaje de correo, algo como:
From: Pepito Perez <pepito@diginet.com.co>En caso de que se coloquemyorigin = $myhostnameEntonces el destinatario final de nuestros correos vería algo como:
From: Pepito Perez <pepito@mail.diginet.com.co>
[NOTA DE PROFESOR] Si los estoy haciendo dormir con el discurso, me avisan [/FIN DE NOTA]
mydestination = <Dominio de Internet>
Especifique los dominios de Internet que este sistema de correo atiende.
Ej:
mydestination = $mydomain localhost.localdomain localhost $myhostnameó bien,
mydestination = diginet.com.co localhost.localdomain localhost mail.diginet.com.coEs con este parámetro que le estamos diciendo a Postfix cuales dominios de Internet atiende para el correo. Si, como ya habrán sacado sus conclusiones, es con este parámetro que le decimos a Postfix que reciba el correo que va dirigido para diginet.com.co, localhost.localdomain, localhost y mail.diginet.com.co. ¿Oiste Juan, y porque tantos valores para este parámetro?. Pues porque la novia que tenemos en la empresa X y la novia que tenemos en la empresa Y no son las únicas que nos mandan correo a pepito@diginet.com.co. Dentro del mismo servidor de correo hay aplicaciones que envían notificaciones vía correo electrónico a los administradores de las mismas (notificando algún evento particular), generalmente estas aplicaciones envían mensajes de correo de la siguiente manera: root@localhost ó root@localhost.localdomain ó pepito@mail.diginet.com.co ó postmaster@localhost.localdomain. Por esta razón es que hay que decirle a Postfix que reciba el correo para todas estas denominaciones.
inet_interfaces = <Dirección IP | all>Especifique las direcciones IP de las Interfaces por las cuales se desea que Postfix quede a la escucha del servicio SMTP. Si desea configurar el servicio en todas las interfaces, asigne a esta variable el valor all.
Ej:
inet_interfaces = all inet_interfaces = loopback-only (Postfix 2.2 and later) inet_interfaces = 127.0.0.1 inet_interfaces = 127.0.0.1, [::1] (Postfix 2.2 and later) inet_interfaces = 192.168.1.2, 127.0.0.1Como sabemos, el servicio de correo pone un Socket TCP en el puerto 25, con este parámetro le decimos a Postfix en que interface de red vamos a colocar el Socket TCP/25 a la escucha de las peticiones. Si lo que estamos configurando es un servicio que está disponible desde Internet, entonces deberíamos asignar el valor all a esta variable. Con el valor all ponemos un Socket TCP/25 en todas las interfaces de red que tengamos, es decir, si tenemos tres interfaces de red así:127.0.0.1 192.168.1.1 200.1.2.3Una petición dirigida a 127.0.0.1 puerto 25, será válida, lo mismo sucede con las peticiones hechas a 192.168.1.1 y 200.1.2.3.
mydomain = diginet.com.co myhostname = mail.diginet.com.co myorigin = $mydomain mydestination = $mydomain localhost.localdomain localhost $myhostname inet_interfaces = all
/etc/init.d/postfix start
chkconfig --level 345 postfix on
[DE LAS VERIFICACIONES]
¿Más carreta?. Si señor, más carreta. Pues lo primero que deberíamos verificar es lo siguiente:
Para esto, ejecutamos:
netstat -an | grep 25
deberíamos ver una salida similar a la siguiente:
. . . tcp 0 0 10.100.0.253:53 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN . .De especial interés la línea:
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTENCon esto verificamos que el servicio está a la escucha en todas las interfaces. Recuerden que 0.0.0.0 significa todas las interfaces y el 25 significa el número de puerto que está a la escucha. El puerto No. 25 corresponde al protocolo SMTP. Otras salidas interesantes del comando netstat, son las siguientes (compruébelo usted mismo):
netstat -anp netstat -puta (jejeje...está me la pille en pello.info) netstat -ano (juas!!!..microsoft.com no deja de impresionarme)
¿Qué no sabes hablar SMTP?, pues bueno, yo al principio tampoco sabía pero me metí a clases de Inglés y estaba tan de buenas que en el instituto donde estaba aprendiendo Inglés también enseñaban SMTP. También es interesante aprender hablar LDAP, BGP-4, HTTP, entre otras cosas. No, ya dejémonos de tanta bobada, una prueba que usualmente se hace es hablar SMTP directamente con nuestro servidor de correo para verificar que todo está funcionando como esperamos (es decir, por lo menos es capaz de recibir correo). Para hablar SMTP con nuestro servidor de correo solo basta con hacer una sesión telnet dirigida al puerto 25 de cualquier dirección IP de nuestro servidor de correo.
En el ejemplo que voy a ilustrar a continuación, supongo lo siguiente:
La IP interna de mi servidor de correo es: 192.168.1.1
Dentro del servidor de correo existe un buzón de correo para pepito@diginet.com.co
Voy a enviarle un mensaje de prueba a pepito@diginet.com.co, diciendo que yo soy mrwolf@pulpfiction.com.
Pongo a continuación mi diálogo SMTP con mi servidor de correo a través de una sesión Telnet al puerto 25 de mi servidor de correo. Usted puede probar de acuerdo con sus configuraciones lo mismo (lo que yo escribí está en negrita y de color verde, lo demás son respuestas del servidor a los diferentes comandos SMTP):
telnet 192.168.1.1 25 220 mail.diginet.com.co ESMTP Postfix HELO juanmuno.diginet.com.co 250 mail.diginet.com.co MAIL FROM: mrwolf@pulpfiction.com 250 Ok RCPT TO: pepito@diginet.com.co 250 Ok DATA 354 Please start mail input. HI, MY NAME IS MR WOLF. I SOLVE PROBLEMS... . 250 Mail queued for delivery. QUIT 221 Closing connection. Good bye. Connection to host lost.Con lo anterior, a pepito@diginet.com.co, le debió llegar un mensaje de correo de mrwolf@pulpfiction.com diciendo:
HI, MY NAME IS MR WOLF. I SOLVE PROBLEMS
Para aquellos novicios y curiosos, el protocolo SMTP está especificadoen el RFC 821 (http://www.faqs.org/rfcs/rfc821.html). Agarren un buen tazón de café y siéntense a leer el RFC 821 en donde encontrarán el significado de las líneas anteriormente ilustradas.
[DEL ARCHIVO DE CONFIGURACION]
El formato general del archivo de configuración (main.cf) sigue el siguiente formato. (El siguiente texto es tomado textualmente de la documentación ofiicial de Postfix. http://www.postfix.org/postconf.5.html).
[DEL RELAY]
Como yo ya se que muchos de ustedes se han preguntado: "¿y sobre el relay qué?". Bien, que digo sobre el relay...mmmmm...a ver yo pienso...mmmmm...No, la verdad es que Postfix es tan bueno, que por defecto sin decirle nada es capaz de hacer Relay a todo el conjunto de clientes que se encuentren en la misma subred de cada interface de red que tengamos conectada al sistema. Por ejemplo, suponiendo que tenemos una máquina con tres interfaces de red así:
10.1.0.254 MASK 255.255.0.0 192.168.1.254 MASK 255.255.255.0 200.1.2.3 MASK 255.255.255.248
Suponiendo que la interface con la IP 200.1.2.3 es nuestra interface externa, Postfix es capaz de hacerle Relay por defecto a todos los clientes que se encuentren en la subred 10.1.0.0/255.255.0.0 y la subred 192.168.1.0/255.255.255.0. Postfix también sabe que la interface 200.1.2.3 es la externa y que a esa subred no se le debe hacer Relay. Sin embargo hay dos parámetros en el archivo de configuración de Postfix, que pueden sintonizar al gusto de ustedes el tema del Relay. Ambos parámetros son los siguientes:
mynetworks_style mynetworks
No voy a entrar a explicarlos, son sumamente simples y como Postfix le hace Relay por defecto a los clientes que se encuentran en la misma subred creo que no hace falta entrar ahora en esos detalles. Si se pasan por esta página http://www.postfix.org/BASIC_CONFIGURATION_README.html, se van a dar cuenta lo simples que son.
Entre otras cosas, ¿qué es el Relay?. Tomen esta explicación del concepto de Open Relay.
- http://es.wikipedia.org/wiki/Open_Relay
[DE LO QUE NO SE DIJO]
Si, lastimosamente necesitaría unas buenas 8 horas teóricas y unas cuatro prácticas para poner todos los elementos básicos que envuelven al tema de correo. Se me queda en el otro costal el tema del DNS (como sintonizamos el DNS para resolver nuestro dominio de Internet y así recibir el correo), el enmascaramiento de dominios con Postfix (Domain Masquerade), el servicio POP3 y configuraciones adicionales bastante interesantes como Antispam, los Alias y sus bondades, dominios virtuales, entre muchas otras cosas. Bueno, algún día sacaré tiempo para escribir sobre estos asuntos mundanos (jajajajaja).
[FINAL]
Más que un artículo sobre la instalación de Postfix, me gustaría aclarar que es un artículo sobre la configuración básica y el detalle (así sea superficial) de algunos de sus pormenores, espero sus comentarios en mi dirección de contacto: juanmuno [[at]] juanfelipe [[dot]] net, no sean muy duros...jajaja, escriban lo que se les antoje.
Bueno, sin más que decir en este artículo, me despido de ustedes.
Juan Felipe Muñoz - Fernández.
Comments
Solo aceptando conexiones de localhost
desde la misma maquina donde esta el servidor de correo de Postfix
telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 asteriskpbx.dycecbcn.com ESMTP Postfix
quit
221 Bye
Connection closed by foreign host.
Desde otro host:
telnet 172.16.0.2 25
Conectándose a 172.16.0.2...No se puede abrir la conexión al host, en puerto 25:
Error en la conexión
si hago un netstat en el host servidor
tcp 0 0 172.16.0.2:25 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
un netstat desde cualquier otro host (clientes de correo):
Conexiones activas
Proto Dirección local Dirección remota Estado
TCP dycec-fi2270256:1027 localhost:1028 ESTABLISHED
TCP dycec-fi2270256:1028 localhost:1027 ESTABLISHED
TCP dycec-fi2270256:1069 localhost:10200 ESTABLISHED
TCP dycec-fi2270256:1141 localhost:1142 ESTABLISHED
TCP dycec-fi2270256:1142 localhost:1141 ESTABLISHED
TCP dycec-fi2270256:2259 localhost:2260 ESTABLISHED
TCP dycec-fi2270256:2260 localhost:2259 ESTABLISHED
TCP dycec-fi2270256:2261 localhost:2262 ESTABLISHED
TCP dycec-fi2270256:2262 localhost:2261 ESTABLISHED
TCP dycec-fi2270256:10200 localhost:1069 ESTABLISHED
TCP dycec-fi2270256:1137 172.16.0.11:microsoft-ds ESTABLISHED
TCP dycec-fi2270256:2213 172.16.0.2:6600 ESTABLISHED
TCP dycec-fi2270256:2223 172.16.0.2:22 ESTABLISHED
TCP dycec-fi2270256:2780 172.16.0.2:22 ESTABLISHED
TCP dycec-fi2270256:2954 172.16.0.2:22 ESTABLISHED
TCP dycec-fi2270256:3523 mu-in-f104.google.com:http TIME_WAIT
TCP dycec-fi2270256:3533 static-sfx.nslb.sj.mozilla.com:http TIME_WAIT
Lo mejor de todo es que antes funcionaba, y creo no haber tocado nada, solo hice un reboot, tengo SElinux e iptables desactivados, pero parece ser que el problema no viene por alli, y que en el servidor postfix esta escuchando correctamente en todas las inet_interfaces
Saludos.
AYUDA POSTFIX
HOLA TENGO CONFIGURADO CYRUS IMAP, TODO VA BIEN CUANDO PRUEBO TELNET HOST 25, Y TELNET HOST 143 (PUEDO ENTRAR A LAS CASILLAS Y ENVIAR CORREOS).
HE CONFIGURADO EL POSTFIX DE ACUERDO A LO QUE AMABLEMENTE HAS EXPLICADO, PERO LOS MAILS QUE ENVIO A USUARIOS DE MI MISMO DOMINIO NO LLEGAN O NO SE QUE PASA...PERO CUANDO LO ENVIO A ALGUNO DE UNA CUENTA POR EJEMPLO DE YAHOO O LO QUE SEA... SI LLEGA.
AYUDA POR FAVOR!!!
Servidor da time-out
Hola, buenos días.
Te explico el problema. Tengo un postfix funcionando bajo Mandrake y todo va estupendamente. El problema es que uno de mis clientes se ha instalado una aplicación para recibir correo y tiene configuradas unas 8 cuentas del dominio del cual yo le doy servicio. El problema es que, cada cinco minutos su máquina se conecta a la mia y mira si hay mensajes pendientes en mi servidor pero cuando las cuentas hacen login, sólamente lo hacen las cuatro primeras .... el resto da timeout.
Busqué en la red y encontré un parámetro de "máximas conexiones concurrentes" y lo cambié a 20 pero sigue sucediendo lo mismo. Su aplicación no parece ser ya que aparte de mis cuentas tiene configuradas otras de otros dominios y reciben correctamente.
¿Por qué puede suceder esto?
Muchas gracias de antemano.
Rubén Izquierdo
squirrelmail
como podès instalar squirrelmail en postfix que programa imap recomiendas
y como se hace
Ampliar la quota
Tengo cuatro usuarios que estan rebasando el tamaño de la quota limite del buzón de voz, he buscado por internet y encontre algo sobre el parametro mailbox_size_limit pero no lo encuentro por ningún lado. Alguien puede ayudarme con esto.
Ampliar la quota
Agreguélo al final del archivo de configuración de Postfix (main.cf).
Por ejemplo:
mailbox_size_limit = TAMANYO EN BYTES
Reinicie postfix y listo!
Juan Felipe
el nombre del servidor debe ser el mismo del dominio
en este momento tengo una maquna con fedora 3 llamada PRUEBALINUX el dominio es tttt.com.co la maquina mia debe llamarse igual al dominio??
tiene que tener ip publica??
me pueden aydar al correo domina@epm.net.co
maildir
Hola, he configurado el postfix como me indica, he desinstalado el sendmail. Estan abierto mis puertos 110, 143, 25, pero tengo problemas al crear usuarios ya que no me esta creando MAILDIR de cada ussuario... que puedo hacer?
ehonoresm@gmail.com
Postfix y Maildir
Hola. Maildir es una técnica de almacenamiento de correo distinta a la forma convencional de casi todos los sistemas de correo, es decir, el formato o la técnica Mbox. Postfix por defecto usa el sistema Mbox.
Para habilitar el sorpote de Maildir en Postfix, leete esto: http://www.postfix.org/faq.html#maildir
Saludos.
Juan Felipe
hola tengo un servidor en f
hola
tengo un servidor en fedora core 2, con postfix 1.0 instalado y configuardo, yo lo quiero duplicar o mejor dicho hacer uno igual pero que ese se encargue solo de internet y el antiguo quede solo para uso local en la empresa y que el nuevo servidor se direccione a el antiguo para que este ultimo no este en contacto con internet, que me puedes decir al respecto porfa ya he buscado en postfix.org (no he chequeado bien todos los documentos), pero no he llegado a algo ...bueno gracias por lo q me puedas aportar. otra cosita yo podria llamarle a ese direccionamiento que pretendo hacer Relay...
Mari
Me podrias ayudar
Me podrias indicarcomo configurastes el postfix
mloaizad@gmail.com
Buzon de Correo
El howto que escribistes me sirvio de mucho, bien ahora el problema es como crear cuentas (Buzones) de correo que no sean usuarios del sistema, necesito algun software adicional al Posfix? Como instalarlo o donde buscar informacion detallada?
Gracias
Hola..que tal...me gustaria s
Hola..que tal...me gustaria saber si resolviste el problema de como crear cuentas...desde ya muchas gracias...podrias contestarme a yobetoce@hotmail.com
No me conecta al puerto 25 desde otra pc de mi red
Hola.
Tengo el parámetro inet_interfaces = all
pero ni así me deja accesar desde mi cliente de correo al servidor,
Qué puedo hacer, a qué se debe esto ?.
Gracias por tu ayuda y este tuto está excelente...
Clark.
No me conecta al puerto 25 desde otra pc de mi red
Hola.
Bueno, hay muchas posibles razones. Te hago las siguientes preguntas:
1. Estás seguro de que existen un socket escuchando TCP en el puerto 25?
2. Tienes IPTables o algún componente de seguridad instalado en el servidor Linux con Postfix?
3. Como te estás conectando a tu servidor de correo?
4. Ya hiciste una prueba con telnet al puerto 25?
5. Que mensaje de error te esta saliendo?
Muchas gracias por tus comentarios.
Juan Felipe
mini-howto postfix
hola. El howto que escribistes me sirvio de mucho pero al conectarme desde outlook o mismo telnet al puerto 25 me permite enviar con el FROM de cualquier direccion; por ejemplo billigates@microsoft.com, cosa que no esta nada bien legalmente hablando. Como podria hacer para que me pidiese nombre de user y pass asociada a una determinada cuenta existente en el sistema linux (etc/passwd). Llevo dias peleandome con esto y no encuentro manera.
Gracias por leer el mensaje.
Un saludo
miguel
Validaciones SMTP
Hola Miguel.
Gracias por tus comentarios.
Con respecto a tu duda, aquí te dejo unos interesantes enlaces sobre validaciones que pueden hacerse en los MTA's con respecto al protocolo SMTP.
- http://slett.net/spam-filtering-for-mx/smtpchecks.html
- http://www.kobitosan.net/postfix/origdocs/antispam-en.html
- http://www.postfix.org/uce.html
No te puedo explicar más por ahora debido a mi falta de tiempo, pero quizá en estos días me anime y escriba otro artículo sobre este tipo de validaciones con Postfix.
Saludos.
Juan Felipe Muñoz - Fernández
PD: Los articulos están en Ingles. Espero no sea problema. Puedes escribirme a mi correo. Preferiblemente utiliza cualquiera de mis claves públicas para remitirme algo por ese medio.