systemadmin.es > Correo > Instalación de qmail con vpopmail, qmail-scanner, ClamAV y SpamAssassin (IV)

Instalación de qmail con vpopmail, qmail-scanner, ClamAV y SpamAssassin (IV)

Para la instalación de un servidor de correo qmail tenemos de momento los siguientes pasos:

Hoy vamos a arrancar qmail con el sistema antispam y antivirus.

Arrancar qmail

Creamos el fichero /var/qmail/rc:

cat > /var/qmail/rc <<EOF
#!/bin/sh

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

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

Definimos los permisos y definimos que queremos usar Maildir:

chmod 755 /var/qmail/rc
mkdir -p /var/log/qmail
echo ./Maildir >/var/qmail/control/defaultdelivery

A continuación creamos el fichero /var/qmail/bin/qmailctl para el arranque y parada de qmail:

cat > /var/qmail/bin/qmailctl <<EOF
#!/bin/sh

# description: the qmail MTA

PATH=/var/qmail/bin:/bin:/usr/bin:/usr/local/bin:/usr/local/sbin
export PATH

QMAILDUID=\`id -u qmaild\`
NOFILESGID=\`id -g qmaild\`

case "\$1" in
  start)
    echo "Starting qmail"
    if svok /service/qmail-send ; then
      svc -u /service/qmail-send /service/qmail-send/log
    else
      echo "qmail-send supervise not running"
    fi
    if svok /service/qmail-smtpd ; then
      svc -u /service/qmail-smtpd /service/qmail-smtpd/log
    else
      echo "qmail-smtpd supervise not running"
    fi
    if [ -d /var/lock/subsys ]; then
      touch /var/lock/subsys/qmail
    fi
    ;;
  stop)
    echo "Stopping qmail..."
    echo "  qmail-smtpd"
    svc -d /service/qmail-smtpd /service/qmail-smtpd/log
    echo "  qmail-send"
    svc -d /service/qmail-send /service/qmail-send/log
    if [ -f /var/lock/subsys/qmail ]; then
      rm /var/lock/subsys/qmail
    fi
    ;;
  stat)
    svstat /service/qmail-send
    svstat /service/qmail-send/log
    svstat /service/qmail-smtpd
    svstat /service/qmail-smtpd/log
    qmail-qstat
    ;;
  doqueue|alrm|flush)
    echo "Flushing timeout table and sending ALRM signal to qmail-send."
    /var/qmail/bin/qmail-tcpok
    svc -a /service/qmail-send
    ;;
  queue)
    qmail-qstat
    qmail-qread
    ;;
  reload|hup)
    echo "Sending HUP signal to qmail-send."
    svc -h /service/qmail-send
    ;;
  pause)
    echo "Pausing qmail-send"
    svc -p /service/qmail-send
    echo "Pausing qmail-smtpd"
    svc -p /service/qmail-smtpd
    ;;
  cont)
    echo "Continuing qmail-send"
    svc -c /service/qmail-send
    echo "Continuing qmail-smtpd"
    svc -c /service/qmail-smtpd
    ;;
  restart)
    echo "Restarting qmail:"
    echo "* Stopping qmail-smtpd."
    svc -d /service/qmail-smtpd /service/qmail-smtpd/log
    echo "* Sending qmail-send SIGTERM and restarting."
    svc -t /service/qmail-send /service/qmail-send/log
    echo "* Restarting qmail-smtpd."
    svc -u /service/qmail-smtpd /service/qmail-smtpd/log

    echo "* Restarting qmail-pop3d."
    svc -t /service/qmail-pop3d /service/qmail-pop3d/log

    ;;
  cdb)
    tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
    chmod 644 /etc/tcp.smtp.cdb
    echo "Reloaded /etc/tcp.smtp."
    ;;
  help)
    cat <<HELP
   stop -- stops mail service (smtp connections refused, nothing goes out)
  start -- starts mail service (smtp connection accepted, mail can go out)
  pause -- temporarily stops mail service (connections accepted, nothing leaves)
   cont -- continues paused mail service
   stat -- displays status of mail service
    cdb -- rebuild the tcpserver cdb file for smtp
restart -- stops and restarts smtp, sends qmail-send a TERM & restarts it
doqueue -- schedules queued messages for immediate delivery
 reload -- sends qmail-send HUP, rereading locals and virtualdomains
  queue -- shows status of queue
   alrm -- same as doqueue
  flush -- same as doqueue
    hup -- same as reload
HELP
    ;;
  *)
    echo "Usage: \$0 {start|stop|restart|doqueue|flush|reload|stat|pause|cont|cdb|queue|help}"
    exit 1
    ;;
esac

exit 0
EOF

Definimos permisos:

chmod 755 /var/qmail/bin/qmailctl
ln -s /var/qmail/bin/qmailctl /usr/bin

Creació dels scripts de supervise

A continuación definiremos los servicios para que funcionen con daemontools:

mkdir -p /var/qmail/supervise/qmail-send/log
mkdir -p /var/qmail/supervise/qmail-smtpd/log
mkdir -p /var/qmail/supervise/qmail-smtpd/log
mkdir -p /var/log/qmail/smtpd
chown qmaill /var/log/qmail /var/log/qmail/smtpd

Definimos /var/qmail/supervise/qmail-send/run:

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

Seguimos con /var/qmail/supervise/qmail-send/log/run:

cat > /var/qmail/supervise/qmail-send/log/run <<EOF
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail
EOF

A continiación para el qmail-smtpd definimos el fichero /var/qmail/supervise/qmail-smtpd/run:

cat > /var/qmail/supervise/qmail-smtpd/run <<EOF
#!/bin/sh

QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl" export QMAILQUEUE
MAXSMTPD=\$(cat /var/qmail/control/concurrencyincoming)
LOCAL=\$(head -1 /var/qmail/control/me)
QMAILDUID=\$(id -u qmaild)
NOFILESGID=\$(id -g qmaild)

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

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

exec /usr/local/bin/softlimit -m 100000000 \
    /usr/local/bin/tcpserver -v -R -l "\$LOCAL" -x /etc/tcp.smtp.cdb -c "\$MAXSMTPD" \
         -u 89 -g 89 0 smtp /usr/local/bin/rblsmtpd -b -rsbl.spamhaus.org \
         /var/qmail/bin/qmail-smtpd \$(hostname --long) /home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-smtp-auth-wrapper.sh 2>&1 7>&1
EOF

Seguimos con los logs del daemon con el fichero /var/qmail/supervise/qmail-smtpd/log/run:

cat > /var/qmail/supervise/qmail-smtpd/log/run <<EOF
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/smtpd
EOF

A continuación definimos la concurrencia maxima de correos entrantes (20) y arrancamos ya qmail:

echo 20 > /var/qmail/control/concurrencyincoming
chmod 644 /var/qmail/control/concurrencyincoming
chmod +x /var/qmail/supervise/qmail-send/run /var/qmail/supervise/qmail-send/log/run /var/qmail/supervise/qmail-smtpd/log/run /var/qmail/supervise/qmail-smtpd/run
ln -s /var/qmail/supervise/qmail-send /service/
ln -s /var/qmail/supervise/qmail-smtpd /service/
qmailctl stop
echo '127.:allow,RELAYCLIENT=""' >>/etc/tcp.smtp
qmailctl cdb
/etc/init.d/sendmail stop
rpm -e --nodeps sendmail
mv /usr/lib/sendmail /usr/lib/sendmail.old 2>/dev/null
mv /usr/sbin/sendmail /usr/sbin/sendmail.old 2>/dev/null
chmod 0 /usr/lib/sendmail.old /usr/sbin/sendmail.old 2>/dev/null
ln -s /var/qmail/bin/sendmail /usr/lib
ln -s /var/qmail/bin/sendmail /usr/sbin
qmailctl start

A continuación deberiamos definir los siguientes alias:

  • postmaster - Es un requerimiento por el RFC 2821 para definir el administrador de qmail
  • mailer-daemon - Estandard de-facto para los bounces
  • root - Redirigimos el correo del usuario root de la maquina.
  • abuse - Estandard de-facto para quejas como, por ejemplo, temas de spam.
echo jordi > /var/qmail/alias/.qmail-root
echo jordi > /var/qmail/alias/.qmail-postmaster
ln -s .qmail-postmaster /var/qmail/alias/.qmail-mailer-daemon
ln -s .qmail-postmaster /var/qmail/alias/.qmail-abuse
chmod 644 /var/qmail/alias/.qmail-root /var/qmail/alias/.qmail-postmaster

Mediante estos alias recibiremos el correo a jordi@hostname.

Finalmente comprovamos la instalación mediante los siguientes comandos.

# qmailctl stat
/service/qmail-send: up (pid 25317) 675 seconds
/service/qmail-send/log: up (pid 25316) 675 seconds
/service/qmail-smtpd: up (pid 25672) 505 seconds
/service/qmail-smtpd/log: up (pid 25466) 614 seconds
messages in queue: 0
messages in queue but not yet preprocessed: 0
cd /usr/local/src
# wget http://lifewithqmail.org/inst_check
# bash inst_check
Congratulations, your LWQ installation looks good!

Podemos comprovar que funcione el servicio de correo mediante telnet.

El listado de la serie completa es Instalación de un servidor de correo con qmail/vpopmail/qmail-scanner/ClamAV/SpamAssassin:

5 comments to “Instalación de qmail con vpopmail, qmail-scanner, ClamAV y SpamAssassin (IV)”

  1. Muy buena guía ¿Sabéis de alguna otra para configurar qmail como servidor secundario y que reenvié al primario cuando vuelva a estar online?

  2. Puedes simplemente definir una smtproute del secundario al primario. En el secundario definies el fichero /var/qmail/control/smtproutes con la IP del primario:

    :1.2.3.4
    

    Debes tener en cuenta que el secundario debe estar sincronizado con las cuentas (usuario y dominio) del primario para que funcione correctamente y no rebote correos.

  3. ¡Hola!

    Tan solo quería daros la enhorabuena por el buen trabajo que estáis haciendo con esta página. Buenos tutoriales, muy claros, y de temas muy diversos.

    ¡Seguid así!

    Saludos,
    Nacho

  4. ¡Hola!

    Excelente tutorial, me he encontrado con dos problemas por un lado no encuentro de donde sacar qmail-smtp-auth-wrapper.sh y por el otro (problema que debe estar relacionado) el servidor me dice que no está habilitado el SMTP AUTH.

    Cualquier ayuda será bienvenida!

    Abrazos,
    Diego

  5. Cierto, el SMTP AUTH se instala más adelante, en la parte 6:

    Instalación de parches para qmail: SMTP-AUTH, CHKUSER y UCSPI-TLS

    He modificado el articulo para incluir más enlaces.

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>