PortSentry: Melhorando a segurança do seu Linux
Autor: Anderson Luiz Tamborim
Data: 29/04/2004
PortSentry: Uma alternativa eficiente
Introdução
PortSentry é uma aplicação muito simples de ser utilizada, escrita para sistemas GNU/Linux com o objetivo de ajudar usuários a manter crackers longe de seu precioso sistema, barrando portscanners e outras tentativas de burlar sua segurança.
PortSentry foi desenvolvido pelo pessoal da Psionic.com, que hoje faz parte da CISCO como vocês podem ver aqui:
* http://newsroom.cisco.com/dlls/corp_102202.html
Projeto Sentry Tools
O PortSentry foi concebido como parte do projeto Sentry Tools, que tem além dele o LogCheck, uma ferramenta de checagem de logs de maneira eficiente e bem simples também.
Como podemos ver, o Projeto Sentry Tools veio para ajudar usuários e admins que não tem muita experiência em segurança de informática a conseguir um padrão um pouco mais elevado de segurança em seus sistemas de maneira simples e bem intuitiva.
Recomendo uma visita ao site do projeto:
* http://sourceforge.net/projects/sentrytools/
Vamos ver agora como instalar e configurar o PortSentry e assim tornar nosso Linux ainda mais seguro.
Instalando e configurando
Primeiro passo é baixar a versão mais recente do PortSentry. Vamos baixar a versão direto do site do projeto, já tive umas experiências com RPMs no Conectiva e meu amigo, não foram muito interessantes.
Pegue o .tar.gz que ele compila sem muitos traumas e a instalação é bem rápida.
Vamos lá! Vamos baixar o PortSentry de um dos mirrors que temos na página, o arquivo tem apenas 47 Kb:
http://easynews.dl.sourceforge.net/.../portsentry-1.2.tar.gz
/* esse link e bem rápido */
Muito bem, vamos criar uma pastinha para nosso amigo:
$ mkdir /security
$ mv portsentry-1.2.tar.gz /security
$ cd /security
$ tar -xzvf portsentry-1.2.tar.gz
$ ./configure ; make ; make install
e voilá, teremos o PortSentry instalado em nosso sistema ;)
Configurando
Essa é a parte mais divertida porque garanto que cada um após observar o arquivo de configuração do PS vai ver configurações que lhe chamarão mais a atenção devido às suas opções totalmente inusitadas.
Vou dar um exemplo de configuração de bloqueio para atacantes que tentam portscanning e um pequeno honey pot.
Vamos dar uma olhada na pasta /usr/local/psionic/portsentry. Teremos alguns arquivos dentro dela, vamos utilizar o portsentry.conf.
Vamos ver as primeiras configurações interessantes que devemos fazer:
# Un-comment these if you are really anal:
# TCP_PORTS="1,7,9,11,15,70,79,80,109,110,111,119,138,139,143,512,,[..]
# UDP_PORTS="1,7,9,66,67,68,69,111,137,138,161,162,474,513,517,518,[..]
#
# Use these if you just want to be aware:
TCP_PORTS="1,11,15,79,111,119,143,540,635,1080,1524,2000,5742,[..]"
UDP_PORTS="1,7,9,69,161,162,513,635,640,641,700,37444,34555,[..]"
#
# Use these for just bare-bones
# TCP_PORTS="1,11,15,110,111,143,540,635,1080,1524,2000,12345,[..]"
# UDP_PORTS="1,7,9,69,161,162,513,640,700,32770,32771,32772,[..]"
Aqui estão as portas TCP/UDP que o PortSentry vai "guardar". Analise as portas que tem em cada lista, as portas verdadeiras de seu sistema não devem constar nesta lista, OK? Caso contrário, o PS vai bloquear as tentativas de conexão nelas.
Como vocês viram, o segundo conjunto de portas está habilitado, vamos utilizar ele como teste, depois podemos refinar essas portas e tudo mais que vocês queiram.
Vamos continuar nossa análise no arquivo de conf:
IGNORE_FILE="/usr/local/psionic/portsentry/portsentry.ignore"
HISTORY_FILE="/usr/local/psionic/portsentry/portsentry.history"
BLOCKED_FILE="/usr/local/psionic/portsentry/portsentry.blocked"
Bom, o primeiro arquivo são os hosts que o PortSentry deve ignorar, ou seja, os hosts que estiverem nesta list não serão analisados por ele.
O segundo é o history, ou seja, tudo que o PS já fez, desde analisar conexões até bloquear, tudo estará listado neste arquivo. Equivale a um ~/.bash_history.
O terceiro é a lista negra do PortSentry, os atacantes bloqueados por ele e os hosts que ele considera como perigosos. Nessa lista você deve ficar esperto porque às vezes alguém pode cair aí por engano de um falso positivo, então fique sempre analisando esta lista para não ficar sem determinados serviços de comunicação.
Vamos ver agora uma opção muito maneira do Port Sentry que é a KILL_ROUTE. Esta função como já diz o nome, killa a rota do atacante, passando a ignorar todo e qualquer pacote e requisição feita por ele pelo tempo que você determinar (logo mostraremos como).
Como usamos Linux, a opção que vamos habilitar será a:
KILL_ROUTE="/usr/local/sbin/iptables -I INPUT -s $TARGET$ -j DROP"
Como você pode ver, é uma regra simples, você pode melhorar a regra do jeito que achar melhor e tudo mais, iptables meu amigo, tem 10001 possibilidades.
OBS: $TARGET$ = ip do atacante que ele detectou.
Além de bloquear pelo iptables você também pode utilizar TCP Wrappers para isso:
KILL_HOSTS_DENY="ALL: $TARGET$ # PortSentry blocked"
Não recomendo a seção de Droping Route porque dá mais trabalho de liberar IPs bloqueados. KILL_ROUTE já é mais que suficiente.
External Command
Essa parte permite você realizar um comando externo ao PortSentry para reagir ao ataque ou para escrever algum log especial.
# KILL_RUN_CMD="/some/path/here/script $TARGET$ $PORT$"
Como podem ver, a sintaxe padrão é como se fosse executar um "contra ataque", mas isso não é muito interessante não é mesmo?
Creio que para nós seria mais interessante escrever um log com os IPs atacantes e tal. Bom, fica a seu critério, onde $PORT$ é a mesma porta onde você foi atacado.
Port Banner Section
Essa é a parte mais legal do PortSentry. Como você viu lá em cima, ele fica analisando várias portas, se alguém passar um scan de portas e não for barrado por algum motivo, ele vai tentar conectar em alguma porta chamativa como 79 5555 e terá uma surpresa:
PORT_BANNER="** Unauthorized Access Prohibited ** Your Connection attempt has been logged . . . GO AWAY!!"
Ele irá ver essa mensagem em seu cliente telnet por exemplo e sua rota será killada.
Coloque algo ao seu gosto:
"Cai fora seu inxirido!!! aqui está o seu ip $TARGET$"
Fica ao seu gosto :)
Considerações finais
Como viram, é muito simples configurar o PortSentry. Fica para uma próxima vez uma pequena análise do logcheck OK?
Testem ele aí em suas máquinas e tentem refinar a qualidade das proteções a seu gosto. Verão que pode ser feita muita coisa legal com ele, como por exemplo integrá-lo com snort e psad, fica muito bom.
Cordial abraço à todos.
Spawn Locoust
PS: Seguem alguns links:
* http://linux.cudeso.be/linuxdoc/portsentry.php
* http://www.linuxsecurity.com.br/article.php?sid=8365
* http://www.linux.ie/articles/portsentryandsnortcompared.php
* http://www.securityfocus.com/infocus/1580
Até o próximo.
Um comentário:
ola amigo, excelente seu comentário.
preciso de uma ajuda, eu acessei uma porta listada no portsentry da minha máquina da empresa, e nosso IP é dedicado (válido) e não conseguimos mais acessar o servidor .
ja removemos o nosso IP no /etc/hosts.deny, já stoppamos iptables , ja fizemos Flush nas regras (iptables -F) iptables -X e nada de liberar o nosso IP .
Sabemos que, um reboot ou um restart da rede, pode resolver mas queríamos, queremos, melhor dizer , evitar isso.
saberia nos dizer como preceder sem que haja necessidade de reboot ou restart network ?
Obrigado, sua ajuda será muito válida.
Postar um comentário