quarta-feira, 24 de setembro de 2008

Instalando iptables l7 (layer 7) no debian i386

As vezes é necessário fazer bloqueio nos firewalls que vão além de portas e ips. No caso do emule por exemplo, não podemos definir um ip de origem ou mesmo uma porta, pois esses são variáveis. Neste caso, temos que subir até a camada de aplicação, nos protocolos utilizados por esses programas que não são variáveis igual aos ips e portas, e fazer o bloqueio pelos padrões de comunicação utilizados pela aplicação.
Resumindo, o iptables l7 permite a filtragem de pacotes por protocolo da camada 7 (modelo OSI). É uma filtragem menos eficiente (como dito, o iptbles deve "subir" até a camada 7) porém eficaz (como dito, a aplicação não varia o protocolo ).

Abaixo mostro um passo a passo da instalação do iptables l7 no Debian. Do original http://www.eduardoramos.eti.br/ drupal/?q=node/12, porém com algumas correções:


[Passos prévios]

- O sistema utilizado para a instalação foi debian-40r4a-i386-netinst baixado no site http://www.debian.org/distrib/netinst em 09/09/2008 no link http://cdimage.debian.org/debian-cd/4.0_r4a/i386/iso-cd/debian-40r4a-i386-netinst.iso
É necessário que seja i386 por causa das versões dos fontes que utilizaremos.

- Autentique-se como root no sistema para efetuar todos os passos desta explicação.

- Adicione a linha abaixo no arquivo /etc/apt/source.list para manter o apt-get atualizado:
deb http://ftp.br.debian.org/debian etch main contrib

- Após adicionada a linha, atualize o apt-get com o comando abaixo:
apt-get update


[Baixando fontes e instalando utilitarios]

- O iptables é intimamente ligado ao kernel para aumetar sua performance, então, para a instalação do iptables l7 é necessário compilar um kernel com as opções de l7. Baixe os fontes necessários com os comandos abaixo:
cd /usr/src

wget http://www.kernel.org/pub/linux/kernel/v2.6/ linux-2.6.19.tar.gz

wget http://www.netfilter.org/projects/iptables/files/ iptables-1.3.7.tar.bz2


wget http://ufpr.dl.sourceforge.net/sourceforge/l7-filter/ netfilter-layer7-v2.9.tar.gz


wget http://ufpr.dl.sourceforge.net/sourceforge/l7-filter/ l7-protocols-2007-01-14.tar.gz


- Alguns utilitarios que não vêm com o Debian devem ser instalados:
aptitude install bzip2 gzip unzip

aptitude install libncurses5-dev


aptitude install kernel-package


- Descompactando fontes:
tar xvzf linux-2.6.19.tar.gz

tar xvjf iptables-1.3.7.tar.bz2


tar xvzf netfilter-layer7-v2.9.tar.gz


tar xvzf l7-protocols-2007-01-14.tar.gz



[Configurando, compilando e instalando o kernel com l7]

- Criando um link para o diretório do kernel para auxiliar no processo de configuração:
ln -s /usr/src/linux-2.6.19 /usr/src/linux

- Copiando as configurações de boot:
cp /boot/config-2.6.24* /usr/src/linux/.config

- Aplicando o patch do layer7 no kernel:
cd /usr/src/linux
patch -p1 < /usr/src/netfilter-layer7-v2.9/kernel-2.6.18-2.6.19-layer7-2.9.patch

- Agora o kernel está pronto para ser configurado, compilado e instalado:
make menuconfig

- Uma tela de configuração do kernel será mostrada. Você deverá seguir os passos:
Networking ---> Networking options ---> [*] Network packet filtering (replaces ipchains) ---> Core Netfilter Configuration ---> Netfilter Xtables support (required for ip_tables)

- Ative com M a opção Netfilter Xtables support.

- Siga para:
Networking ---> Networking options ---> [*] Network packet filtering (replaces ipchains) ---> IP: Netfilter Configuration ---> IP tables support (required for filtering/masq/NAT) --->

- Ative:
Layer 7 match support (EXPERIMENTAL)
[*] Layer 7 debugging output

- Após ativar conforme acima, siga selecionando Exit e até que seja perguntado se você deseja salvar a nova configuração do kernel, selecione YES e para salvar.

- compilando o kernel:
make-kpkg -initrd kernel_image

Nota: demorará vários minutos.

- Após a compilação, será gerado um arquivo em /usr/src/linux-image-2.6.19.7_2.6.19.7-10.00.Custom_i386.deb, instale-o com o comando abaixo:
dpkg -i linux-image-2.6.19.7_2.6.19.7-10.00.Custom_i386.deb

- Após a instalação, reinicie sua máquina e selecione o novo kernel para ser carregado.


[Configurando e instalando o iptables l7]

- O iptables deve ser configurado para utilizar as novas funcionalidades oferecidas pelo kernel. Faça os comandos abaixo para efetivar essa configuração:
cd /usr/src/iptables-1.3.7

patch -p1 < /usr/src/netfilter-layer7-v2.9/iptables-layer7-2.9.patch


chmod +x extensions/.layer7-test


- Instalando o iptables:
make KERNEL_DIR=/usr/src/linux

make install KERNEL_DIR=/usr/src/linux


- Instalando protocolos que podem ser filtrados:
cd /usr/src/l7-protocols-2007-01-14

make install



[Finalizações]

- Reinicie sua máquina, selecione o novo kernel e insira a seguinte regra para testar o novo iptables:
iptables -I FORWARD -m layer7 --l7proto bittorrent -j DROP


[Possíveis problemas]

- Se a regra anterior for executada com sucesso, o seu iptables está pronto para ser utilizado. Caso contrário, o módulo l7 talvez não foi carregado automaticamente. Carregue-o com o comando abaixo:
modprobe ipt_layer7

- Se for exibida uma mensagem que o módulo não foi encontrado, a sua instalação falhou. Comente os problemas nesta postagem.


[Informações adicionais]

- Uma relação dos protocolos suportados pode ser vista em http://l7-filter.sourceforge.net/protocols

terça-feira, 23 de setembro de 2008

Copiando (clonando) máquinas do xen no mesmo domínio

As vezes precisamos de efetuar testes em máquinas virtuais, backup ou até criar outras máquinas com outros serviços. Então, "para evitar a fadiga" de criar tudo do zero, podemos efetuar cópias (clones) das máquinas virtuais.
Existem maneiras diferentes de efetuar essa clonagem (ex.: o comando virt-clone). Vou explicar somente a que sempre utilizo. Do original http://blog-grid.blogspot.com/2007/07/how-to-clone-xen-vm.html:

Assumindo que temos uma máquina chamada httpd e queremos criar uma httpd-teste, segue os passos:


[Copiando a imagem do disco]
- Copie a imagem do disco da máquina requerida para um outro nome. No meu caso as imagens ficam em uma partição separada /vm. Para efetuar a cópia utilize qualquer comando de cópia (cp, dd, ...), recomendo o dd:
dd if=/vm/httpd of=/vm/httpd-teste bs=4k

Nota: Dependendo do tamanho da imagem isso pode demorar, por isso é importante utilizar o bs=4k para definir blocos maiores a serem copiados, aumentando a velociade de cópia. É recomendado que a máquina httpd esteja desligada ao efetuar a cópia para evitar erros, porém, não é extremamente necessário.

- Altere as permissões do arquivo para que o xen possa escrever nele:
chmod 771 /vm/httpd-teste

[Criando arquivo de configuração]
- A nova máquina precisa de um arquivo de configuração. Utilize o comando abaixo para copiar o arquivo de configuração da máquina httpd:
virsh dumpxml httpd > /tmp/httpd-teste.xml

Nota: O caminho do arquivo de configuração httpd não precisa ser informado pois já é sabido pelo comando. Pore

- Altere as tags do arquivo /tmp/httpd-teste.xml de configuração copiado para seus novos valores:
...
<name>httpd-teste</name>
...
<uuid>3ca12152be4195b1fa67a0e857b9723d</uuid>
...
<mac address='00:16:3e:65:82:48'/>
...
<source file='/vm/httpd-teste'/>
...

Nota: As linhas uuid e mac podem ser apagadas pois o xen criará automático (teoricamente).

- Ponha o novo arquivo de configuração em funcionamento:
virsh define /tmp/httpd-teste.xml


[Iniciando a nova máquina virtual]
- Para iniciar a nova máquina virtual execute:
virsh start httpd-teste

ou

xm start httpd-teste

ou

algum outro comando das ferramentas do xen

Nota: lembre-se de alterar o IP de sua nova máquina, bem como nomes e outros valores que não podem ficar duplicados na rede.

segunda-feira, 22 de setembro de 2008

Ao executar o make no linux, aparece a seguinte warning: File `XXX' has modification time in the future 955485142...

Isso geralmente ocorre quando o horário do sistema não está correto. Não sei muito ao certo o que é um horário errado pois, o timezone (tzconfig) estava configurado correto e o horário do hardware estava correto. Somente quando visualizava o horário do sistema (date) ele não batia com o configurado no hardware [isso deve ser um horário errado :) ]. O seguinte comando corrige o horário e corrigiu a warning:

date mmddhhmmccaa

Onde:

* mm = Mês
* dd = Dia
* hh = Hora
* mm = Minutos
* cc = Primeiras casas do Ano (2008 = 20)
* aa = Últimas duas casa do Ano (2008 = 08)

Ex.: 22 de setembro de 2008 10:24

date 092210242008

terça-feira, 16 de setembro de 2008

Se não existisse ano bissexto, estaríamos em qual ano?

Todos nós sabemos (ou quase todos) daquela historia de que a terra leva 1 ano e 6 horas para dar uma volta em torno do sol. Por isso, para não ficarmos defasados 0.25 dias a cada ano, de 4 em 4 anos temos 1 dia a mais (4 anos * 6 horas = 24 horas = Kiefer Sutherland = 1 dia).

Sempre tive curiosidade de saber qual seria a proporção dessa defasagem se não tivéssemos o ano bissexto. Abaixo segue meu raciocínio para uma fórmula discreta que resulta nessa defasagem:

- a cada 1 ano temos 1/4 dia de sobra, ou (1/4)/365 = 0,000685 anos de sobra a cada ano passado.
- então, em X anos, teremos 0,000685X anos de sobra.
- se estamos no ano X, o ano sem bissexto (ASB) sera:
ASB = X + 0,000685X =>
ASB = X*(1 + 0,000685) =>
ASB = 1,000685X

Portanto, partindo das seguintes afirmações: (nossos anos começaram a partir do nascimento de Cristo) e (o ano 4 foi bissexto) e (desde o nascimento de Cristo passaram 2008.747 anos, data que foi escrito esse post) temos o seguinte resultado:
X = 2008,747
ASB = 1,000685X
ASB = 1,000685*2008,747
ASB = 2010,123

Concluindo:

Se não existisse ano bissexto, estaríamos em 2010!

quarta-feira, 3 de setembro de 2008

Instalando e configurando o poderoso gerenciador de redes Nagios

Tutorial muito bom Instalando e configurando o poderoso gerenciador de redes Nagios

Após instalado o nagios, pode acontecer:

[Erro de acesso]
Eventualmente poderá aparecer a seguinte mensagem na hora da visualização das informações:
"It appears as though you do not have permission to view information for any of the hosts you requested...". Diz respeito às permissões de usuários que o sistema do nagios possui. Para desativar a autenticação vá em /usr/local/nagios/etc/cgi.cfg e mude a variável user_authentication=1 para user_authentication=0.
Essa ação deixará seu nagios vulnerável, qualquer pessoa poderá visualizar os dados e alterá-los.

[Definição de autenticação de usuários]
Para definir usuários e permissões de acesso ao nagios, proceda da seguinte forma:
execute o comando #htpasswd /usr/local/nagios/etc/htpasswd.users NOVO_USUARIO para criar um novo usuário para o sistema nagios.
edite o arquivo /usr/local/nagios/etc/cgi.cfg adicionando os novos usuários às variáveis authorized_for_all_service_commands e authorized_for_all_host_commands separados por vírgula. Lembrando que, para que a autenticação funcione, a variável user_authentication deve ser 1.

Abaixo segue um exemplo da criação de usuários:
#htpasswd /usr/local/nagios/etc/htpasswd.users andre
#nano /usr/local/nagios/etc/cgi.cfg
.
.
.
user_authentication=1
.
.
.
authorized_for_all_service_commands=nagiosadmin,andre
authorized_for_all_host_commands=nagiosadmin,andre
.
.
.

[Adicionar novo host no nagios]
Na pasta
/usr/local/nagios/etc/objects são colocados os objetos (hosts) que serão monitorados pelo nagios. Neste arquivo temos alguns exemplos, portanto, só irei mostrar o básico de configuração. Digamos que queiramos monitorar um host com nome sw_cisco e ip 192.168.1.2:

- primeiro, criaremos um arquivo de configuração:
touch /usr
/local/nagios/etc/objects/sw_cisco.cfg

- adicione as seguinte linhas ao arquivo (a chave de abertura deve ser colada com a palavra):
define host{
use linux-server
host_name sw_cisco
alias sw_cisco
address 192.168.1.2
}

define service{
use local-service
host_name sw_cisco
service_description PING
check_command check_ping!100.0,20%!500.0,60%
}

- após criado o objeto, informe ao nagios a existência do novo host a ser monitorado editando o arquivo
/usr/local/nagios/etc/nagios.cfg adicionando a seguinte linha:
cfg_file=/usr/local/nagios/etc/objects/sw_cisco.cfg

- reinicie o serviço do nagios:
#/etc/init.d/nagios restart

- verifique a existência de um novo host na página do nagios. Somente o serviço de teste de ping será realizado nesse novo host pois foi somente esse serviço que configuramos. Caso seja necessário outros, eles devem ser configurados em
/usr/local/nagios/etc/objects/sw_cisco.cfg

Instalando Cacti no Debian

Cacti é uma ferramenta para gerência de redes. Abaixo mostrarei um rápido passo a passo de como instalá-la em um servidor Debian que poderá monitorar equipamentos que servem o protocolo SNMP.

[Passos prévios]

- O sistema utilizado para a instalação foi debian-40r4a-i386-netinst baixado no site http://www.debian.org/distrib/netinst em 01/09/2008 no link http://cdimage.debian.org/debian-cd/4.0_r4a/i386/iso-cd/debian-40r4a-i386-netinst.iso
É necessário que seja i386 por causa das versões dos fontes que utilizaremos.

- Autentique-se como root no sistema para efetuar todos os passos desta explicação.

- Adicione a linha abaixo no arquivo /etc/apt/source.list para manter o apt-get atualizado:
deb http://ftp.br.debian.org/debian etch main contrib

- Após adicionada a linha, atualize o apt-get com o comando abaixo:
#apt-get update

- Instale um servidor LAMP antes da instalação do cacti. Veja em Instalando LAMP no Debian

- Se utilizar outro sistema, antes da instalação do cacti verifique se as ferramentas SNMP estão instaladas. Caso não estejam, devem ser instaladas.


[Instalação]

- Baixe e instale os pacotes do cacti e suas dependências com o comando abaixo. Nota: aceite todas as dependências.
#apt-get install cacti

- Acesso via browser o endereço http://localhost/cacti e efetue os passos de configuração do cacti, por padrão não é necessário alterar as configurações.

- Após efetuar as configurações, acesse novamente http://localhost/cacti e autentique-se com login: admin e senha: admin, será pedido a alteração da senha.

- Se tudo isso ocorreu certo, a sua instalação terminou com sucesso!

Instalando LAMP no Debian

LAMP é a abreviação dos serviços de rede para Linux: Apache, MySql e PHP. Abaixo mostro um pequeno passo a passo para instalação desses serviços no Debian.


[Passos prévios]

- O sistema utilizado para a instalação foi debian-40r4a-i386-netinst baixado no site http://www.debian.org/distrib/netinst em 01/09/2008 no link http://cdimage.debian.org/debian-cd/4.0_r4a/i386/iso-cd/debian-40r4a-i386-netinst.iso
É necessário que seja i386 por causa das versões dos fontes que utilizaremos.

- Autentique-se como root no sistema para efetuar todos os passos desta explicação.

- Adicione a linha abaixo no arquivo /etc/apt/source.list para manter o apt-get atualizado:
deb http://ftp.br.debian.org/debian etch main contrib

- Após adicionada a linha, atualize o apt-get com o comando abaixo:
#apt-get update


[Instalação]

- Baixe e instale os pacotes LAMP e suas dependências com o comando abaixo. Nota: aceite todas as dependências.
#apt-get install apache2 mysql-server php5 php5-mysql php5-cli

Sobre os pacotes:
apache2: servidor web
mysql-server: servidor de banco de dados
php5: linguagem de programação para web
php5-mysql: integração do php5 com mysql
php5-cli: possibilita executar php na linha de comando do linux. É necessário para muitos scripts funcionarem.

- Como instalação adicional sugiro o phpmyadmin para facilitar o gerenciamento do banco de dados mysql:
#apt-get install phpmyadmin


[Testes]

- Para verificar se a instalação ocorreu com sucesso,Verifique em um browser o endereço http://localhost, geralmento o apache retorna "It works!" para sinalizar que está funcionado
A pasta /var/www é o diretório padrão onde o apache mapeia as páginas web.

- Tente acessar a página http://localhost/phpmyadmin e criar bancos de dados.

- Estando tudo certo, a instalação terminou com sucesso!