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 :)