quarta-feira, 21 de setembro de 2011

Armazenando arquivos baixados frequentemente no cache do squid.

Olá amigos.

Hoje vou mostrar como armazenar no cache do squid arquivos que são baixados com certa frequência. Esse procedimento é bastante útil principalmente na atualização de antivírus ou na atualização do M$ ruindows quando não há um WSUS na rede.

O exemplo abaixo se aplica para atualizações do Symantec Endpoint Protection mas pode ser utilizado para o windows update ou qualquer arquivo em outro domínio com as devidas alterações nas expressões regulares.

refresh_pattern liveupdate.symantecliveupdate.com/.*\.(cab|exe|dll|msi|zip) 10080 100% 43200 reload-into-ims
refresh_pattern symantecliveupdate.com/.*\.(cab|exe|dll|msi|zip) 10080 100% 43200 reload-into-ims



A opção refresh_pattern define o tempo de permanência dos objetos no cache e é explicada em detalhes no link abaixo:
http://www.squid-cache.org/Doc/config/refresh_pattern/

No trecho de log abaixo podemos observar pelas entradas TCP_HIT quando os objetos estão sendo acessados diretamente no cache de disco.

1316608033.055  40456 127.0.0.1 TCP_HIT/200 3584456 GET http://liveupdate.symantecliveupdate.com/segments/1316128148jtun_nav2k8ennful25.m25.seg17.zip - NONE/- application/zip
1316608049.902  43301 127.0.0.1 TCP_HIT/200 3584437 GET http://liveupdate.symantecliveupdate.com/segments/1316128148jtun_nav2k8ennful25.m25.seg2.zip - NONE/- application/zip
1316608087.943    154 127.0.0.1 TCP_HIT/200 3074328 GET http://liveupdate.symantecliveupdate.com/segments/1316582683jtun_nav2k8enncur25.m25.seg1.zip - NONE/- application/zip
1316608094.034  40447 127.0.0.1 TCP_HIT/200 3584456 GET http://liveupdate.symantecliveupdate.com/segments/1316128148jtun_nav2k8ennful25.m25.seg18.zip - NONE/- application/zip
1316608117.774      7 127.0.0.1 TCP_HIT/200 542038 GET http://liveupdate.symantecliveupdate.com/segments/1316582683jtun_nav2k8en110920002.m25.seg1.zip - NONE/- application/zip



É isso ai galera, juntos manteremos a comunidade forte.

Um grande abraço a todos.

sexta-feira, 26 de agosto de 2011

Apache autenticando no Windows Server 2008 com Ubuntu Server 10.04 LTS.

Olá amigos, hoje vou mostrar uma maneira bem simples de autenticar usuários no Apache2 em uma base no AD com Perl AuthenNTLM.

Primeiramente devemos baixar o pacote libapache2-authenntlm-perl conforme abaixo:

#apt-get install libapache2-authenntlm-perl

Devemos então editar as configurações para nosso virtualhost em /etc/apache2/sites-enabled/site.conf ou diretamente no arquivo default em /etc/apache2/sites-enabled/000-default conforme abaixo:

<Directory>
Order allow,deny
Allow from 192.168

Options FollowSymLinks
AllowOverride None

PerlAuthenHandler Apache2::AuthenNTLM
AuthType ntlm
AuthName "Acesso Restrito"
require valid-user
PerlAddVar ntdomain "DOMÍNIO nome_do_servidor"
PerlSetVar defaultdomain DOMÍNIO
PerlSetVar ntlmsemtimeout 2
PerlSetVar ntlmdebug 2
PerlSetVar splitdomainprefix 1
</Directory>

Existem algumas considerações a respeito da configuração da variável PerlAddVar ntdomain.
No nome_do_servidor deve existir realmente um nome e não o endereço IP, o nome do servidor deve ser adicionado no arquivo /etc/hosts uma vez que a resolução de nomes da ferramenta é local.

Maiores informações a respeito do Perl AuthenNTLM inclusive as definições de suas variáveis podem ser encontradas no link abaixo:

http://search.cpan.org/~speeves/Apache-AuthenNTLM-2.10/AuthenNTLM.pm#PerlAddVar_ntdomain_%22domain_pdc_bdc%22

Quais quer dúvidas ou esclarecimentos estou a disposição.
Um grade abraço a todos.

quinta-feira, 21 de abril de 2011

Instalando o Zabbix 1.8.4 no Ubuntu Server 10.10

Em ambientes de TI complexos com muitos ativos de rede e servidores muitas vezes problemas ocorrem sem o conhecimento do administrador de rede, o pior dos cenários é quando o administrador é informado sobre problemas em sua infraestrutura pelos usuários pois isso reflete diretamente na visão dos usuários a respeito do departamento de TI. Em um cenário como esse a TI está sempre apagando incêndios e os usuários estão quase sempre insatisfeitos com os serviços prestados.
Através das ferramentas de monitoramento como Nagios, Zenoss e o Zabbix tratado neste post a TI passa a ser pró-ativa resolvendo problemas antes mesmo do conhecimento dos mesmos pelos usuários.
Já utilizo o Zabbix há algum tempo e com sua nova versão resolvi abordar os procedimentos de instalação e configuração da ferramenta de monitoramento.

Inicialmente devemos baixar o Zabbix, o download pode ser realizado através do link:

http://prdownloads.sourceforge.net/zabbix/zabbix-1.8.4.tar.gz?download

Concluído o download agora vamos instalar a dependências para a compilação do Zabbix conforme abaixo:

# apt-get install gcc automake mysql-server libsnmp-dev libmysqld-dev libcurl4-gnutls-dev libopenipmi-dev libssh2-1-dev

Concluída a instalação passamos para o arquivo com o código fonte, que neste caso foi colocado em /opt

Inicialmente iremos extrair o conteúdo do arquivo com o comando:

# tar xzvf zabbix-1.8.4.tar.gz

Após a extração será criado o diretório zabbix-1.8.4 em /opt, é agora que iremos determinar o suporte a determinadas funcionalidades dependendo do ambiente em que vc irá utilizar o Zabbix como por exemplo em que banco de dados o servidor será instalado, se haverá suporte a verificações via ssh ou dispositivos IPMI. As opções de compilação podem ser verificadas através do comando abaixo dentro do diretório /opt/zabbix-1.8.4/

# ./configure --help

Após definir as funcionalidades desejadas passamos para a compilação no meu caso o Zabbix foi compilado conforme o comando abaixo:

# ./configure --enable-server --with-mysql --with-net-snmp --with-libcurl --with-openipmi --with-ssh2 --enable-agent

Uma vez compilado devemos executar os comandos abaixo para concluir a instalação:

# make
# make install

Com o Zabbix instalado passamos a configuração da base de dados que conforme compilação será armazenada no servidor mysql, para tal devemos proceder com os passos a seguir:

# mysql -u root -p
>create database zabbix character set utf8;
>grant all privileges on zabbix.* to 'zabbix'@'localhost' identified by 'senha';
>exit

# mysql -u root -p zabbix < /opt/zabbix-1.8.4/create/schema/mysql.sql
# mysql -u root -p zabbix < /opt/zabbix-1.8.4/create/data/data.sql
# mysql -u root -p zabbix < create/data/images_mysql.sql

Com isso nossa base de dados está preparada, agora devemos criar o usuário para rodar o servidor, criar o diretório dos arquivos de configuração, copias os exemplos de arquivos de configuração e os arquivos de inicialização do servidor.

# useradd -m -s /bin/bash zabbix
# mkdir /etc/zabbix
# cp misc/conf/{zabbix_server.conf,zabbix_agentd.conf} /etc/zabbix
# cp /opt/zabbix-1.8.4/misc/init.d/debian/{zabbix-agent,zabbix-server} /etc/init.d

Agora passamos para a configuração do servidor conforme abaixo:

[zabbix_server.conf]
...
LogFile=/var/log/zabbix_server.log
DBName=zabbix
DBUser=zabbix
DBPassword=SUASENHA
...

No arquivo de configuração indicamos um arquivo para log porém, o arquivo não existe devemos então criá-lo e atribuí-lo ao usuário zabbix:

# touch /var/log/zabbix_server.log
# chown zabbix.zabbix /var/log/zabbix_server.log
# chown -R zabbix.zabbix /var/log/zabbix_server.log

O servidor já está pronto para uso e pode ser inicializado através do comando:

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

Porém o servidor por sí não é suficiente, uma vez que para configurar os hosts e ítens a ser monitorados devemos instalar a interface web.

Devemos instalar o apache2 e o php mais as dependências para a interface web do Zabbix.

# apt-get install apache2 apache2-mpm-prefork apache2-utils apache2.2-common libapache2-mod-php5 libapr1 libaprutil1 libdbd-mysql-perl libdbi-perl libnet-daemon-perl libplrpc-perl libpq5 php5-common php5-mysql php5-gd

O próximo passo é copiar os arquivos da interface para o diretório apropriado no apache2;

# cp -r /opt/zabbix-1.8.4/frontends/php/ /var/www/
# mv /var/www/php /var/www/zabbix

Com isso podemos acessar a interface web e prosseguir com a configuração através da interface web. Reinicialize o apache e acesse a interface no endereço:

http:/seu-ip/zabbix

O processo de configuração é bem intuitívo a única observação a ser feita é na tela de pré-requisitos, algumas opções vão estar em desconformidade e devemos realizar alterações no arquivos /etc/php/apache2/php.ini e alterar o valor padrão das variáveis para atender as necessidades do Zabbix. A baixo estão as variáveis e os valores mínimos para prosseguir com a instalação, se seu ambiente for maior pondere cuidadosamente os valores atribuídos pois esta configuração impacta diretamente na performance do zabbix.

[php.ini]
...
max_execution_time = 600
max_input_time = 600
memory_limit = 256M
post_max_size = 32M
upload_max_filesize = 16M
date.timezone = America/Maceio
...

Assim concluímos os pré-requisitos e concluímos a instalação do zabbix.

Após digitar o usuário e senha você entrará na dashboard, é através dela que você pode ver o que está sendo monitorado. O Zabbix utiliza o princípio de Hosts >> Itens >> Triggers >> Actions para realizar seu monitoramento, devemos adicionar os hosts e os itens que serão monitorados neste host em seguida configuramos as triggers que analisam os itens e geram alarmes de acordo com as opções especificadas pelo administrador, já as Actions são as ações tomadas mediante as alterações das triggers que podem ser a execução de um script, o envio de um email para o administrador, etc.

A configuração do Zabbix é um tópico bastante extenso e não será abordado neste post, maiores informações para a configuração do zabbix podem ser encontradas no link abaixo:

http://www.zabbix.com/documentation/1.8/manual/config

Há também um livro sobre o Zabbix que possui bastante informação a respeito da ferramenta, maiores informações sobre o livro podem ser encontradas no link abaixo:

http://www.amazon.com/Zabbix-Network-Monitoring-Rihards-Olups/dp/184719768X/ref=sr_1_1?s=books&ie=UTF8&qid=1303788117&sr=1-1

É isso ai galera, quaisquer dúvidas ou esclarecimentos estou a disposição.
Um grande abraço a todos da comunidade.

quinta-feira, 17 de fevereiro de 2011

Instalando o Jetty no Ubuntu Server 10.04 LTS

Olá comunidade,

O servidor de aplicações web Jetty é um servidor ágil e leve que apesar de bastante poderoso possui documentação escassa. Segue abaixo o procedimento para instalação do Jetty no Ubuntu server 10.04.

Primeiramente devemos instalar o JDK, O pacote sun-java6-jdk não está listado nos repositórios oficiais, portanto devemos adicionar um novo repositório e prosseguir com a instalação conforme abaixo:

# apt-get install python-software-properties
# add-apt-repository "deb http://archive.canonical.com/ lucid partner"
# apt-get install sun-java6-jdk sun-java6-jre
# apt-get install libjetty-extra-java libjetty-java jetty

Concluída a instalação prosseguimos com a configuração do servidor Jetty. Devemos alterar as variáveis no arquivo /etc/default/jetty para os valores abaixo:

JAVA_HOME=/usr/lib/jvm/java-6-sun

NO_START=0 ## Libera a inicialização do servidor.

JETTY_HOST=0.0.0.0 ## Define que o servidor irá "ouvir" todas as interfaces.

Concluída a configuração devemos reiniciar o servidor jetty para que as alterações entrem em vigor.

# /etc/init.d/jetty restart

Uma vez configurado podemos realizar os deploys dos arquivos .war adicionando os mesmos no diretório /usr/share/jetty/webapps

Após inserir o arquivo no diretório reinicie o Jetty. A URL para acessar o servidor será:

http://ip-do-servidor:8080/nomedoarquivowar


É isso ai galera. Quaisquer dúvidas ou esclarecimentos estou a disposição.

Um grande abraço.

segunda-feira, 10 de janeiro de 2011

Que venha a LPI 202...

Finalmente saiu o resultado da LPI 201 e estou feliz por ter sido aprovado com uma boa pontuação.
Agora é estudar bastante para a LPI 202 para conquistar a LPI 2.

Ohhh yes...

:D

quarta-feira, 15 de dezembro de 2010

Operações de backup em fita DAT no Ubuntu server 10.10

Olá comunidade.

Hoje trago uma dica para a criação de backups em fita DAT no Ubuntu Server 10.10.

Primeiramente devemos instalar o pacote mt-st que é o responsável pelas operações nos drives de fita com o comando abaixo:

apt-get install mt-st

Após a instalação já podemos realizar operações em fita conforme exemplos abaixo:

mt -f /dev/st0 rewind - Rebobina a fita.
mt -t /dev/st0 erase - Apaga a fita (Operação lenta).
mt -t /dev/st0 eject - Ejeta a fita.

Para o backup em si utilizamos o tar conforme os exemplos abaixo:

tar -cvf /dev/st0 /dir-origem-dos-dados
tar -cvf /dev/st0 -T /home/usuario/lista-de-arquivos.txt
tar -cvf /dev/st0 /dir-de-origem-dos-dados -X /home/usuario/lista-de-arquivos-excluídos-do-backup.txt

Conforme visto acima a opção -T aponta para um arquivo com a lista do que deve ser salvo, já a opção -X aponta para o arquivo com os arquivos que não devem ser salvos. Para maior dinamismo podemos utilizar expressões regulares nos mesmos.

A melhor maneira de realizar seus backups é através de um script de backup para automatizar o processo. Segue abaixo um exemplo de script de backup.

#!/bin/bash
#Script de backup escrito por PAULO ALEXANDRE SANTOS DE MELO
#Este script pode ser utilizado livremente e modificado uma vez que o nome do autor seja referenciado.

#Definição de variáveis
MT="/bin/mt"
TAR="/bin/tar"
DISPOSITIVO="/dev/st0"
ALVO="-T /opt/backup/alvos -X /opt/backup/excluir"
LOG="/var/log/bkp.log"

#Iniciando o Backup
echo "## Início do backup - `date +%e` de `date +%B` de `date +%Y` ##" >> $LOG
echo "Excluindo informações anteriores armazenadas na fita" >> $LOG
$MT -f $DISPOSITIVO erase
if [ "$?" == "0" ]
then
echo "Fita apagada" >> $LOG
else
echo "Erro na exclusão dos arquivos da fita" >> $LOG
fi

echo "Rebobinando a fita" >> $LOG
$MT -f $DISPOSITIVO rewind
if [ "$?" == "0" ]
then
echo "Posicionamento concluído" >> $LOG
else
echo "Erro no posicionamento" >> $LOG
fi

echo "Iniciando a cópia dos arquivos" >> $LOG
$TAR -cvf $DISPOSITIVO $ALVO
if [ "$?" == "0" ]
then
echo "## Backup concluído ##" >> $LOG
else
echo "Erro no Backup" >> $LOG
fi

echo " " >> $LOG
$MT -f $DISPOSITIVO eject


É isso ai galera, quaisquer dúvidas ou esclarecimentos estou a disposição.

Um grande abraço a todos.

quinta-feira, 25 de novembro de 2010

Obtendo informações sobre seu Squid em produção com o squidclient.

Olá comunidade.

Hoje trago uma dica de utilitário de linha de comando para acesso rápido a informações sobre o squid em ambiente de produção, o squidclient.

OBS: Esse post não irá tratar da instalação do squid uma vez que existem diversos tutoriais para tal disponíveis na web.

O squid é um proxy bastante poderoso, porém nem sempre é trivial fazer o dimensionamento do mesmo para um ambiente uma vez que existem diversas variáveis envolvidas como número de usuários acessando o proxy simultâneamente, quantidade de memória necessária, número suficiente de "file descriptors", a quantidade necessária de instâncias de autenticação quando em conjunto com o AD ou outra fonte de autenticação, etc.

Para facilitar os ajustes necessários a sua infraestrutura podemos utilizar a ferramenta squidclient.

No ubuntu server instalamos o utilitário diretamente dos repositórios com o seguinte comando:

apt-get install squidclient

Após a instalação faremos nossa primeira verificação.

squidclient mgr:info

Será exibida uma tela conforme a tela abaixo:

HTTP/1.0 200 OK
Server: squid
Date: Thu, 25 Nov 2010 20:08:11 GMT
Content-Type: text/plain
Expires: Thu, 25 Nov 2010 20:08:11 GMT
X-Cache: MISS from meuservidor
X-Cache-Lookup: MISS from meuservidor:3128
Via: 1.0 meuservidor:3128 (squid)
Connection: close

Squid Object Cache: Version 2.7.STABLE7
Start Time: Thu, 18 Nov 2010 14:41:54 GMT
Current Time: Thu, 25 Nov 2010 20:08:11 GMT
Connection information for squid:
Number of clients accessing cache: 604
Number of HTTP requests received: 10278482
Number of ICP messages received: 0
Number of ICP messages sent: 0
Number of queued ICP replies: 0
Number of HTCP messages received: 0
Number of HTCP messages sent: 0
Request failure ratio: 0.02
Average HTTP requests per minute since start: 987.7
Average ICP messages per minute since start: 0.0
Select loop called: 91903423 times, 6.794 ms avg
Cache information for squid:
Request Hit Ratios: 5min: 0.0%, 60min: 0.0%
Byte Hit Ratios: 5min: 7.6%, 60min: 12.0%
Request Memory Hit Ratios: 5min: 0.0%, 60min: 0.0%
Request Disk Hit Ratios: 5min: 0.0%, 60min: 0.0%
Storage Swap size: 0 KB
Storage Mem size: 108 KB
Mean Object Size: 0.00 KB
Requests given to unlinkd: 0
Median Service Times (seconds) 5 min 60 min:
HTTP Requests (All): 0.05331 0.00379
Cache Misses: 0.09736 0.09219
Cache Hits: 0.00000 0.00000
Near Hits: 0.00000 0.00000
Not-Modified Replies: 0.00000 0.00000
DNS Lookups: 0.05815 0.07284
ICP Queries: 0.00000 0.00000
Resource usage for squid:
UP Time: 624377.489 seconds
CPU Time: 4717.215 seconds
CPU Usage: 0.76%
CPU Usage, 5 minute avg: 0.65%
CPU Usage, 60 minute avg: 0.89%
Process Data Segment Size via sbrk(): 39908 KB
Maximum Resident Size: 174464 KB
Page faults with physical i/o: 1
Memory usage for squid via mallinfo():
Total space in arena: 39908 KB
Ordinary blocks: 23498 KB 4284 blks
Small blocks: 0 KB 0 blks
Holding blocks: 1108 KB 1 blks
Free Small blocks: 0 KB
Free Ordinary blocks: 16409 KB
Total in use: 24606 KB 60%
Total free: 16409 KB 40%
Total size: 41016 KB
Memory accounted for:
Total accounted: 9511 KB
memPoolAlloc calls: 1287300273
memPoolFree calls: 1287290977
File descriptor usage for squid:
Maximum number of file descriptors: 4096
Largest file desc currently in use: 1151
Number of file desc currently in use: 584
Files queued for open: 0
Available number of file descriptors: 3512
Reserved number of file descriptors: 100
Store Disk files open: 0
IO loop method: epoll
Internal Data Structures:
29 StoreEntries
29 StoreEntries with MemObjects
26 Hot Object Cache Items
0 on-disk objects

Observe que é possível verificar diversos pontos de interesse como a quantidade de "file descriptors" utilizada, a quantidade de memória utilizada, a quantidade de clientes acessando o cache, dentre outros.

Também podemos obter informações mais detalhadas sobre opções específicas. As opções possíveis podem ser exibidas com o comando:

squidclient mgr:menu

HTTP/1.0 200 OK
Server: squid
Date: Thu, 25 Nov 2010 20:13:18 GMT
Content-Type: text/plain
Expires: Thu, 25 Nov 2010 20:13:18 GMT
X-Cache: MISS from meuservidor
X-Cache-Lookup: MISS from meuservidor:3128
Via: 1.0 meuservidor:3128 (squid)
Connection: close

mem Memory Utilization public
cbdata Callback Data Registry Contents public
events Event Queue public
squidaio_counts Async IO Function Counters public
coss COSS Stats public
diskd DISKD Stats public
config Current Squid Configuration hidden
ipcache IP Cache Stats and Contents public
fqdncache FQDN Cache Stats and Contents public
idns Internal DNS Statistics public
ntlmauthenticator NTLM User Authenticator Stats public
external_acl External ACL stats public
http_headers HTTP Header Statistics public
menu This Cachemanager Menu public
shutdown Shut Down the Squid Process hidden
reconfigure Reconfigure the Squid Process hidden
offline_toggle Toggle offline_mode setting hidden
info General Runtime Information public
filedescriptors Process Filedescriptor Allocation public
objects All Cache Objects public
vm_objects In-Memory and In-Transit Objects public
openfd_objects Objects with Swapout files open public
pending_objects Objects being retreived from the network public
client_objects Objects being sent to clients public
io Server-side network read() size histograms public
counters Traffic and Resource Counters public
peer_select Peer Selection Algorithms public
digest_stats Cache Digest and ICP blob public
5min 5 Minute Average of Counters public
60min 60 Minute Average of Counters public
utilization Cache Utilization public
histograms Full Histogram Counts public
active_requests Client-side Active Requests public
store_digest Store Digest public
storedir Store Directory Stats public
store_check_cachable_stats storeCheckCachable() Stats public
store_io Store IO Interface Stats public
pconn Persistent Connection Utilization Histograms public
refresh Refresh Algorithm Statistics public
delay Delay Pool Levels public
forward Request Forwarding Statistics public
client_list Cache Client List public
asndb AS Number Database public
server_list Peer Cache Statistics public


Com as informações providas pelo squidclient podemos dimensionar de forma adequada o servidor squid aos mais diversos cenários, sempre com uma visão em tempo real do ambiente.

É isso ai, um grande abraço a todos...