Páginas

segunda-feira, 29 de abril de 2019

Script Para Controle de Spam Zimbra

Boa tarde pessoal!!!

Após um bom tempo sem postar nada (porque não tinha nada de interessante para postar), resolvi postar esse script que eu desenvolvi para incluir, excluir e listar endereços na blacklist e whitelist do Zimbra 8.8.11 (não testei em outras versões).

Depois de muuuuuuuuuito pesquisar, eu cheguei à forma correta de controlar as listas de spam do Zimbra. Na internet existem muitas informações desencontradas, ou que não funcionam mais, etc. Então abaixo está o script que eu fiz e que está funcionando perfeitamente no meu ambiente, espero que ajude:

#!/bin/bash
# Controle de blacklist e whitelist
# Desenvolvido por Rodrigo Garcia em 12/04/2019
# Contato rodrigogarcia.ti@gmail.com
DOMAIN="seudominio.com.br"
# Adiciona um único endereço ou domínio à blacklist
fn_AddDomainBlack(){
        until [ $OP == "n" ]
        do
                clear
                read -p "Digite o endereço (Ex: exemplo@exemplo.com ou exemplo.com): " ADDRESS
                read -p "Confirma a adição do domínio $ADDRESS à blacklist (s/n)?" RESP
                if [ $RESP == "s" ]
                then
                        echo "Verificando se o endereço já existe..."
                        su - zimbra -c "zmprov gd $DOMAIN amavisBlacklistSender" | grep -w $ADDRESS > /dev/null
                        if [ $? != 0 ]
                        then
                                echo "Adicionando $ADDRESS à blacklist..."
                                su - zimbra -c "zmprov md $DOMAIN +amavisBlacklistSender $ADDRESS"
                                echo -e "Concluído!!!\n"
                        else
                                echo "Endereço já existe na blacklist!!!"
                        fi
                fi
                read -p "Deseja adicionar outro endereço (s/n)?" OP
        done
        unset OP
}
# Adiciona uma lista de endereços ou domínios à blacklist lendo o arquivo blacklist.conf
# Formato exemplo@exemplo.com ou exemplo.com
fn_ListaBlack(){
        clear
        while read LINE
        do
                su - zimbra -c "zmprov gd $DOMAIN amavisBlacklistSender" | grep -w $ADDRESS > /dev/null
                if [ $? != 0 ]
                then
                        echo "Adicionando $LINE à blacklist..."
                        su - zimbra -c "zmprov md $DOMAIN +amavisBlacklistSender $LINE"
                else
                        echo "$ADDRESS já existe!!!"
                fi
        done < blacklist.conf
        echo -e "Concluído!!!\n"
        read -rsp $'Pressione enter para voltar...\n'
}
# Exclui um endereço ou domínio da blacklist
fn_DelDomainBlack(){
        until [ $OP == "n" ]
        do
                clear
                read -p "Digite o domínio (Ex: exemplo@exemplo.com ou exemplo.com): " ADDRESS
                read -p "Confirma a exclusão do domínio $ADDRESS da blacklist (s/n)?" RESP
                if [ $RESP == "s" ]
                then
                        echo "Verificando se o endereço existe..."
                        su - zimbra -c "zmprov gd $DOMAIN amavisBlacklistSender" | grep -w $ADDRESS > /dev/null
                        if [ $? == 0 ]
                        then
                                echo "Excluíndo $ADDRESS da blacklist..."
                                su - zimbra -c "zmprov md $DOMAIN -amavisBlacklistSender $ADDRESS"
                                echo -e "Concluído!!!\n"
                        else
                                echo "Endereço não encontrado!!!"
                        fi
                fi
                read -p "Deseja remover outro endereço (s/n)?" OP
        done
        unset OP
}
# Consulta um endereço ou domínio na blacklist
fn_BuscaBlack(){
        until [ $OP == "n" ]
        do
                clear
                read -p "Digite o domínio para busca (Ex: exemplo@exemplo.com ou exemplo.com): " ADDRESSBL
                echo "Buscando $ADDRESSBL ..."
                su - zimbra -c "zmprov gd $DOMAIN amavisBlacklistSender" | grep -w $ADDRESSBL
                if [ $? != 0 ]
                then
                        echo -e "Endereço ou domínio não encontrado!!!\n"
                fi
                read -p "Deseja buscar outro endereço (s/n)?" OP
        done
        unset OP
}
# Faz cópia de segurança da blacklist e whitelist
fn_BkpList(){
        clear
        echo -e "Fazendo backup das listas...\n"
        su - zimbra -c "zmprov gd $DOMAIN amavisBlacklistSender" | cut -d" " -f2 > blacklist.conf.bkp
        echo -e "Backup da blacklist criado com sucesso em blacklist.conf.bkp\n"
        su - zimbra -c "zmprov gd $DOMAIN amavisWhitelistSender" | cut -d" " -f2 > whitelist.conf.bkp
        echo -e "Backup da whitelist criado com sucesso em whitelist.conf.bkp\n"
        read -rsp $'Pressione enter para voltar...\n'
}
# Adiciona endereço ou domínio à whitelist
fn_AddDomainWhite(){
        until [ $OP == "n" ]
        do
                clear
                read -p "Digite o domínio (Ex: exemplo@exemplo.com ou exemplo.com): " ADDRESS
                read -p "Confirma a adição do domínio $ADDRESS à whitelist (s/n)?" RESP
                if [ $RESP == "s" ]
                then
                        echo "Verificando se o endereço já existe..."
                        su - zimbra -c "zmprov gd $DOMAIN amavisWhitelistSender" | grep -w $ADDRESS > /dev/null
                        if [ $? != 0 ]
                        then
                                echo "Adicionando $ADDRESS à whitelist..."
                                su - zimbra -c "zmprov md $DOMAIN +amavisWhitelistSender $ADDRESS"
                                echo -e "Concluído!!!\n"
                        else
                                echo "Endereço já existe na whitelist!!!"
                        fi
                        read -p "Deseja adicionar outro endereço (s/n)?" OP
                fi
        done
        unset OP
}
# Adiciona uma lista de endereços ou domínios à whitelist lendo o arquivo whitelist.conf
# Formato exemplo@exemplo.com ou exemplo.com
fn_ListaWhite(){
        clear
        while read LINE
        do
                su - zimbra -c "zmprov gd $DOMAIN amavisWhitelistSender" | grep -w $ADDRESS > /dev/null
                if [ $? != 0 ]
                then
                        echo "Adicionando $LINE à whitelist..."
                        su - zimbra -c "zmprov md $DOMAIN +amavisWhitelistSender $LINE"
                else
                        echo "$ADDRESS já existe!!!"
                fi
        done < whitelist.conf
        echo -e "Concluído!!!\n"
        read -rsp $'Pressione enter para voltar...\n'
}
# Exclui um endereço ou domínio da whitelist
fn_DelDomainWhite(){
        until [ $OP == "n" ]
        do
                clear
                read -p "Digite o domínio (Ex: exemplo@exemplo.com ou exemplo.com): " ADDRESS
                read -p "Confirma a exclusão do domínio $ADDRESS da whitelist(s/n)?" RESP
                if [ $RESP == "s" ]
                then
                        echo "Verificando se o endereço existe..."
                        su - zimbra -c "zmprov gd $DOMAIN amavisWhitelistSender" | grep -w $ADDRESS > /dev/null
                        if [ $? == 0 ]
                        then
                                echo "Excluíndo $ADDRESS da whitelist..."
                                su - zimbra -c "zmprov md $DOMAIN -amavisWhitelistSender $ADDRESS"
                                echo -e "Concluído!!!\n"
                        else
                                echo "$ADDRESS não encontrado!!!"
                        fi
                fi
                read -p "Deseja remover outro endereço (s/n)?" OP
        done
        unset OP
}
# Consulta endereço ou domínio na whitelist
fn_BuscaWhite(){
        until [ $OP == "n" ]
        do
                clear
                read -p "Digite o domínio para busca (Ex: exemplo@exemplo.com ou exemplo.com): " ADDRESSWL
                su - zimbra -c "zmprov gd $DOMAIN amavisWhitelistSender" | grep $ADDRESSWL
                echo "Buscando $ADDRESSWL ..."
                if [ $? != 0 ]
                then
                        echo -e "\nEndereço ou domínio não encontrado!!!\n"
                fi
                read -p "Deseja buscar outro endereço (s/n)?" OP
        done
        unset OP
}
# Adiciona um IP na Blacklist do Postfix
fn_BlackIp(){
        until [ $OP == "n" ]
        do
                clear
                read -p "Digite o IP a ser bloqueado: " BLACKIP
                echo "Buscando IP $BLACKIP ..."
                cat /opt/zimbra/conf/postfix_rbl_override | grep -w $BLACKIP > /dev/null
                if [ $? != 0 ]
                then
                        echo "Adicionando o IP $BLACKIP à Blacklist..."
                        echo "$BLACKIP REJECT" >> /opt/zimbra/conf/postfix_rbl_override
                        su - zimbra -c "postmap /opt/zimbra/conf/postfix_rbl_override"
                        echo "IP adicionado com sucesso à Blacklist!!!"
                else
                        echo -e "\nEndereço IP já existe na Blacklist!!!"
                fi
                read -p "Deseja adicionar outro IP à Blacklist (s/n)?" OP
        done
        unset OP
}
# Executa o código
until [ $DO = "0" ]
do
        clear
        echo "############################################################################################"
        echo "# Bem vindo, o que você deseja?"
        echo "############################################################################################"
        echo "1- Consultar um endereço ou domínio na blacklist"
        echo "2- Adicionar um endereço ou domínio à blacklist"
        echo "3- Adicionar uma lista de endereços e/ou domínios à blacklist (crie a lista blacklist.conf)"
        echo "4- Remover um endereço ou domínio da blacklist"
        echo "5- Consultar um endereço ou domínio na whitelist"
        echo "6- Adicionar um endereço ou domínio à whitelist"
        echo "7- Adicionar uma lista de endereços e/ou domínios à whitelist (crie a lista whitelist.conf)"
        echo "8- Remover um endereço domínio da whitelist"
        echo "9- Fazer backup das listas (whitelist e blacklist)"
        echo "10- Adicionar um IP à Blacklist do Postfix"
        echo "0- Sair"
        read -p "Escolha uma ação: " DO
        case $DO in
                "1")
                        fn_BuscaBlack
                ;;
                "2")
                        fn_AddDomainBlack
                ;;
                "3")
                        fn_ListaBlack
                ;;
                "4")
                        fn_DelDomainBlack
                ;;
                "5")
                        fn_BuscaWhite
                ;;
                "6")
                        fn_AddDomainWhite
                ;;
                "7")
                        fn_ListaWhite
                ;;
                "8")
                        fn_DelDomainWhite
                ;;
                "9")
                        fn_BkpList
                ;;
                "10")
                        fn_BlackIp
                ;;
                "0")
                        clear
                        exit
                ;;
        esac
done

Até a próxima!!!

Rodrigo Garcia