domingo, 24 de abril de 2016

1ª Zabbix Conference LatAM - Saiba como foi

Nos dia 15 e 16 tivemos a 1ª Zabbix Conference LatAM, eu gostaria de comentar um pouco sobre o que vi e vivenciei no evento.

O primeiro ponto que gostaria de destacar é o cuidado que a organização do evento teve com os participantes, translado do aeroporto para o hotel, translado para a churrascaria (Welcome Party), translado para Gramado, ou seja, tudo foi pensado para proporcionar conforto aos participantes.

O hotel era excelente, em um bairro de classe alta em Porto Alegre e muito bem localizado, próximo do centro, com parques e shopping a quadras de distância, acesso a transporte (Taxi, Uber e Ônibus) na mesma rua.

O evento seguiu os mesmos padrões da Conferencia Oficial em Riga, Letônia, essa foi a minha impressão, do Adail, do pessoal da Globo.com, que são pessoas que tiveram a oportunidade de ir para lá. Se não atingiu o mesmo nível, eu diria que atingiu mais de 90%, mas em minha opinião estava no mesmo nível.

O evento ocorreu em um auditório retangular, o que permite que todos fiquem próximo do palco principal, as pessoas estavam confortavelmente distribuídas em duplas ou trios, com mesa e cadeira, o que é excelente para quem queria levar o note, fazer anotações, etc. Três telões, filmagem, excelente sistema de som e de ar-condicionado completavam o ambiente.

Além do café da manhã servido pelo hotel, ocorreram os coffee breaks e almoço no mesmo espaço do evento, mesas que comportavam 8 a 10 pessoas permitiam conforto e interação entre os participantes.

A primeira festa foi em uma churrascaria tipicamente gaúcha, com shows tradicionais.

A segunda foi em um Pub em uma badalada rua do bairro, vale a pena destacar a quantidade de comida (inclusa na inscrição), simplesmente não paravam de abastecer a mesa.
 
E a última foi um café colonial em Gramado, pelo que vi das fotos, foi um exagero.

As palestras foram sensacionais, tivemos palestras técnicas, palestras voltadas à gestão e palestras para iniciantes, aliás, isso refletiu bem o público do evento, me surpreendi com a diversidade de participantes, tivemos vários participantes que estão começando com a ferramenta e estavam presentes no evento, o que tornou o evento ainda mais interessante.

Todos os mais de 100 participantes presentes, tiveram oportunidade de interagir entre sí, a própria maneira como o evento é realizado incentiva esse tipo de interação e, esse é um dos principais motivos da limitação do número de inscrições.

O Alexei é uma atração a parte, acho que todos que tiveram a oportunidade de conhecê-lo pessoalmente pela primeira vez sentiram aquele friozinho na barriga, aquela sensação de "CARA É O ALEXEI" *risos*, mas ele é um cara simpático, super simples, eu visitei a Zabbix SIA, interagi um pouco com ele em 2013 (Na conferencia e no Latinoware) e agora novamente no evento, ele anda a pé, come o que você oferecer, ama guaraná, conversa, tira foto, aperta a mão e recebe abraços sem frescura, e o evento reflete isso.

Temos muito que agradecer o Luciano Alves, CIO da Unirede, pelo empenho, foram mais de 4 anos tentando convencer o Alexei de que era viável realizar uma conferencia na América Latina, e claro, a primeira seria no Brasil.

Demorou mas aconteceu e o Alexei foi embora de queixo caido, nós realmente causamos um excelente impressão, uma das últimas perguntas do evento foi se teríamos uma próxima e a resposta foi "Sure". E depois quando chegou a Riga fez um post no Facebook dizendo que era tempo de iniciar uma nova tradição, a conferencial LatAm.

O último ponto que gostaria de destacar são os frutos do evento, a questão do módulo da Unirede para monitoramento de Xen sempre foi algo complicado de se entender, o módulo estava disponível, mas o código fonte não, eles não falavam mais nada sobre isso, e na conferencia o Luciano Alves e o Thiago Melo esclareceram o por que: O módulo foi criado por administradores de rede e não por desenvolvedores, apenas como uma prova de conceito, eles queriam que as pessoas conhecessem mais sobre o uso de módulos e criaram esse módulo para isso, mas eles não tem braço para tocar o desenvolvimento e realizar as alterações necessárias a cada nova versão do Zabbix e/ou Xen, e acharam que as pessoas não tinham na realidade interesse no módulo, a conferencia demonstrou o contrário que as pessoas tinham sim interesse e estavam dispostas a tocar o projeto se o código fosse disponibilizado, então no segundo dia, o módulo foi disponibilizado no Github e hoje todos podem contribuir com seu desenvolvimento, o mesmo ocorreu com os scripts do pessoal da Globo.com, com o projeto Zabbix Security Insights do Alessandro Silva, só para citar os principais, o pessoal realmente teve um gás novo na conferencia, no sentido de usar mais o Share, compartilhar suas soluções e ajudar o produto e a comunidade a se tornarem ainda mais conhecidos.

Espero que quem não conseguiu ir esse ano, não importa o motivo, tenha a oportunidade de ir no próximo ano e vivenciar o que é participar de uma conferencia Zabbix.

Abraços a todos,
André Déo

segunda-feira, 21 de março de 2016

Coletando Estatísticas de E-mail do Postfix com Shell Script, Pflogsumm e Zabbix

Introdução

 Em muitas situações precisamos coletar indicadores, entre eles quantitativos de e-mails, nesse post demonstro como coletar esses dados de um servidor Postfix, tratá-los e enviá-los ao Zabbix.
Para melhor entendimento das filas e até alternativas de coleta, recomendo a leitura desse post do grande Guto Carvalho.

O responsável por gerar as estatísticas é o script em Perl pflogsumm.

Dependências

A única dependência do pflogsumm é o módulo Perl Date-Calc.
# yum install perl-Date-Calc

Download

Realizar o download do script
# wget http://jimsun.linxnet.com/downloads/pflogsumm-1.1.3.tar.gz

Descompactar o script
# tar -xzvf pflogsumm-1.1.3.tar.gz

Copiar o script para o diretório de binários
# cp pflogsumm-1.1.3/pflogsumm.pl /usr/local/bin/

Gerar 1ª remessa

Vamos gerar um primeiro arquivo contendo as estatísticas com base nos arquivos de log.
# pflogsumm.pl /var/log/maillog* > emails.txt

Separar o bloco de dados que me interessa

A linha 59 contém as informações da última data que me interessa (Mar  8 2016) e descontando 32 linhas eu chego na linha com a primeira data que me interessa (Feb  7 2016). Você deve adaptar os valores para a sua necessidade.
# head -59 emails.txt | tail -32
    Feb  7 2016        19         33         81          0          2
    Feb  8 2016        19         26
    Feb  9 2016        31         49
    Feb 10 2016        58         83          1
    Feb 11 2016       353       9975       1284        121
    Feb 12 2016      1321      21503      24157       5264
    Feb 13 2016        22        124       8878          0          1
    Feb 14 2016        18        129       6135
    Feb 15 2016       153       3839        216         49
    Feb 16 2016       279       7208       1048         75          1
    Feb 17 2016       101       2536        272         33          1
    Feb 18 2016       450      12107       1535        143
    Feb 19 2016       950      13594       5547       5176
    Feb 20 2016        17         36       5855          1          3
    Feb 21 2016        25         89       3445          1
    Feb 22 2016       215       5385        443        127
    Feb 23 2016        99       2176         83         23
    Feb 24 2016       562       8202       3850       2337
    Feb 25 2016       220       8551       3512        102
    Feb 26 2016       975      15136       6450       5462
    Feb 27 2016        23         39       5766          0          8
    Feb 28 2016        22         99       4082          0          2
    Feb 29 2016       462      12157        482        157
    Mar  1 2016       539       9674       1131        193
    Mar  2 2016       143       4899        975         57
    Mar  3 2016        20         98        422          0         11
    Mar  4 2016       978      16457       6621       5071          1
    Mar  5 2016        21         40       5977         14
    Mar  6 2016        22         88       4331          0          1
    Mar  7 2016       384      11030        446        196         10
    Mar  8 2016       266       8579        431        102

Converter as datas para o formato Unix Timestamp

O Zabbix possui um utilitário (zabbix_sender) que permite o envio em lote de informações, mas para isso as datas precisam estar no formato Unix Timestamp ou Epoch.

Para isso eu usei o site Epoch Unix Time Stamp Converter para converter as datas. Sim eu sei que poderia usar o comando date +%s, mas eram poucos dados e eu fiz por lá ;-). Abaixo o txt que eu montei com correlação de datas (datas2.txt) separando a data normal da convertida por um <tab>.
Feb 7 2016    1454832000
Feb 8 2016    1454918400
Feb 9 2016    1455004800
Feb 10 2016    1455091200
Feb 11 2016    1455177600
Feb 12 2016    1455264000
Feb 13 2016    1455350400
Feb 14 2016    1455436800
Feb 15 2016    1455523200
Feb 16 2016    1455609600
Feb 17 2016    1455696000
Feb 18 2016    1455782400
Feb 19 2016    1455868800
Feb 20 2016    1455955200
Feb 21 2016    1456041600
Feb 22 2016    1456128000
Feb 23 2016    1456214400
Feb 24 2016    1456300800
Feb 25 2016    1456300800
Feb 26 2016    1456473600
Feb 27 2016    1456560000
Feb 28 2016    1456646400
Feb 29 2016    1456732800
Mar 1 2016    1456819200
Mar 2 2016    1456905600
Mar 3 2016    1456992000
Mar 4 2016    1457078400
Mar 5 2016    1457164800
Mar 6 2016    1457251200
Mar 7 2016    1457337600
Mar 8 2016    1457424000

Gerar os arquivos com datas e valores

Em seguida vou separar apenas a data no formato Unix Timestamp
# cat datas2.txt | tr '\t' ' ' | tr -s ' ' | cut -d ' ' -f4 > datas.txt

E agora vou gerar um arquivo para cada dado que vou coletar (received, delivered, deferred, bounced, rejected e total). A linha 58 contém a última informação que nos interessa e a linha 32 a primeira informação.
# head -58 emails.txt | tail -32 | tr -s ' ' | cut -d ' ' -f5 > received.txt
# head -58 emails.txt | tail -32 | tr -s ' ' | cut -d ' ' -f6 > delivered.txt
# head -58 emails.txt | tail -32 | tr -s ' ' | cut -d ' ' -f7 > deferred.txt
# head -58 emails.txt | tail -32 | tr -s ' ' | cut -d ' ' -f8 > bounced.txt
# head -58 emails.txt | tail -32 | tr -s ' ' | cut -d ' ' -f9 > rejected.txt


O total é um pouco mais complicado, pois temos linhas vazias, então vamos primeiro gerar o arquivo:
# paste received.txt delivered.txt deferred.txt bounced.txt rejected.txt | tr '\t' '+' | grep '+$' > total.txt

Mas como podemos observar, teremos problemas se enviarmos esses valores para a calculadora (bc)
# cat total.txt
++++
19+26+++
31+49+++
58+83+1++
353+9975+1284+121+
1321+21503+24157+5264+
18+129+6135++
153+3839+216+49+
450+12107+1535+143+
950+13594+5547+5176+
25+89+3445+1+
215+5385+443+127+
99+2176+83+23+
562+8202+3850+2337+
220+8551+3512+102+
975+15136+6450+5462+
462+12157+482+157+
539+9674+1131+193+
143+4899+975+57+
21+40+5977+14+
266+8579+431+102+


Para resolver o problema precisamos eliminar todos os sinais de “+” que estejam no final da linha, como pode ser observado, por exemplo, nas 5 primeiras linhas.
# sed -i 's/[+]*$//' total.txt

Agora o arquivo está pronto para ser enviado para a calculadora e, nos retornar o total.
# cat total.txt
19+26
31+49
58+83+1
353+9975+1284+121
1321+21503+24157+5264
18+129+6135
153+3839+216+49
450+12107+1535+143
950+13594+5547+5176
25+89+3445+1
215+5385+443+127
99+2176+83+23
562+8202+3850+2337
220+8551+3512+102
975+15136+6450+5462
462+12157+482+157
539+9674+1131+193
143+4899+975+57
21+40+5977+14
266+8579+431+102

A quantidade de linhas do arquivo, será necessário para o próximo passo, mas como usamos o comando tail -32, já sabemos que o arquivo tem 32 linhas ;-)

Automatizar a geração do arquivo que será usado para alimentar o Zabbix

Nada melhor que um Shell Script para automatizar as tarefas repetitivas do dia-a-dia. Troque o nome "Server" pelo nome do Host cadastrado no Zabbix
# vi gera_zabbix.sh

#!/bin/bash

# RECEIVED
for ((i=1; i<=32; i++))
do
        data=`head -$i datas.txt | tail -1`
        valor=`head -$i received.txt | tail -1`
        echo "Server mails.received $data $valor" >> valores_zabbix.txt
done

# DELIVERED
for ((i=1; i<=32; i++))
do
        data=`head -$i datas.txt | tail -1`
        valor=`head -$i delivered.txt | tail -1`
        echo "Server mails.delivered $data $valor" >> valores_zabbix.txt
done

# DEFERRED
for ((i=1; i<=32; i++))
do
        data=`head -$i datas.txt | tail -1`
        valor=`head -$i deferred.txt | tail -1`
        echo "Server mails.deferred $data $valor" >> valores_zabbix.txt
done

# BOUNCED
for ((i=1; i<=32; i++))
do
        data=`head -$i datas.txt | tail -1`
        valor=`head -$i bounced.txt | tail -1`
        echo "Server mails.bounced $data $valor" >> valores_zabbix.txt
done

# REJECTED
for ((i=1; i<=32; i++))
do
        data=`head -$i datas.txt | tail -1`
        valor=`head -$i rejected.txt | tail -1`
        echo "Server mails.rejected $data $valor" >> valores_zabbix.txt
done

# TOTAL
for ((i=1; i<=32; i++))
do
        data=`head -$i datas.txt | tail -1`
        valor=`head -$i total.txt | tail -1 | bc`
        echo "Server mails.total $data $valor" >> valores_zabbix.txt
done


Gerar o arquivo que vai alimentar o Zabbix
# sh gera_zabbix.sh

Como alguns valores estavam em branco, o arquivo ficou com algumas falhas, como essa
# cat valores_zabbix.txt
Server mails.received 1454832000
Server mails.received 1454918400 19


Vamos substituir esses espaços em banco, como na primeira linha, por 0 para que o Zabbix possa receber um valor para cada um os campos
# sed -i 's/00 $/00 0/g' valores_zabbix.txt

E agora o arquivo está correto
# cat valores_zabbix.txt
Server mails.received 1454832000 0
Server mails.received 1454918400 19

Criar os itens no Zabbix

Para que o Zabbix possa receber os dados, é preciso que sejam criados itens com as mesmas chaves que constam no arquivo. E o tipo do item deve ser Zabbix trapper.
Item E-mails Atrasados

Template Estatistica E-mail Postfix

Se você não quiser perder tempo criando os itens, eu disponibilizei o template aqui. Esse template contem os 6 itens que vamos precisar e um gráfico com todos os itens.

Populando o Zabbix com os dados

# zabbix_sender -z Proxy -T -i valores_zabbix.txt
info from server: "processed: 192; failed: 0; total: 192; seconds spent: 0.001544"
sent: 192; skipped: 0; total: 192

Coletando os valores diários

O pflogsumm.pl possui o parametro "-d yesterday" que gera as informações do dia anterior, então minha estratégia será a de todos os dias às 08:00 popular o Zabbix com os dados consolidados do dia anterior.

Esse parametro permite utilizar os totais do dia ou os valores de hora em hora, eu vou utilizar os valores totais, mas nada te impede de adaptar o script para coletar os valores por hora.

# /usr/local/bin/pflogsumm.pl -d yesterday /var/log/maillog* | more
Postfix log summaries for Mar  9

Grand Totals
------------
messages

     79   received
   1648   delivered
      0   forwarded
     11   deferred  (188  deferrals)
     34   bounced
     10   rejected (0%)
      0   reject warnings
      0   held
      0   discarded (0%)

   2790k  bytes received
  29781k  bytes delivered
     18   senders
      5   sending hosts/domains
   1514   recipients
     73   recipient hosts/domains


Per-Hour Traffic Summary
------------------------
    time          received  delivered   deferred    bounced     rejected
    --------------------------------------------------------------------
    0000-0100           0          0         16          0          0
    0100-0200           0          0         16          0          0
    0200-0300           0          0         12          0          0
    0300-0400           0          0         14          0          0

Automatizando o envio diário de informações

Primeiro vamos criar um diretório para armazenar nossos scripts
# mkdir /Scripts_Servicos

Vamos criar o script que coleta as estatísticas e  envia automaticamente para o Zabbix
# vi /Scripts_Servicos/estatisticas_email.sh

#!/bin/bash
 
# Todos dos dias gera um novo arquivo
/usr/local/bin/pflogsumm.pl -d yesterday /var/log/maillog* > /Scripts_Servicos/yesterday

# Separa as informacoes que nos interessam
received=`head -12 /Scripts_Servicos/yesterday | grep received | tr -s " " | cut -d " " -f2`
delivered=`head -12 /Scripts_Servicos/yesterday | grep delivered | tr -s " " | cut -d " " -f2`
deferred=`head -12 /Scripts_Servicos/yesterday | grep deferred | tr -s " " | cut -d " " -f2`
bounced=`head -12 /Scripts_Servicos/yesterday | grep bounced | tr -s " " | cut -d " " -f2`
rejected=`head -12 /Scripts_Servicos/yesterday | grep rejected | tr -s " " | cut -d " " -f2`
total=`echo $received+$delivered+$deferred+$bounced+$rejected | bc`
data=`date --date yesterday +%s`

# Apaga o arquivo do dia anterior
rm -rf /Scripts_Servicos/valores_zabbix

# Monta o arquivo
echo "Server mails.received $data $received" >> /Scripts_Servicos/valores_zabbix
echo "Server mails.delivered $data $delivered" >> /Scripts_Servicos/valores_zabbix
echo "Server mails.deferred $data $deferred" >> /Scripts_Servicos/valores_zabbix
echo "Server mails.bounced $data $bounced" >> /Scripts_Servicos/valores_zabbix
echo "Server mails.rejected $data $rejected" >> /Scripts_Servicos/valores_zabbix
echo "Server mails.total $data $total" >> /Scripts_Servicos/valores_zabbix

# Envia os dados para o Zabbix
zabbix_sender -z Proxy -T -i /Scripts_Servicos/valores_zabbix


Tornar o script executável
# chmod +x /Scripts_Servicos/estatisticas_email.sh

Agendar a execução do Script
# crontab -e

# Todos os dias as 08:00 envia os dados estatisticos de e-mail para o Zabbix
00      08      *       *       *       /Scripts_Servicos/estatisticas_email.sh

Referências

Guto Carvalho
Epoch Unix Time Stamp Converter
Pflogsumm
Zabbix Sender

sexta-feira, 2 de outubro de 2015

Gerenciando Senhas com o TeamPass

Introdução

O TeamPasss é um gerenciador corporativo e colaborativo de senhas e informações sensíveis. Ele foi especialmente desenvolvido para gerenciar, armazenar, prover senhas e oferecer meios de acesso a informação sensível de forma controlada, centralizada e dinâmica.
Eu descobri esse cara garimpando no blog do meu amigo Guto Carvalho, leiam o post dele antes de prosseguir ;-)

Ponto de partida

Eu parto do princípio que você já possui um Servidor CentOS 7 Básico.

Pré-Requisitos

Antes de começarmos a instalação precisamos suprir alguns pré-requisitos, depois será Next, Next, Finish.

Banco de Dados

A primeira coisa que precisamos fazer é criar a base de dados, que posteriormente será populada durante a instalação. Essa base pode ser local ou remota, a decisão é sua.

No exemplo abaixo vamos criar uma base de dados chamada teampass_db e um usuario chamado teampass com senha TeAmPaSs.
mysql> CREATE DATABASE teampass_db CHARACTER SET utf8 COLLATE utf8_general_ci;

mysql> GRANT ALL PRIVILEGES ON teampass_db.* TO teampass@localhost IDENTIFIED BY '
TeAmPaSs';

mysql> flush privileges;

Dependências de pacotes

Essa versão precisa do PHP 5.5, apesar de exibir que o pré-requisito é o PHP 5.3 ou superior, eu não consegui fazer funcionar com o PHP 5.4. 
# yum -y install php55-php php55-php-mcrypt php55-php-ldap php55-php-common unzip php55-php-mbstring php55-php-bcmath php55-php-xml

Ajustes no PHP

# cd /etc
# ln -s /opt/remi/php55/root/etc/php.ini php.ini 

# vi /etc/php.ini
date.timezone = America/Sao_Paulo
max_execution_time = 60


# systemctl restart httpd

Dado tipo Sal

É preciso criar um diretório que é dependência da instalação, esse diretório irá armazenar um dado do tipo Sal (Salt) que será utilizado juntamente com a senha.
# cd /var/www/
# mkdir saltkey
# chown -R apache:apache saltkey

Download dos arquivos

Precisamos realizar o download dos arquivos e copiar os arquivos php para o diretório web.
# mkdir /install
# cd /install
# wget https://github.com/nilsteampassnet/TeamPass/archive/master.zip
# unzip master
# cd /var/www/html/
# mv /install/TeamPass-master/ teampass
# chown -R apache:apache teampass

Instalaçao

basta acessar o endereço do seu servidor:
http://ip_servidor/teampass/install/install.php


Na tela inicial clique em NEXT
Clique em LAUNCH, para que a instalação cheque os pré-requisitos
Os pré-requisitos estando OK, o botão NEXT é liberado, pode pressioná-lo
Preencha as informações de conexão com a base de dados e pressione o botão LAUNCH para que a conexão seja testada
Após a conexão ser estabelecida com sucesso o botão NEXT é liberado, basta pressioná-lo
Nessa tela temos que observar vários detalhes:
  • Gerar o arquivo salt e informar o caminho onde o mesmo será armazenado;
  • Configurar a seção de SMTP (Opcional);
  • Inserir a senha do Administrador;
Por último clique no no botão LAUNCH para que os dados sejam checados.
 Após a validação das informações clique no botão NEXT
A base de dados é populada, clique em NEXT
Ajustes finais são realizados, clique em NEXT
A própria instalação já remove o diretório de instalação, clique em NEXT
Apenas um resumo informando que a instalação está concluída e que o usuário de login é admin, clique em Start
Faça o login com o usuário admin e a senha que foi cadastrada e, observe que o modo de manutenção está habilitado.

Configurações

Configurações Iniciais

Clique em Settings para alterarmos as configurações iniciais
Na aba TeamPass Settings vamos remover o modo de manutenção, alterar as opções de timezone e o idioma. Após realizar as alterações clique em Save

Integração com Active Directory

Esse passo é opcional,  mas se você tem um AD na rede, é uma boa pedida configurar a autenticação por ele, ao invés de ter que decorar mais uma senha. Apenas a autenticação será feita pelo AD, você precisa criar o usuário no TeamPass de qualquer forma, afinal de contas não queremos qualquer usuário do AD autenticando no TeamPass. Além do AD ele suporta também Posix / OpenLDAP (RFC2307).

Clique na aba Opções LDAP, marque a opção Sim em "Ativa autenticação LDAP para os usuários", selecione o "LDAP server type" como Windows / Active Directory e clique em Salvar
Clique novamente na aba Opções LDAP e preencha as opções da seção Configuração LDAP e clique em Salvar

Liberar acesso à aplicação apenas de determinados endereços IPs

Se você quiser incrementar a segurança um pouco mais, e aconselho a fazer, você pode liberar o acesso para o site apenas para as máquinas do setor de informática. Para isso edite o arquivo de configuração do apache:
# vi /etc/httpd/conf/httpd.conf
<Directory "/var/www/html/teampass">
   Order deny,allow
   Deny from all
   Allow from 192.168.100.15/255.255.255.0
   Allow from 192.168.100.16/255.255.255.0
   Allow from 192.168.100.17/255.255.255.0
</Directory>


Após isso reinicie o apache
# systemctl restart httpd

Gerenciamento de Usuários

O TeamPass possui 3 tipos de usuários:
  • Admin (Administrador): Esse tipo de usuário consegue criar e gerenciar outros usuários, criar e gerenciar regras, associar usuários a regras e, administar configurações internas do TeamPass, porém ele não consegue ver as pastas, consequentemente ele não conseguirá criar e gerenciar senhas em tais pastas.
  • Manager (Gerenciador): Esse tipo de usuário conseguirá administrar uma ou mais regras - e suas pastas - e os usuários associados a esta regra, ele também conseguirá criar e gerenciar senhas dentro das pastas pertencentes as regras que ele estiver associado. O manager até consegue criar pastas em suas regras, mas será preciso o Admin para liberar o uso da pasta naquela regra. Ele também consegue criar usuários de nível inferior ao dele.
  • Read Only (Somente Leitura): Este tipo de usuário só consegue utilizar as pastas associadas à regra que ele faz parte, ele não cria pastas, e nem pode criar, modificar e apagar senhas dentro das pastas que tem acesso.

Referencias

Infraestrutura Ágil
Teampass and authentication Ldap/Active directory

quinta-feira, 1 de outubro de 2015

phpMyAdmin Acessando Multiplos Servidores Remotos

Introdução

A maioria das pessoa utiliza o phpMyAdmin para acessar bases de dados que estão no mesmo servidor (localhost), mas é possível configurá-lo para acessar mais de um servidor ao mesmo tempo e também para acessar servidores remotos, ou seja, se você possui na sua estrutura vários servidores MySQL você pode utilizar um único phpMyAdmin, centralizando assim seu acesso.

Ponto de partida

Eu parto do princípio que você já possui um Servidor CentOS 7 Básico.

Instalação

A instalação será feita através do yum:

# yum install -y phpMyAdmin

Depois de instalado vamos criar um link na raíz do nosso diretório web, nesse caso eu chamei de mysql:
# cd /var/www/html/
# ln -s /usr/share/phpMyAdmin mysql
# ls -l
total 0
lrwxrwxrwx 1 root root 21 Set 18 17:29 mysql -> /usr/share/phpMyAdmin

Acessar a interface do phpMyAdmin

Acesse o endereço http://ip_servidor/mysql

Configurar o acesso para vários servidores

Edite o arquivo config.inc.php
# vi /etc/phpMyAdmin/config.inc.php
Logo no início do arquivo temos a seção Servers Configuration, com as informações referentes ao localhost
/*
 * Servers configuration
 */
$i = 0;

/*
 * First server
 */
$i++;
/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'cookie';
/* Server parameters */
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['AllowNoPassword'] = false;


Podemos acrescentar logo abaixo o bloco de comandos para os demais servidores:
/*
* Server Remoto 1
*/
//$i++;
/* Authentication type */
$cfg['Servers'][$i]['verbose'] = 'Server Remoto 1';
$cfg['Servers'][$i]['auth_type'] = 'cookie';
/* Server parameters */
$cfg['Servers'][$i]['host'] = '192.168.100. 1';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['AllowNoPassword'] = false;

/*
* Server Remoto 2
*/
$i++;
/* Authentication type */
$cfg['Servers'][$i]['verbose'] = 'Server Remoto 2';
$cfg['Servers'][$i]['auth_type'] = 'cookie';
/* Server parameters */
$cfg['Servers'][$i]['host'] = '192.168.100.2';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['AllowNoPassword'] = false;

Remover o acesso ao localhost

E por último podemos remover a opção de acesso ao localhost, deixando assim o phpMyAdmin em um servidor exclusivo para páginas Web, e os bancos de dados em servidores exclusivos para essa função. Basta comentar as linhas.
/*
 * First server
 */
//$i++;
/* Authentication type */
//$cfg['Servers'][$i]['auth_type'] = 'cookie';
/* Server parameters */
//$cfg['Servers'][$i]['host'] = 'localhost';
//$cfg['Servers'][$i]['connect_type'] = 'tcp';
//$cfg['Servers'][$i]['compress'] = false;
//$cfg['Servers'][$i]['AllowNoPassword'] = false;

Referências

Configurando o phpMyAdmin para acessar o MySQL remotamente

sexta-feira, 31 de julho de 2015

Script de Backup das Configurações de Ativos de Rede para Servidor TFTP

Introdução

É possível realizar o exporte das configurações de ativos de redes (como switches, roteadores, controladoras de rede sem fio, etc) para um Servidor TFTP, como o arquivo gerado é irrelevante em termos de tamanho, criei um script que se conecta via telnet em cada um dos ativos, realiza o exporte para um Servidor TFTP e renomeia o arquivo para o dia da semana. Com isso temos uma cópia das configurações dos últimos sete dias de cada ativo. Como medida adicional de segurança o servidor de backup coleta esses dados, para preserva-los mesmo que algo aconteça com o Servidor TFTP, como um crash de disco, por exemplo.

Estrutura

  • /Scripts: Diretório que abriga o script;
  • /Backup/Logs: Diretório que abriga o log do processo, Log_Switches-DIA_DA_SEMANA.log, se esse arquivo não for vazio, ou seja, acontecer algum erro, esse log será enviado por e-mail;
  •  /Backup/Switches: Diretório que abriga o export das configurações, existe um diretório para cada switch (switch1, switch2, etc), e dentro de cada diretório o arquivo de configuração, SwitchX-DIA_DA_SEMANA.cfg.

Ponto de partida

Eu parto do princípio que você já possui um Servidor TFTP em execução.

Pré-Requisitos

O único pré-requisito é o servidor ter um cliente de telnet.
# yum install telnet

Criar a estrutura de diretórios

# mkdir -p /Backup/{Logs,Switches}

Nesse exemplo estou partindo do princípio que você possui 10 Switches, altere de acordo com sua necessidade.
# for ((i=1; i<=10; i++))
do
mkdir /Backup/Switches/switch$i
done

Verificando a sintaxe do ativo

Antes de partirmos para o script em si, é preciso alguns passos:
  • Verificar se seu ativo possui suporte a telnet e, se está habilitado;
  • Ler o manual para encontrar qual é a sintaxe de comando de backup das configurações e como exportá-las para um servidor TFTP;
  • Rodar o comando de forma manual e ter certeza de que tudo funcionou como deveria;
  • Verificar quanto tempo demora o upload da configuração para o Servidor TFTP.

Sintaxe de alguns equipamentos

Switch 3COM 4200G
tftp IP_TFTP put 3com4200g.cfg Switch.cfg

Switch 3COM 4800G
tftp IP_TFTP put 3comoscfg.cfg Switch.cfg

Switch D-Link DGS-3100 / DES-3226S
upload configuration IP_TFTP Switch.cfg

Switch D-Link DGS-3120
upload cfg_toTFTP IP_TFTP dest_file Switch.cfg

Switch D-Link DGS-3526
upload cfg_toTFTP IP_TFTP Switch.cfg

Automatizando o processo

A primeira dificuldade que encontramos é que ao realizar uma conexão telnet, estamos em outro equipamento, e por isso não podemos usar o Here Document como faríamos com um banco de dados, por exemplo, mas esse problema foi solucionado pelo Mago do Shell Script Julio César Neves:

#(echo 'admin'; sleep 2; echo 'senha_ativo'; sleep 2; echo 'comando_ativo'; sleep 2; echo 'quit') | telnet IP_ATIVO

Por exemplo para o Switch 3COM 4800G:
# (echo 'admin'; sleep 2; echo 'S3NhAd0sW1TcH3'; sleep 2; echo 'pwd'; sleep 2; echo 'quit') | telnet 192.168.100.2

O Script

O Script pode ser baixado aqui e está todo comentado para melhor compreensão.

Referências

Lista Shell Script Yahoo

sexta-feira, 24 de julho de 2015

Instalação de Servidor TFTP em Ambiente CentOS

Introdução

Um servidor TFTP é útil em pelo menos duas situações:
  • Manipulação de arquivos em ativos de rede, como por exemplo, atualização de firmware, backup e restore de configuração;
  • Manter um backup de seus ativos de rede centralizados em um único diretório, que posteriormente vai para a unidade de fita, claro.
A primeira situação é bem comum, mas poucos se preocupam com a segunda situação, então fique com ela na mente, pense sobre isso enquanto toma banho (já resolvi tantos problemas pensando durante o banho),  eu voltarei nesse ponto em outro post.

Ponto de partida

Eu parto do princípio que você já possui um Servidor CentOS 7 Básico.

Instalação dos pacotes

# yum  -y install  tftp-server xinetd

Ativar o serviço

# systemctl enable tftp.socket

Configuração das permissões

# chown -R nobody:nobody /var/lib/tftpboot/
# chmod 777 /var/lib/tftpboot/

Personalização do arquivo de configuração

# vi /etc/xinetd.d/tftp

service tftp
{
        disable
                 = no 
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s -c /var/lib/tftpboot 

        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}


Observação: Sem o parâmetro -c você não será capaz de criar novos arquivos, apenas de atualizar os já existentes.

Iniciar o serviço

# systemctl start xinetd
# netstat -ntulp | grep 69
udp        0      0 0.0.0.0:69                  0.0.0.0:*                               1329/xinetd

Testar a comunicação com o serviço

Cliente TFTP para Linux

De preferência teste o envio a partir de outro servidor para ter certeza que tudo está funcionando.
# yum install -y tftp

# cd /etc/
# tftp -v 192.168.0.181 -c put passwd
Connected to 192.168.0.181 (192.168.0.181), port 69
putting passwd to IP:passwd [netascii]
Sent 28437 bytes in 0.2 seconds [1228778 bit/s]


Observação: 192.168.0.181 é o IP do meu servidor de TFTP, não esqueça de alterar o endereço.

De volta ao servidor de TFTP:
# ls -l /var/lib/tftpboot/
total 28
-rw-rw-rw- 1 nobody nobody 28111 Jul 23 16:41 passwd


De volta ao servidor Cliente:
# cd ~
# tftp -v IP -c get passwd
Connected to 192.168.0.181 (192.168.0.181), port 69
getting from 192.168.0.181:passwd to passwd [netascii]
Received 28437 bytes in 0.0 seconds [82130090 bit/s]

# ls -l passwd
-rw-r--r-- 1 root root 28111 Jul 23 16:50 passwd


Observe que o arquivo tem exatamente o mesmo tamanho.

Cliente TFTP para Windows

Podemos baixar um cliente linha de comando para Windows em TFTP Client for Windows

Download de um arquivo do TFTP Server
C:\>tftp.exe -i IP GET nome_arquivo_remoto nome_arquivo_local

Upload de um arquivo para o TFTP Server:
C:\>tftp.exe -i IP PUT nome_arquivo_local nome_arquivo_remoto

Download do arquivo passwd
C:\>tftp.exe -i 192.168.0.181 GET passwd passwd.txt
WinAgents TFTP Client version 2.0b Copyright (c) 2004-2011 by Tandem Systems, Ltd.
http://www.winagents.com - Software for network administrators

Transfering file passwd from server in octet mode...
Transferring data from 192.168.0.181...
Using blocksize = 512
Using TFTP timeout = 10s
Transfer size = 28111 bytes
File passwd was transferred successfully.
28111 bytes transfered for 1 seconds, 0 bytes/second

Referências

www.question-defense.com
Knowledge Addict
Fórum CentOS.org
Tournas Dimitrios
TFTP Server for Windows

quarta-feira, 22 de julho de 2015

Servidor CentOS 7 Básico

Introdução

Com o advento do Systemd e a mudança de MySQL para MariaDB, algumas pessoas se assustam ao migrar de CentOS 6.X para 7.X, o objetivo desse post é prover uma instalação básica, mostrar alguns comandos para que você se sinta mais confortável e sugerir algumas boas práticas.

Antes de continuarmos

Eu sou da época em que a ajuda e incentivo que a gente recebia era RTFM, fui criado no Slackware, então apesar de gostar de ensinar, algumas coisas permanecem, pois fazem parte da minha formação. Só para citar as principais:
Servidor não tem interface gráfica, a menos que seja uma necessidade da aplicação;
Instalações são feitas sempre partindo-se do Minimal;
Só instale o que for necessário;
Servidor é 64 bits;
Cada aplicação precisa pacotes e ajustes específicos, esse post trata do que você deve fazer em todos os seus servidores.

Ajustes Pós Instalação

Partindo do princípio que você fez uma instalação Minimal do CentOS 7, logou pela primeira vez como root, vamos fazer alguns ajustes.

Parar a execução do firewall:

# systemctl stop firewalld

Desabilitá-lo permanentemente:

# systemctl disable firewalld
rm '/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service'
rm '/etc/systemd/system/basic.target.wants/firewalld.service'

Conferir se o mesmo está desabilitado:

# systemctl is-enabled firewalld
disabled


DICA: Você pode ver o status de todos os serviços com o comando abaixo:
# systemctl list-unit-files

Checar o estado do SELinux:

# getenforce
Enforcing

Torna-lo permissivo:

# setenforce 0

Checar o estado do SELinux:

# getenforce
Permissive


DICA: Para desabilitar definitivamente o SELinux edite o arquivo /etc/selinux/config e altere a opção "SELINUX=enforcing" para "SELINUX=disabled". Isso pode ser feito por meio do comando:
# sed -i 's/enforcing/disabled/g' /etc/selinux/config

Observação: Estou desabilitando o Firewall e o SELinux porque cada servidor tem uma finalidade específica e, exige ajustes específicos para essa finalidade, então por padrão desabilito os dois, e se houver necessidade, reabilito e faço os ajustes específicos.

O EPEL - Extra Packages for Enterprise Linux é um repositório oficial com pacotes extras e as últimas versões dos pacotes. Podemos instalá-lo através do comando abaixo:
# rpm -Uvh http://download.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm

O REMI é um repositório com pacotes adicionais aos do EPEL e/ou versões mais atualizadas do mesmo, dependendo do caso. Ele não funciona se o EPEL não estiver instalado, é um pré-requisito. Para instalar o remi, use o comando abaixo:
# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

Além disso ele vem desabilitado, é preciso habilitá-lo:
# vi /etc/yum.repos.d/remi.repo
[remi]
name=Les RPM de remi pour Enterprise Linux 7 - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/7/remi/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/7/remi/mirror
#enabled=0
enabled=1

gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi


Feito isso atualize seu sistema:
# yum update -y

Este último comando vai atualizar todos os pacotes do seu sistema para as versões disponíveis no EPEL e REMI.

Dependencias Básicas

Esses são pacotes que precisamos para o dia-a-dia, independente da aplicação desse servidor. Lembre-se um Servidor Web tem necessidades diferentes de um Servidor de FTP.
# yum -y install rsync  bind-utils mlocate mailx wget net-tools make cmake automake man net-tools

Clamav

Todo servidor tem que ter antivírus? Mas não é Linux? Eu disse que ia lhe sugerir algumas boas práticas, mas são apenas sugestões, este é o meu setup de Servidor CentOS 7.
# yum -y install clamav-server clamav-data clamav-update clamav-filesystem clamav clamav-scanner-systemd clamav-devel clamav-lib clamav-server-systemd

Precisamos comentar as linhas de exemplo:
# sed -i -e "s/^Example/#Example/" /etc/freshclam.conf
# sed -i -e "s/^Example/#Example/" /etc/clamd.d/scan.conf


E atualizar o clamav:
# freshclam

Precisamos comentar a linha abaixo:
# sed -i -e "s/^FRESHCLAM_DELAY/#FRESHCLAM_DELAY/" /etc/sysconfig/freshclam

Editar o arquivo scan.conf:
# vi /etc/clamd.d/scan.conf

E descomentar a linha:
#LocalSocket /var/run/clamd.scan/clamd.sock

Habilitar o Clamav, Inicia-lo e Checar se o processo está ativo:
# systemctl  enable clamd@scan
# systemctl  start clamd@scan
# systemctl  status clamd@scan


Testar a verificação de um arquivo:
# clamdscan -c /etc/clamd.d/scan.conf /etc/hosts

Cron

Deixar um cron padrão para que qualquer um possa editá-lo:
# crontab -e

# Exemplo de uso
# 0     4       *       *       *       <usuario>       who

# Campo         Funcao
# 1o.           Minuto
# 2o.           Hora
# 3o.           Dia do mes
# 4o.           Mes
# 5o.           Dia da semana

# 6o.           Usuario com o qual o comando sera executado <opcional>
# 7o.           Programa para execucao

# Campo                 Valores
# Minuto                 0-59
# Hora                     0-23
# Dia do mes           1-31
# Mes                      1-12
# Dia da semana      0-6 (o "0" eh o domingo), 1 eh a segunda, etc.

# -----------------------------------------------------------------------------------------------
# Roda o update do antivirus todos os dias as 23:00
0 23 * * * /usr/bin/freshclam


Reiniciar o servidor:
#reboot

Referências

ISMAILYENIGUL