Artigos 12:43 AM

Monitoramento com Zabbix – Parte 2 – Monitorando Hosts e dispositivos

Monitoramento

xyz

Com o servidor e a interface web instalados e configurados, é hora de adicionar os hosts a serem monitorados.
Acesse a interface administrativa,

echo "net-analyzer/zabbix proxy sqlite3" >> /etc/portage/package.use/zabbix
emerge zabbix -uvaND
vim /etc/zabbix/zabbix_proxy.conf

Server=server.localdomain
ServerPort=10051
Hostname=proxy.localdomain
ProxyLocalBuffer=0 #hours (means forever)
ProxyOfflineBuffer=1 #hours
DBName=/var/lib/zabbix/proxydb.sqlite #full path for sqlite only

#/etc/init.d/zabbix-proxy start

#apt-get install zabbix-server-mysql zabbix-frontend-php

Se você deixou o apt fazer a configuração do banco de dados e a definição automáica da senha do banco, é possível que o FrontEnd não funcione, indicando erro na conexão do banco de dados. Se isso ocorrer edite o arquivo /etc/zabbix/zabbix_server.conf, copie a senha do banco de dados e altere no arquivo /etc/dbconfig-common/zabbix-frontend-php.conf
Em seguida execute o comando:
#dpkg-reconfigure zabbix-frontend-php

http://localhost/zabbix/

user: admin
senha: zabbix

Configuration / Hosts
Selecionar “Proxies” no select box e clicar em “Create Proxy”

Artigos 09:35 PM

Optimizando a compilação com ccache e distcc

Se sua rede tem 1 ou mais estação(ões)/servidore(s) Gentoo, está mais do que na hora de acelerar a compilação dos softwares. Duas opções estão disponíveis para rapida instalação, são elas: distcc e ccache.

ccache

O ccache, como o próprio nome já diz, tem por objetivo fazer cache de código C compilado durante uma instalação de software, para que numa próxima compilação ele possa ser reutilizado, economizando assim tempo e processamento. Seu funcionamento é análogo aos servidores proxys mais fomosos como o squid por exemplo.

Instalação

A instalação do ccache é bem simples e exige apenas 3 passos que são respectivamente, instalar o ccache, definir o tamanho máximo do diretório de cache e editar o arquivo make.conf adicionando a palavra ccache no parâmetro FEATURES.

# emerge ccache
# ccache -m 2G (define o tamanho máximo de 2 Gigabytes para o diretório do ccache)
# vim /etc/make.conf

FEATURES="ccache"

Uso

Uma vez instalado, basta começar a instalar novos programas para se beneficiar do uso do ccache. Vale observar que a primeira compilação após instalação do ccache pode demorar um pouco mais do que o normal já que o cache está sendo iniciado, no entanto as compilações seguintes deverão ser graduativamente aceleradas conforme o conteúdo do cache for sendo gerado.
Para certificar-se de que o ccache está sendo utilizado, basta executar o comando ccache -s e verificar se o mesmo está sendo utilizado.

# CCACHE_DIR=/var/tmp/ccache ccache -s (o diretório do cache do portage deve ser especificado)

distcc

A distcc distribui a compilação do código C entre hosts participantes da rede, acelerando assim o processo de compilação. A distcc faz uso do recurso de compilação pararela distribuindo cada “trabalho” entre os diversos hosts de compilação disponíveis. Sendo assim, programas que não podem ser compilados pararelamente não podem fazer uso da distcc, ao menos não sem nenhum trabalho adicional.

Instalação

A instalação da distcc é simples e exige basicamente a instalação do pacote distcc. Esse pacote deve ser instalado em todas as máquinas, sejam elas clientes ou servidores do serviço.
As maquinas que forem atuar como compiladores da rede devem ter o daemon da distcc rodando em background.

# emerge distcc
# rc-update add distccd default

As maquinas clientes precisam de um pacote a mais para gerenciar o uso da distcc, além de configuração adicional no arquivo make.conf

# emerge distcc
# emerge distcc-config
# vim /etc/make.conf

MAKEOPTS="-jN"  (onde N é o número de CPUs compiladoras + 1, é comum usar esse número X 2)
FEATURES="distcc"

# distcc-config --set-hosts "localhost maquina1 maquina2" (define as maquinas participantes da compilação, inclusive a maquina local se desejado)

É altamente recomendado que as maquinas participantes utilizem a mesma versão da GCC. Não há problemas em misturar versões como 4.1.x e 4.1.y, no entanto misturar versões como 4.x.y e 4.z.w, 3.x.y e 4.z.w ou outras combinações pode gerar diversos problemas ou até mesmo impossibilitar a compilação do software.

Uso

Assim como o ccache, a distcc é usada transparemente pelo portage e uma vez que estiver instalada basta começar a compilar software para se beneficiar de seu uso. O status atual da distribuição da compilação pode ser verificado com o comando distccmon-text na maquina cliente.

# DISTCC_DIR="/var/tmp/portage/.distcc/" distccmon-text N (onde N é o número de segundos de atualização da tela)

Se a distcc for usada junto com o ccache é necessário especificar o ccache antes da distcc no parâmetro FEATURES

Compilação cruzada

Na configuração padrão da distcc não é possível compilar para arquiteturas diferentes da utilizada pela máquina onde está instalada distcc, se você quiser compilar código para amd64 é necessário que todas as máquinas participantes da compilação utilizem arquitetura amd64 por exemplo. Uma forma de contornar essa limitação é a compilação cruzada, ou seja, compilar para uma arquitetura diferente da arquitetura do compilador utilizado. Dessa forma é possível utilizar uma estação x86 para compilar programas para uma estação ppc ou sparc.

Instalação

Instalar um ambiente de compilação cruzada é fácil no entanto um pouco demorado. O pacote crossdev cuida do recado e basta indicar a arquitetura desejada para que ele gere todos os programas necessários para a compilação (binutils, gcc, glibc, etc).
No caso abaixo, uma estação i686 é configurada para compilar software para arquitetura amd64.

# emerge crossdev
# crossdev -t x86_64 (onde x86_64 é a arquitetura em que os programas devem ser gerados)

Desative o ccache e a distcc para compilar os compiladores

A instalação da distcc cria um diretório com links dos compiladores para o binário da distcc que cuida de distribuir os processos, no entanto como muitos programas chamam os compiladores diretamente por c++, gcc, etc ao invés de x86_64-pc-linux-gnu-gcc é necessário acertar os links de modo a apontar para o compilador da arquitetura correta. Um simples script e alguns links resolvem o problema.
Crie um novo script com o nome equivalente a variavel CHOST da arquitetura desejada, por exemplo x86_64-pc-linux-gnu-wrapper pra amd64 ou sparc-unknown-linux-gnu-wrapper para arquitetura sparc, e insira as linhas abaixo lembrando-se de alterar os valores para a arquitetura correta:

# cd /usr/lib/distcc/bin
# rm c++ g++ gcc cc
# vim x86_64-pc-linux-gnu-wrapper

#!/bin/bash
exec /usr/lib/distcc/bin/x86_64-pc-linux-gnu-g${0:$[-2]} "$@"

Em seguida, dê permissão de execução no script e refaça os links.

# chmod a+x x86_64-pc-linux-gnu-wrapper

# ln -s x86_64-pc-linux-gnu-wrapper c++
# ln -s x86_64-pc-linux-gnu-wrapper cc
# ln -s x86_64-pc-linux-gnu-wrapper g++
# ln -s x86_64-pc-linux-gnu-wrapper gcc

Pronto, agora é só adicionar o host na lista de hosts da distcc das demais máquinas e começar a compilação.
Caso necessário compilar para outra arquitetura basta instalar os novos compiladores e refazer os links para a nova arquitetura.

Referências

Artigos 05:29 PM

Autenticação Centralizada com Postgres – NSS e PAM

A rede da empresa em que trabalho já há muito tempo autentica os usuários em um banco de dados Mysql, no entanto devido ao processo de migração de nosso sistema interno, decidimos que o PostgreSQL será o banco oficial com que iremos trabalhar e portanto nosso banco de usuários deveria ser migrado para o mesmo.
Como eu já havia visto algumas poucas coisas a respeito de autenticação de usuários com Postgres na época em que configurei a autenticação com Mysql, imaginei que hoje em dia o suporte ao PostgreSQL estaria melhor e disponível em uma variedade maior de softwares, o que pra minha alegria é uma verdade.
Com o objetivo de centralizar a maior quantidade de sistemas de autenticação disponíveis na rede, comecei a pesquisar a respeito do assunto.
Nesse primeiro artigo exemplifico a configuração da libnss e do pam em conjunto com o PostgreSQL.
Futuramente publicarei também a minha experiência com o Samba, Postfix e outros serviços disponíveis na rede que administro.

Continue Reading »

Artigos 09:11 PM

Autenticação SMTP no Postfix com pop-before-smtp

Postfix + pop-before-smtp

Recentemente tive que implementar alguma forma de autenticação no servidor de um cliente para envio de e-mail uma vez que ele decidiu utilizar um cliente de e-mail ao invés de webmail.
De cara pensei em SASL pois a configuração com Postfix não custuma ser muito trabalhosa, ao menos não no Gentoo. Infelizmente a distribuição do servidor de meu client é Fedora Core, uma distribuição com a qual não tenho nenhuma intimidade.
Procurei na internet alguma forma de fazer isso mas não fui muito feliz em minhas buscas. Como eu já tinha compilado o postfix com suporte ao mysql pois nãoa havia achado uma solução “pronta” na época da configuração do servidor, resolvi fazer o mesmo recompilando o postfix com suporte ao Mysql e SASL. Infelizmente a tentativa não deu certo e o postfix sempre morria após a primeira conexão na porta 25.
Cansado e sem paciência de tentar resolver esse problema achei melhor tentar algo mais prático, pensei então no pop-before-smtp (pop antes do smtp).


Continue Reading »

Uncategorized 12:14 PM

Roteamento Avançado – Forçando as rotas

Após a implementação do segundo link de internet aqui da empresa (Roteando múltiplos links de internet) descobri que alguns sites não funcionavam direito.
Os problemas começaram a ocorrer principalmente nos Internet Banking devido a mudança do IP durante a sessão do sistema.

Como sou usuário do Bradesco comecei a testar o acesso e verifiquei que durante uma sessão de Internet Banking, aproximadamente 4 hosts diferentes do Bradesco são conectados.
Como os hosts são de redes diferentes, é bem possível que cada para cada host seja utilizado um gateway diferente e é ai que ocorre a alteração do IP do cliente.

Para contornar esse problema de forma fácil e rápida é possível marcar os pacotes no firewall que atenderem a uma certa condição, como por exemplo o endereço de destino.
Uma vez que os pacotes estejam marcados é possível definir a tabela de roteamento a ser utilizada por esses pacotes.

Após inúmeros testes e muito monitoramento com tcpdump, netstat e whois, descobri as 3 redes de IP do Bradesco que eu deveria forçar a utilização por 1 dos links. Inseri 3 regras no firewall para marcar os pacotes destinados a essas redes.

# iptables -A PREROUTING -t mangle -p tcp -m tcp -d 200.173.19.0/25 -j MARK --set-mark 0x1
# iptables -A PREROUTING -t mangle -p tcp -m tcp -d 200.246.210.0/23 -j MARK --set-mark 0x1
# iptables -A PREROUTING -t mangle -p tcp -m tcp -d 200.155.80.0/20 -j MARK --set-mark 0x1

Uma vez que os pacotes estejam marcados é possível definir a tabela de roteamento a ser utilizada. Para isso utilizamos novamente o iproute2:

# ip rule add prio 11 fwmark 0x1 table isp1
# ip route flush cache

O exemplo acima assume que o nome da tabela do link 1 é isp1. Para maiores informações sobre como criar/nomear tabelas de roteamento consulte o artigo Roteando múltiplos links de internet

Após mais um tempo alguns usuários detectaram outros sites com o mesmo problema e o que percebi é que em sua grande maioria os serviços em questão rodavam sobre conexões seguras (https). Sendo assim alterei a regra no firewall para trafegar todu que for destinado a porta 443 pela link 1.
A regra abaixo cuida do serviço:

# iptables -A PREROUTING  -t mangle -p tcp -m tcp --dport 443 -j MARK --set-mark 0x1
# ip route flush cache

É importante executar o comando ip route flush cache toda vez que for alterada alguma regra referente ao roteamento de pacotes.

Pronto, agora toda conexão https será direcionada para o primeiro link. Caso o link falhe é possível trocarmos a tabela de roteamento a ser utilizada:

# ip rule del prio 11 fwmark 0x1 table isp1
# ip rule add prio 11 fwmark 0x1 table isp2
# ip route flush cache

Usando o Nagios ou algum outro software de monitoramento (um simples shell script) é possível automatizar a detecção de problemas no link para alterar o link a ser utilizado por essas conexões, tornando assim o serviço praticamente ininterrupto.

Artigos 02:18 PM

Roteando múltiplos links de internet

A empresa onde trabalho depende 100% da internet para seu funcionamento, devido a isso procurei escolher uma boa opção de link de internet levando em consideração o melhor preço X a melhor qualidade de serviço.
É claro que as melhores opções são sempre os links dedicados, no entanto esses serviços são caros se comparados aos serviços DSL disponíveis.

Depois de um bom tempo usando o Velox da Telemar, fui apresentado a MundiVox que até que tem um serviço de boa qualidade, só deixando a desejar no primeiro mês de uso.

Apesar da boa qualidade do serviço, inevitavelmente acontecem algumas pequenas interrupções que as vezes não passam de 1 minuto, mas as vezes pode passar dos 10. Sendo assim decidi contratar mais um link de internet de outro fornecedor para efeitos de backup.

Uma vez que o outro link já estava instalado e funcionando surgiu o desafio: Como inserir o novo link na rede de modo a garantir que a internet não pare nunca (failover), e como combinar os 2 links para aumentar a velocidade de acesso a internet (load balancing)?

Inicialmente pensei que a solução fosse utilizar o recurso de “bonding” do kernel, no entanto após ler bem a pouca documentação disponível descobri que o bonding só funciona com links que façam parte de uma mesma rede (lógica).

Pesquisando mais a fundo descobri que a solução está nas tabelas de roteamento do sistema, na verdade na parte Avançada de Roteamento do sistema (o conhecido Linux Advanced Routing and Traffic Control)

A idéia básica do sistema é de criar tabelas de roteamento separadas para cada link e utilizar um gateway multipath ( com rotas alternativas ) como rota padrão. Para isso é necessário utilizar o pacote iproute2, disponível em http://linux-net.osdl.org/index.php/Iproute2

O pacote iproute2 fornece ferramentas avançadas para a configuração de interfaces, endereços, rotas e filtros e pode substituir as ferramentas padrões já conhecidas: ifconfig, route, arp.
No kernel, a opção IP: advanced router provê o suporte necessário para o recurso.

A configuração é simples e basicamente se dá em configurar o kernel e adicionar algumas tabelas de roteamento.


Continue Reading »

Artigos 11:35 PM

Instalando o Webmail Horde IMP

O Horde IMP é um excelente webmail com suporte a IMAP/POP3 de código livre desenvolvido sob o framework Horde.
O Projeto Horde tem como objetivo fornecer um framework de desonvolvimento web para criação de aplicações de código aberto de alta qualidade.

A instalação do Horde IMP tem como principal dependência o próprio projeto Horde que por sua vez tem como dependência o já famoso trio Apache/Mysql/PHP. É necessário portanto instalar o horde e realizar uma configuração mínima para então prosseguir com o módulo de webmail.

Continue Reading »

Artigos 09:30 PM

ACLs + Samba + NFS

O que são ACLs?

As ACLs – (Access Control List ou Lista de Controle de Acesso) extendem o nível de permissionamento de arquivos e diretórios padrão do mundo linux/unix (POSIX). Sistemas de rede como Novell Netware e Windows NT (e seus sucessores) contam com avançados serviços de diretórios.

No mundo de padrões POSIX durante muito tempo reinou o padrão usuário:grupo:outros com suas permissões rwx, porém para um bom gerenciamento de segurança em uma rede de dados é necessário muito mais do que isso e é ai que entram as ACLs.

Com as ACLs é possível definir acesso a mais de um usuário ou grupo além de definir permissões/usuários/grupos padrões para novos arquivos/diretórios.

Configurar o suporte a ACL no linux requer alguns poucos passos que incluem instalar as versões com suporte a acl das principais ferramentas de sistema como o pacote coreutils (mv, cp, rm, etc) por exemplo, instalar o pacote acl que contém os binários getfacl e setfacl, e por último adicionar suporte aos sistemas de arquivos desejados no kernel.

Continue Reading »