systemadmin.es > Correo > Doble instalación de qmail con IP de salida independiente

Doble instalación de qmail con IP de salida independiente

En general existen dos tipos de correos que generará una web:

  • Correo de entrega inmediata: Recordatorio de contraseña, alta de usuario…
  • Correos de periódicos: No es necesario que la entrega sea inmediata, aunque deseable

Para evitar que los correos de envío periódico actúen como tapón de los de entrega inmediata podemos instalar una segunda instancia de qmail para separar los dos tipos de correos.

Primero de todo deberemos copiar la instalación de qmail a otro directorio con una IP de salida independiente:

cd /usr/local/src
cp -pr netqmail-1.06 netqmail-1.06.2/
cd netqmail-1.06.2/

A continuación para entregar el correo con una determinada IP de salida deberemos usar el outgoingip.patch. Lo descargamos y lo aplicamos:

wget http://qmail.org./outgoingip.patch
patch -p0 < outgoingip.patch 

A continuación deberemos editar el fichero conf-qmail para definir el nuevo directorio base de qmail:

echo "/var/qmail2" > conf-qmail

A continuación limpiamos la compilación anterior y compilamos e instalamos de nuevo:

make clean setup check

Deberemos configurar el nuevo qmail, por lo que podemos simplemente copiar los ficheros de control al nuevo qmail:

cp /var/qmail/control/* /var/qmail2/control/

A continuación deberemos indicar la nueva IP mediante el fichero outgoingip y cambiar el me. Éste debe coincidir con la inversa de la IP:

echo "1.2.3.4" > /var/qmail2/control/outgoingip
echo "fast.systemadmin.es" > /var/qmail2/control/me

A continuación deberemos levantar los daemons para esta segunda instancia. Deberemos preparar los ficheros de arranque:

mkdir -p /var/qmail2/supervise/qmail-smtpd2
mkdir -p /var/qmail2/supervise/qmail-send2

Primero deberemos preparar el smtpd que escuche a localhost en otro puerto, por ejemplo el 26:

cat <<"EOF" > /var/qmail2/supervise/qmail-smtpd2/run
#!/bin/sh

QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
MAXSMTPD=`cat /var/qmail2/control/concurrencyincoming`
LOCAL=`head -1 /var/qmail2/control/me`

if [ -z "$QMAILDUID" -o -z "$NOFILESGID" -o -z "$MAXSMTPD" -o -z "$LOCAL" ]; then
    echo QMAILDUID, NOFILESGID, MAXSMTPD, or LOCAL is unset in
    echo /data/supervise/qmail-smtpd/run
    exit 1
fi

if [ ! -f /var/qmail2/control/rcpthosts ]; then
    echo "No /var/qmail2/control/rcpthosts!"
    echo "Refusing to start SMTP listener because it'll create an open relay"
    exit 1
fi

exec /usr/local/bin/softlimit -m 4000000 \
    /usr/local/bin/tcpserver -v -R -l "$LOCAL" -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" \
        -u "$QMAILDUID" -g "$NOFILESGID" 127.0.0.1 26 /var/qmail2/bin/qmail-smtpd 2>&1
EOF

A continuación el qmail-send para el envío de emails:

cat <<"EOF" > /var/qmail2/supervise/qmail-send2/run
#!/bin/sh
exec /var/qmail2/rc
EOF

Y a continuación el rc:

cat <<"EOF" > /var/qmail2/rc
#!/bin/sh

# Using stdout for logging
# Using control/defaultdelivery from qmail-local to deliver messages by default

exec env - PATH="/var/qmail2/bin:$PATH" \
qmail-start "`cat /var/qmail2/control/defaultdelivery`"
EOF

Finalmente damos permisos de ejecución y los levantamos con las daemontools:

chmod +x /var/qmail2/supervise/qmail-smtpd2/run
chmod +x /var/qmail2/supervise/qmail-send2/run
chmod +x /var/qmail2/rc
ln -s /var/qmail2/supervise/qmail-smtpd2/ /service/
ln -s /var/qmail2/supervise/qmail-send2/ /service/

Podemos probar enviando un email mediante telnet:

$ telnet localhost 26
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 fast.systemadmin.es ESMTP
helo 2fast2furious
250 fast.systemadmin.es
mail from: jordi@systemadmin.es
250 ok
rcpt to: david@systemadmin.es
250 ok
data
354 go ahead
Subject: test smtp2

prueba puerto 26
.
250 ok 1314967493 qp 26352
quit
221 fast.systemadmin.es
Connection closed by foreign host.

En los headers veremos como llega por la otra IP:

Received: from fast.systemadmin.es (1.2.3.5)
 by mail.systemadmin.es with SMTP; 2 Sep 2011 19:48:20 -0000

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>