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..