Este artigo mostra como criar um cluster de alta performance, utilizando Debian Squeeze com 3 máquinas para quebra de senhas utilizando o John the Ripper, com cada nó (servidor) do cluster executando de maneira síncrona o mesmo algoritmo para quebra de senhas.
Os clusters de alta performance são utilizados para tarefas que exigem grande capacidade de processamento de dados, tais como cálculos matemáticos complexos, renderização de imagens 3D, previsões meteorológicas, entre muitas outras.
Uma das principais vantagens da utilização de clusters de alta performance é o Custo X Benefício, proporcionado pela capacidade do processamento distribuído.
Para entendermos o funcionamento de um cluster, faz-se necessário entendermos o conceito de Message Passing.
Message Passing é o método de envio e recebimento de mensagens em uma rede através de protocolos de comunicação.
Neste caso, as informações são enviadas do processo local para os processos remotos, fazendo com que as tarefas sejam gerenciadas, distribuídas e executadas simultaneamente em todos os servidores do cluster.
Os padrões mais conhecidos de Message Passing são o MPI e o PVM.
Para fins de estudo e aplicação, iremos demonstrar a utilização de um cluster de alta disponibilidade através do MPICH – Implementação Multiplataforma do Padrão MPI – que será responsável pelo processamento paralelo do "John the Ripper", utilizando três máquinas virtuais com o sistema Debian Squeeze, separadamente conectadas para quebra de senha e hashes.
Entendido o conceito de cluster e com um conhecimento razoável em GNU/Linux, mãos à obra!
Cenário e recomendações
No ambiente proposto, foram utilizadas 3 máquinas virtuais através do VirtualBox.
Segue abaixo, a configuração mínima recomendada:
Hardware compatível com sistema operacional Debian Squeeze;
01 Interface de Rede (modo NAT);
01 Interface de Rede (modo Internal);
256 MB de memória;
02 GB de espaço disponível em disco rígido;
Conexão com a Internet.
Em caso de máquinas físicas, a rede local pode utilizar apenas uma placa de rede, desde que possua o acesso externo necessário para download dos pacotes e comunicação com os demais nós (servidores) do cluster.
Utilizaremos neste artigo, a seguinte nomenclatura:
[3] Comentário enviado por cleysinhonv em 10/08/2012 - 17:18h
Olá é um ótimo artigo. Gostaria de saber se você focou especificamente para quebrar senhas ou esse cluster pode ser usado para outras aplicações. Se sim como fazer gerenciamento de filas, "checkpoint" de processos e transferência de jobs. Parabéns pelo artigo.
[4] Comentário enviado por gambin.br em 10/08/2012 - 17:59h
@asdf2 e @levi linux - muito obrigado :D
@cleysinhonv - com certeza!! No momento de execução do comando "mpiexec -n 3 -f hosts ./john" poderia executar qualquer outro processo, desde que o PATH esteja configurado adequadamente!!
Em relação ao gerenciamento de filas, transferência de jobs, não posso afirmar com certeza pois não cheguei implementar diferentes aplicações utilizando este cluster, no entanto acredito que possa implementar através de um job que seja executado pelo próprio mpiexec!
[8] Comentário enviado por c4rl em 13/08/2012 - 21:58h
Cara muito bom o artigo! Bem explicado e direto ao ponto, sem 'xurumelas'.
O mpich2, como o próprio nome sugere, utiliza a biblioteca MPI (Message Passing Interface), muito conhecida e utilizada por cientistas que necessitam paralelizar a execução de algoritmos complexos e, como bem disse gambin.br, o cluster também pode ser utilizado para execução de outros algoritmos, testes de desempenho podem ser realizados com o mpptest que pode ser encontrado aqui: http://www.mcs.anl.gov/research/projects/mpi/mpptest
[11] Comentário enviado por edmilsonjnior em 16/08/2012 - 12:10h
Olá galera :)
Reproduzi o cenário proposto, com 3 máquinas virtuais rodando Debian, os testes que fiz me deixaram curioso.
Para eles, utilizei o John para quebrar senhas de usuários e depois o Pyrit para quebrar senhas de redes sem fio, ambos utilizando wordlists.
Para fazer um comparativo eu rodei isoladamente os programas apenas no master e salvei os resultados, depois fiz o mesmo só que utilizando as 3 máquinas virtuais como um cluster, primeiro o John, depois o Pyrit.
Durante a execução eu rodei o top nas 3 e pude ver que os processos estavam rodando realmente nos 3 nós.
O resultado foi o seguinte:
Teste 1
Apenas um servidor, 10.000 possibilidades com o John, 13 minutos de teste.
Depois, utilizando todo o cluster, cheguei aos mesmos 13 minutos de teste.
Teste 2
Apenas um servidor, 100.000 possibilidades com o pyrit, 3 minutos e 21 segundos de teste.
Depois, utilizando todo o cluster, cheguei ao mesmo resultado em 5 minutos de teste.
Intencionalmente as wordlists não tinham a senha correta, assim, após testar todas as possibilidades da lista o programa fecha, dessa forma eu pude usando o comando time, obter o tempo de execução.
Me estranha o fato de o cluster ter sido mais lento que apenas uma das máquinas virtuais rodando, notei que a saída do programa ao fim da execução é repetida, no caso, com 3 máquinas, no nó master eram exibidas as saídas dos 3 processos criados, não posso garantir, mas fiquei assim com a impressão de que os 3 estavam fazendo todo o trabalho ao invés de dividi-lo.
Mais alguém fez testes? Que resultados obtiveram, foram iguais aos meus?
Ainda não pude criar o cluster um máquinas reais, caso alguém tenha feito, estou curioso para saber se o resultado foi diferente.
Gambin.br, ótimo artigo, continue publicando-os para nós ^^
Vejo que ainda tenho muito a estudar. :)
[12] Comentário enviado por stremer em 16/08/2012 - 14:53h
edmilsonjnior.
Em máquinas virtuais realmente é mais lento... além do processamento... tem todo o trabalho de gerenciar os SOs das VMs... como no final seu poder de processamento não aumenta (pois ele depende da maquina real), fazer 3 VMs consome muito mais do que uma unica...
Cluster em máquina virtual somente para testes....
Ou no caso de varias maquinas host com uma VM cada um delas participando do cluster (nesse caso para não precisar instalar o filho como SO principal)...
[13] Comentário enviado por gambin.br em 16/08/2012 - 23:13h
@edmilsonjnior
Muito obrigado pelo contato! Fico feliz que tenha se empenhado em estudar o artigo e inclusive analisar possíveis falhas! Espero que tenha ajudado em alguma coisa ;p
Pretendo novamente montar o ambiente com máquinas físicas e validar os testes que você realizou.
Obs: você não é o único que tem muito a estudar ;p
@stremer
Obrigado pela contribuição! Também acredito que o problema citado pelo @edmilsonjnior esteja relacionado diretamente com o fato de serem utilizadas máquinas virtuais. Precisava deixar mais claro esta restrição no artigo..
E obrigado a todos que estão testando também, afinal comunidade e software livre de verdade é isso aí - todos colaborando para o bem comum :D
Obs: esse artigo não escrito só por mim - teve um punhado de gente boa envolvida nisso (créditos no meu blog pessoal):
[16] Comentário enviado por ilopes em 15/08/2013 - 19:08h
pretendo baser meu tcc neste artigo, principalmente as configuraçaoes, claro que tudo citado, gostaria de ter algumas sugestoes de outra aplicabilidade dele principalmente para algo que exiga muito desempenho e se precisaria mexer muito na configuraçao
[17] Comentário enviado por thyago162 em 29/03/2014 - 11:51h
Ola, eu tenho uma duvida, eu segui passo a passo deste artigo e no final acontece o seguinte, em vez do processo ser distribuido para todos os nós, ele está indo apenas para um... já verifiquei a comunicação entre eles, comunicação remota e tudo mais, gostaria que se alguem tiver alguma ideia, por favor.
[19] Comentário enviado por Gabrielscps em 01/01/2016 - 12:56h
Parabéns pelo artigo, bem explicado!! Só um detalhe que aqui comigo deu problema foi na montagem da pasta no slave, porque faltava o pacote nfs-common nos slaves. Vlw
[20] Comentário enviado por lu_kinhas13 em 19/09/2018 - 14:26h
[19] Comentário enviado por Gabrielscps em 01/01/2016 - 12:56h
Parabéns pelo artigo, bem explicado!! Só um detalhe que aqui comigo deu problema foi na montagem da pasta no slave, porque faltava o pacote nfs-common nos slaves. Vlw
Estou usando este artigo para um trabalho da faculdade, fiz tudo certo, como você resolveu seu problema? só instalou os nfs-cammon nos slaves ?