SpamSnake · 15 min read · Dec 25, 2025
La Perfecta SpamSnake - Ubuntu Jeos 10.10 Maverick Meerkat - Página 4
14. KAM
vi /etc/cron.daily/kam.shAgrega el siguiente contenido y
chmod +x /etc/cron.daily/kam.sh#!/bin/bash
# Versión original modificada por Andrew MacLachlan ([email protected])
# Se añadieron reinicios adicionales de MailScanner en caso de fallo inicial
# Hizo que el script se ejecute en silencio para una operación normal (exitosa)
# Aumentó UPDATEMAXDELAY a 900 desde 600
# Inserta un retraso aleatorio hasta este valor, para esparcir las actualizaciones de virus
# a lo largo del reloj. 1800 segundos = 30 minutos.
# Establecer esto en 0 para deshabilitarlo.
UPDATEMAXDELAY=0
if [ -f /opt/MailScanner/var/MailScanner ] ; then
. /opt/MailScanner/var/MailScanner
fi
export UPDATEMAXDELAY
if [ "x$UPDATEMAXDELAY" = "x0" ]; then
:
else
logger -p mail.info -t KAM.cf.sh Retrasando el trabajo cron hasta $UPDATEMAXDELAY segundos
perl -e "sleep int(rand($UPDATEMAXDELAY));"
fi
# JKF Fetch KAM.cf
#echo Obteniendo KAM.cf...
cd /etc/mail/spamassassin
rm -f KAM.cf
wget -O KAM.cf http://www.peregrinehw.com/downloads/SpamAssassin/contrib/KAM.cf > /dev/null 2>&1
if [ "$?" = "0" ]; then
#echo Se completó y obtuvo algo
if ( tail -10 KAM.cf | grep -q '^#.*EOF' ); then
# echo Tuvo éxito, así que haz una copia de seguridad
cp -f KAM.cf KAM.cf.backup
else
echo ERROR: No se pudo encontrar el marcador EOF
cp -f KAM.cf.backup KAM.cf
fi
else
echo Falló en completarse correctamente
cp -f KAM.cf.backup KAM.cf
fi
#echo Recargando las reglas de configuración de MailScanner y SpamAssassin
/etc/init.d/mailscanner reload > /dev/null 2>&1
if [ $? != 0 ] ; then
echo "La recarga de MailScanner falló - Reintentando..."
/etc/init.d/mailscanner force-reload
if [ $? = 0 ] ; then
echo "La recarga de MailScanner tuvo éxito."
else
echo "Deteniendo MailScanner..."
/etc/init.d/mailscanner stop
echo "Esperando un minuto..."
perl -e "sleep 60;"
echo "Intentando iniciar MailScanner..."
/etc/init.d/mailscanner start
fi
fi 15. ScamNailer
vi /usr/sbin/update_scamnailer
y
chmod +x /usr/sbin/update_scamnailer
Nota: *El contenido está en scamnailer.doc.)
Agregalo a cron:
@daily /usr/sbin/update_scamnailer &> /dev/null #Actualizar Scamnailer16. Firewalling the SpamSnake with Firehol
Introducción
Firehol es un configurador de firewall de filtrado de paquetes iptables con estado. Es abstracto, extensible, fácil y poderoso. Puede manejar cualquier tipo de firewall, pero lo más importante, te da los medios para configurarlo, de la misma manera que piensas en él.
Instalar Firehol
apt-get install fireholConfiguraciones de Firehol:
vi /etc/default/fireholy cambia lo siguiente:
START_FIREHOL=YESvi /etc/firehol/firehol.confy agrega lo siguiente:
version 5
# Aceptar todo el tráfico de clientes en cualquier interfaz
interface any internet
protection strong
server "icmp ping ICMP ssh http https telnet webmin dns dcc echo smtp" accept
client all acceptEsto filtra todas las conexiones entrantes que no están relacionadas con los servicios anteriores. Si deseas ser menos cortés, puedes rechazarlas agregando lo siguiente después de ‘protection strong’: policy drop
vi /usr/sbin/get-ianacon lo siguiente y
chmod +x /usr/sbin/get-iana#!/bin/bash
# $Id: get-iana.sh,v 1.13 2010/09/12 13:55:00 jcb Exp $
#
# $Log: get-iana.sh,v $
# Revision 1.13 2010/09/12 13:55:00 jcb
# Actualizado para el último formato de reservas de IANA.
#
# Revision 1.12 2008/03/17 22:08:43 ktsaou
# Actualizado para el último formato de reservas de IANA.
#
# Revision 1.11 2007/06/13 14:40:04 ktsaou
# * mensaje de registro vacío *
#
# Revision 1.10 2007/05/05 23:38:31 ktsaou
# Se añadió soporte para definiciones externas de:
#
# RESERVED_IPS
# PRIVATE_IPS
# MULTICAST_IPS
# UNROUTABLE_IPS
#
# en archivos bajo el mismo nombre en /etc/firehol/.
# Solo RESERVED_IPS es obligatorio (firehol se quejará si no está allí,
# pero aún funcionará sin él), y también es el único archivo que firehol
# verifica cuán antiguo es. Si tiene más de 90 días, firehol se quejará
# nuevamente.
#
# Cambió el script get-iana.sh suministrado para generar el archivo RESERVED_IPS.
# FireHOL también instruye al usuario para usar este script si el archivo está
# faltando o es demasiado antiguo.
#
# Revision 1.9 2007/04/29 19:34:11 ktsaou
# * mensaje de registro vacío *
#
# Revision 1.8 2005/06/02 15:48:52 ktsaou
# Permitió que 127.0.0.1 estuviera en RESERVED_IPS
#
# Revision 1.7 2005/05/08 23:27:23 ktsaou
# Actualizó RESERVED_IPS a las reservas actuales de IANA.
#
# Revision 1.6 2004/01/10 18:44:39 ktsaou
# Más optimizado y reducido PRIVATE_IPS usando:
# http://www.vergenet.net/linux/aggregate/
#
# El get-iana.sh suministrado usa .aggregate. si lo encuentra en la ruta.
# (aggregate es el nombre de este programa cuando se instala en Gentoo)
#
# Revision 1.5 2003/08/23 23:26:50 ktsaou
# Bug #793889:
# Cambiar #!/bin/sh a #!/bin/bash para permitir que FireHOL funcione en sistemas que
# bash no está vinculado a /bin/sh.
#
# Revision 1.4 2002/10/27 12:44:42 ktsaou
# Prueba de CVS
#
#
# Programa que descarga la asignación del espacio de direcciones IPv4 por IANA
# y crea una lista con todos los espacios de direcciones reservados.
#
IPV4_ADDRESS_SPACE_URL="http://www.iana.org/assignments/ipv4-address-space/ipv4-address-space.txt"
# El programa coincidirá con todas las filas en el archivo que comienzan con un número, tienen una barra,
# seguida de otro número, para las cuales el siguiente patrón también coincidirá en las
# mismas filas
IANA_RESERVED="(RESERVED|UNALLOCATED)"
# ¿qué filas que son coincidentes con lo anterior, para ignorar
# (es decir, no incluirlas en RESERVED_IPS)?
#IANA_IGNORE="(Multicast|Private use|Loopback|Local Identification)"
IANA_IGNORE="Multicast"
tempfile="/tmp/iana.$$.$RANDOM"
AGGREGATE="`which aggregate 2>/dev/null`"
if [ -z "${AGGREGATE}" ]
then
AGGREGATE="`which aggregate 2>/dev/null`"
fi
if [ -z "${AGGREGATE}" ]
then
echo >&2
echo >&2
echo >&2 "ADVERTENCIA"
echo >&2 "Por favor instala 'aggregate' para reducir la lista de IPs."
echo >&2
echo >&2
fi
echo >&2
echo >&2 "Obteniendo el espacio de direcciones IPv4 de IANA, desde:"
echo >&2 "${IPV4_ADDRESS_SPACE_URL}"
echo >&2
wget -O - -proxy=off "${IPV4_ADDRESS_SPACE_URL}" |\
egrep " *[0-9]+/[0-9]+.*${IANA_RESERVED}" |\
egrep -vi "${IANA_IGNORE}" |\
sed -e 's:^ *\([0-9]*/[0-9]*\).*:\1:' |\
(
while IFS="/" read range net
do
if [ ! $net -eq 8 ]
then
echo >&2 "No se pueden manejar máscaras de red de $net bits ($range/$net)"
continue
fi
first=`echo $range | cut -d '-' -f 1`
first=`expr $first + 0`
last=`echo $range | cut -d '-' -f 2`
last=`expr $last + 0`
x=$first
while [ ! $x -gt $last ]
do
# test $x -ne 127 && echo "$x.0.0.0/$net"
echo "$x.0.0.0/$net"
x=$[x + 1]
done
done
) | \
(
if [ ! -z "${AGGREGATE}" -a -x "${AGGREGATE}" ]
then
"${AGGREGATE}"
else
cat
fi
) >"${tempfile}"
echo >&2
echo >&2
echo >&2 "ENCONTRADOS LOS SIGUIENTES RANGOS DE IP RESERVADOS:"
printf "RESERVED_IPS=\""
i=0
for x in `cat ${tempfile}`
do
i=$[i + 1]
printf "${x} "
done
printf "\"\n"
if [ $i -eq 0 ]
then
echo >&2
echo >&2
echo >&2 "No se encontraron IPs reservadas."
echo >&2 "Posiblemente el formato del archivo ha cambiado, o no puedo obtener la URL."
echo >&2
rm -f ${tempfile}
exit 1
fi
echo >&2
echo >&2
echo >&2 "Diferencias entre la lista obtenida y la lista instalada en"
echo >&2 "/etc/firehol/RESERVED_IPS:"
echo >&2 "# diff /etc/firehol/RESERVED_IPS ${tempfile}"
diff /etc/firehol/RESERVED_IPS ${tempfile}
if [ $? -eq 0 ]
then
echo >&2
echo >&2 "No se encontraron diferencias."
echo >&2
rm -f ${tempfile}
exit 0
fi
echo >&2
echo >&2
echo >&2 "¿Te gustaría guardar esta lista en /etc/firehol/RESERVED_IPS"
echo >&2 "para que FireHOL la use automáticamente de ahora en adelante?"
echo >&2
while [ 1 = 1 ]
do
printf >&2 "sí o no > "
read x
case "${x}" in
yes) cp -f /etc/firehol/RESERVED_IPS /etc/firehol/RESERVED_IPS.old 2>/dev/null
cat "${tempfile}" >/etc/firehol/RESERVED_IPS || exit 1
echo >&2 "Nuevas RESERVED_IPS escritas en '/etc/firehol/RESERVED_IPS'."
echo "Firehol se reiniciará ahora"
sleep 3
/etc/init.d/firehol restart
break
;;
no)
echo >&2 "No se guardó nada."
break
;;
*) echo >&2 "No puedo entender '${x}'."
;;
esac
done
rm -f ${tempfile}vi /usr/sbin/update-ianacon el siguiente contenido y
chmod +x /usr/sbin/update-iana#!/bin/sh
/usr/sbin/get-iana < /etc/firehol/get-iana-answerfilevi /etc/firehol/get-iana-answerfilecon el siguiente contenido:
síEjecuta el script para actualizar RESERVED_IPS:
/usr/sbin/update-ianaAhora tu servidor está configurado para aceptar solo conexiones para los servicios que permitiste.
Agregalo a cron:
@monthly /usr/sbin/update-iana &> /dev/null #Actualizar ips reservadas de firehol17. Aplicar Destinatarios de Relay
Las siguientes instrucciones están destinadas a personas que utilizan Microsoft Exchange 2000 o Microsoft Exchange 2003.
Esta página describe cómo configurar tu puerta de enlace de correo para obtener periódicamente una lista de direcciones de correo electrónico de destinatarios válidos de tu sistema Exchange. Al hacer esto, puedes configurar tu servidor para rechazar automáticamente cualquier correo electrónico dirigido a direcciones no válidas. Esto reducirá la carga en tu servidor de exchange, ya que ya no tendrá que procesar informes de no entrega, y reducirá la carga en tu servidor postfix ya que no tendrá que realizar escaneos de spam y virus en el mensaje.
Instalar Dependencias
Instala el módulo perl Net::LDAP:
perl -MCPAN -e shell
install Net::LDAPvi /usr/bin/getadsmtp.plcon lo siguiente:
#!/usr/bin/perl -T -w
# Este script extraerá todas las direcciones SMTP de los usuarios de tu Active Directory
# (incluyendo direcciones de correo electrónico primarias y secundarias) y las listará en el
# formato "[email protected] OK" que Postfix usa con relay_recipient_maps.
# Asegúrate de verificar el camino a perl arriba.
# Esto requiere que Net::LDAP esté instalado. Para instalar Net::LDAP, en un shell
# escribe "perl -MCPAN -e shell" y luego "install Net::LDAP"
use Net::LDAP;
use Net::LDAP::Control::Paged;
use Net::LDAP::Constant ( "LDAP_CONTROL_PAGED" );
# Ingresa el camino/archivo para la salida
$VALID = "/etc/postfix/relay_recipients";
open VALID, "> $VALID" or die "NO SE PUEDE ABRIR $VALID $!";
# Ingresa el FQDN de tus controladores de dominio de Active Directory abajo
$dc1="domaincontroller1.example.com";
$dc2="domaincontroller2.example.com";
# Ingresa el contenedor LDAP para tu base de usuarios.
# La sintaxis es CN=Users,dc=example,dc=com
# Esto se puede encontrar instalando las Herramientas de Soporte de Windows 2000
# y luego ejecutando ADSI Edit.
# En ADSI Edit, expande el "Domain NC [domaincontroller1.example.com]" &
# verás, por ejemplo, DC=example,DC=com (esta es tu base).
# El Contenedor de Usuarios se especificará en el panel derecho como
# CN=Users dependiendo de tu esquema (este es tu contenedor).
# Puedes verificar esto haciendo clic en "Propiedades" de tu carpeta de usuario
# en ADSI Edit y examinando el valor "Ruta", como:
# LDAP://domaincontroller1.example.com/CN=Users,DC=example,DC=com
# lo que sería $hqbase="cn=Users,dc=example,dc=com"
# Nota: También puedes usar solo $hqbase="dc=example,dc=com"
$hqbase="cn=Users,dc=example,dc=com";
# Ingresa el nombre de usuario y la contraseña para un usuario válido en tu Active Directory
# con el nombre de usuario en la forma cn=username,cn=Users,dc=example,dc=com
# Asegúrate de que la contraseña del usuario no expire. Nota que este usuario
# no requiere privilegios especiales.
# Puedes verificar esto haciendo clic en "Propiedades" de tu usuario en
# ADSI Edit y examinando el valor "Ruta", como:
# LDAP://domaincontroller1.example.com/CN=user,CN=Users,DC=example,DC=com
# lo que sería $user="cn=user,cn=Users,dc=example,dc=com"
# Nota: También puedes usar el inicio de sesión UPN: "[email protected]"
$user="cn=user,cn=Users,dc=example,dc=com";
$passwd="password";
# Conectando a los controladores de dominio de Active Directory
$noldapserver=0;
$ldap = Net::LDAP->new($dc1) or
$noldapserver=1;
if ($noldapserver == 1) {
$ldap = Net::LDAP->new($dc2) or
die "Error al conectar a los controladores de dominio especificados $@ \n";
}
$mesg = $ldap->bind ( dn => $user,
password =>$passwd);
if ( $mesg->code()) {
die ("error:", $mesg->error_text((),"\n"));
}
# Cuántos resultados de consulta LDAP obtener para cada ronda paginada
# Establecer en menos de 1000 para Active Directory
$page = Net::LDAP::Control::Paged->new( size => 990 );
@args = ( base => $hqbase,
# Juega con esto para obtener objetos como Contactos, Carpetas Públicas, etc.
# Un filtro mínimo para solo usuarios con correo electrónico sería:
# filter => "(&(sAMAccountName=*)(mail=*))"
filter => "(& (mailnickname=*) (| (&(objectCategory=person)
(objectClass=user)(!(homeMDB=*))(!(msExchHomeServerName=*)))
(&(objectCategory=person)(objectClass=user)(|(homeMDB=*)
(msExchHomeServerName=*)))(&(objectCategory=person)(objectClass=contact))
(objectCategory=group)(objectCategory=publicFolder) ))",
control => [ $page ],
attrs => "proxyAddresses",
);
my $cookie;
while(1) {
# Realizar búsqueda
my $mesg = $ldap->search( @args );
# Filtrando resultados para atributos proxyAddresses
foreach my $entry ( $mesg->entries ) {
my $name = $entry->get_value( "cn" );
# Los atributos LDAP son multivaluados, así que tenemos que imprimir cada uno.
foreach my $mail ( $entry->get_value( "proxyAddresses" ) ) {
# Prueba si la línea comienza con una de las siguientes líneas:
# proxyAddresses: [smtp|SMTP]:
# y también descarta esta cadena inicial, para que $mail sea solo la
# dirección sin ningún otro carácter...
if ( $mail =~ s/^(smtp|SMTP)://gs ) {
print VALID $mail." OK\n";
}
}
}
# Solo continuar en LDAP_SUCCESS
$mesg->code and last;
# Obtener cookie del control paginado
my($resp) = $mesg->control( LDAP_CONTROL_PAGED ) or last;
$cookie = $resp->cookie or last;
# Establecer cookie en el control paginado
$page->cookie($cookie);
}
if ($cookie) {
# Tuvimos una salida anormal, así que dejemos que el servidor sepa que no queremos más
$page->cookie($cookie);
$page->size(0);
$ldap->search( @args );
# También sería una buena idea morir infeliz e informar al OP en este punto
die("Consulta LDAP no exitosa");
}
# Agregar restricciones adicionales, usuarios, etc. al archivo de salida abajo.
#print VALID "[email protected] OK\n";
#print VALID "[email protected] 550 Usuario desconocido.\n";
#print VALID "domain3.com 550 Usuario no existe.\n";
close VALID;A continuación, establece los permisos en el archivo para permitir que se ejecute:
chmod +x /usr/bin/getadsmtp.plEdita el archivo para personalizarlo para tu dominio específico. Dado que el archivo es de solo lectura, necesitarás usar :w! para guardar el archivo en vi.
- Establece $dc1 y $dc2 a los nombres de dominio completamente calificados o direcciones IP de 2 de tus controladores de dominio.
- Establece $hqbase igual al camino LDAP al contenedor o unidad organizativa que contiene las cuentas de correo electrónico para las que deseas obtener las direcciones de correo electrónico.
- Establece $user y $passwd para indicar qué cuenta de usuario debe usarse para acceder a esta información. Esta cuenta solo necesita ser miembro del dominio, por lo que sería una buena idea configurar una cuenta específicamente para esto.
Intenta ejecutar el script. Si funciona correctamente, creará /etc/postfix/relay_recipients.
Nota que si tu servidor postfix está separado de tus controladores de dominio activos por un firewall, necesitarás abrir el puerto TCP 389 desde el servidor postfix a los ADCs.
getadsmtp.plEn este punto, es posible que desees editar /etc/postfix/relay_recipients y eliminar cualquier dirección de correo electrónico no deseada, ya que este script importa todo.
Postmap el archivo para crear la base de datos hash
postmap /etc/postfix/relay_recipients
postfix reloadFinalmente, es posible que desees configurar un trabajo cron para actualizar y construir periódicamente el archivo /etc/postfix/relay_recipients.db. Puedes configurar un script llamado /usr/bin/update-relay-recipients.sh: (Opcional)
vi /usr/bin/update-relay-recipients.shcon lo siguiente y
chmod +x /usr/bin/update-relay_recipients.sh#!/bin/sh
/usr/bin/getadsmtp.pl
postmap /etc/postfix/relay_recipients
postfix reloadNo olvides asegurarte de que lo siguiente esté en tu archivo /etc/postfix/main.cf:
relay_recipient_maps = hash:/etc/postfix/relay_recipientsAgregalo a cron:
30 2 * * * /usr/bin/update-relay-recipients.sh #sincronizar relay_recipients con direcciones de Active Directory:Nota que este trabajo cron se ejecutará todos los días a las 2:30 AM para actualizar el archivo de base de datos. Es posible que desees ejecutar el tuyo con más frecuencia o no, dependiendo de cuán a menudo agregues nuevos usuarios de correo electrónico a tu sistema.
18. Instalar Webmin (Opcional):
apt-get install perl libnet-ssleay-perl libauthen-pam-perl libio-pty-perl apt-show-versions
cd /tmp && wget http://mirrors.kernel.org/ubuntu/pool/universe/libm/libmd5-perl/libmd5-perl_2.03-1_all.deb
dpkg -i libmd5-perl_2.03-1_all.deb
wget http://downloads.sourceforge.net/project/webadmin/webmin/1.520/webmin_1.520_all.deb
dpkg --install webmin_1.520_all.deb19. Agregar automáticamente un descargo de responsabilidad a los correos electrónicos salientes con alterMIME (Opcional)
Este tutorial muestra cómo instalar y usar alterMIME. alterMIME es una herramienta que puede agregar automáticamente un descargo de responsabilidad a los correos electrónicos. En este artículo explicaré cómo instalarlo como un filtro de Postfix en Ubuntu.
Instalando alterMIME:
apt-get install altermimeA continuación, creamos el filtro de usuario con el directorio home /var/spool/filter - alterMIME se ejecutará como ese usuario:
useradd -r -c "Filtros de Postfix" -d /var/spool/filter filter
mkdir /var/spool/filter
chown filter:filter /var/spool/filter
chmod 750 /var/spool/filterDespués creamos el script /etc/postfix/disclaimer que ejecuta alterMIME. El paquete alterMIME de Ubuntu viene con un script de muestra que podemos simplemente copiar a /etc/postfix/disclaimer:
cp /usr/share/doc/altermime/examples/postfix_filter.sh /etc/postfix/disclaimer
chgrp filter /etc/postfix/disclaimer
chmod 750 /etc/postfix/disclaimerAhora, el problema con este script es que no distingue entre correos electrónicos entrantes y salientes - simplemente agrega un descargo de responsabilidad a todos los correos. Típicamente, deseas descargos de responsabilidad solo para correos salientes, y aún así, no para todas las direcciones de remitente. Por lo tanto, he modificado un poco el script /etc/postfix/disclaimer - llegaremos a eso en un minuto.
Ahora, creamos el archivo /etc/postfix/disclaimer_addresses que contiene todas las direcciones de correo electrónico de remitentes (una por línea) para las cuales alterMIME debería agregar un descargo de responsabilidad:
vi /etc/postfix/disclaimer_addresses[email protected]
[email protected]
[email protected]Ahora abrimos /etc/postfix/disclaimer y lo modificamos de la siguiente manera (he marcado las partes que he cambiado):
vi /etc/postfix/disclaimer#!/bin/sh
# Localiza estos.
INSPECT_DIR=/var/spool/filter
SENDMAIL=/usr/sbin/sendmail
####### Cambiado del script original #######
DISCLAIMER_ADDRESSES=/etc/postfix/disclaimer_addresses
####### Cambiado del script original FIN #######
# Códigos de salida de
EX_TEMPFAIL=75
EX_UNAVAILABLE=69
# Limpia cuando termines o al abortar.
trap "rm -f in.$$" 0 1 2 3 15
# Comienza a procesar.
cd $INSPECT_DIR || { echo $INSPECT_DIR no existe; exit
$EX_TEMPFAIL; }
cat >in.$$ || { echo No se puede guardar el correo en el archivo; exit $EX_TEMPFAIL; }
####### Cambiado del script original #######
# obtener dirección de From
from_address=`grep -m 1 "From:" in.$$ | cut -d "<" -f 2 | cut -d ">" -f 1`
if [ `grep -wi ^${from_address}$ ${DISCLAIMER_ADDRESSES}` ]; then
/usr/bin/altermime --input=in.$$ \
--disclaimer=/etc/postfix/disclaimer.txt \
--disclaimer-html=/etc/postfix/disclaimer.txt \
--xheader="X-Copyrighted-Material: Por favor visita http://www.company.com/privacy.htm" || \
{ echo Contenido del mensaje rechazado; exit $EX_UNAVAILABLE; }
fi
####### Cambiado del script original FIN #######
$SENDMAIL "$@" A continuación, necesitamos el archivo de texto /etc/postfix/disclaimer.txt que contiene nuestro texto de descargo de responsabilidad. El paquete alterMIME de Ubuntu viene con un texto de muestra que podemos usar por ahora (por supuesto, puedes modificarlo si lo deseas):
cp /usr/share/doc/altermime/examples/disclaimer.txt /etc/postfix/disclaimer.txtFinalmente, tenemos que decirle a Postfix que debe usar el script /etc/postfix/disclaimer para agregar descargos de responsabilidad a los correos electrónicos salientes. Abre /etc/postfix/master.cf y agrega -o content_filter=dfilt: a la línea smtp:
vi /etc/postfix/master.cf#
# Archivo de configuración del proceso maestro de Postfix. Para detalles sobre el formato
# del archivo, consulta la página del manual master(5) (comando: "man 5 master").
#
# ==========================================================================
# tipo de servicio privado no privilegiado chroot despertar maxproc comando + args
# (sí) (sí) (sí) (nunca) (100)
# ==========================================================================
smtp inet n - - - - smtpd
-o content_filter=dfilt:
[...] Al final del mismo archivo, agrega las siguientes dos líneas:
[...]
dfilt unix - n n - - pipe
flags=Rq user=filter argv=/etc/postfix/disclaimer -f ${sender} -- ${recipient} Reinicia Postfix después:
/etc/init.d/postfix restart¡Eso es todo! Ahora se debería agregar un descargo de responsabilidad a los correos electrónicos salientes enviados desde las direcciones listadas en /etc/postfix/disclaimer_addresses.
20. Capturas de pantalla



Felicitaciones
Ahora deberías tener un SpamSnake completamente funcional con todas las novedades :-)
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.