|
Configuración de Postfix
Introducción
Este documento explica cómo configurar Postfix (en su versión
1991231) en una máquina con Linux que conecta ocasionalmente con Internet.
El objetivo real es, principalmente, habilitar un mecanismo que permita escribir
correos electrónicos off-line, es decir, sin tener que conectar
con Internet en el momento de escribirlos. La idea es que el lector de correo
envíe los mensajes al servidor local, quien los acumulará,
enviando todos los correos externos al sistema al establecer la conexión
a Internet, de forma automática y en segundo plano. Adicionalmente, se
conseguirá que los distintos usuarios locales puedan enviarse correos
locales entre sí. Durante las indicaciones para la configuración,
se usan los siguientes valores de ejemplo:
- Nombre host local (milinux.midominio): es el nombre
completo que le hemos dado a nuestra máquina al instalar
Linux. El valor por defecto es localhost.localdomain, pero he preferido
poner otro para evitar confusiones con algunos usos de localhost que se
aplican incluso si le cambiamos el nombre a la máquina.
- Nombre dominio local (midominio): es el nombre del
dominio en que se ubica la máquina; es todo lo que sigue al
primer punto en el nombre del host.
Algunas definiciones
Lo primero es presentar algunas definiciones básicas sobre el correo
electrónico y su funcionamiento. El servicio de correo electrónico
consta de dos partes bien diferenciadas: aquella con la que trata el usuario,
y aquella que se encarga de transportar los mensajes del origen al destino.
A menudo hay un componente adicional encargado de distribuir el correo
que llega a la máquina destino a una ubicación especial dentro
de ésta, propia de cada usuario. Los nombres de estos componentes
son:
- MUA (Mail User Agent): es un programa que permite leer y escribir
correos. Suelen tener muchas funcionalidades que superan la estricta
lectura y composición de mensajes, como el mantenimiento de
libretas de direcciones, gestión de anexos (attachments),
gestión de múltiples carpetas para organizar el correo,
filtros de correo para borrarlo, responderlo, o redirigirlo a carpetas
determinadas, todo ello automáticamente y en función de
las características del mensaje, etc. Nombres habituales de MUAs
son: mail, elm, pine, kmail (entorno KDE), Netscape Messenger, Microsoft
Outlook Express, Qualcomm Eudora (en Windows), Pegasus Mail (en Windows)
...
- MTA (Mail Transport Agent): es un programa encargado de recoger
mensajes y enviarlos, comunicando para ello con otros MTA según
sea preciso. Lo normal es que funcione como servicio (es decir, de modo
continuo, esperando peticiones de los MUAs o de otros MTAs y
atendiéndolas). En Unix/Linux se implementan como uno o
más demonios. El MTA más famoso y utilizado es
sendmail; otros MTAs son Postfix, QMail... Además,
productos de groupware como Microsoft Exchange, Lotus Domino Server,
Novell Groupwise o Netscape Messaging Server incluyen MTAs.
- Utilidades diversas: dependiendo de las circunstancias, se usarán
otras pequeñas utilidades adicionales, que se
encargarán de "colocar" los mensajes en el buzón de cada
usuario, de recoger el correo de servidores externos, etc. Postfix utiliza
procmail para la primera función; nosotros utilizaremos fetchmail
para recoger el correo del servidor POP3 de nuestro proveedor.
Así pues, el objetivo de esta documentación es ayudar a
configurar un MTA, concretamente Postfix. ¿Por qué Postfix
y no sendmail? Por tres motivos, básicamente:
- sendmail es mucho más complejo que Postfix: Postfix se
incluye en algunas distribuciones de Linux como alternativa más
sencilla y segura que sendmail. El objetivo de esta documentación
no es poner en marcha un hiper-mega-servidor de correo, sino una
solución sencilla para disponer de correo off-line.
- sendmail ya cuenta con muchísima documentación: Al
ser un software que lleva mucho tiempo funcionando, y que es tan popular,
hay disponible mucha documentación para sendmail. La página
Web de sendmail es: http://www.sendmail.org/.
- no tengo ni pajolera idea de sendmail: sobran explicaciones
posteriores. :-)
Más suposiciones
Este documento no es sino la recolección ordenada de las peleas
que su autor ha tenido hasta conseguir dejar funcionando correctamente
(correctamente es una forma de hablar) Postfix en una máquina con
Linux que conecta ocasionalmente (aproximadamente una hora diaria)
con Internet. Por el momento, esta documentación asume lo siguiente:
- La máquina tiene instalada la versión 7.0.2 de la
distribución Mandrake Linux, u otra distribución basada
en Red Hat 6.x. Esto permite suponer en qué ruta se encuentran
los archivos de configuración. De todas formas, no deberías
encontrar grandes problemas con otras, y lo más probable es que
todas guarden su configuración en /etc/postfix.
- La instalación se ha hecho mediante un paquete RPM, y sendmail
no estaba instalado anteriormente. Cumpliéndose estas dos
condiciones es muy probable que el demonio de Postfix se esté
cargando durante el inicio del sistema, y que la configuración
relativa a la conexión (propietario del puerto, demonio que lo
atiende, etc.) sea correcta.
¿Y si tengo sendmail?:
- Si tienes sendmail, tendrás que desinstalarlo antes. Primero
deberás matar el proceso de sendmail, si es que se está
ejecutando (# killall sendmail), y luego desinstalarlo con el
procedimiento adecuado para tu distribución.
Configuración local
La configuración local es bastante sencilla. De hecho, es posible
que el sistema funcionara sin necesidad de tocar nada. No obstante, es
preferible asegurarse modificando los siguientes valores del archivo /etc/postfix/main.cf
(es posible que algunos de estos parámetros ya figuren con los valores
indicados):
myhostname = milinux.midominio
mydomain = midominio
myorigin = $myhostname
mail_spool_directory = /var/spool/mail
Además, hay que modificar el archivo de alias. Normalmente el
archivo de alias está en /etc/aliases. Sin embargo, en
vuestro sistema con Postfix es fácil que encontréis que
/etc/aliases es un enlace simbólico a /etc/postfix/aliases. Este archivo
contiene alias, es decir, equivalencias entre una dirección local
(probablemente ficticia) y una dirección real. Así, si el
servidor recibe un mensaje dirigido a "postmaster@milinux.midominio", y
en /etc/aliases hay una línea como ésta:
postmaster root
(como, de hecho, hay), será root quien realmente reciba el mensaje.
El archivo aliases ya contiene algunas líneas comunes.
La única línea que puede interesar añadir es la que
redirige el correo de root a un usuario normal (que será la que
habitualmente utiliza el administrador cuando no precisa privilegios de
supervisión). La línea sería, simplemente:
root pepito
En "man 5 aliases" se puede obtener más información, para
aprender cómo establecer más de un destino para cada alias,
enviar el mensaje a un archivo, etc.
Para que aliases sea tenido en cuenta por Postfix, en /etc/postfix/main.cf
debe haber una línea del tipo:
alias_maps = hash:/etc/postfix/aliases
Y, además, cada vez que se modifica el archivo aliases
debe ejecutarse el comando (como root):
newaliases
Este comando genera el archivo /etc/aliases.db, que es una
versión indexada de aliases, para mejorar el acceso durante
la ejecución de Postfix.
(Para no complicar las cosas, no entraremos en detalles sobre el formato
db. Al tener todos estos cambios realizados y funcionando, deberíais
poder enviar mensajes desde un usuario a otro, siendo ambos de vuestro Linux.
Enviar correo al exterior
Postfix ya asume que ciertas direcciones tienen que ser entregadas a
máquinas remotas. Sin embargo, hay diferentes formas de hacer eso
(e incluso de no hacerlo), y las que nos interesan han de tener en cuenta
las siguientes circunstancias:
- La máquina no está constantemente conectada a Internet,
así que hay que decirle a Postfix que no debe intentar procesar
los correos que van fuera de la máquina inmediatamente, sino
cuando se le indique.
- Lo ideal sería que Postfix le pasara el marrón de
distribuir el correo al servidor de vuestro proveedor de Internet.
Así, vuestra máquina no tiene que estar buscando a cada
servidor, sino que le pasa todos los correos pendientes al servidor de
vuestro proveedor y éste se busca la vida. Desafortunadamente,
la mayoría de los servidores requieren autenticación para
cosas así, y Postfix (en la versión examinada aquí,
la 19991231) no tiene mecanismos para suministrar el nombre de usuario y
contraseña correctos, así que lo más probable es que
haya que dejar que Postfix haga el trabajo sucio.
- Si tu proveedor es Atranquis, Tierra, o EresMenos,
tu dirección será, por ejemplo, luisito@eresmenos.com,
y es posible que la cuenta de Luisito en Linux sea, precisamente,
luisito. Si envías un correo desde
root@milinux.midominio a luisito@eresmenos.com, al final
llegaría a luisito@milinux.midominio, así que
¿para qué hacer que el correo esté
subiendo y bajando por el módem innecesariamente?
Muy bien, vayamos por partes, como diría Jack el Destripador. Si
la máquina no está conectada constantemente a Internet, los
correos enviados por SMTP (el protocolo que utilizan los MTAs como Postfix
para pasarse los correos a través de Internet), hay que dejarlos
en cola hasta que conectemos. La primera parte, dejarlos en espera, se
consigue con el parámetro siguiente en /etc/postfix/main.cf:
defer_transports = smtp
Al hacer esto, los mensajes al exterior se quedan en cola (puedes comprobar
qué mensajes están en cola ejecutando el comando mailq).
La segunda parte, que los envíe cuando estemos conectados, se
hace con el comando /usr/sbin/sendmail -q. Ojo, porque este comando
sólo lo puede ejecutar root. En el apartado Otros explicaré
por encima cómo conseguir que no sea necesario abrir una sesión
de root para ejecutar este comando. Observad también que sólo
se envían los mensajes que están pendientes en el momento
de ejecutar ese comando: si mientras Postfix distribuye esos correos te
da tiempo a escribir uno y ponerlo en cola, no saldrá a menos
que vuelvas a ejecutar /usr/sbin/sendmail -q.
Ataquemos ahora el segundo punto. Es improbable, pero puede suceder
que el servidor de correo de tu proveedor de Internet no necesite nombre
de usuario y contraseña. Si fuera así, es mejor que Postfix
le pase los mensajes a él para que los distribuya. Para hacerlo,
tienes que escribir lo siguiente en /etc/postfix/main.cf:
relayhost = smtp.eresmenos.com
Obviamente, tienes que cambiar el nombre del servidor al correcto. Si
no sabes si el servidor de correo de tu proveedor lo va a permitir o no,
haz una prueba sencilla. Pon este parámetro, envía un correo
de prueba a un amigo (no a tu propia cuenta), y si no recibes un
mensaje de vuelta diciendo que Postfix no ha podido entregar el mensaje,
es que el servidor de tu proveedor traga. En caso contrario, quita la
línea y ya está.
Vayamos con el tercer punto. Aquí confieso no estar aún
totalmente seguro de si todo lo que voy a poner es necesario, pero sin
duda con todo ello mi sistema funciona. :-)
Para empezar, haremos que un mensaje enviado a luisito se
convierta en enviado a luisito@eresmenos.com. La mayoría
de los MUAs utilizados tienen opciones para añadir esto
automáticamente, pero si no lo hacen ellos, lo hará Postfix.
En /etc/postfix/main.cf hay que poner lo siguiente:
myorigin = eresmenos.com
o bien
masquerade_domains = eresmenos.com
La diferencia importante entre usar myorigin o masquerade_domains es que,
con myorigin, si envías un mensaje a root@eresmenos.com, el
mensaje se repartirá localmente, porque Postfix asume que el dominio
de la máquina es "eresmenos.com" y, por tanto, interna. Si tu MUA hace
como el mío (Mozilla), que cuando escribes un nombre en el campo To:
te propone "autocompletarlo" con el dominio en el que está tu cuenta,
y prevés enviarte mensajes localmente, te puede convenir más
usar myorigin.
En cambio, si usas masquerade_domains, la suposición de que la
máquina tiene como dominio "eresmenos.com" no se realiza, de modo que
un mensaje enviado a root@eresmenos.com sería, efectivamente,
entregado a la cuenta root del dominio eresmenos en Internet.
¿Y el resto de las cuentas? ¿Qué pasa, por ejemplo, si yo
tengo una cuenta local llamada jose que usa como cuenta de Internet
pepe@eresmenos.com, y un día tengo que enviar un mensaje a
alguien cuya cuenta es jose@eresmenos.com? Pues, en mis pruebas al
menos, no ha habido ninguna diferencia entre usar myorigin y masquerade_domains:
en ambos casos, Postfix procesa el correo hacia el exterior de modo correcto.
Lo siguiente es hacer que los mensajes enviados por
luisito@milinux.midominio al exterior se envíen en realidad
como luisito@eresmenos.com. Esto se consigue creando un archivo
llamado /etc/postfix/sender_canonical, creando el correspondiente
/etc/postfix/sender_canonical.db, e indicando su uso en
/etc/postfix/main.cf. Por orden:
- Crear el archivo sender_canonical
El archivo tiene el formato siguiente:
luisito@milinux.midominio luisito@eresmenos.com
pepito@milinux.midominio pepe@eresmenos.com
Como puede verse, el nombre de usuario externo no tiene que ser exactamente
igual al interno. En este caso, la cuenta de Luis se llama "luisito" tanto
en la máquina Linux como en el proveedor de Internet, pero la cuenta
de José se llama "pepito" en Linux y "pepe" en el proveedor de Internet.
- Crear el archivo sender_canonical.db
Para crear el archivo db hay que escribir lo siguiente en la línea
de comandos (#) estando ubicados en /etc/postfix:
[/etc/posftix]# postalias hash:sender_canonical
Hay que hacerlo como root (de ahí que en lugar del prompt $ haya
puesto #), salvo que tengáis una política de permisos en
el sistema de archivos muy relajada.
- Indicar su uso en Postfix
En /etc/postfix/main.cf hay que añadir la siguiente línea:
sender_canonical_maps = hash:/etc/postfix/sender_canonical
Para que los cambios surtan efecto inmediatamente hay que teclear postfix
reload como root.
Aunque no sea estrictamente necesario, yo particularmente tengo exactamente
lo mismo para recipient_canonical, con la salvedad de que las parejas de
nombres están intercambiadas:
luisito@eresmenos.com luisito@milinux.midominio
pepito@eresmenos.com pepe@milinux.midominio
El efecto de recipient_canonical es que, al recibir un mensaje, no importa
si viene del exterior o del interior de la máquina; siempre lo recibes
como pepe@milinux.midominio. Es más una cuestión de
apariencia que otra cosa. Por supuesto, también hay que hacer lo mismo
que con sender, es decir, añadir el parámetro correspondiente en
main.cf (recipient_canonical_maps), y ejecutar postalias para
crear el archivo .db.
Y con esto ya está. Haced algunas pruebas para verificar que
todo funciona, que los correos dirigidos a root los recibe quien hayáis
designado en /etc/postfix/aliases, que podéis enviar al exterior
y llega, y que podéis enviaros internamente.
Otros
Ya tenemos (espero) Postfix funcionando, ya no tenemos más que escribir
como root /usr/sbin/sendmail -q cuando conectamos con Internet para que
nuestros correos lleguen a su destino... Ahora, un par de dudas que surgen
al poco tiempo.
- ¿Cómo hacemos para no estar siempre haciendo lo mismo con
sendmail -q?
Echad un ojo a sudo. sudo es un utilidad que permite definir combinaciones
de comandos-privilegios-usuarios, de modo que esos usuarios pueden ejecutar
los comandos con los privilegios asignados. No voy a entrar en más
detalles, excepto que necesitaréis utilizar vi para crear el archivo
de configuración, y que aunque la página del manual es un
poco larga, los ejemplos que aparecen al final son muy ilustrativos y
deberían guiaros sin problemas para poner en marcha el invento.
- Mi Netscape 4.x casca al recoger el correo. ¿Cómo lo
configuro?
Utiliza fetchmail (o alguna de las utilidades equivalentes). No voy a
explicar lo que ya está explicado (¡alguien podría pensar
que estoy plagiándole!). :-) Busca en la FAQ de Linux en español
(http://www.linux-es.com/Faq/),
en la sección de Internet Mail & News. Ahí mismo
verás qué cambios tienes que hacer en la configuración
de Netscape 4.x.
Comentarios a: Ricardo Palomares
Martínez
Aportaciones de Jordi Miñana Estruch
Volver a la página de linux.
|