Snort + Guardian Tutorial
Por Allisson Azevedo (allisson@linuxmail.org)
O objetivo deste tutorial é ter um sistema de defesa contra
ataques maliciosos, não pense que apenas seguindo este tutorial
seu sistema vai estar a prova de balas contra invasões e outros
tipos de ataques, digo isso porque nenhum sistema é perfeito.
Contudo a combinação do Snort com o Guardian pode ser
considerada uma ferramenta muito util em um servidor que precisa de um
minimo de segurança. O Snort funciona como um sniffer
(analisador de pacotes), fazendo a monitoração dos
pacotes que passam pelo seu sistema, quando ele detecta alguma
assinatura digital que indique um ataque em potencial contra o seu
sistema o Snort gera o alerta nos seus arquivos de logs. O problema
é que o Snort diferentemente do Portsentry, apenas gera os
alertas não podendo bloquear os hosts que fizeram o ataque, Ja
li alguns tutorias pela internet sobre o Snort em português (e
agradeço os autores por o terem escrito) mas infelizmente eles
apenas mostram como instalar o Snort somente e esquecem da ferramenta
chamada Guardian que tem o papel de ler os logs do Snort em tempo real
e bloquear os hosts que fizeram os ataques.
Agora que estamos conversados sobre o objetivo deste tutorial, chegou a
hora de botar a mão na massa.
Primeiramente vou avisando que o Snort depende de uma biblioteca
chamada libpcap, que pode ser baixada em
http://www.tcpdump.org/release/libpcap-0.7.1.tar.gz como eu estou
usando o Slackware 8.1 que ja vem com o pacote tcpdump não
precisei instalar o libpcap, se na hora da compilação o
Snort gerar um tipo de erro de falta dessa biblioteca você tera
que seguir os seguintes passos descritos abaixo, lembrando que todos as
operações foram feitas no diretorio /usr/locar/src.
bash-2.05a# tar -xvzf libpcap-0.7.1.tar.gz
bash-2.05a# cd libpcap-0.7.1/
bash-2.05a# ./configure
bash-2.05a# make
bash-2.05a# make install
Vamos baixar o codigo fonte do Snort em
http://www.snort.org/dl/snort-1.9.0.tar.gz, eu usei a versão
1.9.0 neste tutorial. O processo de instalação é
simples como mostrado abaixo.
bash-2.05a# tar -xvzf snort-1.9.0.tar.gz
bash-2.05a# cd snort-1.9.0/
bash-2.05a# ./configure
bash-2.05a# make
bash-2.05a# make install
Criando o diretorio onde ficaram as configurações do Snort
bash-2.05a# mkdir /etc/snort
Vamos baixar o pacote de regras atualizadas que o Snort usa, o pacote
se chama snortrules-stable.tar.gz e pode ser baixado em
http://www.snort.org/dl/rules/snortrules-stable.tar.gz.
Descompactando e copiando o conteudo para o diretorio onde ficam as
configurações do Snort.
bash-2.05a# tar -xvzf snortrules-stable.tar.gz
bash-2.05a# cd rules/
bash-2.05a# cp * /etc/snort/
Editando o arquivo de configurações do Snort que se
encontra em /etc/snort/snort.conf, vamos aplicar algumas poucas
mudanças para o Snort poder rodar sem problemas.
var HOME_NET any # mudar o any para o ip de seu sistema ou da rede
inteira, por exemplo eu estou usando o ip 192.168.1.1 na minha placa de
rede mas eu posso usar a notação 192.168.1.0/24 para o
Snort farejar os ips 192.168.1.1 ate 192.168.1.254 .
var RULE_PATH ../rules # mudar o ../rules para o diretorio onde
estão os arquivos de regras do Snort, como eu copiei todo o
conteudo de regras para o /etc/snort mudei o valor para /etc/snort .
include $RULE_PATH/bad-traffic.rules # são os arquivos de regras
que serão usados pelo Snort, estão nas linhas finais do
snort.conf e cabe a você habilitar o que lhe convem (eu habilitei
todos), para habilitar basta tirar o # do começo da linha
(descomentar a linha) e para desabilitar basta adicionar o # ao
começo da linha (comentar a linha).
Criando o usuario e o grupo para rodar o Snort.
bash-2.05a# groupadd snort
bash-2.05a# useradd snort -g snort
Criando o diretorio de logs do Snort.
bash-2.05a# mkdir /var/log/snort
Alterando o dono dos diretorios que o Snort irá usar para
usuario snort e grupo snort.
bash-2.05a# chown snort.snort /etc/snort/ -R
bash-2.05a# chown snort.snort /var/log/snort/ -R
Vamos testar se esta tudo certo para que o Snort funcione corretamente,
vamos inicia-lo e ver as mensagens de log.
bash-2.05a# snort -u snort -g snort -D -c /etc/snort/snort.conf -l
/var/log/snort/
bash-2.05a# tail /var/log/messages
Dec 6 22:05:15 slack snort: All
Dec 6 22:05:15 slack snort:
Dec 6 22:05:15 slack snort: Portscan2 config:
Dec 6 22:05:15 slack snort: log: /var/log/snort//scan.log
Dec 6 22:05:15 slack snort: scanners_max: 3200
Dec 6 22:05:15 slack snort: targets_max: 5000
Dec 6 22:05:15 slack snort: target_limit: 5
Dec 6 22:05:15 slack snort: port_limit: 20
Dec 6 22:05:15 slack snort: timeout: 60
Dec 6 22:05:16 slack snort: Snort initialization completed
successfully, Snort running
Pela ultima linha constatamos que esta tudo certo com o Snort.
Se o seu objetivo era apenas instalar o Snort para ver como anda os
ataques ao seu sistema o tutorial acaba aqui para você. Mas se
por acaso você alem de detectar os ataques quer barrar o trafego
da maquina hostil ao seu sistema, continue com a
instalação do Guardian.
Baixe o Guardian em
http://www.snort.org/dl/contrib/other_tools/guardian/guardian-1.6.tar.gz,
a versão usada neste tutorial é o Guardian 1.6, lembrando
que o Guardian é escrito em perl, portanto é necessario
você ter o perl instalado no seu sistema.
Descompactando o Guardian.
bash-2.05a# tar -xvzf guardian-1.6.tar.gz
bash-2.05a# cd guardian-1.6/
Agora você tem que decidir qual programa filtro de pacotes quer
que funcione junto com o Guardian para barrar o trafego das maquinas
hostis ao seu sistema, O Guardian funciona junto com dois scripts shell
chamados guardian_block.sh e guardian_unblock.sh.
guardian_block.sh: script que o Guardian usa para adicionar o ip da
maquina hostil ao seu filtro de pacotes.
guardian_unblock.sh: script que o Guardian usa para deletar o ip da
maquina hostil do seu filtro de pacotes.
Sendo assim vamos ao diretorio scripts para copiar esses dois scripts
para o /usr/local/bin/
bash-2.05a# cd scripts/
bash-2.05a# ls
freebsd_block.sh freebsd_unblock.sh ipchain_block.sh ipchain_unblock.sh
iptables_block.sh iptables_unblock.sh
Como mostrado nesse diretorio temos seis scripts ja prontos para
utilizar com o Guardian, basta escolher qual usar e copiar para o
/usr/local/bin com os nomes de guardian_block.sh e guardian_unblock.sh,
como eu vou trabalhar com o iptables eu vou proceder do seguinte modo.
bash-2.05a# cp iptables_block.sh /usr/local/bin/guardian_block.sh
bash-2.05a# cp iptables_unblock.sh /usr/local/bin/guardian_unblock.sh
Copiando o resto do programa para os seus devidos locais.
bash-2.05a# cd ..
bash-2.05a# cp guardian.conf /etc/
bash-2.05a# cp guardian.pl /usr/local/bin/
Editando o /etc/guardian.conf mude os seguintes valores.
Interface eth0 # mude para a interface que você vai usar para
barrar os hosts hostis.
AlertFile /var/adm/secure # mude para /var/log/snort/alert .
TimeLimit 86400 # mude para quanto tempo (em segundos) você
quiser que o host fique barrado pelo firewall, use o valor 99999999
desabilitar essa opção.
Criando o arquivo de logs do Guardian em /var/log.
bash-2.05a# touch /var/log/guardian.log
Criando o arquivo /etc/guardian.ignore, e inserindo nele os ips que o
Guardian vai ignorar.
bash-2.05a# touch /etc/guardian.ignore
Agora edite o arquivo colocando os ips que o Guardian deve ignorar,
lembrando que deve ficar um ip por linha, veja como ficou o meu arquivo.
bash-2.05a# cat /etc/guardian.ignore
127.0.0.1
192.168.1.1
Inicie o Guardian desse modo.
bash-2.05a# guardian.pl -c /etc/guardian.conf
OS shows Linux
Warning! HostIpAddr is undefined! Attempting to guess..
Got it.. your HostIpAddr is 192.168.1.1
My ip address and interface are: 192.168.1.1 eth0
Loaded 2 addresses from /etc/guardian.ignore
Becoming a daemon..
Com essa mensagem mostrada pelo Guardian concluimos a sua
instalação.
Bom este tutorial termina por aqui, acho que o objetivo de instalar o
Snort + Guardian foi mostrado de uma maneira clara sem tanta “receita
de bolo”, espero que com essa pequena contribuição eu
consiga ajudar alguem. Tambem quero deixar claro que eu não sou
o dono da verdade e podem existir maneiras mais interessantes de fazer
funcionar o que foi exposto neste tutorial, se você tem
conhecimento compartilhe com a comunidade :]
Tambem queria pedir desculpas pelos erros de português em geral :]