RSS

quinta-feira, 25 de março de 2010

Instalação do ZABBIX

O Zabbix é uma ferramenta com o objetivo de monitorar a performance e a disponibilidade de uma rede ou serviço, com suporte a banco de dados e interface web. 

Para a instalação do ZABBIX é necessário:
  • Apache;
  • MySQL (ou PostgreSQL);
  • MySQL ou PostgreSQL headers e libraries;
  • PHP4;
  • PHP GD module;
  • PHP 4.0 MySQL ou PostgreSQL module;
  • GNU Make;
  • NET-SNMP (ou UCD-SNMP) library e header files.  

Obtendo o Zabbix.
Antes de prosseguir, visite o site ZABBIX e verifique se existe alguma versão mais nova do mesmo. O Zabbix está disponível para o download em:
Versão instalada nesse artigo: zabbix-1.8.1.tar.gz  

Descompactando e Instalando (SERVIDOR). 
cd /usr/src/
tar xvfz zabbix-1.8.1.tar.gz
cd zabbix-1.8.1
./configure --with-mysql --with-net-snmp --enable-server --enable-agent

make install
mkdir /etc/zabbix
cp misc/conf/zabbix_server.conf /etc/zabbix/
cp misc/conf/zabbix_agentd.conf /etc/zabbix/
chown zabbix:zabbix /etc/zabbix/ -R


Configurando o Banco de Dados. 
mysql -u root -p
mysql> create database zabbix;
mysql> grant ALL on zabbix.* to zabbix@'localhost' identified by 'digite aqui sua senha';
Query OK, 0 rows affected (0.02 sec)
cd create/schema/
cat mysql.sql |mysql -u zabbix -p zabbix
Enter password:
cat ../data/data.sql |mysql -u zabbix -p zabbix
Enter password:
cat ../data/images_mysql.sql |mysql -u zabbix -p zabbix
Enter password:



Configurando os Daemons zabbix_server e zabbix_agentd 
Tratando-se de uma instalação pequena, não é necessário nenhum “tweaking” para ajustes de performance, nem no server nem no agentd. 

vi /etc/zabbix/zabbix_agentd.conf

Neste arquivo, a unica linha que precisa ser configurada neste momento é: 

server=127.0.0.1

Esta linha qual o IP de origem do monitoramento. (servidor). Como usaremos um agente e um servidor no mesmo computador, vamos colocar nosso próprio IP como Server.

Ajustando as configurações do banco de dados.

vi /etc/zabbix/zabbix_server.conf
   DBHost=localhost    DBName=zabbix   DBUser=zabbix     DBPassword=Sua Senha   

Ok, agora é a hora da verdade, vamos verificar se o agente e o servidor rodam corretamente:
 
zabbix_server
zabbix_agentd


Após executar estes dois comandos, digite: 

ps -aux |grep zabbix 

Ele deve mostrar várias instancias do zabbix_agentd e do zabbix_server rodando.
.

Roteamento - Load Balance


Nesta parte denominamos variáveis para as interfaces como segue.  Denominamos que o nome LAN seja referente à Interface ETH0 que no nosso script é a da rede interna. Verifique no seu Firewall qual é a interface correta.

IF_LAN='eth0'

Aqui denominamos as variáveis dos LINKS 1 e 2, e os chamamos de LINK1 e LINK2.  É claro que você poderá chamá-los do que quiser. Exemplo: ADSL1 e ADSL2, mas não esqueça de alterar as variáveis no restante do script.

IF_LINK1='eth1'
IF_LINK2='eth2'

Aqui colocamos os Gateways dos Links de Internet. Geralmente, os Default Gateways dos Links são os IP´S dos roteadores de Internet.

GW_LINK1='200.70.0.1'
GW_LINK2='200.80.0.1'

Nesta parte, utilizamos o comando IPTABLES para mascarar os IPs, ou seja,
fazemos um NAT (Network Address Translation) para que os pacotes que venham da Interface ETH0 com IPs da rede interna, ou mesmo pacotes gerados dentro do próprio Firewall, possam sair para a Internet com endereços trocados, usando os IPs das interfaces ligadas aos Links de Internet. O MASQUERADE ao final do comando faz exatamente isto. Caso contrário, utilizaria ACCEPT, mas aí os pacotes sairiam para a Internet com IPs da rede interna e jamais retornariam ao Firewall.

iptables -t nat -A POSTROUTING -o $IF_LINK1 -j MASQUERADE
iptables -t nat -A POSTROUTING -o $IF_LINK2 -j MASQUERADE


Aqui começamos a marcar os pacotes diferenciando-os pela porta utilizada.
Observe que escolhemos os pacotes com destino às portas 80 (HTTP) 443 (HTTPS) 25 (SMTP) 110 (POP). Todo pacote que passar pelo Firewall com estas particularidades receberão uma "marca", uma espécie de carimbo. Pacotes destinados à porta 80 recebem "carimbo" de número 2, pacotes com destino à porta 25 recebem "carimbo" número 3. Desta forma, podemos diferenciá-los para que mais à frente no script tenhamos controle do que saiu/entrou e por onde saiu/entrou.

iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 80 -j MARK --set-mark 2
iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 443 -j MARK --set-mark 2
iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 25 -j MARK --set-mark 3
iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 110 -j MARK --set-mark 3



A diferença entre o PREROUTING e o OUTPUT é que, PREROUTING abrange os  pacotes que foram originados fora do FIREWALL, por exemplo Interface ETH0  ($IF_LAN), enquanto OUTPUT são os pacotes originados no Firewall, ou seja, na própria console.

iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark 2
iptables -t mangle -A OUTPUT -p tcp --dport 443 -j MARK --set-mark 2
iptables -t mangle -A OUTPUT -p tcp --dport 25 -j MARK --set-mark 3
iptables -t mangle -A OUTPUT -p tcp --dport 110 -j MARK --set-mark 3


Aqui montamos as tabelas dinâmicas a partir das marcas (carimbos) que fizemos
lá em cima no nosso script. Pacotes que foram marcados com 2 vão para a tabela "table 20" e os marcados com 3, vão para a tabela "table 21", com a mesma prioridade. Perceba o PRIO 20 após os comandos.

ip rule add fwmark 2 table 20 prio 20
ip rule add fwmark 3 table 21 prio 20


Se quisermos condicionar esta marcação de outra forma, podemos utilizar o  comando das seguintes formas:

Este condiciona que todos os pacotes que vierem da rede 192.160.0.0 vão para a tabela 20.

ip rule add from 192.160.0.0/24 table 20

Este outro condiciona os pacotes da rede 192.170.0.0 a irem para a tabela 21.

ip rule add from 192.170.0.0/24 table 21

Agora sim daremos rumo aos pacotes que foram marcados e cadastrados na tabela dinâmica.  Veja que os pacotes que foram enviados para a tabela 20 têm como DEFAULT GATEWAY o LINK1. Sendo assim, os pacotes serão enviados para o LINK1 na Interface ETH1 com o IP 200.70.0.1.  Já os pacotes da tabela 21 serão enviados para o LINK2 na Interface ETH1, com o IP 200.80.0.1

ip route add default via $GW_LINK1 dev $IF_LINK1 table 20
ip route add default via $GW_LINK2 dev $IF_LINK2 table 21


Este último comando limpa a tabela, caso ela já tenha sido utilizada  anteriormente, ou apenas para termos certeza de que quando você resetar as  regras todas, o Firewall não guarde nenhum tipo de informação na memória (cache). Daí o nome FLUSH CACHE.

ip route flush cache

Habilitando e configurando RAID 1 no Slackware.


Considerações Iniciais

  •  Não há importância dos DISCOS serem de tamanhos DIFERENTES desde que as partições do RAID sejam EXATAMENTE DO MESMO TAMANHO.
  • Neste artigo vou considerar que é um sistema de alto desempenho e não pode parar, por isso o RAID 1 será para todas as partições, com exceção para a SWAP.
  • Considerando 2 discos de tamanho 80 GB e do tipo SATA (mas do mesmo modo funcionaria para discos IDE, somente alterando de "sd" para "hd" as instruções).
  • Vamos considerar também que os discos SATAs estejam ligados na 1º e 2º porta de conexão SATA, sendo "sda e sdb" respectivamente.

Sistema Operacional utilizado: Slackware 13

Devemos iniciar estas configurações antes mesmo de iniciar o setup de instalação do Slackware. Iniciamos o boot com o CD ou DVD do Slackware. No prompt de comando, a primeira operação será particionar os discos.

Configurando as Partições

Vamos agora particionar os discos, use para isso a sua ferramenta preferida, fdisk ou cfdisk.

Partições do disco 1:

* / - 79 GB - tipo "fd" (Linux Raid Autodetect)
* swap - 1 GB (depende do total de memória RAM disponível da (máquina)

Depois de criado este arranjo de partições, execute o seguinte comando para configurar o disco 2 com o mesmo padrão de particionamento.

sfdisk -d /dev/sda | sfdisk /dev/sdb

Não esqueça que estamos considerando que os HDs estejam na 1º e 2º porta de conexão SATA, sendo eles SDA e SDB.

 Montando o RAID 1

Depois das partições prontas, devemos agora montar as partições com o RAID escolhido, no nosso caso RAID 1.

Para isso iremos usar o comando "mdadm", que gerencia os diversos níveis de raid no Slackware.

mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1

Esta sequência de comandos "associa/cria" 2 partições em "1", que será como o sistema interpretará.

Nesse caso, será criado o dispositivo "/dev/md0" com raid level 1, ou melhor, raid1, com 2 partições incluídas, sendo elas /dev/sda1 e /dev/sdb1.

O comando a seguir exibe mais detalhes do raid montado, no caso o comando abaixo exibirá detalhes do dispositivo /dev/md0, no qual estão incluídas as partições /dev/sda1 e /dev/sdb1.

mdadm -D /dev/md0
ou
cat /proc/mdstat

Depois de criado o raid para todas as partições criadas, poderemos executar o comando "setup" para iniciar a instalação do Slackware.


Depois do Sistema Instalado

Considerando que tenha feita uma instalação bem sucedida e tenha reiniciado e logado com sucesso no seu novo sistema.

Iremos agora adicionar as partições do RAID no arquivo de configuração do mdadm.conf, que é o arquivo que gerencia os arrays em funcionamento do sistema. Para isso, execute:

mdadm -D --scan >> /etc/mdadm.conf

Quase tudo pronto, agora iremos editar o arquivo /etc/lilo.conf para configurações de boot corretas.

Abra o arquivo /etc/lilo.conf com seu editor de texto preferido.

Altere as seguintes opções para ficar assim:

boot = /dev/md0
raid-extra-boot = mbr-only #Isso irá gravar o lilo nos dois hds
root = /dev/md0


Após isso, salve e execute o comando:

lilo

Não deve exibir nenhum erro quanto a esta configuração. Pronto, neste momento seu sistema RAID já está funcionando com sucesso.
.

quarta-feira, 24 de março de 2010

Autenticando e protegendo diretórios no Apache

 
Comece criando o arquivo de senhas para autenticar os usuários que terão acesso aquela área, com o comando:

# htpasswd -c /var/www/htdocs/suporte/.htpasswd suporte

Foi criado o arquivo .htpasswd dentro da pasta suporte, mas você pode criar onde desejar. A linha acima cria o arquivo e já adiciona o usuário suporte. Após este comando ele ira pedir uma senha e a confirmação da mesma, feito isso, você deve editar o arquivo httpd.conf dentro de "/etc/httpd/httpd.conf" e adicionar as seguintes linhas:

Directory "/var/www/htdocs/suporte"
AllowOverride None
Options Indexes MultiViews
Order allow,deny
Allow from all
AuthType Basic
AuthName "Digita a senha de acesso: "
AuthUserFile "/var/www/htdocs/suporte/.htpasswd"
Require user suporte
Directory


Altere, se necessário a linha “AuthUserFile” para o diretório onde você colocou seu arquivo de senhas. Para mais de um usuário, coloque "Require valid-user" ao invéz de “Require user” para autenticar mais de um usuário. Pronto, basta salvar e reiniciar o apache.

Redundância de link

 
Mapa de rede do exemplo utilizado:

-------------------------------------
eth0 -> ip = 192.168.0.100
.............gw = 192.168.0.254

eth2 -> ip = 192.168.1.100
.............gw = 192.168.1.254
------------------------------------


Inicialmente, deve-se criar duas rotas, sendo “LINK1” e “LINK2” em:

/etc/iproute2/rt_tables

As regras abaixo, define quais redes fazem parte das tabelas criadas:

ip route add 192.168.0.0 dev eth0 src 192.168.0.100 table LINK1
ip route add default via 192.168.0.254 table LINK1

ip route add 192.168.1.0 dev eth2 src 192.168.1.100 table LINK2
ip route add default via 192.168.1.254 table LINK2

Para que a maquina tenha 02 gateway, ou seja 02 rotas default, deve-se inserir as regras:

ip rule add from 192.168.0.254 table LINK1
ip rule add from 192.168.1.254 table LINK2

E por fim, deve-se inserir a regra para definir os 02 gateway:

ip route add default scope global nexthop via $G1 dev $IF1 weight 1 nexthop via $G2 dev $IF2 weight 1

Instalando MYSQL no Slackware 13


Download mysql-5.0.84: Clique aqui.

Instalação: installpkg mysql-5.0.84-i486-1.txz

MySQL instalado. Criando o database:
# mysql_install_db

Setar a senha de root, mas para isso precisamos iniciar o mysql.
# safe_mysqld &

Vai dar um erro, é normal. E preciso para gerar o sock. Agore mude a permissão:
# chown -R mysql.mysql /var/lib/mysql

Tentaremos novamente executar o server mysql:
# safe_mysqld &

MySQL rodando. Mudar a senha de root:
# mysqladmin -u root password (SUA SENHA AQUI)

Logue-se ao mysql:
# mysql -u root -p