4 O SISTEMA DE SEGURANÇA MSHIELD
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
if [ $? = 0 ]; then
Erro "Problemas na compilacao do pacote $IPTABLES"
fi cd ..
}
##
##
## Funcao usada para fazer os ajustes finais de configuracao e instalacao dos aplicativos
##
##
function Faz_ajustes {
# Ajuste pmgraph
cd ./contrib/ && echo '#!/usr/bin/perl -w -I /usr/local/rrdtool-1.2.16/lib/perl/5.8.8/' > temp && cat pmgraph.pl | grep -v '#!/usr/bin/perl' >> temp
mv temp pmgraph.pl chmod +x pmgraph.pl cd ..
cp ./contrib/pmgraph.pl /usr/bin
# Ajuste Snort_inline
dialog \
--title 'Ajustando Snort_inline' \ --infobox \
'Criando diretorios e copiando regras.\n' 0 0 sleep 3
# Prepara Snort_inline
mkdir -p /etc/snort_inline/drop-rules mkdir -p /var/log/snort_inline
mkdir -p /etc/snort_inline/relatorio
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 relatorio 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
# Ajuste Oinkmaster dialog \
--title 'Ajustando Oinkmaster' \ --infobox \
'Ajustando e copiando arquivos necessarios.\n' 0 0 sleep 3
# Configura a url do oinkmaster no arquivo de configuracao e substitui os alerts por drops nas rules
# atualizadas
cd ./$OINKMASTER/ && echo "url = http://www.snort.org/pub-bin/downloads.cgi/Download/comm_rules/Community-Rules-2.4.tar.gz" >
temp && echo 'modifysid * "^alert" | "drop"' >> temp && cat oinkmaster.conf >> temp
mv temp oinkmaster.conf cd ..
cp ./$OINKMASTER/oinkmaster.conf /etc/
cp ./$OINKMASTER/oinkmaster.pl /usr/bin
dialog \
--title 'Atualizando rules' \ --infobox \
'Fazendo download das rules mais atualizadas disponiveis.\n' 0 0 sleep 3
# faz download de todas as rules comunitarias oficiais mais atualizadas
oinkmaster.pl -o /etc/snort_inline/drop-rules > /dev/null 2>&1
# Devido ao fato de as rules comunitarias virem com o prefixo community- no nome de cada uma
# abaixo retiramos este prefixo para deixarmos as rules no padrao do snort_inline.conf
for i in $(ls /etc/snort_inline/drop-rules/*.rules) do
i=$(basename $i)
j=$(echo $i | sed 's/community-//g')
mv rules/$i /etc/snort_inline/drop-rules/$j > /dev/null 2>&1
done
# Retira do arquivo snort_inline.conf padrao de instacao todos includes de regras.
# e coloca os novos includes de acordo com as regras atualmente disponiveis no diretorio correspondente
cat /etc/snort_inline/snort_inline.conf | grep -v 'include $RULE*' >
/etc/snort_inline/tmp
cp /etc/snort_inline/tmp /etc/snort_inline/snort_inline.conf ; rm /etc/snort_inline/tmp
echo 'include $RULE_PATH/classification.config' >>
/etc/snort_inline/snort_inline.conf
echo 'include $RULE_PATH/reference.config' >>
/etc/snort_inline/snort_inline.conf
for i in $(ls /etc/snort_inline/drop-rules/*.rules) do
i=$(basename $i)
echo "include \$RULE_PATH/$i" >> /etc/snort_inline/snort_inline.conf done
# Faz com que o snort_inline olhe tambem para um novo arquivo de regras que nao eh padrao.
# Neste arquivos serao postas as regras criadas pelo usuario.
echo 'include $RULE_PATH/local.rules' >>
/etc/snort_inline/snort_inline.conf
# Copia arquivo de inicializacao do MShield (rc.mshield) para a pasta padrao do slack /etc/rc.d
cp ./contrib/rc.mshield /etc/rc.d/ ; chmod -rx /etc/rc.d/rc.mshield
# Agenda execucao do oinkmaster para atualizar as rules todo dia primeiro de cada mes as 10 horas
crontab -l -u root > /etc/snort_inline/cron
echo "00 10 1 * * /etc/snort_inline/oinkmaster_update 2>&1" >>
/etc/snort_inline/cron
crontab /etc/snort_inline/cron -u root
# Copia o arquivo mshield para um diretorio visivel ao path cp mshield /usr/bin
}
APÊNDICE C – Script do Oinkmaster (oinkmaster_update)
#!/bin/bash
## Adiciona o prefixo community- no nome de cada arquivo de regra, para que assim o oinkmaster possa
## comparar as regras e atualizar o necessario
for i in $(ls /etc/snort_inline/drop-rules) do
i=$(basename $i);
mv rules/$i /etc/snort_inline/drop-rules/community-$i
done
## Atualiza regras baixando a versao mais recente oinkmaster.pl -o /etc/snort_inline/drop-rules
## Retira-se o prefixo community- do nome dos arquivos de regra para assim se adequar ao padrao do snort
for i in $(ls /etc/snort_inline/drop-rules/) do
i=$(basename $i);
j=$(echo $i | sed 's/community-//g')
mv rules/$i /etc/snort_inline/drop-rules/community-$i
done
A função deste script, no contexto do projeto, é de atualizar periodicamente as regras do snort_inline.
Na primeira parte do script existe um laço de repetição for, o qual, tem a função de adicionar a todas regras já existentes, o prefixo "community-".
Isto é feito por que as regras recém baixadas pelo oinkmaster contém este prefixo, por outro lado, este prefixo não é padrão do snort_inline, portanto, é
retirado no final do script pelo último laço for. A linha do script, a qual executa o arquivo, oinkmaster.pl é a principal. A execução do oinkmaster.pl irá fazer o download das mais novas regras comunitárias disponíveis no site do snort. O oinkmaster, durante sua execução, compara as novas regras com as atuais, de forma a atualizá-las. São adicionadas às atuais, as regras que faltam e retiradas as regras que não existem mais na versão atual por algum motivo.
Existe uma configuração fina feita no script de instalação do MShield, a qual, se encarrega de evitar que o oinkmaster considere o arquivo local.rules, o qual contém regras personalizadas do usuário, portanto, estas não devem ser alteradas.
Este script é agendado para execução periódica, todo dia primeiro de cada mês às dez horas da manhã. Este agendamento é feito também no script de instalação do MShield.
APÊNDICE D – Script de Utilização (mshield)
Este script tem a finalidade de fornecer ao usuário uma interface de operação bastante simples para o Mshield. Através dele é possível Ativar, Desativar, Gerar relatório e Personalizar o sistema.
#!/bin/bash
##
## Mensagem de apresentacao do sistema
##
dialog \
--title 'MShield (Mighty Shield) 1.0'
\
--msgbox \ '\n
Bem vindo ao MShield. \n\n\n\n\n\n
Aqui voce pode:\n\n
- Personalizar regras de protecao\n\n - Gerar relatorios\n\n
- Parar e iniciar o MShield.\n\n
Tudo de maneira muito simples e intuitiva.
\n' \ 25 80
comeca() {
escolha=$( dialog \ --stdout \
--backtitle "MShield" \
--title 'MShield' \ --menu 'O que deseja fazer?' \
0 0 0 \
Personalizar 'Bloquear/Desbloquear portas' \
Relatorio 'Gerar relatorio' \ Parar 'Desabilita o MShield' \
Inicia 'Ativa o MShield' \ Sair 'Sai do MShield' )
## Caso for apertado o botao cancelar [ $? -eq 1 ] && exit 1
### MENU DE PERSONALIZACAO ##
if [ $escolha = "Personalizar" ]; then
escolha_person=$( dialog \ --stdout \
--title 'MShield' \ --menu 'O que deseja fazer?' \
0 0 0 \
BloquearIN 'Bloquear acesso externo a alguma porta local especifica' \
BloquearOUT 'Bloquear acesso interno a alguma porta externa especifica' \
Desbloquear 'Desbloquear acesso interno a alguma porta externa especifica' )
## Caso for apertado o botao cancelar [ $? -eq 1 ] && comeca
if [ $escolha_person = "BloquearIN" ]; then
porta=$( dialog \ --stdout \
--title 'Bloquear' \ --inputbox 'Digite a porta a ser bloqueada:' \ 0 0 )
## Caso for apertado o botao cancelar [ $? -eq 1 ] && comeca
echo "drop tcp any any -> any $porta (classtype:attempted-user;
msg:\"Port $porta connection initiated\";)" >>
/etc/snort_inline/drop-rules/local.rules
dialog \ --title 'Sucesso' \
--msgbox "A porta $porta foi bloqueada com sucesso! Para e inicie o MShield novamente." \
6 70
comeca # volta ao inicio fi
if [ $escolha_person = "BloquearOUT" ]; then
porta=$( dialog \ --stdout \
--title 'Bloquear' \ --inputbox 'Digite a porta a ser bloqueada:' \ 0 0 )
## Caso for apertado o botao cancelar [ $? -eq 1 ] && comeca
echo "drop tcp any $porta -> any any (classtype:attempted-user;
msg:\"Port $porta connection initiated\";)" >>
/etc/snort_inline/drop-rules/local.rules
dialog \ --title 'Sucesso' \
--msgbox "A porta $porta foi bloqueada com sucesso! Pare e inicie o MShield novamente." \
6 70
comeca # volta ao inicio fi