Olá a todos, essa dica de instalação foi construída durante a minha aula no curso de Redes do Senai CTAI Florianopolis, U.C. Técnicas de Segurança de Rede deste ano (1o.Semestre/2017), assim agradeço previamente a todos os acadêmicos que auxiliaram na construção desta dica.
Alguns pre-requisitos são necessários para esta tarefa, e temos como objetivo pontuar em visão macro da instalação do
PortSentry 1.2 no
CentOS 7.
Para quem não conhece, PortSentry é um ótimo e bem eficaz HIDS, ou seja, um IDS para HOST, instalado localmente no servidor; consegue detectar ataques e scans vindo da internet e fazer o bloqueio do respectivo IP do "espertinho".
É possível integrar junto com Fail2ban e outros apps para justamente distribuir a ameaça pela rede.
Recomendo a leitura, aqui mesmo no VOL, das diversas e ótimas documentações sobre o nosso amigo PortSentry.
Então dedos no teclado, e vamos lá:
Primeiro baixamos o pacote correto:
portsentry-1.2.tar.gz (está disponível em diversos sites e no sourceforge.net).
Já com um CentOS 7 instalado e previamente configurado com o básico, vamos lá:
sudo yum groupinstall 'Development Tools' (precisamos copilar algumas coisas...)
# wget https://goo.gl/EKBKdi (procure o link correto na internet, esse vai expirar em breve)
# cd portsentry_beta/
# make linux
Aqui o negócio apresenta erro e não vai mais para frente! Galera já desistindo da faculdade, jogando a toalha, quase trocando de curso e indo estudar moda, tudo por causa de um errinho no make... :D
Depois de muito pesquisar, testar e analisar, encontramos um erro no código fonte do portsentry. :D
Então para corrigir:
# vi portsentry.c +1584 (isso mesmo vá até a linha 1584)
repare que existe uma quebra de linha onde não deveria ter. Corrija isso, e vamos continuar a brincadeira...
não esqueça de salvar o arquivo
:wq!
# make linux ; make generic ; make install
Se tudo correu bem, e tudo foi compilado com sucesso, uhuuuu!!! :D
Edite o arquivo de configuração
portsentry.conf, em /usr/local/ e siga algumas sugestões de configuração.
Editar, adicionar ou remover as portas da lista de monitoramento. Lembrando que a porta não deve estar em uso por um serviço real.
TCP_PORTS="1,11,15,79,111,119,143,540,635,1080,1524,2000,5742,6667,12345,12346,20034,27665,31337,32771,32772,32773,32774,40421,49724,54320"
UDP_PORTS="1,7,9,69,161,162,513,635,640,641,700,37444,34555,31335,32770,32771,32772,32773,32774,31337,54321"
Alterar os parâmetros:
# 0 = Do not block UDP/TCP scans.
# 1 = Block UDP/TCP scans.
# 2 = Run external command only (KILL_RUN_CMD)
BLOCK_UDP="1"
BLOCK_TCP="1"
Mais algumas alterações... E alterar quais os comandos que devem ser executados quando um ataque for detectado.
KILL_ROUTE="/sbin/route add -host $TARGET$ reject"
ou se quiser usar iptables
KILL_ROUTE="/usr/local/bin/iptables -I INPUT -s $TARGET$ -j DROP"
Como estamos trabalhando com TCPWrappers, durante nossas aulas, vamos adicionar nos hosts.deny para ficar mais legal :D
KILL_HOSTS_DENY="ALL: $TARGET$ # Portsentry trabalhando"
Vamos deixar uma mensagem para o nosso “amigão" :D
PORT_BANNER="Sai fora malandro...."
Sai salvando :wq! e partir para os testes...
Iniciar o daemon, desta forma estamos barrando conexões TCP/UDP e portscanner:
# portsentry -atcp
# portsentry -audp
Nesta forma o teste é mais simples:
# portsentry -tcp
# portsentry -udp
Para parar o serviço:
# kill -9 `ps -aux | grep portsentry | awk '{ print $2 }'`
Para remover um endereço ip do bloqueio, edite /etc/hosts.deny e remova a linha referente ao IP.
Caso esteja usando iptables, simplesmente digite:
iptables -F
Case esteja usando route, digite:
route del -host <IP> reject
e remova seus ips dos arquivos portsentry.blocked.* ou o comando abaixo (trocar o xxx.xxx.xxx.xxx pelo ip).
# sed -i ’s/xxx.xxx.xxx.xx//g’ portsentry.blocked.*
Obs.: se você utiliza RedHat/CentOS e derivados, configurar o firewallD e o SELinux. E também não criamos os scripts de start/stop/restart, mas quem sabe para uma próxima dica.