Últimamente está muy «de moda» añadir un disclaimer a los correos corporativos, con un montón de mensajes legales amenazantes o con información, y la forma mas simple suele ser añadirlo en el cliente de correo, sin embargo, esto complica la actualización en caso de que el mensaje cambie, por lo que, como siempre, tener la configuración centralizada suele ser la mejor opción. En este artículo veremos como configurar Postfix para que añada una firma a todos los correos salientes de un dominio en concreto…
En este artículo asumiremos que Postfix ya está correctamente instalado y funcional en el sistema, de tal forma que nos centraremos en la instalación y configuración de alterMIME. Además, para salirnos un poco de la tónica habitual, esta vez lo instalaremos en Ubuntu en lugar de en CentOS.
Instalando alterMIME
En este caso la instalación es tremendamente sencilla, pues alterMIME viene en los repositorios estandar de Ubuntu:
apt-get update
apt-get install altermime
En el siguiente paso crearemos el usuario filter con el directorio home en /var/spool/filter, ya que será el usuario que utilizará alterMIME. El parámetro -r de useradd creará una System Account, de tal manera que el UID estará en el rango de las mismas, y no habrá inforamción del aging en el shadow, además, el directorio home del usuario NO será creado.
useradd -r -c "Postfix Filters" -d /var/spool/filter filter
mkdir /var/spool/filter
chown filter:filter /var/spool/filter
chmod 750 /var/spool/filter
Después, crearemos el fichero /etc/postfix/disclaimer, que será el que ejecute alterMIME. El paquete de Ubuntu de alterMIME viene con un script de ejemplo, que podemos copiar y adaptar para nuestras necesidades
cp /usr/share/doc/altermime/examples/postfix_filter.sh /etc/postfix/disclaimer
chgrp filter /etc/postfix/disclaimer
chmod 750 /etc/postfix/disclaimer
El problema del script por defecto es que no distingue entre correos enviados o recibidos, simplemente añadiría el texto a todos los correos, sin embargo, esto no es lo que queremos. Además, en mi caso, yo lo quiero para un dominio en concreto, pero no para todos, por lo que he modificado el script un poco para cumplir con las especificaciones de lo que necesito
#!/bin/sh
# Localize these.
INSPECT_DIR=/var/spool/filter
SENDMAIL=/usr/sbin/sendmail
####### Changed From Original Script #######
DISCLAIMER_DOMAIN="DOMINIO.TLD"
####### Changed From Original Script END #######
# Exit codes from <sysexits.h>
EX_TEMPFAIL=75
EX_UNAVAILABLE=69
# Clean up when done or when aborting.
trap "rm -f in.$$" 0 1 2 3 15
# Start processing.
cd $INSPECT_DIR || { echo $INSPECT_DIR does not exist; exit
$EX_TEMPFAIL; }
cat >in.$$ || { echo Cannot save mail to file; exit $EX_TEMPFAIL; }
####### Changed From Original Script #######
# Obtain From address
from_address=`grep "From:" in.$$ | grep "@" | cut -d ":" -f 2 `
# Check if the domain is the one we want
email_domain=`echo "${from_address}" | /bin/grep -c "${DISCLAIMER_DOMAIN}"`
# If the domain is the one we're looking for, execute altermime
if [ ${email_domain} -eq 1 ]; then
/usr/bin/altermime --input=in.$$ \
--disclaimer=/etc/postfix/disclaimer.txt \
--disclaimer-html=/etc/postfix/disclaimer.txt || \
{ echo Message content rejected; exit $EX_UNAVAILABLE; }
fi
####### Changed From Original Script END #######
$SENDMAIL -oi "$@" <in.$$
exit $?
Después, deberemos editar el fichero /etc/postfix/disclaimer.txt para incluir el texto que queramos que sea añadido como firma de todos los emails salientes del dominio DOMINIO.TLD. Nuevamente el paquete de alterMIME incluye uno de ejemplo por si queremos usarlo: /usr/share/doc/altermime/examples/disclaimer.txt
Una vez que ya tenemos el script listo y el texto en su sitio, procederemos a modificar Postfix para que ejecute nuestro script, para ello, editaremos el fichero /etc/postfix/master.cf
# POSTFIX(1) master(5) configuration file - auto-generated by i-MSCP
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
#
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# ==========================================================================
smtp inet n - y - - smtpd
-o content_filter=dfilt:
[...]
submission inet n - y - - smtpd
-o content_filter=dfilt:
[...]
Y añadiremos estas dos líneas al final del mismo fichero
dfilt unix - n n - - pipe
flags=Rq user=filter argv=/etc/postfix/disclaimer-f ${sender} -- ${recipient}
Una vez que tenemos listos los cambios, procedemos a reiniciar postfix
systemctl restart postfix
Comprobamos en el /var/log/syslog que postfix no devuelva ningún error, y ya estaría listo!
Dejo como posibles mejoras para el lector la modificación del script para que compruebe mas de un dominio y seleccione diferentes textos de disclaimer según el dominio, cambio que debería ser bastante sencillo. Mi agradecimiento a Falko Timme, que escribió un artículo en HowtoForge en el cual me he basado para escribir este artículo. Thanks Falko!
Como siempre, espero que os haya sido de utilidad y gracias por visitarme!
Málaga, Marzo de 2020