Sistema de Segurança Linux para Usuário Final
Trabalho de Conclusão de Curso apresentado à UTFPR como requisito parcial para obtenção do título de Tecnólogo em Informática.
Curitiba
2007
MShield:
Sistema de Segurança Linux para Usuário Final
Trabalho de Conclusão de Curso apresentado à UTFPR como requisito parcial para obtenção do título de Tecnólogo em Informática.
Orientadora:
Professora MSc. Ana Cristina Barreiras Kochem Vendramin
Curitiba
2007
Sistema de Segurança Linux para Usuário Final
Trabalho de Conclusão de Curso apresentado à UTFPR como requisito parcial para obtenção do título de Tecnólogo em Informática.
Data de Aprovação:
____/____/______
Banca Examinadora:
___________________
Profª MSc. Ana Cristina Barreiras Kochem Vendramin (Orientadora)
UTFPR-DAINF
___________________
Prof. Paulo Bordin UTFPR-DAINF
___________________
Prof. Christian Carlos Souza Mendes UTFPR-DAINF
___________________
Profª Drª Gilda Maria Souza Friedlaender
(Coordenadora de Trabalho de Conclusão de Curso) UTFPR-DAINF
Curitiba
2007
se mede pela dose de humor que ele é capaz de usar."
(Nietzsche)
A todos aqueles que importam
Agradeço a todos que contribuíram direta ou indiretamente para que este trabalho fosse desenvolvido. Especial agradecimento a minha família pelo apoio em todos momentos da minha vida, a professora Ana Cristina Kochem Vendramin pela orientação, contribuição, cobrança e correção do trabalho, ao Tiago Almeida Barboza de Souza pelas dicas de openoffice e ao Tiago Salem Herrmann pela ajuda de sempre em Bash, etc.
Agradeço também a comunidade do Software Livre pelo desenvolvimento das ferramentas usadas como base para este trabalho.
1 INTRODUÇÃO...12
1.1 Objetivo...14
1.2 Trabalhos Relacionados...14
1.3 Estrutura do documento...15
2 ANÁLISE DO SISTEMA...16
2.1 Diagrama de Contexto...16
2.2 Diagrama de fluxo de dados - Nível 1...16
2.3 Diagrama de fluxo de dados - Nível 2...17
3 FERRAMENTAS...18
3.1 Iptables ...18
3.2 Snort...18
3.3 Snort_inline...19
3.4 Oinkmaster...20
3.5 Rrdtools...20
3.6 Pmgraph...20
3.7 Ipqueue...21
4 O SISTEMA DE SEGURANÇA MSHIELD...22
4.1 Instalação e Configuração...22
4.3 Integração...26
4.4 Funcionamento...27
4.5 Relatório...29
4.6 Telas do sistema...30
5 ANÁLISE DE DESEMPENHO...41
5.1 Memória...41
5.2 Processador...42
6 CONCLUSÃO E TRABALHOS FUTUROS...44
REFERÊNCIAS...45
APÊNDICE A – Script de Instalação (Instala)...47
APÊNDICE B – Script de Biblioteca (library)...53
APÊNDICE C – Script do Oinkmaster (oinkmaster_update)...64
APÊNDICE D – Script de Utilização (mshield)...66
APÊNDICE E – Script de Inicialização (rc.mshield)...75
APÊNDICE F – Script auxiliar de relatório (report)...77
Figura 1. Diagrama de Contexto...16
Figura 2. Diagrama de fluxo de dados nível 1...17
Figura 3. Diagrama de fluxo de dados nível 2...17
Figura 4. Script de download de pacotes (parte 1)...23
Figura 5. Script de download de pacotes (parte 2)...24
Figura 6. Script de download de pacotes (parte 3)...25
Figura 7. Script de download de pacotes (parte 4)...26
Figura 8. Script de download de pacotes (parte 5)...26
Figura 9. Funcionamento geral do sistema...28
Figura 10. Tela inicial do relatório...29
Figura 11. Segunda tela do relatório...30
Figura 12. Apresentação...31
Figura 13. Instalação Seleção...32
Figura 14. Lista de pacotes ...32
Figura 15. Progresso de Download...33
Figura 16. Download de pacote concluído...33
Figura 17. Finalização de download...34
Figura 18. Descompactação concluída...34
Figura 19. Compilação de pacotes...35
Figura 20. Compilação concluída...35
Figura 21. Download de regras...36
Figura 22. Tela final de instalação...37
Figura 23. Menu principal mshield...38
Figura 24. Tela de personalização...38
Figura 25. Tela de bloqueio de porta...39
Figura 26. Tela de parar...39
Figura 27. Tela de parada de execução automática...40
Figura 28. Consumo de memória...41
Figura 29. Gráfico de processamento 1...42
Figura 30. Gráfico de processamento 2...42
API Application Programming Interface BASH Bourne Again Shell
BSD Berkeley Software Distribution HTML Hypertext Markup Language IDS Intrusion Detection System IP Internet Protocol
IPS Intrusion Protection System MSHIELD Mighty Shield
NAT Net Address Translate QoS Quality of Service
TCP Transmission Control Protocol UDP User Datagram Protocol
A popularização do computador pessoal não é mais novidade nos dias de hoje.
Esta popularização trouxe consigo também a difusão de novas alternativas para o uso do micro-computador, a exemplo podemos citar o sistema operacional Linux. Em uma espécie de simbiose cibernética os computadores e os hackers sempre estiveram e estão juntos, logo, o problema da segurança em computadores é um problema que atinge todo tipo de usuário A solução apresentada neste trabalho visa beneficiar o usuário final Linux com um sistema completo de segurança baseado nas mais atuais tecnologias de proteção e de fácil instalação e funcionamento. Na área de segurança em redes de computadores já é difundido o termo IDS (Intrusion Detection System). O que este trabalha apresenta é uma solução pró-ativa, um IPS (Intrusion Protection System) que não só detecta uma tentativa de intrusão como também a bloqueia trazendo, desta forma, uma verdadeira proteção contra hackers e ataques remotos.
Palavras-chave: Segurança em computadores, IDS, IPS, iptables, snort.
The popularization of the personal computer is not any news nowadays. This popularization brought within new alternatives for the use of the computer, as an example:
the Operational System Linux. In a kind of cybernetic symbiosis the computers and the hackers always have been together, thus the security matter in computers systems reaches all users. The solution presented in this project aims to benefit the Linux user with a complete security system based on a set of cutting edge technologies available and that is easy install and get running. The Intrusion Detection System (IDS) is a well known but this project presents a pro-active solution: an Intrusion Protection System (IPS), a system that detects and avoid an intrusion attempt, so we can have a real protection against hackers and remote attacks.
keywords: Computer Security , IDS, IPS, iptables, snort.
1 INTRODUÇÃO
O nascimento da Internet se deu no ano de 1969 com a ARPANET, rede de propósitos militares (WIKIPEDIA, 2007). Com o passar de poucos anos a comunicação entre computadores veio se tornando cada vez mais popular, começando com as universidades e depois se estendendo a empresas até chegar ao usuário final.
Junto com a popularização da comunicação remota entre computadores, assim como a Internet, cresceu também o número de pessoas especialistas e entusiastas desse sistema. A Internet, ainda em sua idade tenra, funcionava sobre sistemas que não tinham como prioridade a segurança dos mesmos, mas sim a funcionalidade. Neste contexto foram surgindo os, hoje tão conhecidos, hackers, crackers e afins. Pessoas experientes e de bom conhecimento nesses sistemas que faziam uso destes explorando-os de forma a obter benefício próprio, seja roubo de informações, diversão, etc.
O problema de segurança então se torna algo real e preocupante. As empresas e usuários começaram a atentar para o fato e a tomar atitudes a fim de se proteger.
Uma série de ferramentas e estratégias de proteção começam a ser desenvolvidas e difundidas, muitas destas vigentes até hoje. Dentre elas, as mais conhecidas, podemos citar:
• Firewall: Tem como objetivo bloquear acessos remotos indevidos a máquina local ou rede. Bastante eficiente. É uma solução indispensável a qualquer sistema de segurança de computadores;
• Proxy: Simplificadamente pode ser entendido como um sistema que restringe acessos internos para a rede externa, como bloquear o acesso a alguns determinados sites da Internet;
• IDS: Sistema que fica atento a tentativas remotas de invasão ao sistema de computadores local. Este sistema armazena em disco todas as tentativas em questão, com hora do incidente,
tipo do incidente, etc. É uma maneira eficaz de analisar o que acontece na rede e tentar se proteger mais adequadamente;
• Anti-Vírus: Talvez o mais famoso no âmbito do usuário final.
Programa que protege a máquina contra outros programas maliciosos que possam causar danos a máquina;
• Anti-Spyware: Este mais atual que os outros tem como objetivo proteger a máquina de programas que se instalam e roubam informações.
Todas estas ferramentas focam em uma área de segurança e provêem um método para se aumentar a segurança. O firewall pode ser considerado a forma mais eficiente e, de alguma forma, drástica de proteção. Um firewall em sua forma tradicional é eficiente por que realmente bloqueia o tráfego antes mesmo que este chegue de fato ao Sistema Operacional, por outro lado, drástico porque bloqueia o pacote independente do conteúdo do mesmo.
Podemos selecionar o IDS como um ótimo detector de tentativas de intrusão. Isto é algo bastante útil para se conhecer as ameaças que estão de fato cercando os usuários.
Este trabalho trata de oferecer uma ferramenta integrada que ao mesmo tempo possui função de firewall e IDS. Desta forma se juntam as duas melhores tecnologias de proteção em apenas um sistema. Um sistema que protege de fato o usuário de forma personalizável e gera relatórios de atividades do sistema, de forma que o usuário fique a par da situação de sua segurança.
O MShield, devido a sua facilidade de instalação e operação, é a melhor escolha para um sistema de segurança completo, trazendo o que antes exigia um conhecimento avançado em Linux e Redes de computadores ao mundo do usuário. Este sistema é resultado da integração das mais avançadas tecnologias de segurança em um só sistema utilizável por qualquer usuário com conhecimentos mínimos de Linux.
1.1 Objetivo
Este projeto, dentro do contexto anterior, propõe o desenvolvimento de uma solução de segurança conhecida como IPS (Intrusion Protection System). Um IPS é formado por um conjunto de ferramentas que objetivam ter um comportamento pró-ativo na segurança, ou seja, detectar uma tentativa de intrusão e no mesmo momento bloqueá-la. Esta é uma solução bastante recente, com ferramentas ainda em suas versões de desenvolvimento, portanto, não concluídas totalmente. Também é uma solução de difícil implementação e funcionamento inicial, porque envolve um conhecimento avançado de rede de computadores, Linux e programação.
Um IPS envolve um firewall, um IDS e várias ferramentas complementares.
Todas estas ferramentas trabalhando integradas para o propósito final.
O objetivo deste projeto é desenvolver uma solução integrada de um IPS que possa ser instalado, utilizado e monitorado facilmente por um usuário leigo de computadores, contornando todas as dificuldades e particularidades de configuração, instalação e funcionamento e ainda adicionando personalização de firewall de uma maneira extremamente fácil.
Depois de instalado no computador do usuário, o Mshield proporcionará uma verdadeira barreira de segurança para a máquina ou rede local.
1.2 Trabalhos Relacionados
Dentre os principais trabalhos relacionados, pode-se citar:
• Guardian: programa de segurança que funciona junto com o Snort, software com funcionalidade de detector de intrusão, automaticamente atualizando as regras de firewall baseando-se nos alertas do Snort. As regras de firewall atualizadas bloqueiam todo tráfego vindo do IP (Internet Protocol) da máquina atacante (a máquina que causou os alertas) (STEVENS, 2007). A desvantagem dessa solução é o fato de ela bloquear todo tráfego da máquina atacante alem de atualizar as regras de firewall, ou seja, alterar a tabela de regras, isso após o pacote intrusivo já ter entrado na rede.
Desta forma é possível perceber que a segurança ainda não é totalmente satisfatória e organizada;
• Fwsnort: funciona em conjunto com o Snort. Lê as regras do Snort e constrói regras de firewall (iptables) equivalentes a estas regras (RASH, 2007);
• Snortsam: funciona com base em um plug-in de saída do Snort e também interage diretamente com o firewall através de um agente próprio (KNOBBE, 2007);
• Blockit: monitora os alertas do Snort e com base neles cria regras de firewall (SAMAYOA, 2007).
1.3 Estrutura do documento
O presente documento está organizado em uma estrutura progressiva, ou seja, primeiro é mostrada a base para o projeto, bem como os conceitos e ferramentas utilizadas, logo após, mais detalhes sobre o funcionamento e integração do sistema de modo geral e por fim descrições técnicas detalhadas do funcionamento dos scripts do MShield.
2 ANÁLISE DO SISTEMA
Este capítulo trata de diagramar a estrutura e funcionamento do MShield. São apresentados os diagramas de Contexto, Fluxo de dados nível 1 e Fluxo de dados nível 2.
2.1 Diagrama de Contexto
A Figura 1 mostra o Diagrama de Contexto do sistema. Uma visão de seu funcionamento. Os dados provindos da Internet, tanto tráfego TCP (Transmission Control Protocol) quanto UDP (User Datagram Protocol), passam através do MShield, portanto, sendo filtrados e seguindo em frente até o computador, caso satisfaçam as restrições (regras) do sistema.
Figura 1. Diagrama de Contexto 2.2 Diagrama de fluxo de dados - Nível 1
A Figura 2 mostra o Diagrama de Fluxo de Dados nível 1. Os dados provindos da Internet passam pelo primeiro processo que os filtra (iptables), ou seja, estes dados vão para a fila criada pelo módulo ip_queue onde esperam para serem processados. O próximo processo trata efetivamente de processar os dados de entrada, verificando se satisfazem as restrições, ou seja, se não apresentam características de possíveis ataques e dados maliciosos. O processamento dos dados gera outros dados que são usados para a criação posterior do relatório de atividades.
Figura 2. Diagrama de fluxo de dados nível 1 2.3 Diagrama de fluxo de dados - Nível 2
A Figura 3 mostra o Diagrama de Fluxo de Dados nível 2. Após os dados passarem pelo iptables e em seguida serem enfileirados no ip_queue, o snort_inline busca nesta fila os dados a serem avaliados (permitidos ou não). Os que satisfazem as restrições serão direcionados ao computador, os que não satisfazem serão bloqueados. Toda atividade de bloqueio, entre outras, são registradas em log. O log serve de base para o pmgraph gerar relatórios.
Figura 3. Diagrama de fluxo de dados nível 2
3 FERRAMENTAS
O presente capítulo fornece uma descrição das ferramentas que servem como base para o desenvolvimento do MShield.
3.1 Iptables
Netfilter é um módulo que fornece ao sistema operacional Linux, entre outras, as funções de firewall de rede de computadores. Netfilter é formado por uma série de ganchos dentro do kernel Linux que permite aos módulos do kernel registrar funções próprias dentro da pilha de rede do sistema operacional.
Iptables é o nome da ferramenta que permite a criação de regras de firewall. Iptables é formado por uma tabela genérica para a definição dos conjuntos de regras. Cada regra, em conjunto com uma tabela de IP's, forma um número de classificadores que são ativados executando uma determinada ação.
Apesar de, tecnicamente, o iptables ser apenas uma ferramenta que controla o módulo netfilter, o nome "iptables" é frequentemente utilizado como referência ao conjunto completo de funcionalidades do netfilter. O iptables é parte de todas as distribuições modernas do Linux (WELTE, 2007).
As principais características do iptables são:
• Todos os tipos de tradução de endereços de rede, exemplo NAT (Network Address Translation);
• Infra-estrutura flexível e extensível;
• Várias camadas de API's para extensões;
• Grande quantidade de plug-ins e módulos.
O que é possível com o iptables:
• Construir firewalls para internet;
• Utilizar NAT e mascaramento para compartilhar acesso a internet;
• Controle de QoS (Quality of Service);
• Fazer modificação nos pacotes.
3.2 Snort
Snort é o IDS mais conhecido e reconhecido no mundo da informática.
Sua função principal é fazer detecção de intrusão e registrar todas as suas atividades.
Abaixo alguns conceitos básicos sobre o Snort:
• Sniffer mode, snort lê os pacotes que trafegam na rede e os mostra na tela do computador em que está instalado;
• Logger mode, arquiva em disco todas as suas atividades;
• NIDS (Network Intrusion Detection System), modo mais complexo e configurável, permite que o Snort analise o tráfego da rede procurando por padrões estabelecidos em uma série de regras pré-definidas e desempenhe várias ações baseado no que vê;
• Inline mode, obtém pacotes do iptables ao invés de obter da libpcap (biblioteca para captura de pacotes, na qual o snort se baseia) e então faz com que o iptables bloqueie ou deixe passar os pacotes com base nas regras específicas do modo inline (CASWELL, 2007).
De uma forma geral o Snort funciona da seguinte maneira:
• Quando ativado ele liga o Sniffer mode para que, desta forma, possa ver todos os pacotes que trafegam na rede sem intervir na comunicação em si;
• O Snort possui um conjunto de arquivos que contém regras específicas, regras estas que identificam padrões de ataques remotos conhecidos. A medida que o Snort analisa o tráfego da rede, ele verifica se o pacote que está atualmente sendo analisado bate com alguma regra de seus arquivos. Caso isso aconteça o Snort lança um alerta e o grava em disco no arquivo de log. Caso não identifique o pacote atual com algum padrão, então o próximo pacote é analisado.
Este projeto tira proveito principalmente do Inline mode do Snort (METACALF, 2007) que será visto a seguir.
3.3 Snort_inline
O Snort_inline é basicamente uma versão modificada do Snort que aceita pacotes vindos do iptables via libipq (biblioteca de funções do módulo ip_queue do iptables) ao invés da libpcap. Então usa uma série de regras específicas (drop, sdrop, reject) para dizer ao iptables quais pacotes devem ser bloqueados, rejeitados, modificados ou permitidos. Simplificadamente é possível entender o Snort_inline como um IPS que usa as assinaturas (regras) de um IDS existente para decidir quais pacotes irão passar por ele e quais não irão (METACALF, 2007).
3.4 Oinkmaster
Oinkmaster é um script que irá ajudar a gerenciar e atualizar as regras do Snort. O snort disponibiliza para download regras comunitárias atualizadas de tempos em tempos. Neste projeto o oinkmaster é utilizado para fazer o download destas regras atualizadas periodicamente.
Para que funcione com o Snort_inline são necessárias algumas modificações no funcionamento do oinkmaster, as quais, são implementadas neste projeto (STLING, 2007).
3.5 Rrdtools
As rrdtools são algumas ferramentas auxiliares neste projeto.
Basicamente elas coletam dados e os organizam de forma a facilitar uma montagem gráfica da situação.
O MShield gera periodicamente dados estatísticos sobre suas atividades, estes dados posteriormente irão servir de entrada para as rrdtools e para o pmgraph, o qual será explicado a seguir. Desta forma pode-se, com alguns ajustes, proporcionar ao usuário final uma forma fácil e prática de monitorar as atividades de seu novo sistema de segurança. No caso do presente projeto este monitoramento será feito através de uma página HTML (Hypertext Markup Language) comum com gráficos (OETIKER, 2007).
3.6 Pmgraph
Pmgraph é um script feito em Perl que gera uma página HTML com gráficos do pré-processador Snort perfmonitor, o qual não é ativado por padrão na instalação , porém, é ativado pelo MShield. Usa como fonte de entrada a saída das rrdtools (STLING, 2006).
3.7 Ipqueue
Ipqueue é um modulo específico do iptables, o qual, permite direcionar dados de entrada do iptables para nível de usuário. Desta forma os dados capturados pelo iptables são direcionados para uma espécie de fila, a qual, está disponível para acesso a nível de usuário de sistema. Isso é fundamental para o funcionamento do MShield. É nesta fila que o MShield irá verificar os pacotes e decidir se serão permitidos ou se são suspeitos e serão bloqueados. A libipq possibilita este funcionamento (TOREN, 2007).
4 O SISTEMA DE SEGURANÇA MSHIELD
O MShield por sua natureza possibilita uma proteção a máquina local ou a uma rede inteira. Quando instalado em uma máquina local o MShield irá funcionar monitorando toda a entrada externa da placa de rede local, funcionando desta maneira como uma camada posicionada anteriormente à própria máquina. Todos os dados provenientes da rede externa (por exemplo, Internet) passarão pelo filtro do MShield antes de serem liberados, o que garante uma grande segurança ao usuário. Os detalhes de funcionamento serão tratados na próxima seção
O MShield também pode ser instalado em uma máquina que tem o papel de gateway de uma rede inteira. Desta forma a rede toda estará atrás do filtro do MShield, garantindo, portanto, uma barreira de proteção não somente para a máquina em que esta instalada, mas sim para todas as máquinas que estão atrás dela.
4.1 Instalação e Configuração
O script principal do sistema é o Instala. Sua versão completa esta disponível no apêndice A.
Este script é encarregado de instalar, configurar e ajustar o sistema para uso. Junto com o script Instala existe um outro chamado library. Este segundo possui as funções usadas no primeiro, para facilitar a organização e o entendimento.
De modo geral, as seguintes etapas são executadas:
• Download dos pacotes necessários (caso seja selecionada esta opção);
• Compilação e linkagem dos pacotes;
• Descompactação dos pacotes;
• Ajustes finos como por exemplo, montagem de arquivos de configuração, diretórios, etc.
Abaixo estão explicadas algumas das principais partes dos scripts acima mencionados.
A Figura 4 ilustra a função de download dos pacotes, a exemplo, o
snort. O download é feito através do wget, o qual é um aplicativo bastante conhecido de download de arquivos. O código toma o cuidado de fazer este download de forma limpa e transparente para o usuário. O trecho de codigo li faz com que hajam duas tentativas de download do pacote. O wget fica tentando estabelecer uma conexão durante vinte segundos antes de acusar uma falha de uma tentativa. Durante todo o tempo de download o trecho verifica quantos bytes do pacote já foram baixados para o disco local e mostra um status gráfico para o usuário. Em caso de download concluído uma mensagem é mostrada. Em caso de erro, será mostrada uma mensagem explicando o erro ocorrido.
wget -q --tries=2 -T 20 http://heanet.dl.sourceforge.net/sourceforge/snort- inline/$SNORT.tar.gz &
PIDRODANDO=$!; # guarda o PID do programa recem executado. Usado na funcao Rodando
Aguarda_inicio_download $SNORT.tar.gz Download $SNORT.tar.gz 2905172
Erro "Não foi possível fazer download do Snort, verificar o link de download no arquivo ./Instala"
Figura 4. Script de download de pacotes (parte 1)
A Figura 5 ilustra a parte do script referente à compilação dos pacotes recém baixados ou dos pacotes locais, dependendo da opção escolhida pelo usuário na instalação. Os pacotes referentes ao pcre, libdnet, pmgraph e rrdtools podem ser compilados sem necessidade de nenhum ajuste fino. O trecho de codigo acima toma cuidado de criar, para cada pacote, um arquivo de log que registra o status de cada etapa da compilação. Ao final, este arquivo é verificado e em caso de algum indício de erro na compilação, o script automaticamente avisa o usuário a respeito do ocorrido.
function Faz_compilacao {
for i in $LIBDNET $PCRE $LIBPCAP $PMGRAPH $RRDTOOLS do
dialog \
--title "Compilando $i" \ --infobox \
"Por favor aguarde\n" 0 0
cd $i
./configure > $i.log 2>&1 ; make >> $i.log 2>&1 ; make install >> $i.log 2>&1 cat $i.log | egrep -i "\berror\b" 2>&1
if [ $? = 0 ]; then
Erro "Problemas na compilacao do pacote $i"
fi cd ..
done
Figura 5. Script de download de pacotes (parte 2)
A Figura 6 ilustra a linha de compilação do snort_inline. Ele é compilado separadamente por precisar de um ajuste fino. É necessário ativar o parâmetro –enable-perfmon antes da compilação. Este parâmetro ativa um pré-processador do snort que possibilita fazer log, em um arquivo específico, de todas as suas atividades, desta forma é possível utilizar este arquivo criado como fonte para a geração do relatório.
O iptables também necessita de ajustes finos. Sua linha de compilação difere um pouco do tradicional por ser da forma: make install-devel. Esta diretiva proporciona uma instalação mais completa do mesmo. Outros ajustes menores também foram necessários.
Ajustes também são necessários para o pmgraph. É necessário adicionar o caminho correto para o Perl dentro do diretório em que foi instalado o rrdtools. Por se tratar de um script Perl, o pmgraph não precisa ser compilado. Este script foi modificado e encontra-se dentro da pasta ./contrib. Todos os ajustes mencionados e outros estão contidos e indicados nos scripts de instalação (ver apêndice A).
./configure --enable-perfmon > $SNORT.log 2>&1 ; make >> $SNORT.log 2>&1 ; make install
>> $SNORT.log 2>&1
Figura 6. Script de download de pacotes (parte 3)
A Figura 7 ilustra uma parte do script que faz mais ajustes ao snort_inline, de maneira a configurá-lo de forma necessária. Primeiramente, é criado o diretório de relatório, onde estarão contidos os relatórios gerados pelo MShield. Logo após, são copiados alguns arquivos essenciais para o funcionamento correto do snort_inline. Em seguida é incluída uma linha específica de pré-processador ao arquivo de configuração do snort_inline.
Essa linha é essencial para o funcionamento do pré-processador perfmonitor, o qual, possibilitará a geração dos relatórios. Dando continuidade, é criado um arquivo de regras local.rules dentro do diretório de regras. Este arquivo irá conter todas as regras personalizadas pelo usuário Por fim uma linha inserindo a definição da variável DNS_SERVERS dentro do arquivo de configuração, esta modificação é essencial para o funcionamento do snort_inline.
O oinkmaster necessita também de ajustes finos, estes estão indicados nos scripts. A Figura 8 mostra o trecho do script encarregado do download das regras mais atualizadas disponíveis no web-site oficial do Snort, desta forma populando o diretório de regras. Uma série de ajustes especiais são necessários para tornar estas regras compatíveis com o MShield e com as atualizações automáticas. Todas estas modificações estão indicados nos scripts dos apêndices A e D.
# Prepara Snort_inline
mkdir -p /etc/snort_inline/drop-rules mkdir -p /var/log/snort_inline mkdir -p /etc/snort_inline/relatório
cp ./$SNORT/etc/clas* /etc/snort_inline/drop-rules cp ./$SNORT/etc/refe* /etc/snort_inline/drop-rules cp ./$SNORT/etc/unicode.map /etc/snort_inline/unicode.map cp ./contrib/oinkmaster_update /etc/snort_inline/
# Ajusta snort para que comece a fazer log de atividades no arquivo perfmon.txt, para que possa ser
# gerado o relatório posteriormente
if [ -f /etc/snort_inline/snort_inline.conf ]; then rm /etc/snort_inline/snort_inline.conf fi
echo 'preprocessor perfmonitor: flow max events time 30 file
/etc/snort_inline/perfmon.txt pktcnt 300' >> /etc/snort_inline/snort_inline.conf cat ./$SNORT/etc/snort_inline.conf >> /etc/snort_inline/snort_inline.conf
# Cria o arquivo de regras personalizadas touch $RULE_PATH/local.rules
# Inclui variavel DNS_SERVERS, necessaria para algumas rules echo 'var DNS_SERVERS any' >> /etc/snort_inline/snort_inline.conf
Figura 7. Script de download de pacotes (parte 4)
Oinkmaster.pl -o /etc/snort_inline/drop-rules > /dev/null 2>&1
Figura 8. Script de download de pacotes (parte 5) 4.3 Integração
Em linhas gerais o funcionamento e integração das ferramentas empregadas neste projeto se dão da seguinte forma:
O iptables terá configurado uma regra específica, a qual, terá a função de direcionar todos os dados provindos da rede externa e direcioná-los à fila (provida pelo ipqueue). O snort_inline, por sua vez, irá coletar e analisar todos os pacotes de dados que estão nesta fila. Com base em suas regras de reconhecimento de ataques, o snort_inline irá decidir se certo pacote será bloqueado ou será permitido passar adiante. Durante toda sua atividade o snort_inline segue gerando em disco dados estatísticos, estes provindos do pré-processador perfmon (ativado em tempo de compilação). Este arquivo, o qual contém estes dados, serve de fonte de entrada para o pmgraph que
utiliza-se de meios providos pelas rrdtools para manipulação dos mesmos e geração de gráficos em uma página HTML, a qual poderá ser analisada pelo usuário.
Este processo todo possui diversas particularidades que possibilitam a sintonia dos processos. Todos estes detalhes serão tratados na seção seguinte onde será analisado o funcionamento interno do script de instalação.
4.4 Funcionamento
O objetivo do MShield é trazer para o usuário um sistema de segurança integrado e moderno que seja de fácil instalação e manuseio.
Para tornar isso possível é necessário fazer todas as configurações, compilações, instalações e alterações de modo automático e transparente, trazendo uma interface amigável onde o usuário possa prosseguir com o processo de instalação e manuseio do sistema.
Neste contexto estão inseridos os scripts de instalação e de gerenciamento que serão tratados com mais detalhes na próxima seção. Os scripts do MShield são todos desenvolvidos em BASH, portanto, compatíveis com a absoluta maioria dos sistemas Linux existentes.
Recém descompactado, o diretório do MShield contém:
• Um script de instalação (Instala), um script de utilização (mshield) e um script de biblioteca de funções library;
• Um diretório ./contrib, no qual, estão contidos quatro scripts, um deles será para auxiliar no agendamento de atualização das regras (oinkmaster_update), outro auxiliar para iniciar e parar o sistema (rc.mshield). O próximo script auxiliar para geração de relatórios (report) e finalmente o pmgraph.pl, script para criação de relatórios efetivamente;
• Um arquivo README que contém instruções básicas sobre a instalação e funcionamento do MShield;
Os scripts oinkmaster_update, rc.mshield, Instala, library e report estão disponíveis integralmente nos apêndices C, E, A, B, F respectivamente.
Tudo que o usuário precisa fazer para instalar e configurar e sistema é executar o script de instalação. Este script irá automatizar todo o processo de download das bibliotecas e softwares necessários, compilação fina de todos os pacotes, instalação dos mesmo e ajustes pós instalação. O usuário irá acompanhar todo o processo através de uma interface gráfica de fácil entendimento.
Após o término do script de instalação o usuário poderá fazer uso do script de funcionamento (mshield). Este script quando executado traz uma interface gráfica intuitiva que permite ao usuário personalizar as regras do MShield de maneira muito simplificada, por exemplo: bloquear uma porta específica e desbloqueá-la. Também permite ao usuário gerar o relatório de atividades do sistema, este que pode ser visualizado no navegador, por se tratar de uma pagina HTML normal contendo gráficos ilustrativos e estatísticos que demonstram o comportamento e atividades do sistema nos últimos dias de funcionamento.
A Figura 9 ilustra em uma visão generalista onde se encontra o MShield em uma visão global de funcionamento. O iptables faz parte da solução MShield. Na figura esta separado apenas para efeito de melhor entendimento. Os dados passam primeiramente pelo iptables, logo após, este direciona todos dados para uma fila que serve de entrada para o MShield.
Figura 9. Funcionamento geral do sistema
4.5 Relatório
O MShield gera um relatório HTML periódico contendo informações úteis sobre sua atividade. Para gerar o relatório das últimas doze horas de atividade basta o usuário executar o comando "mshield" (script disponível integralmente no apêndice D) e selecionar a opção “Relatório”. Com base nele, o usuário pode verificar as atividades do sistema, bem como saber se esta sendo alvo de hackers ou não
A Figura 10 apresenta o formato de relatório gráfico gerado pelo Mshield.
Figura 10. Tela inicial do relatório
A primeira página do relatório é bastante direta e mostra o número de bloqueios efetuados pelo MShield. Com esta informação o usuário sabe sua exposição ao risco de ataques externos.
Para um relatório mais completo, com mais detalhes que possam ser úteis a usuários mais avançados, é possível clicar no link indicado logo abaixo do número de bloqueios. A Figura 11 ilustra um exemplo de tela que irá aparecer neste caso.
Figura 11. Segunda tela do relatório
Na tela acima foram mostrados apenas três campos de análise.
• Alerts per second: número de alertas por segundo, emitidos pelo snort_inline;
• Mbit per second: mostra a intensidade do tráfego em Mbits na rede;
• Kpackets per second: quantidade de pacotes que trafegam na rede em Kpackets.
Na tela acima ainda é possível clicar sobre cada campo para obter uma imagem com zoom, ou seja, cobrindo um intervalo menor de tempo.
Os gráficos apresentados dependem muito da quantidade de dados recolhidos pelo sistema, ou seja, do tráfego na rede, quantidade de computadores, tempo de análise, etc.
4.6 Telas do sistema
O MShield é composto por dois scripts principais e dois scripts auxiliares. Abaixo as principais telas do script de instalação do sistema.
A Figura 12 mostra a primeira tela de instalação e uma listagem dos passos gerais que devem ser seguidos.
Figura 12. Apresentação
A Figura 13 permite ao usuário escolher entre uma instalação local ou via Internet. No caso da instalação via Internet o instalador irá fazer o download de todos pacotes necessários para o sistema e, em seguida, prosseguirá normalmente. Esta opção é bastante vantajosa, uma vez que o tamanho dos arquivos de instalação são bastante reduzidos. Caso a opção de instalação local seja selecionada, o usuário precisará possuir no diretório local todos os pacotes necessários para a instalação. Esta forma garante um processo mais rápido, porém, o tamanho do arquivo de instalação do sistema será bastante grande.
Figura 13. Instalação Seleção
A Figura 14 é mostrada caso o método de instalação selecionado tenha sido via Internet. Esta tela mostra uma listagem de todos os pacotes que serão feito download.
Figura 14. Lista de pacotes
A Figura 15 mostra a etapa de download dos pacotes. Este conjunto de telas mantém o usuário informado sobre o progresso do download dos pacotes.
Figura 15. Progresso de Download
A Figura 16 mostra um exemplo de tela que indica o termino do download de cada pacote.
Figura 16. Download de pacote concluído
A Figura 17 mostra a indicação de finalização do processo de download de todos os pacotes necessários. Caso o usuário queira prosseguir com a instalação do sistema ele irá selecionar Yes, caso contrário, No. A
próxima etapa será a de descompactação e compilação de todos os pacotes.
Figura 17. Finalização de download
A Figura 18 mostra que o processo de descompactação dos pacotes no diretório local foi concluído com sucesso.
Figura 18. Descompactação concluída
A Figura 19 mantém o usuário informado sobre o processo de compilação de cada pacote. Esta etapa pode ser a mais demorada de todo
processo. É importante citar que alguns pacotes precisam de ajustes especiais para sua compilação. Estes detalhes serão tratados na explicação detalhada dos scripts nos apêndices A e D.
Figura 19. Compilação de pacotes
A Figura 20 indica o término do processo de compilação dos pacotes.
A seguir será executada uma série de ajustes bastante importantes para o funcionamento do sistema.
Figura 20. Compilação concluída
A Figura 21 mostra a etapa de download das regras de proteção mais atualizadas. Esta é uma forma de manter o Mshield sempre atualizado com o conjunto mais atual de regras oficiais do Snort. Todo o mês o Mshield agenda uma atualização destas regras para ser executada automaticamente.
Figura 21. Download de regras
A Figura 22 mostra a tela final do processo de instalação. Todo o sistema foi instalado e configurado automaticamente. Para a operação do mesmo, basta agora o usuário executar o comando “mshield”, o qual, já foi automaticamente adicionado ao PATH do sistema.
Figura 22. Tela final de instalação
Abaixo são mostradas telas principais do script de utilização do MShield (o comando, “mshield”).
A Figura 23 mostra o menu principal de utilização do MShield. Nele é possível selecionar a função “Personalizar”, onde o usuário pode bloquear e desbloquear portas específicas para aumentar sua segurança de acordo com a necessidade. Pode também selecionar a opção “Relatório”, onde será gerado imediatamente um relatório HTML que contém informações sobre as atividades do MShield. Selecionar “Parar” para efetivamente terminar o MShield e voltar o sistema a sua configuração normal, sem esta camada adicional de proteção. Selecionar “Inicia” para efetivamente colocar o MShield em funcionamento. “Sair”, como o nome já diz, apenas sai do assistente.
Figura 23. Menu principal mshield
A Figura 24 mostra a tela apresentada ao usuário quando a opção
“Personalizar” do menu principal é selecionada. Nesta parte é possível selecionar BloquearIN, desta forma o usuário bloqueia acesso externo a alguma porta específica no computador ou na rede local. BloquearOUT permite bloquear acesso de qualquer computador interno ou o computador local a alguma porta externa específica. Selecionar “Desbloquear” para, de fato, desbloquear portas anteriormente bloqueadas pelo usuário.
Figura 24. Tela de personalização
Abaixo a Figura 25 apenas mostra a tela onde o usuário digitará a porta que será bloqueada pelo sistema.
Figura 25. Tela de bloqueio de porta
A Figura 26 mostra a tela apresentada quando a opção “Parar” é selecionada no menu principal. É apenas uma tela de confirmação.
Figura 26. Tela de parar
A Figura 27 mostra a mensagem apresentada após a confirmação de parada do sistema. É possível também fazer com que o sistema pare de ser executado automaticamente ao iniciar-se a máquina. Uma tela semelhante é apresentada quando o inicio do MShield é confirmado, possibilitando habilitar sua execução automática junto com boot da máquina.
Figura 27. Tela de parada de execução automática
5 ANÁLISE DE DESEMPENHO
Neste capítulo serão apresentados alguns testes de desempenho executados com o MShield. Será demonstrado o impacto do uso do MShield na performance da máquina, bem como, no consumo de recursos da mesma.
Os testes foram executados com o MShield instalado em uma máquina gateway de uma outra máquina da rede interna.
O sistema de teste possui a seguinte configuração básica:
• Processador Intel Pentium 4 2.53 Ghz;
• 512 MB de memoria RAM DDR 266.
5.1 Memória
Durante os testes de processamento, o consumo de memória também foi analisado. O MShield manteve um consumo considerado praticamente constante.
No caso da máquina de teste, o consumo de memoria sempre esteve dentro da faixa de 2.7% a 3% da memória física total, o que equivale a faixa de 13824 KB a 15360 KB de memória RAM. A Figura 28 ilustra o consumo de memória.
Figura 28. Consumo de memória
0 5 10 15 20 25 30 35 40 45 50 55 60
0 0.25 0.5 0.75 1 1.25 1.5 1.75 2 2.25 2.5 2.75 3
segundos
% de uso de memória
5.2 Processador
A Figura 29 e a Figura 30 mostram o processamento do MShield.
A Figura 29 mostra o desempenho (em porcentagem) do MShield durante o carregamento de seis páginas web simultaneamente durante o período de um minuto.
Figura 29. Gráfico de processamento 1
O gráfico mostra que o MShield exige muito pouco do processador para funcionar, portanto, não impacta o desempenho do computador em que está instalado.
A Figura 30 mostra o desempenho do MShield durante o download de um arquivo de testes a uma velocidade de 300 KB/s, durante um minuto.
Figura 30. Gráfico de processamento 2
Um download a uma velocidade considerável foi feito (300 KB/s) e de mesma forma, como mostra o gráfico, o MShield não consome significante poder de processamento da máquina.
Com base nas análises feitas fica evidente que o uso do MShield em um único computador ou até mesmo em uma rede local não prejudica em nada o uso normal da máquina.
6 CONCLUSÃO E TRABALHOS FUTUROS
Com o MShield, um novo conceito de segurança é trazido ao alcance do usuário final Linux. O sistema foi desenvolvido com sucesso. Foi possível tornar todo o processo de instalação e uso bastante intuitivo, de acordo com o propósito original.
As maiores dificuldades no desenvolvimento do sistema consistiram no uso do snort_inline, pois, necessitou de vários testes e várias configurações extras que, muitas vezes, não estavam nem mesmo documentadas. A integração dos softwares empregados na solução também se configurou um desafio para que funcionassem em harmonia.
O MShield está, portanto, disponível e seu uso proporciona segurança tanto a uma única máquina como, de mesma forma, para uma rede local inteira que esteja subordinada a um servidor que tenha o sistema instalado.
Como trabalho futuro se propõe estender a compatibilidade para outras distribuições Linux e até mesmo para sistemas BSD's (Berkeley Software Distribution) (freeBSD, openBSD, etc). Também sugere-se o aumento de personalizações do sistema, feitas pelo usuário. Para tanto seria necessário um estudo de campo abordando os maiores anseios desses usuários no que se diz respeito a um sistema de segurança computacional.
REFERÊNCIAS
CASWELL, Brian; HEWLETT, Jeremy. Snort User Manual. Disponível em
<www.snort.org/docs>. Acesso em 28 jan 2007.
KNOBBE, Frank. Snortsam. Disponível em <http://www.snortsam.net/>.
Acesso em 08 fev 2007.
METCALF, William; JULIEN, Victor. Snort_inline. Disponível em
<http://snort-inline.sourceforge.net/>. Acesso em 28 jan 2007.
OETIKER, Tobias. RRDtools. Disponível em <http://oss.oetiker.ch/rrdtool/>.
Acesso em 28 jan. 2007.
RASH, Michael. Fwsnort. Disponível em
<http://www.cipherdyne.com/fwsnort/>. Acesso em 08 fev 2007
SAMAYOA, Hugo. Block it. Disponível em <http://www.teknofx.com/>.
Acesso em 08 fev 2007.
STEVENS, Anthony. Guardian. Disponível em
<http://www.chaotic.org/guardian/>. Acesso em 27 jan. 2007.
STLING, Andreas. Oinkmaster. Disponível em
<http://oinkmaster.sourceforge.net/>. Acesso em 08 fev 2007.
STLING, Andreas. Pmgraph. Disponível em
<http://people.su.se/~andreaso/perfmon-graph/>. Acesso em 28 nov 2006.
TOREN, Michael C. Ip_queue. Disponível em
<http://michael.toren.net/slides/ipqueue/slide001.html>. Acesso em 28 jan 2007.
WELTE, Harald. Iptables. Disponível em <http://www.iptables.org/>. Acesso em 27 jan. 2007.
WIKIPEDIA. Internet. Disponível em <http://pt.wikipedia.org/wiki/Internet>.
Acesso em 27 jan. 2007.
APÊNDICE A – Script de Instalação (Instala)
#!/bin/bash
# Caso utilize PROXY na rede, setar a variavel http_proxy
# exemple= export http_proxy=endereco.do.proxy:porta
IPTABLES="iptables-1.3.5"
LIBDNET="libdnet-1.11"
PCRE="pcre-6.3"
SNORT="snort_inline-2.4.4-final"
LIBPCAP="libpcap-0.9.4"
OINKMASTER="oinkmaster-2.0"
PMGRAPH="pmgraph-0.2"
RRDTOOLS="rrdtool-1.2.16"
clear
##
## inclui as funcoes que serao usadas neste arquivo.
##
source library
##
## Mensagem de apresentacao do sistema (Msg inicial do instalador)
##
dialog \
--title 'MShield (Mighty Shield) 1.0'
\
--msgbox \ '\n
Este assistente irá instalar o MShield em seu computador.\n\n
MShield é um IPS (Intrusion Prevetion System) de fácil configuração e manuseio, o qual,
possibilita proteção total contra centenas de ataques externos e
controle de acesso personalizado pelo usuário.\n
\n
As seguintes etapas serao seguidas automaticamente:\n
\n
1. Download dos pacotes ou instalacao apartir de pacotes locais.\n
2. Compilação automática dos pacotes.\n 3. Ajustes finos dos pacotes.\n
4. Limpeza da instalação.\n' \ 25 80
##
## Observacoes iniciais no instalador
##
dialog \ --yesno \
--backtitle "MShield" \ '\n
### Observacoes ###\n
\n
- Caso a conexão de internet seja feita através de proxy e seja optado por se fazer download dos pacotes necessarios para o MShield, será necessário setar a variável de ambiente chamada http_proxy.
Exemplo: export http_proxy=endereco.do.proxy:porta_do_proxy\n
\n
- É necessário que o linux atual tenha kernel igual ou superior à versão 2.4.4.\n
\n
- É necessário que o wget esteja instalado. As distribuições linux já o trazem como padrão.\n
\n
- É necessário que os pacotes de desenvolvimento estejam instalados no sistema (gcc). Geralmente as distribuições mais conhecidas incluem-os na instalação padrão.\n
\n
Caso esteja tudo certo, escolha YES para continuar a instalação,
caso contrário escolha NO para sair.'\
25 80
## Testa se a resposta foi NO, logo, finaliza o instalador
if [ $? = 1 ]; then clear
exit 1 fi
## Como sera necessario compilar pacotes, os pacotes de desenvolvimento da distribuicao atual
## precisam estar instalados (gcc, etc).
which gcc 2&>1 /dev/null
Erro "É necessário possuir os pacotes de desenvolvimento instalados na máquina"
## Verifica se existe o Wget instalado.
## Wget será usado para fazer o download de todos arquivos
## necessarios pelo MShield.
which wget 2&>1 /dev/null
Erro "É necessário possuir o wget instalado no sistema"
##
## Questiona o usuario: Deve-se fazer o download de todos pacotes necessarios? Esta forma eh mais
## pratica pois o usuario soh precisa ter o script instalador que tem tamanho bastante reduzido.
## Deve-se instalar o sistema com base nos pacotes do disco? Caso o usuario possua o instalador do
## MShield na versao que contenha os pacotes no disco (tamanho maior) tem-se entao uma instalacao
## mais rapida.
##
escolha=$( dialog \
--stdout \
--backtitle "MShield" \
--title 'MShield' \ --menu 'Metodo de Instalacao' \
0 0 0 \
Internet 'Faz o download de todos pacotes necessarios para a instalacaos' \
Local 'Instala apartir dos pacotes disponiveis no diretorio local de instalacao do MShield')
## Caso for apertado o botao cancelar [ $? -eq 1 ] && exit 1
if [ $escolha = "Internet" ]; then
##
## Etapa de download dos pacotes necessarios para o sistema
##
dialog \
--title ' ETAPA 1 - DOWNLOADS '\
--infobox '\n 1. iptables\n 2. libdnet\n
3. pcre\n
4. snort_inline\n 5. libpcap\n 6. oinkmaster\n 7. pmgraph\n 8. rrdtools\n'\
13 40
sleep 1
## Chama a funcao que fara o download dos pacotes Faz_download;
dialog \
--yesno \
'Etapa de Download dos pacotes concluida com sucesso!\n
\n
Clique YES para continuar, agora com a compilacao de pacotes.
\n
Clique NO para sair.\n ' \
0 0
## Testa se a resposta foi NO, logo, finaliza o instalador
if [ $? = 1 ]; then clear
exit 1 fi
fi
## Chama a funcao que descompacta os pacotes necessarios para o MShield
Faz_descompactacao;
## Chama a funcao que compila os pacotes Faz_compilacao;
# Termino da compilacao
dialog \
--title 'Concluido' \ --infobox \
'Compilacao de pacotes concluida com sucesso.\n A seguir alguns ajustes finais serao feitos.\n' 0 0 sleep 4
## Ajustes finais
## Chama a funcao que faz os ajustes e configuracoes finais.
Faz_ajustes;
##
## Mensagem final. Instalacao e configuracao concluida
##
dialog \ --backtitle 'MShield' \
--title 'Instalacao Concluida' \ --msgbox \
'\n
O MShield foi instalado e configurado com sucesso!.\n\n
Execute o comando "mshield" para ter acesso ao menu de utilizacao do sistema.\n
\n' 0 0
APÊNDICE B – Script de Biblioteca (library)
#!/bin/bash
# Funcao que verifica a saida de um comando anterior, caso este tenha
# apresentado erro, sai do programa imprimindo a mensagem passada por parametro.
function Erro {
if [ $? != 0 -a $? != 2 ]; then if [ "x$1" != 'x' ]; then
dialog \
--title '<<< Erro >>>' \ --msgbox "\n$1 :(" \
15 60 fi exit 1 fi
}
# Funcao que retorna verdadeiro caso o pid do programa passado como parametro esteja em execucao e falso caso
# contrario.
function Rodando {
ps $1 | grep $1 >/dev/null;
}
# Funcao utilizada antes do inicio do download de um arquivo. Serve para aguardar ate que o arquivo esteja
# efetivamente sendo baixando (jah tenha passado do processo de conexao, etc).
function Aguarda_inicio_download { while [ ! -f $1 ]; do
sleep 1;
done }
# Funcao que mostra uma barra de progresso seguinte o processo de download do pacote.
# Recebe como primeiro parametro o nome do pacote e como segundo parametro o tamanho do mesmo.
function Download {
(
while Rodando $PIDRODANDO ; do TAMANHO=$2
COPIADO=$(du -b $1 | cut -f1)
PORCENTAGEM=$((COPIADO*100/TAMANHO)) echo $PORCENTAGEM
sleep 1; # intervalo done
) | dialog --title "$1" --gauge "Downloading..." 8 40 0
dialog --title "$1" --infobox 'Download concluido!' 0 0 sleep 2
}
##
##
## Funcao que faz o download de todos pacotes necessarios para o sistema
##
##
function Faz_download(){
## Download do iptables
wget -q --tries=2 -T 20
http://www.netfilter.org/projects/iptables/files/$IPTABLES.tar.bz2 &
PIDRODANDO=$!; # guarda o PID do programa recem executado. Usado na funcao Rodando
Aguarda_inicio_download $IPTABLES.tar.bz2 Download $IPTABLES.tar.bz2 1096
Erro "Não foi possível fazer download do Iptables, verificar o link de download no arquivo ./Instala"
## Download do Snort_Inline
wget -q --tries=2 -T 20
http://heanet.dl.sourceforge.net/sourceforge/snort- inline/$SNORT.tar.gz &
PIDRODANDO=$!; # guarda o PID do programa recem executado. Usado na funcao Rodando
Aguarda_inicio_download $SNORT.tar.gz Download $SNORT.tar.gz 2905172
Erro "Não foi possível fazer download do Snort, verificar o link de download no arquivo ./Instala"
## Download da libdnet
wget -q --tries=2 -T 20
http://heanet.dl.sourceforge.net/sourceforge/libdnet/$LIBDNET.tar.gz
&
PIDRODANDO=$!; # guarda o PID do programa recem executado. Usado na funcao Rodando
Aguarda_inicio_download $LIBDNET.tar.gz Download $LIBDNET.tar.gz 446233
Erro "Não foi possível fazer download da libdnet, verificar o link de download no arquivo ./Instala"
## Download da libpcap
wget -q --tries=2 -T 20
http://public.planetmirror.com/pub/tcpdump/release/$LIBPCAP.tar.gz &
PIDRODANDO=$!; # guarda o PID do programa recem executado. Usado na funcao Rodando
Aguarda_inicio_download $LIBPCAP.tar.gz Download $LIBPCAP.tar.gz 425887
Erro "Não foi possível fazer download da libpcap, verificar o link de download no arquivo ./Instala"
## Download da pcre
wget -q --tries=2 -T 20
http://heanet.dl.sourceforge.net/sourceforge/pcre/$PCRE.tar.bz2 &
PIDRODANDO=$!; # guarda o PID do programa recem executado. Usado na funcao Rodando
Aguarda_inicio_download $PCRE.tar.bz2 Download $PCRE.tar.bz2 565852
Erro "Não foi possível fazer download da Pcre, verificar o link de download no arquivo ./Instala"
## Download do Oinkmaster
wget -q --tries=2 -T 20
http://easynews.dl.sourceforge.net/sourceforge/oinkmaster/$OINKMASTER .tar.gz &
PIDRODANDO=$!; # guarda o PID do programa recem executado. Usado na funcao Rodando
Aguarda_inicio_download $OINKMASTER.tar.gz
Download $OINKMASTER.tar.gz 80111
Erro "Não foi possível fazer download do Oinkmaster, verificar o link de download no arquivo ./Instala"
## Download das RRDtools
wget -q --tries=2 -T 20
http://oss.oetiker.ch/rrdtool/pub/$RRDTOOLS.tar.gz &
PIDRODANDO=$!; # guarda o PID do programa recem executado. Usado na funcao Rodando
Aguarda_inicio_download $RRDTOOLS.tar.gz Download $RRDTOOLS.tar.gz 1059902
Erro "Não foi possível fazer download das RRDtools, verificar o link de download no arquivo ./Instala"
}
##
## Funcao que descompacta todos pacotes necessarios para o MShield
##
function Faz_descompactacao {
dialog \
--title 'Descompactando...' \ --infobox \
'\nAguarde enquanto os pacotes sao descompactados no diretorio local.\n' \
0 0
for i in $(ls *.tar.bz2); do tar jxf $i 2>&1 done
Erro "Espaco insuficiente em disco ou problema de permissao na pasta
local"
for i in $(ls *.tar.gz); do tar zxf $i 2>&1 done
Erro "Espaco insuficiente em disco ou problema de permissao na pasta local"
dialog \
--title 'Descompactacao concluida!' \ --infobox \
'Inicializando etapa de compilacao dos pacotes\n
Esta etapa pode demorar varios minutos. Por favor aguarde.\n'\
0 0 sleep 4 }
##
##
## Funcao que compila todos os pacotes necessarios para o sistema
## Faz tambem a instalacao dos mesmos
##
##
## Compilando pacotes
## Laco de compilacao
# Compila todos pacotes, ao termino do make install eh verificado a incidencia de erro no log de compilacao.
# Caso exista erro, o programa eh abortado.
function Faz_compilacao {
for i in $LIBDNET $PCRE $LIBPCAP $PMGRAPH $RRDTOOLS do
dialog \
--title "Compilando $i" \
--infobox \
"Por favor aguarde\n" 0 0
cd $i
./configure > $i.log 2>&1 ; make >> $i.log 2>&1 ; make install >>
$i.log 2>&1
cat $i.log | egrep -i "\berror\b" 2>&1
if [ $? = 0 ]; then
Erro "Problemas na compilacao do pacote $i"
fi cd ..
done
# Compilacao especifica para Snort_inline
# Eh ativado o Perfmonitor para podermos gerar os graficos de estatisticas
cd $SNORT
./configure --enable-perfmon > $SNORT.log 2>&1 ; make >> $SNORT.log 2>&1 ; make install >> $SNORT.log 2>&1
cat $SNORT.log | egrep -i "\berror\b" 2>&1 if [ $? = 0 ]; then
Erro "Problemas na compilacao do pacote $SNORT"
fi cd ..
# Ajustando iptables para compilacao, precisa de ajustes.
# Remove da compilacao o modulo string, nao utilizado.
dialog \
--title "Compilando $IPTABLES" \ --infobox \
"Por favor aguarde\n" 0 0
rm ./$IPTABLES/extensions/libipt_stri*
rm ./$IPTABLES/extensions/.stri*
cd $IPTABLES
make install-devel > $IPTABLES.log 2>&1
cat $IPTABLES.log | egrep -i "\berror\b" 2>&1