6 - Servicio SMTP

[editar]
Artículo creado por FreeBSD. Extraido de: http://max.bandaancha.st/files/docs/servicio-smtp.html
14 de Noviembre de 2005
Para poner en marcha nuestro servicio SMTP vamos a instalar qmail (el MTA), Vpopmail (nuestro gestor de usuarios y grupos virtuales), qmail-scanner (da soporte para escanear mensajes) y Clam-Antivirus (el antivirus que usaremos para escanear los mensajes). Como base de datos de usuarios se utilizará MySQL 3.23.x. La instalación de MySQL no se tratará aquí ya que no es el objetivo directo del documento. Tan sólo mencionar que se necesitará tanto el servidor como el cliente, además de las librerías y cabeceras. La instalación dependerá del sistema, notar que en algunas distribuciones de Linux no se instalan las cabeceras cuando se instala el servidor o el cliente. A modo de ejemplo, en Debian se necesitará instalar el paquete libmysqlclient10-dev.

Primero debemos crear el directorio donde se instalará qmail, que por defecto es /var/qmail:




shell#> mkdir /var/qmail




El servidor qmail usa una serie de cuentas de usuario y grupos que deben ser creados antes de la instalación.. Las órdenes a introducir son las siguientes:

NOTA: Algunos sistemas no contienen el programa /sbin/nologin. Cuando ese sea el casos, sustituirlo por /sbin/false,/bin/false o cualquier otro programa de función similar. Verifiquen la existencia antes de continuar.




Linux:


    shell#> groupadd nofiles
        shell#> useradd -g nofiles -d /var/qmail/alias alias -s /bin/nologin
        shell#> useradd -g nofiles -d /var/qmail qmaild -s /sbin/nologin
        shell#> useradd -g nofiles -d /var/qmail qmaill -s /sbin/nologin
        shell#> useradd -g nofiles -d /var/qmail qmailp -s /sbin/nologin
        shell#> groupadd qmail
        shell#> useradd -g qmail -d /var/qmail qmailq -s /sbin/nologin
        shell#> useradd -g qmail -d /var/qmail qmailr -s /sbin/nologin
        shell#> useradd -g qmail -d /var/qmail qmails -s /sbin/nologin





FreeBSD:




    shell#> cd /usr/ports/mail/qmail
        shell#> make enable-qmail





NOTA: Si activamos qmail desde ports, el grupo nofiles pasará a llamarse qnofiles.




o también:




    shell#> pw groupadd nofiles
       
shell#> pw useradd -n alias -g nofiles -d /var/qmail/alias -s /sbin/nologin
       
shell#> pw useradd -n qmaild -g nofiles -d /var/qmail -s /sbin/nologin
        shell#> pw useradd -n qmaill -g nofiles -d /var/qmail -s /sbin/nologin
        shell#> pw useradd -n qmailp -g nofiles -d /var/qmail -s /sbin/nologin
        shell#> pw groupadd qmail
        shell#> pw useradd -n qmailq -g qmail -d /var/qmail -s /sbin/nologin
        shell#> pw useradd -n qmailr -g qmail -d /var/qmail -s /sbin/nologin
        shell#> pw useradd -n qmails -g qmail -d /var/qmail -s /sbin/nologin





Antes de instalar qmail, vamos a procurar protegernos contra el problema que surge con algunos de los sistemas de ficheros. Si el sistema de ficheros que va a albergar la cola de qmail no se encuentra en la lista anteriormente detallada, debes saltarte este paso. Como solución para los sitemas Linux que no utilizan un sistema de ficheros compatible con la cola de qmail vamos a probar a utilizar una librería que nos proporcione ese sincronismo. La podemos obtener de http://untroubled.org/syncdir/syncdir-1.0.tar.gz. Los usuarios de FreeBSD pueden crear una pequeña partición, desactivar softupdates en ella y montarla sobre /var/qmail/queue, algo que en el momento de la instalación puede desactivarse pulsando la tecla “s” sobre la partición deseada y no deben realizar este paso.




Para crear la librería necesaria para los sistemas Linux, introducimos las siguientes órdenes:

        shell#> tar zxfv
syncdir-1.0.tar.gz
        shell#> cd syncdir-1.0
        shell#> make all
        shell#> mv libsyncdir.* /usr/lib





Ya tenemos en nuestro sistema la librería que queríamos dispuesta a ser utilizada cuando compilemos qmail.




Si queremos tener soporte SSL, debemos tener instalado OpenSSL. Si no requerimos esta funcionalidad, ignorad los pasos relacionas con SSL.




En algunas distribuciones Linux, aunque dicen incluir OpenSSL o poderse instalar desde algún formato binario, no instalan las librerías y cabeceras. Debemos verificar que estas se encuentran instaladas para poder tener soporte SSL. Normalmente se deberían encontrar en /usr/lib o en /usr/include, sin embargo puedes tener localizaciones más exóticas. Si verificamos que no las tenemos instaladas, podemos bajar la distribución en código fuente y compilarlo.




    shell#> wget http://www.openssl.org/source/openssl-0.9.7b.tar.gz---        shell#> tar zxfv openssl-0.9.7b.tar.gz
        shell#> cd openssl-0.9.7b
        shell#> ./config
        shell#> make
        shell#> make install





Los usuarios de FreeBSD no necesitan realizar esto. Pero si quieren correr la última versión de OpenSSL, tan sólo deberían hacer:




shell#> cd /usr/ports/security/openssl
        
shell#> make clean install clean




El siguiente paso es obtener el código fuente del MTA qmail. Este se puede encontrar en http://cr.yp.to/software/qmail-1.03.tar.gz. Vamos a suponer que lo descargamos al directorio /usr/local/src. En ese mismo directorio también vamos a descargar los parches que utilizaremos. Estos parches van a añadir funcionalidades que el paquete original de qmail no incluye, como SMTP autenticado. En total propongo aplicar tres parches: el primero añadirá la funcionalidad que acabo de describir (http://qmail.imasd.elmundo.es/qmail-auth-20010105.tar.gz), el segundo nos dará la posibilidad de analizar los mensajes que maneje el servidor con un antivirus (http://qmail.imasd.elmundo.es/qmailqueue-patch) y el tercero dará soporte TLS al servicio SMTP (http://inoa.net/qmail/qmail-1.03-tls.patch). Nos colocamos en el directorio donde hemos descargado los archivos y escribimos:








        shell#> tar zxfv qmail-1.03.tar.gz
        shell#> tar zxfv
qmail-auth-20010105.tar.gz
        shell#> cp qmail-auth-20010105/base64.* ./qmail-1.03
       
shell#> cd qmail-1.03
        shell#> patch < ../ qmail-auth-20010105/auth.patch
        shell#> patch < ../qmailqueue-patch
        shell#> patch < ../qmail-1.03-tls.patch





Para los usuarios cuyo sistema de ficheros no es compatible (mayoría de los sistemas Linux), deben editar el archivo conf-ld y añadir -lsyncdir, de forma que resulte:




    cc -s -lsyncdir

Los usuarios de FreeBSD que activaron qmail desde ports, deben editar el fichero conf-groups y cambiar nofiles por qnofiles. Desde ahora, para estos usuarios, donde se diga nofiles será en realidad qnofiles.


    shell#> make setup check




Linux:




    shell#> make cert (respondemos a las preguntas que nos haga para crear el certificado)

FreeBSD:




    shell#> make -f Makefile-cert


o si tienen instalado GNU make (gmake en los ports)


shell#> gmake cert





En este momento qmail ya se encuentra instalado en nuestro sistema. Pero necesita algunos pasos más para que quede perfectamente configurado. El primer paso de configuración es decirle a qmail cuál es el nombre de nuestra máquina:




    shell#> ./config-fast nombreDeMiMaquina.miDominio.com




Ya hemos realizado una primera configuración del servidor. Si nos desplazamos al directorio /var/qmail/control vemos que existen una serie de ficheros. Por ejemplo, uno de ellos llamado me contendrá el nombre de nuestra máquina. Esta es la forma en que se configura qmail una vez instalado: una serie de archivos con un nombre específico que da un valor determinado a alguno de los módulos de qmail. Algunos de los archivos que maneja qmail son:




  • me: Muchas opciones de qmail se basan en este valor. Aquí debe colocarse el nombre de la máquina donde se está realizando la instalación.
  • locals: En este archivo debe colocarse los nombres de dominio que se tomarán como locales.
  • rcpthosts: Aquí se colocarán los nombres de dominio que serán aceptados vía SMTP.
  • smtpgreeting: En este fichero puede especificarse el saludo que se mostrará cuando se acepte una conexión.
  • queuelifetime: Fija el período de tiempo máximo que puede estar en la cola un mensaje que no ha podido ser enviado.
  • databytes: Fija el tamaño máximo en bytes de los mensajes recibidos vía SMTP.
  • concurrencylocal: Fija el número máximo de entregas locales simultáneas posibles. Este parámetro tiene como máximo un valor que se fija durante la compilación y en el fichero conf-spawn. No puede ser superior a 255 y en algunos sistemas no puede superar 125. El máximo que se establece por defecto son 120. Si se necesitaran concurrencias mayores, debe aplicarse el parche big-concurrency en la instalación. Un valor demasiado grande podría ocasionar que se lanzaran más procesos de los que nuestro sistema puede soportar. Por ello es un parámetro crítico que debe ser meditado en consecuencia. El valor por defecto es 10.
  • concurrencyremote: Fija el número máximo de entregas remotas simultáneas posibles. Pasa lo mismo que con el archivo anterior. El valor por defecto es 20.
  • defaultdomain: Establece el nombre de dominio por defecto para aquellos mensajes que no contienen uno en el campo FROM.




Por ejemplo, podríamos crear algunos de los archivos que hemos comentado de la siguiente forma:




   shell#> cd /var/qmail/control
       
shell#> echo '*= BIENVENIDO A MI SERVIDOR qmail =*' > smtpgreeting
        shell#> echo '86400' > queuelifetime
(un día de tiempo de vida)
        shell#> echo '5242880' > databytes (5 Mb de tamaño máximo de mensajes)
        shell#> echo '60' > concurrencylocal (este valor debe ser meditado por cada uno)
        shell#> echo '60' > concurrencyremote (igual que el anterior)
        shell#> echo '40' > concurrencyincoming (no es un archivo propio de qmail pero lo usaremos más adelante cuando definamos los scripts de arranque del sistema)




En el directorio /var/qmail/alias podemos definir alias de usuarios de la siguiente forma:




    shell#> cd /var/qmail/alias
       
shell#> echo 'postmaster@dominio.com' > .qmail-root
        shell#> echo 'postmaster@dominio.com' > .qmail-postmaster
       
shell#> echo 'postmaster@dominio.com' > .qmail-mailer-daemon




Como se comentó anteriormente, los sistemas Unix han convivido muchos años con Sendmail, es por ello que se ha convertido prácticamente en un estándar. Todos estos sistemas tienen una serie de programas para enviar correo de manera local que suelen encontrarse en /sbin/sendmail y /usr/lib/sendmail. Estos programas deben ser movidos a otro lugar o borrardos (en en caso de ser enlaces, desenlazarlos) y poner en su lugar los ofrecidos por qmail. Un ejemplo de las operaciones a realizar podría ser:




shell#> mv /usr/sbin/sendmail /usr/sbin/sendmail.old
        shell#> mv /usr/lib/sendmail /usr/lib/sendmail.old (en FreeBSD /usr/libexec/sendmail/sendmail)
        shell#> ln -sf /var/qmail/bin/sendmail /usr/sbin/sendmail
        shell#> ln -sf /var/qmail/bin/sendmail /usr/lib/sendmail




Todavía nuestro servicio SMTP no está del todo listo para ser lanzado, ya que los usuarios y grupos serán manejados por el gestor Vpopmail. El gestor puede ser descargado desde __http://www.inter7.com/vpopmail/vpopmail-5.2.1.tar.gz__ en su versión estable y desde __http://www.inter7.com/devel/vpopmail-5.3.20.tar.gz__ en su versión en desarrollo. Nosotros utilizaremos la versión en desarrollo y de nuevo lo situaremos en /usr/local/src. Además hay que crear el usuario y el grupo que usará Vpopmail.

Linux

    shell#> groupadd -g 89 vchkpw
        shell#> useradd -g vchkpw -u 89 vpopmail
-d /usr/local/vpopmail -s /sbin/nologin

FreeBSD

    shell#> pw groupadd -n vchkpw -g 89
        shell#> pw useradd -n vpopmail -u 89 -g vchkpw -d /usr/local/vpopmail -s /sbin/nologin


Al utilizarse MySQL como base de datos de los usuarios, para esta compilación ya se requiere tener instalados en el sistema las librerías, cabeceras y el cliente de MySQL. Si además el servidor MySQL va a residir en la misma máquina que el servidor de correo, también deberíamos instalar el servidor en este momento. Esta instalación no se cubrirá en este documento.

Además ,Vpopmail tiene como dependencia la librería zlib. En los sistemas FreeBSD viene incluida, pero en algunas distribuciones de Linux es posible que no sea así. Por lo tanto debemos obtenerla de __http://www.gzip.org/zlib/zlib-1.1.4.tar.gz__ e instalarla:

shell#> tar zxfv zlib-1.1.4.tar.gz
        shell#> cd zlib-1.1.4
        shell#> ./configure
        shell#> make
        shell#> make install

A continuación configuramos el código fuente de Vpopmail:




shell#> tar -zxfv vpopmail-5.3.20.tar.gz
        shell#> cd vpopmail-5.3.20
        shell#> mkdir /usr/local/vpopmail
        shell#> ./configure --enable-mysql=y \
                        -–enable-defaultquota=26214400S,1000C \
                        --enable-valias=y --enable-learn-passwords=y --enable-logging=p \
                        --enable-domainquotas=y –enable-default-domain=miDominio.com

NOTA:Es posible que la configuración falle si no encuentra los includes y las librerías de MySQL por no estar en los lugares convencionales. Estos lugares puede ser especificados a mano añadiendo a la línea de configuración

“--enable-incdir=/path/delosincludes/demysql” y
            “--enable-libdir=/path/delibrerias/demysql” respectivamente.

Muy posiblemente los valores sean:

“--enable-incdir=/usr/include/mysql” y
            “--enable-libdir=/usr/lib“




Ahora debemos modificar un archivo del código fuente con el fin de indicarle los datos sobre la base de datos de MySQL. Debemos indicarle dónde está el servidor, el usuario de la base de datos y su password. Para ello hay que editar el archivo vmysql.h, en el que encontraremos una zona que dice lo siguiente:

#define MYSQL_UPDATE_SERVER “localhost”
        #define MYSQL_UPDATE_USER “root”
        #define MYSQL_UPDATE_PASSWD “secret”


#define MYSQL_READ_SERVER “localhost”
        #define MYSQL_READ_USER “root”
        #define MYSQL_READ_PASSWD “secret”

Vamos a modificar donde pone root por vpopmail y secret por la contraseña que queramos. No es necesario modificar el valor localhost si es que el servidor de bases de datos se encuentra en la misma máquina en la que estamos instalando qmail. Quedará algo como lo siguiente:

#define MYSQL_UPDATE_SERVER “localhost”
        #define MYSQL_UPDATE_USER “vpopmail”
        #define MYSQL_UPDATE_PASSWD “mi_password”
   
        #define MYSQL_READ_SERVER “localhost”
        #define MYSQL_READ_USER “vpopmail”
        #define MYSQL_READ_PASSWD “mi_password”

Ahora ya podemos compilar e instalar Vpopmail:

   shell#> make
        shell#> make install-strip





Antes de configurar ningún script de arranque, debería ser añadido por lo menos un dominio. Esto se va a realizar por medio de Vpopmail, ya que va a ser él quien los maneje. Como los dominios y y usuarios van a ser almacenados en una base de datos de MySQL, es el momento de crear el usuario y la base de datos cuyos parámetros se definieron en la compilación de Vpopmail. Para ello introducimos las siguientes órdenes:




shell#> mysql -u root -p

            Enter password: (el password del root si lo hemos establecido, no confundir con el root del sistema)
                mysql> CREATE DATABASE vpopmail;
                mysql> GRANT ALL PRIVILEGES ON vpopmail.* TO vpopmail@localhost IDENTIFIED BY 'my_password
'; (El definido en vmysql.h. Es necesario poner las comillas simples)
                mysql> quit;





Para comprobar que hemos creado correctamente la base de datos y el usuarios, hay que comprobar que puede hacer login en MySQL:




shell#> mysql -u vpopmail -h localhost -p


            Enter password:
(mi_password)
                mysql> quit;


Ahora ya podemos añadir el dominio y los usuarios://---//

shell#> ~vpopmail/bin/vadddomain midominio.com

            Please enter password for postmaster:
                enter password again:


shell#> ~vpopmail/bin/vadduser miprimerusuario@midominio.com

            Please enter password for miprimerusuario@midominio.com:
                enter password again:





Ya hemos creado un dominio (midominio.com) y dos usuarios: postmaster, que se crea por defecto, y miprimerusuario. Si nos fijamos en el directorio /var/qmail/control, vemos como se han modificado algunos archivos como rcpthosts y virtualdomains. La funcionalidad del primero ya fue explicado y, obviamente, en el segundo se especifican los dominios virtuales que manejará el servidor.




Nuestro servicio SMTP ahora mismo es completamente funcional. Tan sólo queda crear los scripts de inicio. Para lanzar el servidor nos ayudaremos de daemontools y Ucspi-tcp. Necesitamos crear dos servicios que llamaremos qmail-run y qmail-smtp. El primero lanza la mayor parte de los demonios de qmail, mientras que el segundo se encarga de las conexiones SMTP. Situaremos los servicios bajo /usr/local/service.




   shell#> mkdir /usr/local/service
       
shell#> mkdir /usr/local/service/qmail-send
        shell#> mkdir /usr/local/service/qmail-send/env
        shell#> mkdir /usr/local/service/qmail-send/log
        shell#> mkdir /var/log/qmail-send
        shell#> chown qmaill:nofiles /var/log/qmail-send


A continuación colocamos los scripts siguientes allí donde se indique con los nombres, permisos y propietario detallados://---//

Ubicación: /usr/local/service/qmail-send
        Nombre: run
        Dueño: root
        Permisos: 700


COPIA DESDE AQUÍ




#!/bin/sh

exec envdir ./env /var/qmail/bin/qmail-start ./Maildir/





HASTA AQUÍ


        Ubicación: /usr/local/service/qmail-send/env
        Nombre: PATH
        Dueño: root
        Permisos: 600





COPIA DESDE AQUÍ




/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/var/qmail/bin





HASTA AQUÍ




   Ubicación: /usr/local/service/qmail-send/log
        Nombre: run
        Dueño: root
        Permisos: 700





COPIA DESDE AQUÍ




#!/bin/sh

exec envdir ../env setuidgid qmaill multilog t /var/log/qmail-send





HASTA AQUÍ


        shell#> mkdir /usr/local/service/qmail-smtp
        shell#> mkdir /usr/local/service/qmail-smtp/env
        shell#> mkdir /usr/local/service/qmail-smtp/log
        shell#> mkdir /var/log/qmail-smtp
        shell#> chown qmaill:nofiles /var/log/qmail-smtp






        Ubicación:
/usr/local/service/qmail-smtp
        Nombre: run
        Dueño: root
        Permisos: 700


COPIA DESDE AQUÍ

#!/bin/sh

USER=`id -u vpopmail`
    GROUP=`id -g vpopmail`
    MAXCONCU=`head -l /var/qmail/control/concurrencyincoming`
    HOSTNAME=`head -l /var/qmail/control/me`


exec 2>&1
    exec envdir ./env softlimit -m 8000000 \
    tcpserver -v -R -H -c $MAXCONCU -u $USER -g $GROUP
    mailhost.cidsite.qc.to smtp \
    rblsmtpd -r relays.ordb.org \
    qmail-smtpd HOSTNAME vchkpw true






HASTA AQUÍ


        Ubicación:
/usr/local/service/qmail-smtp/env
        Nombre: PATH
        Dueño: root
        Permisos: 600


COPIA DESDE AQUÍ

/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/var/qmail/bin:/usr/local/vpopmail/bin
[editar]

1 opinión

Qmail.

Necesito hacer la instalacion y afinacion de un servicio de internet.

Artículos relacionados con 'Servicio de correo basado en qmail: SMTP'

El servicio de e-mail es tan viejo como la propia Internet, ha sufrido algunos cambios... Más »
Hasta ahora sólo hemos configurado el servicio SMTP por el cual podemos enviar y recibir... Más »

Autor y licencia de 'Servicio de correo basado en qmail: SMTP'


Artículo de FreeBSD. Extraido de: http://max.bandaancha.st/files/docs/servicio-smtp.html CopyLeft
BandaAncha.st coloca sus contenidos, artículos y documentos bajo Licencia Creative Commons. Esta modalidad de licencia, jurídicamente válida, permite copiar y distribuir los documentos y contenidos del sitio web con dos únicos requisitos obligatorios: se debe citar en los créditos la fuente (autor original y URI), y las distribuciones ulteriores deben adscribirse a una licencia similar.
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.