ADVERTENCIA: Este tutorial data del año 2006 y no ha sido actualizado (salvo en su presentación.) Muchas cosas han cambiado en estos años, por lo que el lector debe considerar seriamente las alternativas a su disposición.

Resumen

Esta es una guía breve y básica para utilizar el MTA QMAIL en Linux desarrollada en ambiente RedHat 7.1; sin embargo, debe ser útil en cualquier otro sistema operativo compatible. Se describirá tanto la instalación como principios de administración.

Introducción

Qmail es un MTA que proporciona el servicio de correo electrónico en sistemas Linux (y Unix.) Está diseñado como un reemplazo más seguro para el clásico http://www.sendmail.org .

¿Por qué usar qmail?

En pocas palabras: por seguridad y por comodidad. Sendmail y otros MTA’s menos utilizados han sido (y de seguro seguirán siendo) una fuente constante de "bugs" y "vulnerabilidades" explotables por los hackers. Según algunos, esto se debe a que toda la complejidad del sistema de correo recae en un solo programa que necesariamente debe ejecutarse con privilegios de administrador. Qmail intenta paliar este problema mediante un esquema modular en el cual diversas etapas del procesamiento del correo electrónico son llevadas a cabo por distintos procesos que mayormente se ejecutan con un usuario no privilegiado.

Asimismo, la modularidad mencionada permite intercalar con facilidad filtros personalizados a criterio del administrador, cosa poco usual en los MTA’s sencillos, y compleja en el MTA sendmail. Un caso muy útil correspondería a la instalación de programas antivirus, a fin de filtar los mensajes maliciosos que pasan por el MTA.

Además, qmail promueve (aunque no obliga) al uso del mailbox en el "home directory" a fin de evitar los riesgos que presenta el tradicional directorio de mailbox común; también promueve el uso de un formato distinto para este archivo, de modo tal que sea invulnerable a los fallos imprevistos que fácilmente corrompen el mailbox tradicional.

Requisitos para usar qmail

Si Ud. descarga qmail del site oficial, probablemente tendrá que compilarlo. Para esto, su sistema deberá disponer del compilador de lenguaje C. Si Ud. no desea hacer esto, los desarrolladores también mantienen paquetes RPM (binarios.)

Es muy recomendable (casi imprescindible) instalar el programa tcpserver. Si por algún motivo no se desea emplear tcpserver, se puede usar una combinación de inetd con los tcp+wrappers tal como recomienda la documentación que acompaña a qmail. Finalmente (como aporte inédito) aquí mostramos cómo trabajar con xinetd aunque la solución tiene visos de "hack".

Otros requisitos evidentes corresponden a una conexión de red, y posiblemente la facultad de configurar el nameserver si se está instalando por primera vez un mailserver para las estaciones de un dominio. Aquí asumiremos que el usuario está familiarizado con la arquitectura de Internet de correo electrónico y con el DNS.

Descargar y desempacar

El primer paso consiste en obtener el software y compilarlo. Si Ud. tiene un paquete binario (por ejemplo, en formato RPM) entonces puede saltearse esta sección. Las instrucciones de instalación pueden variar, así que tenga cuidado.

 Para descargar +qmail+ (si todavía no lo ha hecho), dirigirse a http://www.qmail.org
y obtener la última versión (que se supone está exenta de más
bugs.) En esta guía se trabajará con la versión 1.03, que viene
en el archivo +qmail-1.03.tar.gz+.
Este archivo se deberá desempacar en cualquier lugar razonable
(que luego podrá ser eliminado), por ejemplo:
# cd /usr/local
# tar xvzf /ruta_al_empaquetado/qmail-1.03.tar.gz

     .... se crea el directorio qmail-1.03
          con los archivos fuente ....

# cd qmail-1.03
En este directorio debemos efectuar todos los pasos que se indican
a continuación.
Todos los archivos a que haremos referencia se encuentran en este directorio.

Instalación de qmail

Este proceso es algo extenso, pero en general involucra tareas muy
sencillas que difícilmente podrían fallar si se realizan con cuidado.

Crear el directorio de qmail

 Lo primero que debemos hacer es crear el directorio de
trabajo para +qmail+. La sugerencia de los creadores es
el directorio
+/var/qmail+
(hay pocos motivos para cambiarlo.)
Así que el administrador ejecutará algo como:
                 # mkdir /var/qmail

Si se desea emplear otra ubicación, esta se debe registrar en el archivo conf-qmail. En lo que sigue, asumiremos la ruta arriba indicada.

Usuarios para qmail

Qmail requiere la creación de diversos usuarios para su correcta ejecución. Estos son: alias, qmaild, qmaill, qmailp, qmailq, qmailr, y qmails. Si por algún motivo no se puede emplear estos pseudo-usuarios (por ejemplo, si algún usuario real coincide con los mencionados), entonces se deberá especificar los nuevos valores en el archivo conf-users. Igualmente se requiere de la creación de dos grupos (especificados en el archivo conf-groups.)

Para crear los usuarios y grupos usar:

# groupadd nofiles
# useradd -g nofiles -d /var/qmail/alias alias
# useradd -g nofiles -d /var/qmail qmaild
# useradd -g nofiles -d /var/qmail qmaill
# useradd -g nofiles -d /var/qmail qmailp
# groupadd qmail
# useradd -g qmail -d /var/qmail qmailq
# useradd -g qmail -d /var/qmail qmailr
# useradd -g qmail -d /var/qmail qmails

Compilar y configurar el directorio de trabajo

En este paso se generan los ejecutables de qmail y se prepara el directorio de trabajo de qmail:

# make setup check

Especificar el nombre del host

Luego se deberá especificar el nombre de nuestro host (incluyendo el dominio completo) mediante el comando config-fast del siguiente modo:

# ./config-fast marquesa.unima.edu.pe

Establecer los "alias" del sistema

En qmail, el correo para los usuarios especiales postmaster, MAILER-DAEMON y root, es redirigido hacia el pseudo-usuario alias. Esto requiere de la existencia de ciertos archivos en el "home directory" del pseudo-usuario alias:

# (cd ~alias; touch .qmail-postmaster \
         .qmail-mailer-daemon .qmail-root)
# chmod 644 ~alias/.qmail*

Especificar el agente de procesamiento de correo

El correo dirigido a los usuarios locales debe ser almacenado en algún archivo o directorio (el 'mailbox'.) Esto normalmente 'NO' lo realiza el MTA, sino que lo delega a un programa auxiliar. Sendmail normalmente emplea a procmail para este fin. A fin de realizar una rápida puesta a punto, mantendremos el uso de procmail (luego veremos el agente alternativo que proporciona qmail llamado qmail-local.) Para esto tan sólo es necesario efectuar el siguiente comando:

# cp /var/qmail/boot/proc /var/qmail/rc

Sin embargo, procmail en este caso será ejecutado mediante un usuario no privilegiado, por lo que es menester cambiar los permisos del directorio de los mailbox (que se mantendrá en /var/spool/mail.) Para RedHat 7.1:

# chmod 1777 /var/spool/mail

Nótese que qmail recomienda cambiar el mailbox; sin embargo, esto requiere algunos pasos adicionales que no veremos aquí. Lea la documentación respectiva (archivo INSTALL.mbox) para más detalles.

Eliminar Sendmail

Lo primero que debemos hacer es asegurarnos de que sendmail no está en ejecución, por lo que habremos de buscarlo en la tabla de procesos:

# ps ax | grep sendmail
  698 ?        S      0:00 sendmail: accepting connections
  787 pts/0    S      0:00 grep sendmail

La primera línea indica que sendmail está en ejecución, por lo que debemos hacer que termine. Para esto usaremos cualquiera de los siguientes comandos (basta con uno) en orden de preferencia:

# service sendmail stop

# /etc/rc.d/init.d/sendmail stop

# kill 698

El "698" del último comando corresponde al PID del proceso y se obtiene del comando anterior. En su sistema deberá presentarse otro valor. Asegúrese (volviendo a lanzar "ps") de que sendmail ya no esté en ejecución.

Luego debemos asegurarnos de que sendmail no se vuelva a ejecutar. La manera más sencilla consiste en desinstalarlo mediante:

	# rpm -e sendmail

Probablemente deberá desinstalar otros paquetes (como fetchmail y mutt.) Para forzar la desinstalación de sendmail:

	# rpm -e --nodeps sendmail

El archivo REMOVE.sendmail muestra otras maneras de trabajar sin necesidad de eliminar el paquete sendmail, aunque lo anterior es más recomendable.

Instalar el "reemplazo" de sendmail

Diversos programas asumen la existencia de sendmail y lo invocan ciegamente. Por esto, qmail proporciona un "reemplazo" básico para sendmail, a fin de mantener operativas a las aplicaciones mencionadas.

# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail

Instalar los manuales

Qmail proporciona páginas de manual para diversas utilidades. Estas se instalan en /var/qmail/man. Sin embargo, el sistema "man" debe ser configurado para acceder a éste.

Para esto, añada el directorio de los manuales mediante el la directiva MANPATH en el archivo /etc/man.config:

...
MANPATH /usr/share/man
MANPATH /usr/man
MANPATH /usr/X11R6/man
MANPATH /usr/lib/perl5/man
MANPATH /usr/kerberos/man
MANPATH /usr/local/man

# Añadido para qmail
MANPATH /var/qmail/man
...

Luego, Ud. deberá probar algo como man qmail-send.

Instalación de tcpserver

Qmail necesita de un mecanismo que lance el demonio qmail-smtpd cada vez que llega un intento de conexión SMTP del exterior del mailserver. Esto se puede hacer de diversas maneras; sin embargo, los creadores recomiendan el uso del programa tcpserver que está disponible como parte del paquete ucspi-tcp de D.J. Bernstein. Es posible configurar inetd para este fin (ver el archivo FAQ) e incluso xinetd como ilustro en esta misma guía en otra sección.

Descargar y desempacar ucspi-tcp

En el http://cr.yp.to/ucspi-tcp.html site de ucspi-tcp Ud. deberá encontrar la última versión del paquete. Este viene en un archivo TAR comprimido. En mi caso, ucspi-tcp-0.88.tar.gz.

Ud. deberá luego desempacarlo en un lugar razonable (después lo podrá eliminar) mediente un comando como:

# cd /usr/local
# tar xvzf /ruta_al_empaquetado/ucspi-tcp-0.88.tar.gz
   ....
     se crea el directorio ucspi-tcp-0.88
                                       .....

Compilar e instalar tcpserver

Ud. procederá ahora a compilar los programas del paquete. Para esto ejecute:

# cd ucspi-tcp-0.88
# make

Y tras unos momentos deberá tener una serie de ejecutables en el mismo directorio. Proceda a copiar los ejecutables tcpserver y tcprules a un directorio en el PATH, como /usr/sbin o /usr/local/bin:

# cp tcpserver tcprules /usr/sbin

Sólo estos dos ejecutables serán necesarios, por lo que puede eliminar el directorio de ucspi-tcp-0.88.

Configurar el inicio automático de qmail

Ahora vamos a configurar el sistema para que siempre se ejecute qmail al reiniciarse el computador.

Ud. deberá averiguar el UID y el GID del usuario "qmaild" y del grupo "nofiles" respectivamente:

# id qmaild
uid=1003(qmaild) gid=1002(nofiles) groups=1002(nofiles)

El número 1003 es el UID del usuario "qmaild", y el número asociado al grupo "nofiles" es 1002. Es seguro que estos valores serán distintos en su sistema. Ahora, simplemente añada los siguientes comandos:

csh -cf '/var/qmail/rc &'
/usr/sbin/tcpserver -u 1003 -g 1002 0 smtp \
              /var/qmail/bin/qmail-smtpd &

al final del archivo /etc/rc.d/rc.local.

Probando qmail

Para las pruebas que siguen, se recomienda disponer de un computador auxiliar configurado para enviar y recibir correo (¡posiblemente usando sendmail') En lo que sigue, denominaremos remoto.unima.edu.pe a este computador.

Qmail enviará mensajes de diagnósitco a syslog, por lo cual normalmente
deberíamos buscarlos en el archivo +/var/log/maillog+
que es donde
syslog imprime los mensajes de email en RedHat
(para más información, ver +/etc/syslog.conf+
y el manual de syslog.conf)

Iniciando qmail

Hemos configurado qmail para que se ejecute cada vez que el computador es reiniciado. Así que conviene en este momento reiniciar el computador a fin de apreciar que hemos realizado bien esta tarea.

Para analizar si los procesos de qmail están en ejecución, pruebe a lanzar el siguiente comando:

# ps axu | grep qmail
qmails  3727   1392  pts/2 S Jan13   0:00 qmail-send
qmaill  3728   1360  pts/2 S Jan13   0:00 splogger qmail
root    3729   1348  pts/2 S Jan13   0:00 qmail-lspawn
qmailr  3730   1348  pts/2 S Jan13   0:00 qmail-rspawn
qmailq  3731   1340  372 pts/2 S Jan13   0:00 qmail-clean

Casi todos los valores numéricos serán distintos en su computador (incluso hemos recortado un poco la salida por cuestiones de formato.) Lo importante es el nombre de los procesos, y de los usuarios dueños de los mismos (a la extrema derecha e izquierda, respectivamente.) Revise el "log" si no se hubieran iniciado estos procesos.

En caso de que no pudiera reiniciar el computador en este momento, tendrá que iniciar qmail manualmente:

# csh -cf '/var/qmail/rc &'
# /usr/sbin/tcpserver -u 1003 -g 1002 0 smtp \
              /var/qmail/bin/qmail-smtpd &

Probar el delivery

Se trata de observar si los mensajes de qmail pueden ser distribuidos, es decir, pueden ser enviados a los usuarios de nuestro computador o de otro.

En primer lugar, "inyectamos" un mensaje con destino local, para lo cual Ud. deberá modificar la palabra xxxxx por el nombre de un usuario común del sistema (distinto del administrador.) Esta prueba la debería efectuar con un usuario común.

$ echo to: xxxxx | /var/qmail/bin/qmail-inject

Escriba con cuidado el "to:" separando el nombre de usuario. Observe el log, y pruebe a recepcionar este mensaje (por ejemplo, logeándose con el usuario y ejecutando $ mail.) Pruebe también el envío a un usuario local inexistente:

$ echo to: inexistente | /var/qmail/bin/qmail-inject

Pruebe ahora el envío a un computador remoto:

$ echo to: xxxxx@remoto.unima.edu.pe | /var/qmail/bin/qmail-inject

Esto requiere que qmail se conecte al puerto SMTP de "remoto" (donde también deberá haber un servidor de email) y que allí exista el usuario especificado.

El archivo TEST.deliver contiene más pruebas y detalles que Ud. debe leer.

Probar la recepción

Ahora se trata de observar si qmail acepta mensajes (que después serán distribuidos como se vió arriba.) Para esto, tcpserver debe estar "escuchando" en el puerto SMTP (25). Esto puede analizarse fácilmente con netstat:

# netstat -a --inet | grep smtp
tcp    0    0     *:smtp       *:*         LISTEN

Si esto tarda mucho, o no funciona bien, usar:

# netstat -an --inet | grep 25
tcp    0    0     0.0.0.0:25   0.0.0.0:*   LISTEN

Desde el computador remoto.unima.edu.pe, pruebe a enviar un mensaje a a cualquier usuario (no root) del computador local marquesa.unima.edu.pe, y observe los mensajes del log de ambos sistemas.

El archivo TEST.receive contiene más pruebas y detalles.

Algo sobre la arquitectura de qmail

En esta sección vamos a explorar ligeramente los componentes principales de qmail. El lector interesado en la rápida puesta a punto de un mailserver típico puede saltarse esta sección y retornar posteriormente. Como ya se ha indicado, qmail está compuesto de diversos subprogramas que realizan tareas específicas y que en conjunto constituyen el sistema de correo electrónico. La figura siguiente proporciona una visión esquemática de estos componentes. Para un esquema más completo, remito al lector a http://www.nrg4u.com/ (mi esquema se basa en aquél.)

Arquitectura de qmail

Analicemos algunos de los posibles recorridos de un mensaje:

  • Origen local: Un usuario Linux operando en el sistema (por ejemplo, con un terminal) remite un mensaje usando un MUA como mail. Esto normalmente originará una llamada a qmail-inyect el cual llevará el mensaje al programa de encolamiento qmail-queue. Este lo almacenará en la cola de mensajes /var/qmail/queue. Acto seguido, qmail-send intentará remitirlo a su destino (si se puede) mediante los programas qmail-lspawn o qmail-rspawn

  • Origen remoto exterior: Un usuario de Internet ha enviado un mensaje hacia nuestra red (hacia un usuario de nuestra organización.) Este mensaje debe provenir de otro servidor de email mediante SMTP. qmail-smtpd descubre que el destinatario es de los nuestros, y acepta el mensaje, el cual pasa a la fase de encolamiento.

  • Origen remoto de la LAN: Un cliente de nuestra red desea enviar un mensaje. Para esto ha configurado su MUA a fin de remitir hacia el servidor qmail. Esta remisión normalmente la efectúa usando SMTP, y por tanto nuevamente qmail-smtpd es el encargado de la recepción.

  • Destino local: Los mensajes con destino local son guardados en el mailbox por procmail (o qmail-local) para ser recogidos por los MUAs de los usuarios que trabajan en el servidor. En el caso de que el usuario no esté en el servidor, sino, en una estación de trabajo, entonces su MUA deberá conectarse a un servidor IMAP o POP para obtener los mensajes del mailbox. En cualquier caso, qmail-lspawn es el encargado de controlar el agente de delivery local.

  • Destino remoto: Los mensajes remotos se remiten con SMTP hacia otros MTA. qmail-rspawn es el encargado de los mensajes que se envían remotamente.

No hemos mencionado a tcpserver debido a que estrictamente no es parte de qmail. Sin embargo, es el encargado de 'despertar' a qmail-smtpd de un modo seguro y relativamente inteligente.

Un caso real con qmail

Un caso típico se presenta en la siguiete figura. Se trata de proporcionar el servicio de email a la organizacion "incacoca.com.pe", la cual utilizará a "qmailserver" como servidor de correo. Las direcciones serán de la forma "usuario@incacoca.com.pe", y las estaciones obtendrán sus mensajes usando POP o IMAP.

Mailserver para una organización

Configurar el nameserver

Asumimos que el lector está familiarizado con las funciones generales del nameserver. Entre éstas, nos interesa la configuración del registro MX para el dominio de nuestra organización. Asumiendo que el nameserver utiliza bind, el archivo de la zona incacoca.com.pe debería contener algo como lo que se muestra a continuación:

$TTL 86400
@       IN      SOA     @  root.localhost (
                        4 ; serial
                        28800 ; refresh
                        7200 ; retry
                        604800 ; expire
                        86400 ; ttl
                        )

@       IN      NS      localhost.

@       IN      MX      10      qmailserver

qmailserver     IN      A       201.5.223.16
ns              IN      A       201.5.223.12
; otros hosts

Con esto, todo el correo de Internet de la forma "usuario@incacoca.com.pe" se destina hacia "qmailserver.incacoca.com.pe".

Qmail debe aceptar correo para el dominio

Asumimos que el lector ha instalado qmail tal como se vio anteriormente. Cuando se instala qmail, éste asume que sólo debe aceptar mensajes destinados a su propio host; en nuestro caso, mensajes de la forma "usuario@qmailserver.incacola.com.pe". Como las direcciones ahora son diferentes, hay que configurar qmail para que las acepte. Para esto sólo se debe añadir "incacola.com.pe" (la parte de "host" de las direcciones electrónicas) a los archivos /var/qmail/control/rcpthosts y /var/qmail/control/locals:

qmailserver.incacola.com.pe
incacola.com.pe

Si se ha decidido mantener el mailbox en /var/spool/mail, entonces ya puede iniciar los demonios POP y/o IMAP. Asumimos que el lector sabe hacerlo (sugerencia: ntsysv, service xinetd reload.)

El archivo rcpthosts permite que qmail-smtp acepte los mensajes con el host especificado, en tanto locals permite que qmail-send efectue el delivery a un usuario local (en su mailbox.)

Con la configuración actual, los usuarios inscritos en qmailserver.incacola.com.pe ya pueden recibir correo desde sus estaciones (vía POP y/o IMAP.) Sin embargo, aún no pueden enviar correo.

Enviar correo desde las estaciones

Qmail deberá ser capaz de recibir correo desde las estaciones y redirigirlo hacia el exterior, esto es, servir de RELAY a las estaciones. Esto normalmente está dehabilitado, pues en caso contario cualquier persona de Internet podría usar nuestro servidor para enviar correo SPAM. Sólo nuestras estaciones deberán habilitarse.

Lamentablemente qmail (en la versión actual) no proporciona un mecanismo sencillo para habilitar el RELAY. Los lectores que no utilizan tcpserver deben leer en el archivo FAQ la pregunta acerca de cómo hacer que qmail actúe como RELAY para nuestros clientes (pregunta 5.4 en mi versión.) Xinetd no proporciona un mecanismo satisfactorio, pero el procedimiento que se muestra más adelante funciona.

Qmail-smtpd se encarga de recepcionar el correo de las estaciones cliente y del exterior (medianet SMTP.) Sin embargo, para forzar a que nos sirva como RELAY es preciso que sea iniciado con la variable de entorno RELAYCLIENT. Esto es, dependiendo de quién se conecta a qmail-smtpd, deberíamos activar la variable mencionada.

Tcpserver satisface este requerimiento de un modo sencillo. Ud. deberá en primer lugar crear un archivo llamado /etc/tcp.smtp con el siguiente contenido:

127.:allow,RELAYCLIENT=""
1.2.3.101:allow,RELAYCLIENT=""
1.2.3.102:allow,RELAYCLIENT=""
1.2.3.103:allow,RELAYCLIENT=""
1.2.3.104:allow,RELAYCLIENT=""

Donde 1.2.3.100-104 corresponde a nuestras estaciones que podrán enviar el email al exterior (Ud. debe colocar sus direcciones reales.) A éstas se les proporcionará el RELAY. Acto seguido, debemos "compilar" este archivo mediante el comando:

# /usr/sbin/tcprules /etc/tcp.smtp.cdb \
                     /etc/tcp.smtp.tmp < /etc/tcp.smtp

Que creará una versión de acceso rápido en /etc/tcp.smtp.cdb.

Ahora modifique la invocación a tcpserver en /etc/rc.d/rc.local del siguiente modo:

csh -cf '/var/qmail/rc &'
/usr/sbin/tcpserver -x /etc/tcp.smtp.cdb -u 1003 \
	-g 1002 0 smtp /var/qmail/bin/qmail-smtpd &

Sólo hemos añadido la especificación del archivo tcp.smtp.cdb con la opción "-x". Reinicie su sistema para apreciar los cambios. Ahora las estaciones deberían poder remitir mensajes hacia el exterior.

Usando xinetd en reemplazo de tcpserver

Con este procedimiento (algo iconoclasta), el lector podrá emplear qmail sin necesidad de tcpserver, aunque no es lo más recomendable. La ventaja de usar xinetd reside simplemente en que éste ya viene en la distribución RedHat 7.1 que estoy empleando y puede usarse como una solución temporal hasta instalar tcpserver.

Configurar el servicio smtp

Ud. deberá crear el archivo /etc/xinetd.d/smtp con el siguiente contenido:

# Servicio SMTP con qmail
service smtp
{
	socket_type		= stream
	protocol		= tcp
	wait			= no
	user			= qmaild
	server			= /var/qmail/bin/tcp-env
	server_args		= /var/qmail/bin/qmail-smtpd
	disable			= no
}

Nota: aunque no es el caso de RedHat 7.1, muchos sistemas no usan xinetd, sino inetd. En este caso, añadir la siguiente línea al archivo /etc/inetd.conf:

smtp stream tcp nowait qmaild /var/qmail/bin/tcp-env \
	tcp-env /var/qmail/bin/qmail-smtpd

Con la configuración presentada, el sistema será capaz de recepcionar correo para sus usuarios. Para enviar mensajes desde el sistema, los usuarios Linux pueden emplear MUA’s como mail:

$ mail usuario@yahoogoogle.org

Sin embargo, no podrán remitirlo desde sus estaciones, pues no se ha configurado el RELAY para ellos (ver siguiente sección.)

Relay qmail con xinetd

Voy a asumir que se pretende configurar qmail para que opere como en el ejemplo descrito anteriormente. Si no hubieran estaciones que emplean a qmail como RELAY, bastaría con la configuración de la sección anterior.

El archivo /etc/xinetd.d/smtp define la "escucha" del puerto 25 (smtp) para cualquier interfaz de red. Modifiquemos esto añadiendo la siguiente línea:

service smtp
{
	disable	= no
	socket_type		= stream
	protocol		= tcp
	wait			= no
	user			= qmaild
	server			= /var/qmail/bin/tcp-env
	server_args		= /var/qmail/bin/qmail-smtpd
# Linea añadida
	bind			= 1.2.3.4
}

Donde el lector reemplazará la dirección IP por la que realmente tiene el host. Con esto, sólo los requerimientos dirigidos a este IP serán procesados del modo normal (sin relay.)

Acto seguido, asociaremos una nueva dirección IP (IP alias) a la interfaz de red. No vamos a entrar en muchos detalles al respecto:

# ifconfig eth0:0 1.2.3.200 netmask 255.255.255.0

Esta dirección debe estar en su red, pero no debe hacer conflicto con ningún host. Asegúrese de que este IP alias siempre esté disponible al reiniciar el computador (sugerencia:
control-panel+.)

Ahora generaremos un nuevo archivo (por ejemplo, /etc/xinetd.d/smtp2 con el siguiente contenido:

service smtp
{
	disable	= no
	socket_type		= stream
	protocol		= tcp
	wait			= no
	user			= qmaild
	server			= /var/qmail/bin/tcp-env
	server_args		= /var/qmail/bin/qmail-smtpd
	bind			= 1.2.3.200
	env			= RELAYCLIENT=
}

Nótese que sólo hemos añadido la línea env = RELAYCLIENT= (variable de entorno), y hemos especificado la dirección (bind) al nuevo IP-alias. Con esto, las conexiones a esta dirección de red dispondrán de la facultad de hacer RELAY. Tenga cuidado con los signos de igualdad (=) de la línea mencionada.

Los MUA’s de las estaciones de la red local ahora se deberán configurar para que la conexión de salida (SMTP) se dirija hacia la dirección 1.2.3.200. Si se desea, se puede asignar un nombre a esta dirección en el DNS (por ejemplo "envios.unima.edu.pe".)

El único detalle suelto consiste en evitar que desde Internet se conecten a este IP (de relay.) Lo más sencillo es configurar el filtro de paquetes con una línea como la que se muestra:

# ipchains -A input -d 1.2.3.200 -s ! 1.2.3.0/24 -j DENY

o, si se usa netfilter:

# iptables -A INPUT -d 1.2.3.200 -s ! 1.2.3.0/24 -j DROP

Esto evita las conexiones a la dirección de RELAY, excepto para la subnet 1.2.3.0/24, que debe coincidir con nuestras estaciones de trabajo.

Vocabulario y abreviaturas

  • IMAP: Ver POP.

  • Mailbox: Cuando un MTA recibe un mensaje destinado a un usuario local, debe remitirlo a su "casilla de correo" o "mailbox". Normalmente esto es delegado a un programa auxiliar como binmail, procmail o qmail-local. Sendmail (en Linux RedHat 7.1) viene configurado para emplear procmail.

Tradicionalmente, el mailbox ha consistido de un archivo con el mismo nombre que el usuario destinatario, ubicado en el directorio /usr/spool/mail o /var/spool/mail (esto último es usado en RedHat 7.1.) Qmail recomienda por el contrario emplear el home directory del usuario y un archivo llamado "Mailbox" por cuestiones de seguridad.

  • POP: Es un protocolo usado para que los MUA’s recepcionen mensajes pendientes. Es implementado por un demonio (como ipopd) que recoge los mensajes pendientes del "mailbox" y los transmite al MUA a través de la red.

POP no es muy flexible, no permitiendo, por ejemplo, navegar entre los asuntos (subjects) de los mensajes pendientes antes de descargarlos. IMAP está diseñado para hacer frente a estas deficiencias, permitiendo además la creación de carpetas del usuario en el servidor. Esta característica lo ha hecho ideal para sistemas tipo Webmail. Ver RFCs 1731, 1732, 1733, 1939, 2060, 2061, 2087, 2088.

  • MTA: Mail Transfer Agent, el programa encargado de transferir el correo electrónico a través de Internet. No es usado por los usuarios directamente (ver MUA.)

  • MUA: Mail User Agent, el programa que ejecuta el usuario para conectarse a un MTA y transferirle los mensajes de email. Asimismo se conecta a servidores de mensajería para recepcionar los mensajes enviados al usuario. Ver también SMTP, POP, IMAP.

  • Sendmail: Es el MTA clásico proporcionado en prácticamente todas las distribuciones Unix. Posee una gran capacidad de configuración mediante reglas y un lenguaje especial de macros.

  • SMTP: Es el protocolo estándar de Internet para transferir correo electrónico. Generalmente se utiliza en dos contextos, 1) para que los MTA se transfieran mensajes mutuamente y 2) para que los MUA remitan mensajes al MTA. Utiliza el puerto 25 de TCP. Ver RFCs 821, 1123, 1651, 1652, 974, 1854.