Arquivo

Archive for the ‘Shell’ Category

Checar versão do Zabbix Agent!

9 de fevereiro de 2015 Deixe um comentário
Zabbix

Zabbix

Checar versão do Zabbix agent no host client.

O Zabbix é uma excelente ferramenta de monitoria de ambiente de infraestrutura de TI. Consegue medir a saúde e nos dá uma boa predição sobre nosso parque.

Recentemente descobri que após a atualização de versão, uma determinada feature que havia inserido em um template que eu criei para monitorar o status do Xeams e do Zimbra, não estava funcionando. Iniciou uma verdadeira peregrinação no linux para entender o motivo de tal feature estar prejudica. Após uma sequência de análise, descobri que o problema estava na versão do Agent do Zabbix que estava desatualizada. Após atualizar a mesma a feature voltou a funcionar. Estranho, pois a mesma feature foi escrita na versão anterior do Agent do Zabbix.

Dito isso, me preocupei em checar todas as versões de Agent Zabbix do meu parque, para isso eu utilizei o comando:

zabbix_get -p 10050 -k agent.version -s 192.168.1.25  

Isto dentro de um laço for, me retornou todos os agents obsoletos. Abraços.

Anúncios
Categorias:Bash, Debian, Shell, zabbix Tags:,

Atualizar o Openfire automaticamente.

21 de maio de 2014 11 comentários
Openfire

COMO ATUALIZAR O OPENFIRE

 

O Openfire é um servidor de mensagens instatâneas que permite que clientes de um mesmo domínio troquem mensagens entre si de forma organizada e com regras de acesso. O mesmo pode ser integrado com Active Directory e utilizar um banco de dados externo (Oracle, Sql, Mysql) ou mesmo um bancozinho interno embutido chamado HSQLDB (Não recomendo esse banco, melhor usar um banco com mais opções como Oracle, M$ Sql ou Mysql.)

Há alguns dias saiu uma nova atualização para o Openfire, a 3.9.3.

Esta nova versão possui uma série de melhorias, elas podem ser consultadas aqui no changelog.

Vamos lá, primeiro vou descrever meu cenário:

Sistema Operacional: Debian 7.1 64 Bits
Banco de Dados: SQL Server (Windows 2008 R2 Enterprise)
Autenticação: LDAP do Active Directory
Versão do Openfire: 3.9.1
Diretório de Instalação: /opt/openfire

Bom, agora vamos atualizar.

Vale ressalvar que eu estou atualizando do meu jeito pois não vi nada oficial no site do desenvolvedor. Acredito que este tipo de atualização é válida para qualquer tipo de banco de dados e autenticação que você utilize.

Todos os comandos aqui representados são executados como root #!

Vejo que muita gente tem complicação na hora de atualizar o Openfire. Pensando nisso e visando otimizar minhas tarefas aqui na empresa, resolvi automatizar a atualização do openfire. Para isto eu criei um script em bash com os seguintes passos:

1 – Checa as versões do spark local e da versão disponível no site do desenvolvedor.
2 – Compara as versões
3 – Caso as versões sejam diferentes e a versão local do openfire seja menor, o script irá fazer backup do seu openfire e em seguida atualizar o mesmo.

 

Para baixar o script clique aqui. Apenas dê permissão de execução para ele:

chmod +x atualiza_openfire.sh

O script não sai direito aqui no blog não sei qual o motivo, mas você pode visualizar o script na integra aqui neste link:

Lembrando que o script quando acionado gera dois backups um compactado e outro, um diretório com o formato openfire_$versao_$data. Caso queira desfazer a atualização, basta você proceder da seguinte forma:

Mover o diretório que foi atualizado

mv /opt/openfire /opt/openfire_bug_atualizacao

Em seguida, voltar seu openfire comoe stava antes, igualzinho

cp -ar /opt/openfire_$versao_data /opt/openfire

Pronto, agora só reinicialize seu serviço:

/opt/openfire/bin/openfire stop
/opt/openfire/bin/openfire start

 

Segue parte do trecho do script

 

#!/bin/bash
#Obtem Versao do Openfire
#2014
#Autor: Jacques de Beijer - beijer00@gmail.com
#Livre divulgacao, mantenham os creditos


DATA=`/bin/date +%d%m%Y`

#Checa versao local do Openfire
versao=`cat /opt/openfire/bin/openfire | grep '"version ' | awk -F'"version ' '{ print $2 }' | awk -F'"' '{ print $1 }' | sort -u`

#Checa Versao do Openfire no site da Ignite Realtime
wget -q -O /tmp/openfire_checa_versao_novo.txt --no-check-certificate https://igniterealtime.org/projects/openfire/index.jsp
versao_nova=`cat /tmp/openfire_checa_versao_novo.txt | grep '<strong>Openfire' | cut -d'<' -f2 | cut -d' ' -f2` # | sed -e 's/\.//g'`

if [ `echo $versao | sed -e 's/\.//g'` -lt `echo $versao_nova | sed -e 's/\.//g'` ] ; then
echo "Necessario atualizar"
if [ ! -d "/opt/openfire" ]; then
echo "Diretorio do Openfire deafult não existe, impossivel continuar. Verifique seus diretorios!!!"
echo "Encerrando atualização!"
else
echo "Diretorio do Openfire OK! - Continuando instalacao"
echo "Obtendo nova versao do Openfire..."
wget -c --progress=dot -O /tmp/openfire_"`echo $versao_nova | sed -e 's/\./_/g'`".tar.gz http://download.igniterealtime.org/openfire/openfire_`echo $versao_nova | sed -e 's/\./_/g'`.tar.gz
echo "Compactando Diretorio atual - Backup escrito em: /opt/openfire_"$versao"_"$DATA".tar.gz"
tar cfz /opt/openfire_"$versao"_"$DATA".tar.gz /opt/openfire/
echo "Encerrando servico Openfire..."
killall -9 openfire
killall -9 java
echo "Movendo diretorio atual..."
mv /opt/openfire/ /opt/openfire_"$versao"_"$DATA"
echo "Descompactando nova versao e atualizando seu Openfire"
tar zxf /tmp/openfire_`echo $versao_nova | sed -e 's/\./_/g'`.tar.gz -C /opt/
echo "Habilitando suas configuracoes definidas"
cp -arp /opt/openfire_"$versao"_"$DATA"/enterprise /opt/openfire/
cp -arp /opt/openfire_"$versao"_"$DATA"/conf /opt/openfire/
cp -arp /opt/openfire_"$versao"_"$DATA"/plugins /opt/openfire/
cp -arp /opt/openfire_"$versao"_"$DATA"/resources /opt/openfire/
echo "Inicializando seu Openfire..."
/opt/openfire/bin/openfire start
echo "OPENFIRE ATUALIZADO - Aguarde 3 minutos para fazer login em seu cliente Jabber"
fi
else
if [ `echo $versao | sed -e 's/\.//g'` -eq `echo $versao_nova | sed -e 's/\.//g'` ] ; then
echo "Na eh necessario atualizar seu Openfire, ele ja esta na versao mais nova!!!"
else
if [ `echo $versao | sed -e 's/\.//g'` -gt `echo $versao_nova | sed -e 's/\.//g'` ] ; then
echo "A versao do seu Openfire detectada esta acima da versao mais recente disponibilizada pela Ignite Realtime. Verifique seu Sistema!!!"
fi
fi
fi

 

Bom, basicamente desta forma eu consigo manter meu openfire atualizado o tempo todo via crontab, não me preocupo mais com a atualização do mesmo.

 

Qualquer dúvida, entrem em contato.

 

Abraços

Lista de Comandos Zimbra

22 de fevereiro de 2014 46 comentários
Zimbra

Zimbra

LISTA DE COMANDOS ZIMBRA

Acredito que todo Administrador de Redes já deve ter ouvido falar no Zimbra, então o mesmo dispensa apresentações (E se você está lendo este blog, com certeza sabe o que o mesmo faz). O Zimbra é muito flexível em muitos aspectos, o front-end do mesmo já é bem completo, dá para fazer muita coisa por lá. Entretanto, pela console do administrador você não tem a opção de automatizar processos, otimizar rotinas, fazer loops de verificações muito menos de fazer consultas diretas no banco (Eu disse CONSULTA, não brinque com o banco do zimbra, o Mesmo usa Mysql que é da Oracle, e por muito tempo o Zimbra foi da Oracle, o que cria muitos laços dentro do banco de dados), sem falar que certas opções, você não tem pela console do administrador, mas no shell sim =]]

O verdadeiro poder do Zimbra, na minha concepção, está na linha de comando. Lá a gente faz quase tudo que a gente quer, além do postfix só poder ser alterado mais cirurgicamente por lá, bem como outros serviços. Por exemplo, o mysql só pode ser aberto para ser acessado por fora através da linha de comando (Ver como liberar o acesso externo ao mysql do Zimbra aqui

Como estou migrando todo o parque de e-mail da empresa em que trabalho, acabei ficando com os comandos na cabeça e sei que por falta de uso, eu mesmo vou esquecer. Portanto, resolvi postar tanto para mim, quanto para quem desejar.

Bom, segue lista de comandos que eu utilizo, o Zimbra é uma poderosa ferramenta e não possui apenas estes comandos, possui muito mais. Entretanto, com esta relação, você pode ir amadurecendo no shell do mesmo.

Descobrir qual é a versão e arquitetura do seu Zimbra

zmcontrol -v

Comando para Iniciar, Parar, Reiniciar e checar Status

/etc/init.d/zimbra start | stop | restart | status

Obter ajuda do comando zmprov

zmprov help commands

Obter opções de uso do e a sintaxe de comandos do zmprov

zmprov -h

Parar o Zimbra

zmcontrol stop

Iniciar o Zimbra

zmcontrol start

Obter Status do Zimbra

zmcontrol status

Trocar o nome da máquina do Zimbra (Requer stopar serviço)

/opt/zimbra/libexec/zmsetservername -o antigo.beijer.com -n novo.beijer.com

Obter nome da máquina do Zimbra

zmhostname

Listar todos os domínios no Zimbra

zmprov gad

Criar outro domínio

zmprov cd beijer.org.br

Renomear um domínio

zmprov -l rd beijer.org.br beijer.net.br

Criar alias para domínio

zmprov cad alias_beijer.com.br beijer.com.br

Verificar qual o domínio padrão do Zimbra

zmprov gacf zimbraDefaultDomainName

Caso seja necessário alterar o domínio padrão, execute o comando abaixo, porém não recomendo.

zmprov mcf zimbraDefaultDomainName beijer.org.br

Para remover um domínio ou um alias de domínio, execute o comando

zmprov dd alias_beijer.com.br

Criar usuario

zmprov ca usuario@beijer.com.br 'senhaaqui'

Alterar a senha de um usuário

zmprov sp jacques@beijer.com.br `beijer.j4cqu3s`

Listar todos usuarios

zmprov -l gaa

Listar todos os usuários de um domínio

zmprov -l gaa beijer.com.br

Listar usuários que são administradores

zmprov -l gaaa

Listar usuários que são administradores de um domínio

zmprov -l gaaa beijer.com.br

Transformar um usuario em administrador

zmprov ma jacques@beijer.com.br zimbraIsAdminAccount TRUE

Criar um usuario com o atributo de administrador

zmprov ca jacques@beijer.com.br 'senhaaqui' zimbraIsAdminAccount TRUE

Renomear conta

zmprov ra jacques@beijer.com.br beijer@beijer.com.br

Renomer conta mudando de domínio

zmprov ra jacques@beijer.com.br jacques@jacquesdebeijer.com.br

Deletar Conta

zmpra da jacques@beijer.com.br

Visualizar atributos de uma conta

zmprov ga jacques@beijer.com.br

Adicionar alias a uma conta

zmprov aaa jacques@beijer.com.br alias_jacques@beijer.com.br

Quando necessário ver os alias em modo texto, faça assim

for i in $(zmprov -l gaa); do echo -e "\n$i:"; zmprov ga $i | grep
MailAlias; done

Quando necessário ver os alias de um determinado domínio em modo texto, faça assim

for i in $(zmprov -l gaa beijer.com); do echo -e "\n$i:"; zmprov ga $i |
grep MailAlias; done

Remover alias

zmprov raa jacques@beijer.com.br alias_jacques@beijer.com.br

Para criar uma lista

zmprov cdl lista@beijer.com.br

Visualizar listas de distribuição

zmprov gadl

Adicionar membros à lista de distribuição

zmprov adlm lista@beijer.com.br jacques@beijer.com.br

Adicionar um usuario (jacques@beijer.com.br) a todas as listas de distribuição

for listas in $(zmprov gadl); do zmprov adlm $listas jacques@beijer.com.br;
done

Visualizar membros de uma lista

zmprov gdlm lista@beijer.com.br

Ver todas as informações de uma lista

zmprov gdl lista@beijer.com.br

Remover membro de uma lista

zmprov rdlm lista@beijer.com.br lista@beijer.com.br

Renomear uma lista de distribuição

zmprov rdl lista@beijer.com.br novalista@beijer.com.br

Ocultar uma lista de distribuição da GAL

zmprov mdl lista@beijer.com.br  zimbraHideInGal TRUE

Exibir uma lista de distribuição da GAL

zmprov mdl lista@beijer.com.br  zimbraHideInGal FALSE

Remover uma lista

zmprov ddl lista@beijer.com.br

Classes de Serviço
Listar Classes

zmprov gac

Criar uma nova COS

zmprov cc nome_da_classe

Ver todos os atributos de uma classe

zmprov gc nome_da_classe

Alterar a COS de um usuário

zmprov sac jacques@beijer.com.br nova_classe

Para ver quantos usuários de um dominio estão em classes

zmprov cta beijer.com.br

Obter o atributo da quota da COS

zmprov gc nome_classe zimbraMailQuota

Obter cuota utilizada por cada usuário de um domínio (Formato Conta Quota
Quota Utilizada

zmprov gqu localhost

Alterar attribute de quota para o valor de 80M, este número deve ser em
bytes

zmprov mc nome_da_classe zimbraMailQuota 83886080

Checar se a quota foi alterada

zmprov gc nome_da_classe zimbraMailQuota

Para ver a cuota de cada usuario, vocee pode usar o comando:

for i in $(zmprov -l gaa); do zmprov ga $i zimbraMailQuota; done

Trocar a senha de administrador

zmprov sp admin@beijer.com.br 'senhaaqui'

Logs de entrega de email na caixa (LMTP) Login e Logout Imap/Pop/Mapi, Erros
na aplicação java, operações de indexação, lentidão no banco de dados (slow
queries) e outros

tail -f /opt/zimbra/log/mailbox.log

Logs de atividade do postfix, status dos serviços, atividades do antivirus e
antispam e outros

tail -f /opt/zimbra/log/zimbra.log

Logs de autenticacao

tail -f /opt/zimbra/log/audit.log

Logs do antivirus db

tail -f /opt/zimbra/log/clamd.log

Logs de atualizaçao do Antivirus Clamav

tail -f /opt/zimbra/log/freshclam.log

Logs ao DB do store que estão demorando

tail -f /opt/zimbra/log/myslow.log

Logs de treinamento do Antispam

tail -f /opt/zimbra/log/spamtrain.log

Ativar somente o acesso http (necessita reiniciar o zimbra: zmcontrol restart)

zmtlsctl http

Ativar somente o acesso https (necessita reiniciar o zimbra: zmcontrol restart)

zmtlsctl https

Ativa o acesso http e https (necessita reiniciar o zimbra: zmcontrol restart)

zmtlsctl mixed

Esses é a primeira parte da sessão de comandos do Zimbra que posto aqui. Tem alguns outros como os comandos do Postfix, comandos do Zimbra, comandos do Mysql, Spamassassim, Amavis, Clamav e etc… Vou tentar ir acrescentado todos aqui mesmo neste post para não ficarem espalhados em posts separados.

Esta primeira leva é mais de administração do Zimbra mesmo.

Podem publicar e utilizar, só peço que se mantenham os créditos.

Inté!

Resolvendo erro PHP Fatal error!!!

23 de janeiro de 2014 Deixe um comentário
PhpLogo

phpLogo

Resolvendo erro PHP Fatal error:  Maximum execution time of 30 seconds exceeded

Quando alguma aplicação sua der erro no PHP, e o log constar “PHP Fatal error:  Maximum execution time of 30 seconds exceeded …” a solução é simples, basta aumentar a opção max_execution_time do PHP.INI, que deve estar localizada dentro do apache. Tive um problema deste tipo em uma guia gigante de internação onde o php validava alguns campos e em seguida fazia insert’s sucessivos no SQL. Como o xml era muito grande com muitos ítens, ele dava erro por TIMEOUT!

Primeiro vamos identificar onde está o arquivo php.ini. Para isso vamos criar uma página para nos gerar as configurações do php. Dentro do /var/www vamos criar um arquivo chamado infophp.php e inserir as configurações do php que nos exiba as confs dele.

echo "<?php phpinfo(); ?>" > /var/www/infophp.php

Pronto, agora você acessa esta página digitando o ip do seu servidor e a página criada (http://IP/infophp.php)

http://168.168.168.168/infophp.php

Agora você vai procurar duas informações: “max_execution_time” e “Configuration File (php.ini) Path”. A opção max_execution_time lhe dirá em segundos, quanto tempo o PHP esperará antes de dar erro por timeout (PHP Fatal error:  Maximum execution time of 30 seconds exceeded). Já a segunda opção diz onde o arquivo de configuração global do PHP está localizado.

No print abaixo, você conseguirá identificar o caminho do php.ini, que é o arquivo onde ficam todas as configurações globais do PHP. No caso do print abaixo, o caminho seria ‘/etc/php5/apache2’.

Caminho do PHP.ini

Caminho do PHP.ini – Arquivo de configuração global do PHP

No print abaixo, você consegue identificar a opção max_execution_time, que é a opção que diz ao PHP que ele deve esperar tantos segundos antes de dar timeout.

Max_E_T

max_execution_time

No caso do meu max_execution_time, o tempo já está em 60 segundos, mas o default é 30 segundos

Para aumentar seu max_execution_time e evitar que suas aplicações gerem erros por conta de timeout, basta ir no php.ini e alterar a variável. Para o caso de um php com caminho igual ao do print acima, basta executar o comando:

# sed -i "s/max_execution_time = 30/max_execution_time = 60/g" /etc/php5/apache2/php.ini

sed -i “s/max_execution_time = 30/max_execution_time = 60/g” /etc/php5/apache2/php.ini

O comando acima executado diretamento na console altera o arquivo /etc/php5/apache2/php.ini trocando o valor de “max_execution_time =30” para “max_execution_time = 60”.

Ou você pode evitar na mão o arquivo /etc/php5/apache2/php.ini e alterar a opção max_execution_time de 30 apra 60.

Após isso, basta reiniciar o apache2 e executar a sua rotina novamente ver se vai dar problema

service apache2 restart

ou

/etc/init.d/apache2 restart

Ou simplesmente

killall -1 apache2

Prontinho!




Criar várias contas de email via script bash

16 de dezembro de 2013 1 comentário
Mail

Mail

Essa aqui vai para meu amigo Marcos Melo que precisou criar várias contas de email via script shell.
Segue um script abaixo com duas opções para se criar as contas. Entretanto, para poucas contas eu uso o for, para muitas contas eu recomendo o uso do while (ou do for in file). Ou seja, você apenas usará uma das soluções abaixo.

Solução poucos users:
Crie seu arquivo users_mail.sh

vim users_mail.sh

 

Insira o conteúdo abaixo.
————————-
#!/bin/bash
for x in conta01 conta02 conta03 conta04 conta05 ;
do
useradd -m $x ;
(echo “senha@#123” ;
echo “senha@#123”) | passwd $x;
done
————————-
Obs, troque as contas para os seus usuários.
Salve seu arquivo, execute o comando abaixo para criar as contas.

sh users_mail.sh

Pronto, suas contas foram criadas com a senha sennha@#123.

 

Segunda forma de fazer.

Para muitos arquivos, eu sugiro o uso do comando while. Onde seria necessário ter um arquivo chamado contas.txt com as contas de usuários linha por linha.

Crie o arquivo users_mail.sh

vim users_mail.sh

Coloque o conteúdo abaixo:

————————————————-

while read x
do
echo “criando conta:” $x
useradd -m $x
(echo “senha@#123” ; echo “senha@#123”) | passwd $x;
done < contas.txt

————————————————-

Obs, troque as contas para os seus usuários.
Salve seu arquivo, execute o comando abaixo para criar as contas.

sh users_mail.sh

Pronto, suas contas foram criadas com a senha sennha@#123.

Tae Marcão teus scripts.

Categorias:Linux, Postfix, Shell Tags:, , , ,

Códigos de status do log do Squid!

9 de dezembro de 2013 Deixe um comentário
Squid Web Proxy

LOGO SQUID

O Squid é um software desenvolvido para plataformas like Unix (porém também roda em ambientes Microsoft) cujo intuito é definir regras de acesso à internet através de ACL’s, permitindo o acesso ou barrando e até mesmo redirecionando o tráfego. Pode fazer cache das páginas acessadas, otimizando o tráfego da rede bem como também pode usar softwares terceiros para analisar o log e gerar relatórios de acesso. Alguns analisadores do log do Squid são o MYSAR e o SARG, ambos Open Source.

Quando temos algum problema de acesso no Squid, recorremos ao log para analisar o que pode estar acontecendo e resolver o problema. Ao analisar o Log, nos deparamos com códigos que nos dizem o que realmente está acontecendo no acesso. O difícil é decorar todos estes códigos que são referenciados pela RFC2616 do IETF de 1999.

Por esta razão estou postando uma tabela com todos os códigos possíveis que o Squid pode apresentar no log.

CÓDIGO DESCRIÇÃO
000 Resposta não recebida (Possível problema no link internet)
1xx Série de respostas informativas
100 Continue
101 Troca de protocolos
2xx Série de respostas de acessos bem sucedidos
200 Ok
201 Criado
202 Aceito
203 Informação não autorizada
204 Sem conteúdo
205 Conteúdo apagado
206 Conteúdo parcial
3xx Série de Redirecionamentos
300 Múltiplas escolhas
301 Movido permanentemente
302 Encontrado
303 Veja outros
304 Não modificado
305 Use o proxy
306 Não utilizado
307 Redirecionamento temporário
4xx Série de erros no cliente
400 Má resposta
401 Não autorizado
402 Pagamento requisitado
403 Negado / Proibido
404 Não encontrado
405 Método não encontrado
406 Não aceito
407 Pedido de autenticação no proxy
408 Tempo excedido
409 Conflito
410 Feito
411 Tamanho requerido
412 Falha pré-condicional
413 Entrada de requisição extensa
414 URL requisitada muito extensa
415 Tipo de mídia não suportada
416 Range requisitada não satisfatória
417 Falha na espera
5xx Série de erros no servidor
500 Erro interno do servidor
501 Não implantado
502 Gateway incorreto
503 Serviço indisponível
504 Tempo excedido do gateway
505 Versão HTTP não suportada
6xx Série de erros do proxy
600 Resposta errada do cabeçalho

IPS da APNIC – Ásia e Pacífico!

18 de novembro de 2013 Deixe um comentário

IPS DA APNIC

Regional Internet Registries

Regional Internet Registries

Algumas pessoas como eu, tem um certo receio com relação aos IPS asiáticos, tanto por questões de DOS distribuído, quanto por segurança mesmo. Os caras tão sniffando tudo que encontram pela frente. Caso tenha dúvida, analise as entradas de seu firewall ou roteador de borda. O que mais me chama atenção é o teste de todas as portas em todos os ips… Principalmente de IPS que fazem parte de algum ASN chinês.

Grandes blocos de IPS chineses, eu libero apenas a 80 e 25 in/out no firewall, o resto eu bloqueio.

A questão é… Como saber os blocos da APNIC para que possamos avaliar e bloquear? Simples, basta pegar os últimos reports da APNIC e utilizar um pouco de regex e fazer upload via shell no router ou firewall.

Nesta url tem os últimos registros da APNIC de blocos divulgados: ftp://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-extended-latest

PS: Claro, ips chineses podem tunelar, comprar blocos africanos e propagar no seu ASN, fazer uso de um hosting… e etc..