Snort + Barnyard2 + Snorby + Debian Squeeze

  1. Nome da maquina: snort.douglasqsantos.com.br
  2. IP: 10.0.0.25
  3. Domínio: douglasqsantos.com.br
  4. Rede: 10.0.0.0/24
  5. Interface: eth0
  6. Mem Ram: 1024 MB

Prepare o seu sistema com o seguinte script http://wiki.douglasqsantos.com.br/doku.php/confinicialsqueeze_en para que não falte nenhum pacote ou configuração.

Vamos atualizar os repositórios e efetuar um upgrade do sistema

aptitude update && aptitude dist-upgrade -y

Agora precisamos adicionar mais um repositório no sistema para podermos obter alguns pacotes necessários para a instalação

vim /etc/apt/sources.list
[...]
deb http://packages.dotdeb.org squeeze all
deb-src http://packages.dotdeb.org squeeze all

Agora vamos importar a chave gnupg para o novo repositório

cd /usr/src
wget -c http://www.dotdeb.org/dotdeb.gpg
cat dotdeb.gpg | apt-key add -

Agora vamos atualizar os repositórios novamente e vamos instalar as dependências

aptitude update && apt-get install apache2 libapache2-mod-php5 libwww-perl mysql-server mysql-common mysql-client \
php5-mysql libnet1 libnet1-dev libpcre3 libpcre3-dev autoconf libcrypt-ssleay-perl libmysqlclient-dev g++ php-pear \
libphp-adodb php5-cli libtool libssl-dev gcc-4.4 automake gcc make flex bison apache2-doc ca-certificates php5-gd curl -y

Agora vamos fazer um upgrade de nosso pear

pear upgrade

Vamos instalar alguns modulos necessários para o php

pear install Numbers_Words-0.16.1

Agora vamos instalar os pré-requisitos para o snort

Primeiro vamos instalar o libcap

cd /usr/src
wget -c http://wiki.douglasqsantos.com.br/Downloads/ips/libpcap-1.1.1.tar.gz
tar -zxf libpcap-1.1.1.tar.gz && cd libpcap-1.1.1
./configure --prefix=/usr --enable-shared
make && make install clean

Agora vamos instalar o libdnet

cd /usr/src
wget  -c http://wiki.douglasqsantos.com.br/Downloads/ips/libdnet-1.12.tgz
tar -zxf libdnet-1.12.tgz && cd libdnet-1.12
./configure --prefix=/usr --enable-shared
make && make install clean

Agora temos que instalar o DAQ

cd /usr/src
wget -c http://wiki.douglasqsantos.com.br/Downloads/ips/daq-0.5.tar.gz
tar -zxf daq-0.5.tar.gz && cd daq-0.5

Aqui temos que efetuar um acerto no arquivo daq_pcap.c antes de compilar

vi /usr/src/daq-0.5/os-daq-modules/daq_pcap.c
[...]
# pela linha 219 vamos trocar
context->buffer_size = strtol(entry->key, NULL, 10);
# por:
context->buffer_size = strtol(entry->value, NULL, 10);

Agora vamos compilar

./configure
make && make install clean

Agora vamos recarregar as bibliotecas

echo >> /etc/ld.so.conf /usr/lib && ldconfig

Agora vamos para a instalação do Snort vamos obter ele e as suas regras

cd /usr/src
wget -c http://wiki.douglasqsantos.com.br/Downloads/ips/snort-2.9.0.5.tar.gz
wget -c http://wiki.douglasqsantos.com.br/Downloads/ips/snortrules-snapshot-2905.tar.gz
mkdir regras
tar -xzvf snortrules-snapshot-2905.tar.gz -C regras
tar -xzvf snort-2.9.0.5.tar.gz && cd snort-2.9.0.5
./configure --with-mysql --enable-dynamicplugin --enable-perfprofiling --enable-ipv6 --enable-zlib --enable-reload
make && make install clean

Agora vamos acertar os diretórios e as permissões

mkdir /etc/snort /etc/snort/rules /var/log/snort /var/log/barnyard2 /usr/local/lib/snort_dynamicrules
groupadd snort && useradd -g snort snort
chown snort:snort /var/log/snort /var/log/barnyard2
cp /usr/src/snort-2.9.0.5/etc/*.conf* /etc/snort
cp /usr/src/snort-2.9.0.5/etc/*.map /etc/snort
cp /usr/src/regras/etc/sid-msg.map /etc/snort/
cp -Rf /usr/src/regras/{preproc_rules,rules,so_rules} /etc/snort/

Vamos efetuar uma configuração básica no Snort

vim /etc/snort/snort.conf
[...]
ipvar HOME_NET 10.0.0.0/24
[...]
ipvar EXTERNAL_NET !$HOME_NET
[...]
var RULE_PATH ./rules
var SO_RULE_PATH ./so_rules
var PREPROC_RULE_PATH ./preproc_rules
[...]
#Comente todos esses preprocessadores normalize_ lines linhas 186 a 190
#insira na linha 366 a seguinte linha
output unified2: filename snort.log, limit 128
#Agora vamos comentar as linhas 395 a 447

Agora vamos criar uma regra de teste

vi /etc/snort/rules/local.rules
alert icmp any any -> $HOME_NET any (msg:"ICMP test"; sid:10000001;)

Agora vamos colocar o snort em modo monitor para testarmos

/usr/local/bin/snort -A console -q -u snort -g snort -c /etc/snort/snort.conf -i eth0

Agora de outra máquina na rede vamos efetuar um teste de ping no servidor snort

ping -c 3 10.0.0.25
PING 10.0.0.25 (10.0.0.25) 56(84) bytes of data.
64 bytes from 10.0.0.25: icmp_req=1 ttl=64 time=0.209 ms
64 bytes from 10.0.0.25: icmp_req=2 ttl=64 time=0.296 ms
64 bytes from 10.0.0.25: icmp_req=3 ttl=64 time=0.291 ms

--- 10.0.0.25 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.209/0.265/0.296/0.042 ms

Agora vamos verificar no servidor snort para sair pressione ctrl + C

11/17-09:35:15.221067  [**] [1:10000001:0] ICMP test [**] [Priority: 0] {ICMP} 10.0.0.20 -> 10.0.0.25
11/17-09:35:15.221094  [**] [1:10000001:0] ICMP test [**] [Priority: 0] {ICMP} 10.0.0.25 -> 10.0.0.20
11/17-09:35:16.221134  [**] [1:10000001:0] ICMP test [**] [Priority: 0] {ICMP} 10.0.0.20 -> 10.0.0.25
11/17-09:35:16.221151  [**] [1:10000001:0] ICMP test [**] [Priority: 0] {ICMP} 10.0.0.25 -> 10.0.0.20
11/17-09:35:17.220201  [**] [1:10000001:0] ICMP test [**] [Priority: 0] {ICMP} 10.0.0.20 -> 10.0.0.25
11/17-09:35:17.220216  [**] [1:10000001:0] ICMP test [**] [Priority: 0] {ICMP} 10.0.0.25 -> 10.0.0.20

Agora vamos preparar a base de dados para o Snort

mysql -u root -p
CREATE DATABASE snort;
GRANT ALL PRIVILEGES ON snort.* TO snort@localhost IDENTIFIED BY 'senha';
FLUSH PRIVILEGES;
exit;

Agora vamos importar o schema para o banco

mysql -u root -p < /usr/src/snort-2.9.0.5/schemas/create_mysql snort

Agora vamos ver se foi importado com exito a nossa base

mysql -u snort -p snort 
[...]
show tables;
+------------------+
| Tables_in_snort  |
+------------------+
| data             |
| detail           |
| encoding         |
| event            |
| icmphdr          |
| iphdr            |
| opt              |
| reference        |
| reference_system |
| schema           |
| sensor           |
| sig_class        |
| sig_reference    |
| signature        |
| tcphdr           |
| udphdr           |
+------------------+
16 rows in set (0,00 sec)

exit
Bye

Agora vamos instalar o Barnyard2 que é o agente que vai ficar alimentando a base MySQL

cd /usr/src
wget -c http://wiki.douglasqsantos.com.br/Downloads/ips/barnyard2-1.9.tar.gz
tar -zxf barnyard2-1.9.tar.gz && cd barnyard2-1.9
./configure --with-mysql
make && make install clean
mv /usr/local/etc/barnyard2.conf /etc/snort

Agora vamos acertar o arquivo de configuração do Barnyard2

vi /etc/snort/barnyard2.conf
[...]
config hostname:        snort
config interface:       eth0

Linha #215 deixe da seguinte forma
output alert_fast
#insira a seguinte linha no final do arquivo
output database: log, mysql, user=snort password=senha dbname=snort host=localhost

Vamos acertar mais um arquivo de controle

vim /etc/snort/bylog.waldo
/var/log/snort
snort.log
108247783
0

Agora vmaos iniciar o snrot em modo monitor

/usr/local/bin/snort -q -u snort -g snort -c /etc/snort/snort.conf -i eth0 &

Agora vamos iniciar o Barnyard2

/usr/local/bin/barnyard2 -c /etc/snort/barnyard2.conf \
-d /var/log/snort -f snort.log -w /etc/snort/bylog.waldo \
-G /etc/snort/gen-msg.map -S /etc/snort/sid-msg.map \
-C /etc/snort/classification.config &

Agora vamos efetuar um teste de ping de outra máquina na rede

ping -c 3 10.0.0.25
PING 10.0.0.25 (10.0.0.25) 56(84) bytes of data.
64 bytes from 10.0.0.25: icmp_req=1 ttl=64 time=0.231 ms
64 bytes from 10.0.0.25: icmp_req=2 ttl=64 time=0.252 ms
64 bytes from 10.0.0.25: icmp_req=3 ttl=64 time=0.326 ms

--- 10.0.0.25 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.231/0.269/0.326/0.044 ms

Agora vamos verificar no servidor a tabela do snort

mysql -uroot -p -D snort -e "select count(*) from event"
Enter password: 
+----------+
| count(*) |
+----------+
|       6 |
+----------+

Agora vamos matar os serviços do snort

killall -9 snort barnyard2

Agora vamos preparar o Snorby

Vamos instalar as dependências

aptitude install gcc g++ build-essential libssl-dev libreadline5-dev zlib1g-dev linux-headers-generic \
libsqlite3-dev libxslt1-dev libxml2-dev imagemagick libmysqlclient-dev libmagickwand-dev git-core \
mysql-server default-jre libyaml-dev libyaml-ruby -y

Agora vamos efetuar o download do ruby and rails e vamos instalar

cd /usr/local/src/
wget -c http://wiki.douglasqsantos.com.br/Downloads/ips/ruby-1.9.3-p194.tar.gz
tar -xzvf ruby-1.9.3-p194.tar.gz
cd ruby-1.9.3-p194/
./configure
make
make install clean

Agora vamos instalar alguns gems do ruby que vamos precisar.

gem install thor i18n bundler tzinfo builder memcache-client rack rack-test erubis mail
gem install rack-mount --version=0.4.0
gem install rails sqlite3-ruby
gem install rake

Mais uma dependencia do Snorby

cd /usr/src
wget -c http://wiki.douglasqsantos.com.br/Downloads/ips/wkhtmltopdf-0.10.0_rc2-static-i386.tar.bz2
tar xvjf wkhtmltopdf-0.10.0_rc2-static-i386.tar.bz2
cp /usr/src/wkhtmltopdf-i386 /usr/sbin/wkhtmltopdf

Agora vamos instalar o Snorby

cd /var/www/
wget -c http://wiki.douglasqsantos.com.br/Downloads/ips/snorby.tar.gz

Agora precisamos desempacotar o snorby

tar -xvf snorby.tar.gz

Agora podemos remover o pacote

rm -rf snorby.tar.gz

Agora vamos preparar o banco de dados para o Snorby

mysql -u root -p
create database snorby;
grant all privileges on snorby.* to snorby@localhost identified by 'senha';
flush privileges;
quit;

Agora vamos informar para o snorby o usuário e senha que ele deverá utilizar para a conexão com o banco A senha tem que estar entre “” aspas pois senão o ruby vai nos mostrar erros, que não pode converter os tipos de inteiro para string

Vamos copiar o arquivos de exemplo, que vamos precisar modificar

cd /var/www/snorby/config/
cp database.yml.example database.yml
cp snorby_config.yml.example snorby_config.yml

Agora vamos acertar a configuração do banco de dados

vim /var/www/snorby/config/database.yml
[...]
snorby: &snorby
  adapter: mysql
  username: snorby
  password: "senha"
  host: localhost

Agora vamos acertar o arquivo de configuração do snorby temos que acertar a localização do wkhtmltopdf

vim /var/www/snorby/config/snorby_config.yml
[...]
production:
  domain: localhost:3000
  wkhtmltopdf: /usr/sbin/wkhtmltopdf
[...]
development:
  domain: localhost:3000
  wkhtmltopdf: /usr/sbin/wkhtmltopdf
[...]
test:
  domain: localhost:3000
  wkhtmltopdf: /usr/sbin/wkhtmltopdf

Agora podemos acertar a configuração do envio de Email

vim /var/www/snorby/config/initializers/mail_config.rb
[...]
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
  :address              => "smtp.gmail.com",
  :port                 => 587,
  :domain               => "gmail.com",
  :user_name            => "usuario",
  :password             => "senha",
  :authentication       => "plain",
  :enable_starttls_auto => true
 }

Agora vamos instalar as dependências

cd /var/www/snorby/
bundle install

Agora vamos fazer um update do sistema ruby.

gem update --system

Agora vamos fazer o deploy da aplicação

bundle --deployment

Agora vamos fazer um update dos gems do sistema

gem update

Agora vamos mandar instalar o wkhtmltopdf

pdfkit --install-wkhtmltopdf

Agora vamos que executar mais um comando para instalar uma dependencia do Snorby

cd /var/www/snorby
script/rails generate rspec:install

Agora vamos efetuar a instalação do Snorby

bundle exec rake snorby:setup RAILS_ENV=production

Aqui recebemos um erro da criação do banco de dados pois já criamos ele anteriormente

Agora vamos verificar se o banco de dados foi criado

mysql -u snorby -p snorby
mysql> show tables;
+------------------+
| Tables_in_snorby |
+------------------+
| caches           |
| classifications  |
| daily_caches     |
| data             |
| delayed_jobs     |
| detail           |
| encoding         |
| event            |
| favorites        |
| icmphdr          |
| iphdr            |
| lookups          |
| notes            |
| notifications    |
| opt              |
| reference        |
| reference_system |
| schema           |
| sensor           |
| settings         |
| severities       |
| sig_class        |
| sig_reference    |
| signature        |
| tcphdr           |
| udphdr           |
| users            |
+------------------+
27 rows in set (0,00 sec)

Agora vamos acertar o barnyard2.conf para alimentar o snorby

vim /etc/snort/barnyard2.conf
[...]
#comente a entrada do snort e vamos adicionar a entrada do snorby
#output database: log, mysql, user=snort password=senha dbname=snort host=localhost
#output database: alert, mysql, user=snorby password=senha dbname=snorby host=localhost
output database: log, mysql, user=snorby password=senha dbname=snorby host=localhost

Agora temos que instalar o passenger para trabalhar apache2 com ruby

Vamos instalar as dependências

apt-get install apache2-prefork-dev libcurl4-openssl-dev -y

Agora vamos instalar o passenger

gem install passenger
passenger-install-apache2-module

Aqui informe a primeira alternativa

Agora vamos configurar o módulo para o apache

Vamos acertar a localização do módulo

vim /etc/apache2/mods-available/passenger.load
LoadModule passenger_module /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.15/ext/apache2/mod_passenger.so

Agora vamos acertar a configuração do módulo

vi /etc/apache2/mods-available/passenger.conf
<IfModule mod_passenger.c>
PassengerRoot /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.15
PassengerRuby /usr/local/bin/ruby
</IfModule>

Vamos habilitar agora os módulos necessários

a2enmod passenger
a2enmod rewrite

Agora vamos acertar o virtualhost

vim /etc/apache2/sites-available/default
<VirtualHost *:80>
   ServerName snorby.douglasqsantos.com.br
   DocumentRoot /var/www/snorby/public/
   <Directory /var/www/snorby/public>
     RailsBaseURI /
     Options +ExecCGI FollowSymLinks -MultiViews
     AllowOverride all
     Order allow,deny
     Allow from all
   </Directory>
     ErrorLog ${APACHE_LOG_DIR}/snorby-error.log
     LogLevel warn
     CustomLog ${APACHE_LOG_DIR}/snorby-access.log combined
     ServerSignature Off
</VirtualHost>

Agora vamos reiniciar o serviço do apache

/etc/init.d/apache2 restart

Vamos subir o snort

/usr/local/bin/snort -q -u snort -g snort -c /etc/snort/snort.conf -i eth0 & > /dev/null

Agora vamos subir o Barnyard2

/usr/local/bin/barnyard2 -c /etc/snort/barnyard2.conf \
 -d /var/log/snort -f snort.log -w /etc/snort/bylog.waldo \
 -G /etc/snort/gen-msg.map -S /etc/snort/sid-msg.map \
 -C /etc/snort/classification.config & > /dev/null

Agora é so acessar http://ip_servidor

  • usuário: snorby@snorby.org
  • password: snorby

Aqui na tela principal do Snorby temos que habilitar os serviços siga os passos abaixo

  1. Administração
  2. Worker & Job Queue
  3. Agora em Worker Options
  4. Start Sensor Cache Job
  5. Start Daily Cache Job

Agora vamos criar o script de inicialização do Snort e Barnyard2 e Snorby

vim /etc/init.d/snortbarn
#! /bin/sh
#
### BEGIN INIT INFO
# Provides:snortbarn
# Required-Start: $remote_fs $syslog mysql
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# X-Interactive: true
# Short-Description: Start Snort, Barnyard and Snorby
### END INIT INFO
### VARIAVEIS UTILIZADAS NO SCRIPT ###
RUBY=$(which ruby)
RAILS=$(which rails)
BARNYARD=$(which barnyard2)
SNORT=$(which snort)
KILLALL=$(which killall)


case $1 in
        start)
  /usr/local/bin/snort -q -u snort -g snort -c /etc/snort/snort.conf -i eth0 & > /dev/null
  /usr/local/bin/barnyard2 -q -c /etc/snort/barnyard2.conf \
  -d /var/log/snort -f snort.log -w /etc/snort/bylog.waldo \
  -G /etc/snort/gen-msg.map -S /etc/snort/sid-msg.map \
  -C /etc/snort/classification.config & > /dev/null
  ;;
        stop)

  $KILLALL snort barnyard2
  ;;
   restart)
                $0 stop
                $0 start
        ;;
        *)
                echo "usage: $0 (start|stop|restart)"
        ;;
esac

Agora vamos acertar a permissão do script

chmod +x /etc/init.d/snortbarn

Agora vamos colocar ele na inicialização do sistema

insserv -f -v snortbarn

Vamos reiniciar o servidor para recarregar todas as novas mudanças

reboot

Agora é so acessar http://ip_servidor

  • usuário: snorby@snorby.org
  • password: snorby

Não esqueça de mudar o usuário e senha de login em settings

Agora é so efetuar os ajustes nas regras que comentamos no Snort, habilitar o que achar necessário, não esqueça de comentar a local.rules

Referências