[Barrando Portscans com PortSentry passo a passo - receita]
Estatisticas demonstram que a primeira acao de um cracker contra um servidor especifico eh o portscan, a
partir de onde o mesmo obtera um mapa de "acesso garantido" por onde comecara suas acoes...
Existem diversas maneiras de se evitar portscans e diversos aplicativos. Nesse cenario em especial
utilizaremos o excelente programa PortSentry do projeto "Abacus" de Craig Rowland num Linux Box com
ipchains instalado como opcao de administracao de regras do firewall do kernel...
Cabe dizer que Portsentry eh um programa amplamente configuravel, com diversas opcoes e cenarios, porem
nao entrarei em detalhes nesse artigo, apenas apresentarei um modo de utiliza-lo de forma simples... Vale
lembrar tbem que o portsentry nao eh eficaz em caso de Stealth Portscans (apesar de ter implementado
Advanced Portscan), os falsos alarmes sao muitos nesse caso, mas por "escutar" diversas portas ele da a
falsa "impressao" ao portscan de que todas as portas estao acessiveis...
1) Download:
Baixe o source de http://www.psionic.com/tools/portsentry-1.0.tar.gz
2) Compilando:
2.1) Descompactando:
# tar zxvf portsentry-1.0.tar.gz
2.2) Pre compilacao:
- Edite o arquivo portsentry_config.h e Makefile:
Como default o programa sera instalado no diretorio
/usr/local/psionic/portsentry, caso queira escolher um outro
diretorio para instalacao, basta mudar a linha:
#define CONFIG_FILE "/usr/local/psionic/portsentry/portsentry.conf"
e no arquivo Makefile mude a linha:
INSTALLDIR = /usr/local/psionic
e
CHILDDIR = /portsentry
O programa sera instalado em INSTALLDIR/CHILDDIR
- Edite o arquivo portsentry.conf (q sera copiado para seu INSTALLDIR/CHILDDIR):
- TCP_PORTS e UDP_PORTS indicam, separadas por virgulas, as portas que o programa
ficara aguardando conexoes (ouvindo) :).Caso nao tenha certeza do que fazer,
simplesmente descomente as 2 linhas abaixo de
# Use these if you just want to be aware:
e tudo estara ok :)
Fique alerto para nao manter as portas 31337 e 12345, 12346 caso seu
roteador ou firewall da rede ja as tiver negadas, apenas para nao se abarrotar de
regras devido a sweepings q nem sempre indicam PORTSCANS, mas apenas alguem
procurando por aquele trojan em especial pela sua rede e que na verdade ja esta
negado de qualquer forma, e nossa meta eh detectar PORTSCANS! :)
- Tenha certeza de indicar corretamente o PATH para sua instalacao do portsentry
(caso tenha mudado a default) em:
IGNORE_FILE : Contera a lista (linha a linha) de IPs e Networks q
deverao ser ignorados em caso de portscan... Tenha a
certeza de manter 127.0.0.1 e 0.0.0.0 nesse arquivo...
HISTORY_FILE : Contera o historico de ips bloqueados
BLOCKED_FILE : Contera lista dos atuais ips bloqueados e que serao
ignorados num proximo portscan (ja q JA estarao
bloqueados).
- Nesse exemplo/caso iremos fazer com que o Portsentry bloqueie atraves
do ipchains o IP source do portscan e execute um script qualquer, caso voce
apenas deseje ser notificado via email atraves de um script e que o IP nao seja
bloqueado, deve deixar BLOCK_UDP e BLOCK_TCP com valor 2:
BLOCK_UDP="2"
BLOCK_TCP="2"
O q fara que apenas seu KILL_RUN_CMD (falaremos ja ja) seja executado...
- Como esse exemplo/caso foi baseado utilizando-se ipchains como forma de
bloqueio, descomente a linha :
#KILL_ROUTE="/sbin/ipchains -I input -s $TARGET$ -j DENY -l"
Os logs gerados pelo -l do ipchains no caso de um portscan sao um exagero,
e como (nesse caso) seremos notificados via email voce pode decidir ou nao usar
o -l (dependendo do nivel de debugging que voce vai querer para analise do
portscan)...
- Como utilizamos (nesse caso) o firewall do proprio kernel como forma de
bloqueio, pode-se manter comentada a sessao TCP Wrappers...
- External Command (KILL_RUN_CMD): Eh justamente aqui que atribuiremos o comando
que sera rodado apos o IP source do portscan ser bloqueado pelo firewall, como
ex. escrevi um script muito simples (*) que enviara um email ao responsavel
pela maquina com o IP source assim que o portscan ocorrer, nesse caso vc pode
fazer seu proprio script, eu por ex. uso um que me manda um DigiMemo atraves
do celular, sao inumeras as possibilidades, apenas evite as retaliatorias, pois
falsos alarmes ocorrem... No nosso caso salve o script como mail.sh, atribua
permissao de execucao para o mesmo e atribua:
KILL_RUN_CMD="/usr/local/psionic/portsentry/mail.sh $TARGET$"
- SCAN_TRIGGER : Atribua valor 1 para evitar falsos alarmes, eh o numero de
conexoes permitidas antes que alguma acao seja feita...
2.3) Compilacao:
# make; make install
3) Executando:
A partir do diretorio instalado (default: /usr/local/psionic/portsentry):
"Stealth" (mais sensivel e mais passivel de alarmes falsos):
# ./portsentry -stcp ; ./portsentry -sudp
ou
Basico:
# ./portsentry -tcp ; ./portsentry -udp
A opcao -atcp e -audp (Advanced) nao recomendo pelo numero de falsos alarmes decorrentes...
(*)
----- Cut Here ----
#!/bin/sh
# Simples script para alerta via email do Portsentry
# Por Renato Murilo Langona [renato@linuxsecurity.com.br]
RESP=email@do.responsavel
FROM=$1 # Ta ta ta, ja sei :P
FROMRES=`nslookup $FROM | grep Name | cut -b 6-60`
DATE=`date`
echo "Portscan de $FROM < - > $FROMRES" | mail -s "[ATK-> $FROM - $DATE <-]" $RESP
---- Cut Here ----
Autor: Renato Murilo Langona (SuidBit/BEAVISII) [renato@linuxsecurity.com.br]
Ultima atualizacao: [Fri Jan 12 16:30:39 BRST 2000]