Implementando Snort com MySQL e Guardian

Instalando o Snort

Primeiramente precisamos instalar os pacotes necessários.

root@debian:~# aptitude install snort-mysql snort-common snort-common-libraries 
root@debian:~# aptitude install snort-doc snort-rules snort-rules-default

# Responda as seguintes perguntas ...

Address range for the local network: 200.49.175.144/29
Set up a database for snort-mysql to log to? <Yes>

Logo após a instalação, o Snort não conseguirá finalizar a instalação dos pacotes pois a base de dados do MySQL ainda não estará configurada. Precisaremos finalizar a configuração do Snort com o MySQL para que a instalação seja finalizada.

Vamos descompactar o arquivo SQL para a criação das tabelas do MySQL.

root@debian:~# gunzip /usr/share/doc/snort-mysql/create_mysql.gz

Em seguida, vamos preparar o MySQL e importar o arquivo SQL para dentro do banco de dados.

root@debian:~# mysql -u root -p
Enter password: ****************

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1237076
Server version: 5.1.37-0.dotdeb.1 (Debian)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> CREATE DATABASE snort;
Query OK, 1 row affected (0.04 sec)

mysql> CREATE USER 'snort'@'localhost' IDENTIFIED BY 'senha';
Query OK, 0 rows affected (0.01 sec)

mysql> GRANT ALL PRIVILEGES ON `snort` . * TO 'snort'@'localhost';
Query OK, 0 rows affected (0.01 sec)

mysql> use snort;
Database changed

mysql> source /usr/share/doc/snort-mysql/create_mysql
Query OK, 0 rows affected (0.06 sec)

Query OK, 1 row affected (0.01 sec)

mysql> quit
Bye

Em seguida, remova o arquivo a seguir para que a instalação possa continuar.

root@debian:~# rm /etc/snort/db-pending-config

rm: remove regular empty file `/etc/snort/db-pending-config'? y

Feito isso, apenas execute o aptitude novamente para que a instalação possa ser finalizada.

root@debian:~# aptitude -f install

Configurando o Snort

Para configurar o Snort, vamos editar o seu arquivo de configuração.

root@debian:~# vi /etc/snort/snort.conf

#var HOME_NET any
var HOME_NET [200.49.175.144/29,201.63.57.80/29]

var EXTERNAL_NET [200.49.175.144/29]
#var EXTERNAL_NET any
#var EXTERNAL_NET !$HOME_NET

#var DNS_SERVERS $HOME_NET
var DNS_SERVERS [200.49.175.146,201.63.57.82]

#var SMTP_SERVERS $HOME_NET
var SMTP_SERVERS [200.49.175.146]

#var HTTP_SERVERS $HOME_NET
var HTTP_SERVERS [200.49.175.146]

#var SQL_SERVERS $HOME_NET
var SQL_SERVERS [200.49.175.146,201.63.57.82]

var TELNET_SERVERS $HOME_NET

#var SNMP_SERVERS $HOME_NET
var SNMP_SERVERS [201.63.57.82]

[...]

preprocessor http_inspect: global iis_unicode_map unicode.map 1252

#preprocessor http_inspect_server: server default profile all ports { 80 8080 8180 } oversize_dir_length 500

preprocessor http_inspect_server: server default \
ports { 80 3128 8080 } \
flow_depth 0 \
#iis_unicode_map unicode.map 1252 # Doesnt want to work
directory no \
ascii no \
utf_8 no \
bare_byte no \
double_decode no \
u_encode yes \
multi_slash no \
#non_rfc_char { 0x00 } \ # Generates too many false positives
#chunk_length 500000 \
chunk_length 0 \
non_strict \
iis_unicode no \
iis_backslash no \
iis_delimiter no \
#oversize_dir_length 400 \ # Generates too many false positives
webroot yes

[...]

output log_tcpdump: tcpdump.log

output database: log, mysql, user=snort password=senha dbname=snort host=localhost

Feito a configuração, reinicie o serviço do Snort.

root@debian:~# /etc/init.d/snort stop
Stopping Network Intrusion Detection System: snortNo running snort instance found (warning).

root@debian:~# /etc/init.d/snort start
Starting Network Intrusion Detection System: snort (eth0 no /etc/snort/snort.eth0.conf found,
defaulting to snort.conf ...done).

E confira se o processo do Snort foi carregado com sucesso. Caso não esteja carregado como mostrado a seguir, verifique o arquivo de log (/var/log/syslog) em busca de possíveis erros existentes na configuração.

root@debian:~# ps ax | grep snort

26850 ?    Ss   0:10 /usr/sbin/snort -m 027 -D -d -l /var/log/snort -u snort -g snort -c /etc/snort/snort.conf -S HOME_NET=[200.49.175.144/29] -i eth0

Em seguida vamos implementar o modelo de visualização via web. Siga os passos a seguir:

root@debian:~# cd /var/www
root@debian:/var/www# wget -c http://downloads.sourceforge.net/project/secureideas/BASE/base-1.4.3.1/base-1.4.3.1.tar.gz?use_mirror=ufpr
root@debian:/var/www# tar -xvzf base-1.4.3.1.tar.gz
root@debian:/var/www# mv base-1.4.3.1/ snort
root@debian:/var/www# rm -f base-1.4.3.1.tar.gz
root@debian:/var/www# chown -R root.www-data snort/
root@debian:/var/www# chmod -R g+w snort/

root@debian:/var/www# wget -c http://downloads.sourceforge.net/project/adodb/adodb-php5-only/adodb-509a-for-php5/adodb509a.tgz?use_mirror=ufpr
root@debian:/var/www# tar xzvf adodb509a.tgz
root@debian:/var/www# rm -f adodb509a.tgz
root@debian:/var/www# chown -R root.root adodb5

Em seguida, vamos acessar o ambiente web para verificação dos logs do Snort. Para isso, acesse:

http://seu_ip/snort

Na primeira tela, confira os dados e clique em “Continue”.

Settings

Config Writeable: Yes
PHP Version: 5.2.9-0.dotdeb.2
PHP Logging Level: [ERROR][WARNING][PARSE] 

Em seguida o passo 1 de 5, onde configuramos a linguagem e o caminho do adodb5.

Step 1 of 5

Pick a Language: portuguese
Path to ADODB: /var/www/adodb5/

Feita as configurações, clique em Enviar Dados.

A etapa 2 é a configuração do acesso a base de dados do MySQL.

Step 2 of 5

Pick a Database type:	MySQL
 
Database Name: snort
Database Host: localhost
Database Port: 3306
Database User Name: snort
Database Password: senha
 
Use Archive Database: Não Marcar
Archive Database Name: Não Configurar
Archive Database Host: Não Configurar
Archive Database Port: Não Configurar
Leave blank for default! Não Configurar
Archive Database User Name: Não Configurar
Archive Database Password: Não Configurar

Feita as configurações, clique em Enviar Dados.

Na etapa 3, vamos configurar um usuário e senha para autenticar no sistema.

Step 3 of 5
 
Use Authentication System: Não Marcar
Admin User Name: Não Configurar 
Password: Não Configurar
Full Name: Não Configurar

Feita as configurações, clique em Enviar Dados.

Na etapa 4, iremos criar adicionar alguns dados nas tabelas da base do Snort no MySQL.

Step 4 of 5

Operation: BASE tables
Description: Adds tables to extend the Snort DB to support the BASE functionality

Clique em Create Base AG

O resultado deverá ser algo parecido com o log a seguir:

Successfully created 'acid_ag'
Successfully created 'acid_ag_alert'
Successfully created 'acid_ip_cache'
Successfully created 'acid_event'
Successfully created 'base_roles'
Successfully INSERTED Admin role
Successfully INSERTED Authenticated User role
Successfully INSERTED Anonymous User role
Successfully INSERTED Alert Group Editor role
Successfully created 'base_users'

Status: DONE - Successfully created user.

Feita as configurações, clique em Now continue to step 5.

Agora basta logar com o usuário e senha criados e você já terá os relatórios do Snort.

Instalando e Configurando o Guardian

O Guardian não possui pacote nos repositórios. Com isso, teremos que baixar o pacote do site oficial. Siga os passos a seguir.

root@debian:~# wget -c http://www.chaotic.org/guardian/guardian-1.7.tar.gz
root@debian:~# tar xzvf guardian-1.7.tar.gz
root@debian:~# cd guardian-1.7
root@debian:~/guardian-1.7# cp scripts/iptables_block.sh /usr/local/bin/guardian_block.sh
root@debian:~/guardian-1.7# cp scripts/iptables_unblock.sh /usr/local/bin/guardian_unblock.sh
root@debian:~/guardian-1.7# cp guardian.conf /etc/snort/
root@debian:~/guardian-1.7# ln -s /etc/snort/guardian.conf /etc/guardian.conf
root@debian:~/guardian-1.7# cp guardian.pl /usr/local/bin/
root@debian:~/guardian-1.7# chown root.root /usr/local/bin/guardian*

Agora vamos configurar o Guardian.

root@debian:~# vi /etc/snort/guardian.conf

HostIpAddr        200.49.175.146

Interface         eth0

#HostGatewayByte  1
HostGatewayByte   145

#LogFile          /var/log/guardian.log
LogFile           /var/log/snort/guardian.log

#AlertFile        /var/adm/secure
AlertFile         /var/log/snort/alert

#IgnoreFile       /etc/guardian.ignore
IgnoreFile        /etc/snort/guardian.ignore

#TargetFile       /etc/guardian.target
TargetFile        /etc/snort/guardian.target

TimeLimit         86400

Em seguida criaremos dois arquivos adicionais, necessários para o Guardian funcionar corretamente.

root@debian:~# touch /etc/snort/guardian.ignore 

Neste arquivo você poderá adicionar os IPs que serão ignorados pelo Guardian.

E no próximo, você cadastrará os IPs adicionais a serem monitorados caso existam, o que é o caso da nossa configuração.

root@debian:~# vi /etc/snort/guardian.target

200.49.175.146
200.49.175.147
200.49.175.148
200.49.175.149
200.49.175.150

Também precisamos criar o arquivo de log do Guardian.

root@debian:~# touch /var/log/snort/guardian.log

Para finalizar vamos criar um arquivo de inicialização para gerenciar o Guardian.

root@debian:~# vi /etc/init.d/guardian.sh

#!/bin/sh

start()
{
        export PATH=$PATH:/usr/local/bin
        /usr/local/bin/guardian.pl -c /etc/snort/guardian.conf
}

stop()
{
        ps aux | grep 'guardian.pl *-c' 2>&1 > /dev/null
        if [ $? -eq 0 ];
        then
                kill `ps aux | grep 'guardian.pl *-c' | awk '{print $2}'`
        else
                echo "Guardian is not running ....."
        fi
}

status()
{
        ps aux | grep 'guardian.pl *-c' 2>&1 > /dev/null
        if [ $? -eq 0 ];
        then
                echo "Guardian is Running ....."
        else
                echo "Guardian is not Running ...."
        fi
}

case "$1" in
        start)
        start
        ;;
        stop)
        stop
        ;;
        restart)
        stop
        start
        ;;
        status)
        status;;
        *)
        echo $"Usage: $0 {start|stop|restart|status}"
esac

Uma cópia deste arquivo (guardian.sh) pode ser obtida em http://downloads.fabriciovc.eti.br/snort/guardian.sh.

Não podemos esquecer de dar permissão de excução no arquivo.

root@debian:~# chmod +x /etc/init.d/guardian.sh

E adicionar o mesmo para que seja sempre carregado na inicialização.

root@debian:~# ln -s /etc/init.d/guardian.sh /etc/rc2.d/S21guardian.sh

E para finalizar, vamos reiniciar o serviço do Guardian.

root@debian:~# /etc/init.d/guardian.sh stop
root@debian:~# /etc/init.d/guardian.sh start

OS shows Linux
My ip address and interface are: 200.49.175.146 eth0
Loaded 0 addresses from /etc/snort/guardian.ignore
Loaded 5 addresses from /etc/snort/guardian.target
Becoming a daemon..

Voltar

linux/artigos/snort-mysql-guardian.txt · Última modificação: 13/01/2015 10:44 (edição externa)