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
segunda-feira, 29 de abril de 2019
segunda-feira, 1 de fevereiro de 2016
Problema no Squid
Olá a todos,
Esses dias aconteceu um problema com o proxy, ele simplesmente abortava (SIGABRT) e reiniciava alguns segundos depois, porém várias vezes por hora. A primeira coisa que fiz foi olhar o syslog, o qual mostrava que a aplicação saía com sinal 6 (SIGABRT):
"Squid Parent: (squid-1) process 32031 exited due to signal 6 with status 0"
Olhando no cache.log, não tinha muitas informações, apenas uma linha:
"kid1| assertion failed: String.cc:201: "len_ + len < 65536""
Com esses dados, fui para o Google buscar alguma informação, e o que eu descobri foi que o Squid tem um limite de tamanho de string que não pode ultrapassar 64 KB ou 65535 bytes. Isso foi tudo o que eu consegui. Acontece que não se tem informação de onde ele aceita essa string, se na url dos endereços, se na autenticação, se no corpo da página, enfim, e então eu tentei várias ações diferentes e monitorei por alguns dias sem sucesso algum, até que eu resolvi colocar o Squid para debugar e coloquei a opção "debug 9,ALL" no squid.conf e passei a monitorar o syslog em conjunto com o cache.log, e no momento em que houve um crash, pegando o horário exato no syslog, eu fui ao cache.log buscar alguma informação a respeito.
Notei (depois que eu ativei o debug) que em várias ocasiões onde o programa fechava, aconteciam imadiatamente antes acessos a um mesmo site específico, e o log mostrava especificamente um arquivo de folha de estilos (.css), e então logo depois mostrava a linha mencionada acima. Pois bem, fui verificar o arquivo css em questão e fiquei impressionado com o tamanho das strings utilizadas nele e na hora já consegui entender que esse arquivo era o problema. Simplesmente mudei a regra de acesso a esse site (alelo.com.br), colocando para sair sem autenticação, e pronto!!! Nunca mais o Squid foi abortado...
Espero ter sido últil!!! Até a próxima!!!
P.S: E você? Precisa de um proxy robusto e poderoso como o Squid em sua empresa mas não tem idéia de como configurar? Entre em contato, tenho certeza de que encontraremos a melhor configuração para que você tenha um proxy de alta qualidade sem gastar nada com licenças de softwares proprietários, e ainda poderá contar com suporte remoto ou presencial (dependendo da localidade).
Esses dias aconteceu um problema com o proxy, ele simplesmente abortava (SIGABRT) e reiniciava alguns segundos depois, porém várias vezes por hora. A primeira coisa que fiz foi olhar o syslog, o qual mostrava que a aplicação saía com sinal 6 (SIGABRT):
"Squid Parent: (squid-1) process 32031 exited due to signal 6 with status 0"
Olhando no cache.log, não tinha muitas informações, apenas uma linha:
"kid1| assertion failed: String.cc:201: "len_ + len < 65536""
Com esses dados, fui para o Google buscar alguma informação, e o que eu descobri foi que o Squid tem um limite de tamanho de string que não pode ultrapassar 64 KB ou 65535 bytes. Isso foi tudo o que eu consegui. Acontece que não se tem informação de onde ele aceita essa string, se na url dos endereços, se na autenticação, se no corpo da página, enfim, e então eu tentei várias ações diferentes e monitorei por alguns dias sem sucesso algum, até que eu resolvi colocar o Squid para debugar e coloquei a opção "debug 9,ALL" no squid.conf e passei a monitorar o syslog em conjunto com o cache.log, e no momento em que houve um crash, pegando o horário exato no syslog, eu fui ao cache.log buscar alguma informação a respeito.
Notei (depois que eu ativei o debug) que em várias ocasiões onde o programa fechava, aconteciam imadiatamente antes acessos a um mesmo site específico, e o log mostrava especificamente um arquivo de folha de estilos (.css), e então logo depois mostrava a linha mencionada acima. Pois bem, fui verificar o arquivo css em questão e fiquei impressionado com o tamanho das strings utilizadas nele e na hora já consegui entender que esse arquivo era o problema. Simplesmente mudei a regra de acesso a esse site (alelo.com.br), colocando para sair sem autenticação, e pronto!!! Nunca mais o Squid foi abortado...
Espero ter sido últil!!! Até a próxima!!!
P.S: E você? Precisa de um proxy robusto e poderoso como o Squid em sua empresa mas não tem idéia de como configurar? Entre em contato, tenho certeza de que encontraremos a melhor configuração para que você tenha um proxy de alta qualidade sem gastar nada com licenças de softwares proprietários, e ainda poderá contar com suporte remoto ou presencial (dependendo da localidade).
quinta-feira, 5 de novembro de 2015
Removendo Kernels No Ubuntu
Boa tarde pessoal!!!
Criei um script para remover kernels no Ubuntu de forma simplificada. Sei que já existem scripts para isso mas gosto de criar os meus e compartilhar com a comunidade. É necessário que o sistema tenha o aptitude instalado, pois ele trata melhor as dependências do que o apt. O script é bem simples, e basicamente lista os kernels instalados no sistema e te dá a escolha de removê-los:
Espero ter sido útil e até a próxima!!!
Criei um script para remover kernels no Ubuntu de forma simplificada. Sei que já existem scripts para isso mas gosto de criar os meus e compartilhar com a comunidade. É necessário que o sistema tenha o aptitude instalado, pois ele trata melhor as dependências do que o apt. O script é bem simples, e basicamente lista os kernels instalados no sistema e te dá a escolha de removê-los:
#!/bin/bash # Desenvolvido por Rodrigo Garcia em 05/11/2015 # Descobrir o total de kernels instalados no sistema NUM=$(dpkg -l | grep "ii linux-image-" | grep -v "image-generic" | grep -v "linux-image-$(uname -r)" | grep -v "extra" | awk '{ print $2 }' | wc -l) # Contador X=1 while [ $X -le $NUM ] do # Atribui o nome dos kernels um a um dentro de um array e lista KERNEL[$X]="$(dpkg -l | grep "ii linux-image-" | grep -v "image-generic" | grep -v "linux-image-$(uname -r)" | grep -v "extra" | cat -n | sed -n "$(echo $X)p" | awk '{print $3}')" echo "$X) ${KERNEL[$X]}" X=$(expr $X + 1) done # Escolha e remoção do kernel desejado echo -e "Escolha o kernel a ser removido: " read Y echo -e "Deseja realmente remover o kernel ${KERNEL[$Y]}?(s/n): " read ANSWER case $ANSWER in s) aptitude remove ${KERNEL[$Y]} ;; n) exit ;; *) echo "Opção Inválida!!!" exit ;; esac
Espero ter sido útil e até a próxima!!!
Assinar:
Postagens (Atom)