martes, 31 de julio de 2012

Whitelist & Blacklist en Zimbra

La interfaz de administracion del Zimbra version OpenSource no tiene Blacklist ni Whitelist, por lo tanto solo queda manejarlo a nivel de archivos, para lo cual se creo el siguiente script para un manejo mas rapido de dichas listas, asi como un pequeño filtro en los correos por asunto.

Creamos el siguiente archivo

#  touch /opt/zimbra/conf/custom_header_checks

# chown zimbra:zimbra /opt/zimbra/conf/custom_header_checks

Ahora nos ponemos como usuario zimbra y ejecutamos lo siguiente:
# su - zimbra
# zmlocalconfig -e postfix_header_checks="pcre:/opt/zimbra/conf/postfix_header_checks, pcre:/opt/zimbra/conf/custom_header_checks"

Listo hecho lo de arriba, creamos nuestro script al cual llamaremos zimbralist


# vi /usr/local/sbin/zimbralist


#!/bin/bash
echo ""
echo "*****************************************"
echo "********  Whitelist & Blacklist  ********"
echo "*****************************************"
echo ""
echo "Menu de opciones"
echo "----------------"
echo ""
echo "Mostrar lista blanca          : opcion 1"
echo "Mostrar lista negra           : opcion 2"
echo "Agregar a lista blanca        : opcion 3"
echo "Agregar a lista negra         : opcion 4"
echo "Borrar de ambas listas (w/b)  : opcion 5"
echo "Lista de filtros por asunto   : opcion 6"
echo "Agregar filtros por asunto    : opcion 7"
echo "Borrar filtros por asunto     : opcion 8"
echo "Aplicar cambios               : opcion 9"
echo ""
echo -n "Ingrese opcion : "
read opcion
if [ $opcion -eq 1 ]; then
echo ""
echo "Lista blanca"
echo "------------"
grep "whitelist_from " /opt/zimbra/conf/salocal.cf.in
echo ""
else
if [ $opcion -eq 2 ]; then
echo ""
echo "Lista Negra"
echo "-----------"
grep blacklist_from /opt/zimbra/conf/salocal.cf.in 
echo ""
else
if [ $opcion -eq 3 ]; then
echo "Ingrese la cuenta o dominio:"
echo -n "Dominio/cuenta: "
read dom
echo "whitelist_from $dom" >> /opt/zimbra/conf/salocal.cf.in
echo "Dominio/cuenta agregada"
echo ""
else
if [ $opcion -eq 4 ]; then
echo "Ingrese la cuenta o dominio:"
echo -n "Dominio/cuenta: "
read dom
echo "blacklist_from $dom" >> /opt/zimbra/conf/salocal.cf.in
echo "Dominio/cuenta agregada"
echo ""
else
if [ $opcion -eq 5 ]; then
echo "Ingrese la cuenta o dominio:"
echo -n "Dominio/cuenta: "
read dom
sed -i -e "/$dom/d" /opt/zimbra/conf/salocal.cf.in
echo "Dominio/cuenta borrada"
echo ""
else
if [ $opcion -eq 6 ]; then
echo ""
echo "Lista de filtros por asunto"
echo "---------------------------"
echo ""
cat /opt/zimbra/conf/custom_header_checks
echo ""
else
if [ $opcion -eq 7 ]; then
echo ""
echo "Ingrese palabra a filtrar :"
echo -n "palabra: " 
read pal
echo "/^Subject:.*($pal)/ DISCARD La palabra $pal esta bloqueada" >> /opt/zimbra/conf/custom_header_checks
echo "La palabra $pal fue agregada"
echo ""
else
if [ $opcion -eq 8 ]; then
echo ""
echo "Ingrese la palabra a eliminar del filtro:"
echo -n "Palabra: "
read pal
sed -i -e "/$pal/d" /opt/zimbra/conf/custom_header_checks
echo "La palabra $pal fue eliminada"
echo ""
else
if [ $opcion -eq 9 ]; then
echo ""
echo "Aplicando los cambios ..."
echo ""
su - zimbra -c "zmmtactl restart && zmamavisdctl restart"
echo ""
echo "Cambios aplicados : [ OK ]"
echo ""
else
echo "opcion no valida"
fi
fi
fi
fi
fi
fi
fi
fi
fi


Ahora solo queda darle permisos de ejecucion

# chmod +x /usr/local/sbin/zimbralist


Listo, ahora con ejecutar ya podemos manejar de forma mas rapida las listas

Algo adicional que agregare es lo siguiente:

Alguna palabras que vienen en el asunto como PUBLÏCÏDAD no podia bloquearlas ya que por temas de formatos no hacia el match , entonces hize un script para que se agregue el filtro en todas las cuentas del servidor

Cree un archivo de nombre /usr/local/sbin/FilterAsunto, con el siguiente contenido

#!/bin/bash
Asunto=$1
NombreFiltro=$2
ACC=`/opt/zimbra/bin/zmprov -l gaa`
for i in $ACC
do
/opt/zimbra/bin/zmmailbox -z -m $i addFilterRule "$NombreFiltro" active any header "subject" contains "$Asunto" discard stop
done

Le di permisos de ejecucion

#chmod +x /usr/local/sbin/FilterAsunto

Listo, ahora ejecutando del siguiente modo se puede agregar los filtros en todas las cuentas

#FilterAsunto PUBLÏCÏDAD PalabraFiltrada1

Ahora si queremos agregar al script seria del siguiente modo:

echo "Ingrese palabra a filtrar :"
echo -n "palabra: " 
read pal
echo -n "Nombre del Filtro: "
read filtro
echo "Agregando filtro ... "
echo "/^Subject:.*($pal)/ DISCARD La palabra $pal esta bloqueada" >> /opt/zimbra/conf/custom_header_checks
/usr/local/sbin/FilterAsunto $pal $filtro
echo "La palabra $pal fue agregada"

Por ahora lo estare trabajando asi ....






2 comentarios:

  1. Bastante Interesante,
    una consulta que te parece el otro método por medio de Amavis, crear un archivo de lista negra y uno de lista blanca, y especificar en el siguiente archivo /opt/zimbra/conf/amavisd.conf.in, que lea mis listas y bloque o deniegue según sea el caso

    a veces encontrar varias soluciones a un problema confunde un poco

    debo decir que este método lo aplique en Zimbra 8 y funciona.

    agradecería que respondas
    gracias.

    ResponderEliminar
  2. Robert,

    Que tal, tambien lo habia revisado y si funciona. En este caso ya dependera de ti cual uses, te envio un link para una mayor lectura del tema

    http://wiki.zimbra.com/wiki/Improving_Anti-spam_system

    Saludos

    ResponderEliminar