Criando um cluster de alta performance para quebrar senhas

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.

[ Hits: 58.258 ]

Por: Tarcisio Gambin em 10/08/2012


Configuração dos servidores slaves



Configuração dos servidores slaves

A configuração dos servidores slaves é bem parecida com a configuração do servidor master, a diferença principal será na instalação e configuração de pacotes (bem menor).

Iremos configurar apenas um servidor slave, embora o procedimento é o mesmo utilizado para 'n' servidores.

No cenário apresentado, estamos utilizando apenas dois slaves: deb02 (10.1.1.2) e deb03 (10.1.1.3).

Para iniciarmos sua configuração, acesse o terminal como root. Edite o seguinte arquivo para configuração de repositórios:

# vi /etc/apt/sources.list

Configure conforme as informações abaixo:

deb http://security.debian.org/ squeeze/updates main
deb-src http://security.debian.org/ squeeze/updates main
deb http://ftp.br.debian.org/debian/ squeeze-updates main
deb-src http://ftp.br.debian.org/debian/ squeeze-updates main
deb http://ftp.br.debian.org/debian squeeze main


Em seguida, atualize repositório e os pacotes do sistema, através do seguinte comando:

# apt-get update
# apt-get upgrade all


Configurações de Rede

Acesse o terminal como root. Edite o seguinte arquivo para configuração de endereços de rede:

# vi /etc/network/interfaces

Configure conforme as informações abaixo:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto eth1
iface eth1 inet static
address 10.1.1.2
netmask 255.255.255.0


Inicie a segunda interface de rede através do seguinte comando:

# ifup eth1

Agora, iremos desabilitar o IPv6 em nosso servidor para garantir uma melhor compatibilidade com os serviços utilizados.

Também serão configurados os IPs dos servidores utilizados no cluster, uma vez que não será utilizada a resolução de nomes DNS.

Portanto, edite o seguinte arquivo para desabilitar o uso local do IPv6 e configurar os IPs dos servidores do cluster:

# vi /etc/hosts/

Configure conforme as informações abaixo:

127.0.0.1 localhost
10.1.1.1 deb01 # master
10.1.1.2 deb02 # slave
10.1.1.3 deb03 # slave


Agora, será necessário desabilitar o IPv6 na inicialização do sistema, portanto, será necessário digitar o seguinte comando

# echo 'net.ipv6.conf.all.disable_ipv6 = 1' >> /etc/sysctl.conf

Agora iremos desativar o IPv6 utilizado pelo Exim, para evitar que o serviço comece a gravar mensagens de erro nos logs do sistema pois o IPv6 está desativado.

Pare reconfigurar o Exim, basta executar o seguinte comando:

# dpkg-reconfigure exim4-config

Será exibida a tela de configuração do serviço. Basta configurá-lo conforme o seguinte procedimento:
  1. Clique em Ok para prosseguir;
  2. Selecione Sem configuração no momento e clique em Ok para prosseguir;
  3. Clique em Sim para deixar o sistema de mensagens não configurado;
  4. Clique em Não para não dividir os arquivos de configuração.

Reinicie o servidor para que todas as alterações tenham efeito.

Configuração de usuário e permissões

Para utilização o cluster com MPICH2, é necessário que todos os usuários tenham o mesmo UID e GUID em todas as estações utilizadas.

Para isso, iremos configurar um usuário e grupo para utilização deste serviço.

Crie o usuário através do seguinte comando:

# groupadd -–gid 1100 mpigroup
# adduser –-home /cluster -–uid 1100 -–gid 1100 mpiuser --disabled-password --quiet


Apenas confirme todas as informações sobre o usuário.

Instalação do SSH

Para instalar o SSH, acesse o terminal como root.

Digite o seguinte comando para iniciar a instalação:

# apt-get install openssh-server

Configuração do /cluster nos servidores slaves

O /cluster deverá estar acessível a todos os servidores do cluster, podendo ser montado manualmente, ou automaticamente (melhor ;p), durante o boot.

Neste projeto, iremos utilizar o mapeamento automático.

Para isso, acesse o terminal como root. Digite o seguinte comando:

# echo 'deb01:/cluster /cluster nfs defaults 0 0' >> /etc/fstab

Para testar o mapeamento, digite o seguinte comando:

# mount -a

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Configuração do servidor master
   3. Configuração dos servidores slaves
   4. Quebrando senhas
Outros artigos deste autor

Como configurar um IPTABLES simples e seguro no Slackware!

AnyRemote - o poder em suas mãos!

Leitura recomendada

Sudo 1.8.12 - Parte II - Como sudo funciona

Enviando e recebendo e-mails criptografados através do Thunderbird

Gerar par de chaves com o GnuPG em 11 passos

Matriz <-> Filial com o OpenVPN

Alta Disponibilidade com LVS

  
Comentários
[1] Comentário enviado por asdf2 em 10/08/2012 - 13:11h

muito bem feito, valeu

[2] Comentário enviado por levi linux em 10/08/2012 - 13:16h

Excelente artigo, muito bem escrito e bastante detalhado! Favoritado!

[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!

[5] Comentário enviado por fernandoborges em 10/08/2012 - 19:06h

Muito bem escrito e detalhado. Uma excelente fonte de pesquisa! Parabéns.

[6] Comentário enviado por danielsath em 11/08/2012 - 09:07h

Parabéns, uma ótima ideia para quem trabalha com uma grande quantidade de dados. Favorito.

[7] Comentário enviado por emccomputadores em 12/08/2012 - 11:24h

O aws da amazon tem sido bastante utilizado para isso, um ótimo artigo, parabéns.

[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

Abs

[9] Comentário enviado por gambin.br em 13/08/2012 - 22:19h

Obrigado pelos complementos @c4rl =]

[10] Comentário enviado por edmilsonjnior em 15/08/2012 - 18:26h

Ótimo artigo, bem detalhado e direto.
Reproduzindo o cenário e efetuando testes agora mesmo :)

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

http://tarcisiogambin.net/blog/criando-um-cluster-de-alta-performance-para-quebrar-senhas/

[14] Comentário enviado por fbrabreu em 17/08/2012 - 09:15h

PARABÉNS...depois de ler o artigo deu vontade de colocar em prática.

[15] Comentário enviado por samuca32 em 22/08/2012 - 12:58h

ola gente caso queiram painel tenho plesk free ilimitado versao 9.0;9.5 em portugues,ipsomega,zpanel msn [email protected]

[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.

[18] Comentário enviado por cypersan em 04/06/2014 - 15:23h

Mas pelo que vi, tem que modificar o Makefile para ter suporte paralelo, e isso você não fez, ou só esqueceu de colocar no artigo ?

[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 ?


Contribuir com comentário