Apuntes de Qmail.












Por Jordi Ivars Oller

Enero del 2007








En parte fruto de las consultas de Mi Vida con Qmail del proyecto DoQmail (http://www.es.qmail.org) y el Qmail+vpopmail+qmailadmin+sqwebmail como en español por Leonardo Magallón.



Obtención del código fuente


Bien, ya tiene un sistema que cumple con los requisitos, y preparado para instalar qmail. El primer paso es obtener el código fuente para qmail y otros complementos. Necesitará qmail, claro, y probablemente necesite también ucspi-tcp y daemontools:


qmail, http://qmail.org/netqmail-1.05.tar.gz

ucspi-tcp, http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz


Obtenga estos archivos usando su navegador web o cliente de FTP.


Compilación del código fuente


En esta sección nos moveremos por los pasos reales de compilación de qmail. Un sistema de «cortar y pegar» le ahorrará tiempo en este caso, pero no es realmente necesario.


Descomprimir la distribución


Si ha llegado hasta aquí, es porque tiene un compilador de C que funciona y copias de los archivos .tar.gz. Copia o mueva los archivos al directorio en el que quiera trabajar. Una buena elección es /usr/local/src/ y en este caso puede usar /usr/local/src/qmail para los tres paquetes.


mkdir -p /usr/local/src/qmail

mv *.tar.gz /usr/local/src/qmail<newline>


Ya tiene los tres paquetes en /usr/local/src/qmail, de manera que ya puede descomprimirlos. A estas alturas probablemente prefiera identificarse como root, si es que ya no lo ha hecho. En la línea de órdenes, teclee lo siguiente:


su -

cd /usr/local/src/qmail

tar xvfz netqmail-1.05.tar.gz

tar xvfz ucspi-tcp-0.84.tar.gz

rm *.tar.gz # opcional si le sobra espacio


Llegados aquí, tendría que haber tres subdirectorios llamados qmail-1.03, ucspi-tcp-0.84 y daemontools-0.61. Cámbiese al directorio qmail-1.03 y comencemos:


cd netqmail-1.05


Posteriormente, ejecutamos:


sh collate.sh


con lo que aplicamos los parches correspondientes y preparamos el qmail para su compilación y posterior instalación (necesitamos tener la herramienta “patch” instalada en nuestro sistema para ejecutar este comando). Posteriormente si termina con éxito, de nuevo:


cd netqmail-1.05


Creación de usuarios y grupos


La forma más fácil de crear los usuarios y grupos necesarios es mediante un pequeño guión que lo haga por usted. En el directorio del código fuente hallará un ficherito que se llama INSTALL.ids. Contiene la línea de órdenes para muchas plataformas, de manera que resulte fácil copiarlo a otro fichero y editarlo.


cp INSTALL.ids IDS


Luego, gracias a su editor favorito, elimine todas las líneas del fichero excepto las que le interesan. Por ejemplo, he aquí cómo quedaría el fichero IDS para FreeBSD, después de editarlo:


pw groupadd nofiles

pw useradd alias -g nofiles -d /var/qmail/alias -s /nonexistent

pw useradd qmaild -g nofiles -d /var/qmail -s /nonexistent

pw useradd qmaill -g nofiles -d /var/qmail -s /nonexistent

pw useradd qmailp -g nofiles -d /var/qmail -s /nonexistent

pw groupadd qmail

pw useradd qmailq -g qmail -d /var/qmail -s /nonexistent

pw useradd qmailr -g qmail -d /var/qmail -s /nonexistent

pw useradd qmails -g qmail -d /var/qmail -s /nonexistent


Luego, para ejecutarlo, use chmod para hacerlo ejecutable, o bien ejecútelo con sh:


Primer método:


chmod 700 IDS

./IDS


Segundo método:


/bin/sh IDS


Cuando el guión haya acabado su tarea, todos los usuarios y grupos estarán creados y podrá pasar a la siguiente sección.


Pero ¿qué hacer si su sistema no aparece en la lista de INSTALL.ids? Entonces tendrá que crearlos manualmente. Ejecute su editor favorito y edite /etc/group. Tiene que añadir las dos siguientes líneas al final del archivo:


qmail:*:2107:

nofiles:*:2108:<newline>


Nota: Asegúrese de que 2107 y 2108 no están ya en uso.


Luego, usando vipw (la mayor parte de los sistemas lo tienen, en caso contrario, tendrá que volver a usar su editor, esta vez para abrir el fichero /etc/passwd) añada las siguientes líneas al final del fichero:


alias:*:7790:2108::/var/qmail/alias:/bin/true

qmaild:*:7791:2108::/var/qmail:/bin/true

qmaill:*:7792:2108::/var/qmail:/bin/true

qmailp:*:7793:2108::/var/qmail:/bin/true

qmailq:*:7794:2107::/var/qmail:/bin/true

qmailr:*:7795:2107::/var/qmail:/bin/true

qmails:*:7796:2107::/var/qmail:/bin/true


Nota: Asegúrese de que 7790-7796 no están ya en uso y de que 2107 y 2108 son los mismos identificadores de grupo que utilizó anteriormente.

No tiene por qué añadir estas entradas precisamente al final del fichero, simplemente es la manera más fácil de explicarlo aquí.

Ahora ya está listo para continuar con la siguiente sección.


Realizar la compilación


Ahora ya está listo para comenzar con la compilación de qmail

En la sección Verificación del entorno de compilación, localizó su compilador de C. Si no se llama cc o si el directorio en el que se encuentra no figura en la variable de entorno PATH, necesitará editar conf-cc y conf-ld. Digamos que su compilador se llama gcc y que figura en su PATH. Sólo tiene que editar conf-cc y conf-ld y cambiar cc por gcc.

Ahora teclee lo siguiente:


make setup check


Después de que termine la compilación, tendrá que realizar una configuración post-nstalación. Se incluyen un par de guiones que le permitirán realizar esta tarea con mucha mayor facilidad.


Si su DNS está adecuadamente configurado, el único guión que necesitará llegados a este punto será:


./config


Si por alguna razón config no puede encontrar su nombre de máquina por DNS, tendrá que ejecutar el guión config-fast:


./config-fast nombre.maquina.completo


Por ejemplo, si su dominio es proveedor.com y el nombre de su máquina (hostname) es delfin, la línea para ejecutar el guión config-fast sería:


./config-fast delfin.proveedor.com


qmail ya está instalado en sus sistema y listo para su ejecución. La siguiente sección le guiará durante los primeros pasos de inicio y comprobación de qmail.



Instalación de ucspi-tcp


Anteriormente ya había «desempaquetado» los .tar.gz de qmail, ucpsi-tcp y daemontools. En nuestro ejemplo los habíamos desempaquetado en el directorio /usr/local/src/qmail. Ahora cambiemos al directorio de ucpsi-tcp:


cd /usr/local/src/qmail/ucspi-tcp-0.84


En la sección Realizar la compilación, si modificó conf-cc y conf-ld necesitará hacer los mismos cambios en este directorio.


Luego ejecute:


make

make setup check


Eso es todo. ucpsi-tcp estará instalado.



Inicio de qmail


/var/qmail/rc


El directorio /var/qmail/boot contiene ejemplos de guiones de arranque de qmail para diferentes configuraciones: /var/spool/mail frente a $HOME/Mailbox, uso de procmail o de dot-forward, y varias combinaciones de ambos. Tómese la libertad de examinarlos, pero en este caso y para nuestra instalación, usaremos los siguientes:


#!/bin/sh


# Usamos la salida estándar para llevar un registro

# Usamos el control/defaultdelivery de qmail-local como forma predeterminada

# para entregar mensajes


exec env - PATH="/var/qmail/bin:$PATH" \

qmail-start ./Maildir/ splogger qmail


Utilice su editor para crear el archivo anterior /var/qmail/rc, y luego ejecute las siguientes órdenes:


chmod 755 /var/qmail/rc

mkdir /var/log/qmail



Ficheros de inicio del sistema


Si tuviera que ejecutar manualmente el guión /var/qmail/rc, qmail sólo se iniciaría en parte. Pero queremos que qmail se inicie automáticamente cada vez que el sistema arranque, y que qmail se pare cada vez que el sistema se detenga.


Esto se consigue creando un guión de inicio/parada en el que incluiriamos las siguientes órdenes para arrancar el qmail:


tcpserver -h -R -o -l 0 -x /etc/tcp.smtp.cdb -v -u 1002 -g 1002 0 smtp /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd 3 &


/var/qmail/rc &



Cree el guión usando su editor de texto u obténgalo de Internet con su navegador y luego instálelo en el directorio init.d de susistema, que debería estar en una de las localizaciones siguientes:


/etc/init.d

/sbin/init.d

/etc/rc.d/init.d


Llame al guión qmail. También tendrá que hacer un vínculo simbólico al guión en algunos de los directorios rc. Estos directorios se nombran rcN.d, donde N es el nivel de ejecución (runlevel) al que se aplican. Las interioridades del árbol de directorios del inicio quedan más allá de la finalidad de este documento. Si no le bastan estas instrucciones simplificadas, consulte la documentación de sus sistema. Su directorios rc estarán probablemente en uno de estos sitios:


/etc

/sbin

/etc/rc.d


Para crear los vínculos simbólicos, ejecute las siguientes órdenes, cambiando RCDIR por la localización de los directorios rc de su sistema.


ln -s ../init.d/qmail RCDIR/rc0.d/K30qmail

ln -s ../init.d/qmail RCDIR/rc1.d/K30qmail

ln -s ../init.d/qmail RCDIR/rc2.d/S80qmail

ln -s ../init.d/qmail RCDIR/rc4.d/S80qmail

ln -s ../init.d/qmail RCDIR/rc5.d/S80qmail

ln -s ../init.d/qmail RCDIR/rc6.d/K80qmail


Nota: los números del paso anterior son en gran medida dependientes del sistema, pero en cierto modo flexibles. Si Sendmail está instalado, la ejecución de la orden find RCDIR -name "*sendmail" -print le dará los números que deben funcionar para su sistema.


Podemos descargar un script "qmaild" ya creado en http://jordi.files.googlepages.com/qmaild. Tendremos que editarlo y modificar algunos parámetros (sobretodo UID y GID del tcpserver para smtp) que lo adecuen a nuestro qmail instalado.


Retransmisión selectiva (selective relaying)


La mayor parte de los servidores pueden desactivar completamente el reenvío, pero si tiene usted que dar soporte a una comunidad de suarios desperdigada, necesitará una manera de permitir que sus usuarios, y sólo sus usuarios, usen su sistema como relay o retransmisor. Esto se consigue usando tcpserver para activar la variable de entorno RELAYCLIENT que le dice a qmail-smtpd que ignore el fichero rcpthosts.


Si sigue las instrucciones de instalación de este documento, el reenvío selectivo estará activado por defecto. Para proporcionar a un cliente acceso al reenvío, añada una entrada como la siguiente a /etc/tcp.smtp:


Dirección_IP_del_cliente:allow,RELAYCLIENT=""


Un ejemplo del archivo /etc/tcp.smtp podria ser el siguiente:



127.0.0.1:allow,RELAYCLIENT=””

192.168.1.:allow,RELAYCLIENT=””

:allow



Luego reconstruya la base de datos de acceso SMTP ejecutando:


tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp

chmod 644 /etc/tcp.smtp



Por último, ejecutamos el guión de arranque en /etc/init.d/qmail y tendremos nuestro servidor de correo qmail ya en funcionamiento.




Autentificación por smtp


Otro método para evitar el llamado relaying es activar un método de autentificación que solo permita enviar correo a todo aquel que disponga de un nombre de usuario y contraseña para hacerlo, es el llamado smtp-auth. Podemos utilizar varios métodos de autentificación pero utilizaremos el mismo que utilizamos para autentificarnos para descargarnos el correo, en el caso que ocupa usando vchkpw que forma parte de vpopmail, que necesitaremos antes instalar (podemos descargar vpopmail de http://www.inter7.com e instalarlo siguiendo las instrucciones que encontraremos en el archivo INSTALL).


Teniendo el vpopmail instalado necesitamos además el parche qmail-smtpd-auth, que podemos descargar en http://members.elysium.pl/brush/qmail-smtpd-auth/dist/


Teniendo las fuentes del qmail preparadas para compilar descomprimiremos el parche, entraremos en el directorio creado y lo aplicaremos de la siguiente forma:


patch -d “directorio-fuentes-qmail” < auth.patch


y copiaremos lo siguiente:


cp base64.c base64.h ../“directorio-fuentes-qmail”


y luego compilaremos e instalaremos de nuevo el qmail de manera normal. Habiendo pues compilado de nuevo el qmail y con el vpopmail instalado, ejecutaremos los siguientes comandos para preparar la autentificación del qmail con el vchkpw del vpopmail:


 chmod 4755 ~vpopmail/bin/vchkpw
 chown root.root ~vpopmail/bin/vchkpw

Con estos comandos adecuamos los permisos de la utilidad vchkpw para que qmail pueda utilizarla. Y finalmente, modificaremos el script de arranque de qmail (/etc/init.d/qmail) añadiendo a la linea de tcpserver de arranque de qmail la orden de arranque de qmail con soporte de autentificación smtp, quedando asi:


 tcpserver -H -R -o -l 0 -x /etc/tcp.smtp.cdb -u >VPOPMAILUID -g VPOPMAILGID 0 smtp /var/qmail/bin/qmail-smtpd miservidor.com /var/qmail/vpopmail/bin/vchkpw /bin/true 2>&1 | /var/qmail/bin/splogger smtpd 3 &


Cambiaremos el valor VPOPMAILUID por el número de usuario del usuario vpopmail y VPOPMAILGID por el número de grupo del grupo vchkpw.


Reiniciando el qmail ya tendremos el soporte de smtp-auth funcionando.


Si en vez de querer utilizar el vpopmail para autentificar a los usuarios por smtp queremos usar otros diferentes, por ejemplos, usuarios de sistema creados en el própio Linux, necesitaremos la herramienta checkpassword, que podemos descargar en http://cr.yp.to/checkpwd/install.html.

El programa checkpassword se instalará en /bin y tendremos que cambiar los permisos para que el usuario qmail pueda acceder a el, ademas de activarle el bit suid (chmod+s). Podemos comprobar que autentifica correctamente contra el sistema con:


     # /var/qmail/bin/qmail-popup blah /bin/checkpassword pwd
+OK <...@blah>
user Frodo
+OK
pass Friend
/home/Frodo


En cualquier caso, la última linea será el directorio home del usuario para que funcione todo correctamente.



Después, una vez creados los usuarios de sistema correspondientes, solamente tendremos que crear una línea de arranque de qmail para tcpserver que llame a esta herramienta, de la siguiente manera:


tcpserver -h -R -o -l 0 -x /etc/tcp.smtp.cdb -v -u 1001 -g 1002 0 smtp /var/qmail/bin/qmail-smtpd midominio.es /bin/checkpassword /bin/true 2>&1 | /var/qmail/bin/splogger smtpd 3 &



Y ya podremos autentificar nuestro smtp contra los propios usuarios de sistema.



Sistemas anti-virus, anti-spam, etc.


En qmail tenemos posibilidad de instalar varios sistemas que nos permitan bien captar y marcar los correos considerados como spam o basura o rechazar todos aquellos que puedan contener algun virus, ya sea por el simple marcado de una extensión considerada como sospechosa o bien por el escaneo de un anti-virus.


Para ello utilizaremos una herramienta única capaz de llamar a otras herramientas que realicen dicha tarea, es decir, un motor que centraliza todos los posibles servicios y cuando llega un correo llama a una herramienta anti-spam primero y luego a otra anti-virus para ver si dicho correo contiene algo que deba ser rechazado. Dicha herramienta es el Qmail-Scanner (http://qmail-scanner.sourceforge.net/).

El qmail-scanner es un programa que se anticipa a la inyección del correo en la cola de correo por parte del qmail, recogiendolo, escaneandolo y enviandolo de nuevo al qmail para que finalmente lo entregue en su cola de correo. A parte de poder usar diferentes motores para distintas tareas (antivirus, antispam, etc) tiene la posibilidad propia de definir reglas de filtrado para correo por extensiónes de archivos en los adjuntos, por un subject determinado en un correo, por un tamaño determinado de un correo, por un origen o destino determinados o una conjunción de varios de estos elementos.


Pero antes de instalarlo tenemos que tener claro que herramientas queremos usar con el Qmail-Scanner, ya que estas herramientas han de instalarse primero. En el caso que nos ocupa, instalaremos un antivirus, el ClamAV (http://www.clamav.net) y un sistema anti-spam, el Spamassassin (http://www.spamassassin.org).


-Antivirus Clamav


Para instalar el antivirus clamav desde Debian tan solo necesitamos ejecutar el siguiente comando:


apt-get install clamav-daemon


Con apt-get instalaremos el demonio de clamav junto con las herramientas necesarias (por ejemplo, el freshclam, el sistema de auto-actualización de las bases de datos de virus). Para el funcionamiento correcto del clamav con Qmail-Scanner necesitaremos modificar el archivo /etc/clamav/clamd.conf donde sustituiremos el parámetro User clamd por User root.


Luego reiniciaremos el clamav ejecutando el archivo /etc/init.d/clamd restart.


-Antispam Spamassassin


Para instalar el spamassassin, ejectaremos el siguiente comando:


apt-get install spamassassin spamc


Y luego editaremos el archivo /etc/default/spamassassin y cambiaremos los parámetros ENABLED y OPTIONS, dejándolos tal como sigue:


ENABLED=1

OPTIONS="-c -m 10 -H -L -x"


Luego arrancaremos el spamassassin ejecutando el demonio de arranque /etc/init.d/spamassassin start.


-Qmail-scanner


El qmail-scanner necesita unas dependencias antes de ser instalado, que son:


apt-get install maildrop perl-suid unzip


Y luego descargaremos las fuentes desde http://toribio.apollinare.org/qmail-scanner/download/q-s-2.01st-20061223.tgz, la cual es una versión del qmail-scanner-2.01 con una serie de parches que añaden funcionalidades bastante interesantes para el control del spam (consultar características en http://toribio.apollinare.org/qmail-scanner/).


Seguiremos los siguientes pasos para instalar el qmail-scanner:


tar xvfz q-s-2.01st-20061223.tgz

cd qmail-scanner-2.01st/

groupadd qscand

useradd -g qscand -d /var/spool/qscand qscand

./configure --lang "es_ES" --scanners clamdscan,fast_spamassassin --sa-quarantine 10 --sa-delete 13 --sa-reject yes --sa-subject SPAM: --install


Con estos comandos crearemos los usuarios necesarios para el funcionamiento de Qmail-Scanner y configuraremos e instalaremos el Qmail-Scanner con soporte para Spamassassin y Clamav junto con opciones como los máximos “puntos” necesarios para que un correo detectado como spam sea guardado en cuarentena o borrado, etc. La opción –sa-subject SPAM: indica que los correos detectados como spam y que no sean guardados en cuarentena serán modificados con la palabra SPAM: en su subject.


Qmail-scanner se instalará por defecto en el directorio /var/spool/qscand donde podemos encontrar, por ejemplo, el archivo quarantine-events.txt en el cual se definen políticas de filtrado de adjuntos, origenes dudosos, etc, el script log-report.sh que podemos utilizar para generar unas estadísticas del total de correos recibidos y cuantos de ellos contenian spam, virus, que tipo de virus, etc o el directorio quarantine donde son almacenados los correos que por tener virus o un nivel de spam elevado no son entregados en su destino sino guardados en cuarentena para que el administrador del correo los revise.


Finalmente, necesitaremos configurar nuestro Qmail para que pueda usar a Qmail-Scanner como “antesala” de su cola de correo. Para eso usaremos tcpserver, modificando el archivo /etc/tcp.smtp, añadiendo la instrucción ,QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl" al final de cada una de las lineas de relay que deseamos sean escaneadas por el Qmail-Scanner. El archivo tcp.smtp quedaria como sigue:



127.0.0.1:allow,RELAYCLIENT=””,QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl"

192.168.1.:allow,RELAYCLIENT=””,QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl"

:allow,QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl"


Finalmente, ejecutariamos de nuevo el comando tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp para regenerar las reglas de tcpserver. Y con esto y reiniciando Qmail ya tendriamos nuestro Qmail-Scanner en funcionamiento.



Uso de listas negras


Un método mas expeditivo para luchar contra el spam es el uso de las llamadas listas negras o “black lists”, servidores donde son registrados todos aquellos sistemas que son declarados como origen del spam, bien porque se verifica la recepción de spam desde esos sistemas o bien porque esos sistemas tienen alguna vulnerabilidad que los hace idoneos para ser usados como sistemas de envio de spam (por ejemplo, porque tienen un servidor de correo con relay permitido, o alguna vulnerabilidad concreta o un proxy abierto).


Para Qmail existe la herramienta rblsmtp, encargada de hacer las consultas a estos servidores y denegar la conexión en el caso de que detecte una entrega desde un servidor de correo que aparezca en estas listas negras. Es muy sencillo utilizarlo, solamente tenemos que modificar el guión de arranque de tcpserver y qmail, que quedaria de la siguiente forma:


tcpserver -h -R -o -l 0 -x /etc/tcp.smtp.cdb -v -u 1002 -g 1002 0 smtp /usr/local/bin/rblsmtpd -b -t 300 -r l2.spews.dnsbl.sorbs.net -r sbl-xbl.spamhaus.org /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd 3 &


Se ha añadido la instrucción /usr/local/bin/rblsmtpd -b -t 300 -r l2.spews.dnsbl.sorbs.net -r sbl-xbl.spamhaus.org, que indica que se haga consulta a las listas provenientes de l2.spews.dnsbl.sorbs.net y l2.spews.dnsbl.sorbs.net. Reiniciando el qmail ya tendremos a nuestro servidor haciendo consultas en dichas listas.


Hay que tener en cuenta que en este caso los conexiones son rechazadas, no se permite la entrega del correo, por lo que si alguien está accidentalmente en esas listas (dificil en el caso de spamhaus.org, si alguien está en esa lista es porque tiene algun sistema vulnerable a ser utilizado como sistema de spam) su correo simplemente no llegará a nuestros buzones, nisiquiera en estado de cuarentena.