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.
Parte 2: Configuração do servidor master
Para este modelo de cluster, será necessário um nó que seja o 'Master', ou seja, responsável por todas as atividades em execução nos demais nós do cluster.
Também serão configurados usuários responsáveis pela execução dos serviços do cluster e também a preparação do ambiente.
É válido lembrar que, o servidor responsável por iniciar os serviços cluster é o host (nó) principal (master), e todos os demais serão os hosts (nós) secundários (slaves).
# vi /etc/apt/sources.list
Configure conforme as informações abaixo:
Em seguida, atualize repositório e os pacotes do sistema, através dos seguintes comandos:
# apt-get update
# apt-get upgrade all
Edite o seguinte arquivo, para configuração de endereços de rede:
# vi /etc/network/interfaces
Configure conforme as informações abaixo:
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:
Agora será necessário desabilitar o IPv6 na inicialização do sistema, portanto será necessário editar o seguinte arquivo:
# vi /etc/sysctl.conf
Basta adicionar a seguinte linha, no final do arquivo:
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:
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.
Para isso, entre no terminal como root. Digite o seguinte comando para a instalação do serviço NFS
# apt-get install nfs-kernel-server
Após a instalação, será necessário compartilhar o diretório /cluster que será acessado por todos os servidores do cluster.
Como o foco deste artigo é um ambiente de cluster de alta performance, não serão aplicadas técnicas de hardening. Portanto o compartilhamento estará acessível por todos os computadores da rede.
Faça o compartilhamento através do seguinte comando:
# echo '/cluster *(rw,sync,no_subtree_check)' >> /etc/exports
Reinicie o serviço do NFS através do seguinte comando:
# invoke-rc.d nfs-kernel-server restart
Para instalar o SSH e a biblioteca "libssl-dev", acesse o terminal como root.
Digite o seguinte comando para iniciar a instalação:
# apt-get install openssh-server libssl-dev
Agora, será necessário entrar com o usuário "mpiuser" (que irá executar o serviço de cluster), para a configuração do SSH afim de realizar a conexão através das chaves que serão criadas.
Acesse com o usuário mpiuser através do seguinte comando:
# su - mpiuser
Execute os seguintes comandos para gerar as chaves:
ssh-keygen –t dsa
Pressione ENTER 3 vezes, para gerar uma chave em branco.
Agora, digite os seguintes comandos para prosseguirmos com a configuração das chaves:
cd ~/.ssh
$ cat id_dsa.pub >> authorized_keys
Como todos os servidores irão montar o /cluster como diretório home do usuário "mpiuser", não será necessário configurá-las novamente.
Para isso, acesse o terminal como root.
Será necessário instalar os compiladores necessários através do seguinte comando:
# apt-get install build-essential gfortran
Após a instalação, acesse o terminal como mpiuser através do seguinte comando:
# su - mpiuser
Acesse o /cluster e crie os diretórios "src" e "mpich" através do seguinte comando:
mkdir mpich2 src
Acesse o /src e faça o download da última versão estável do MPICH2 (1.4.1p1), através do seguinte comando:
wget http://www.mcs.anl.gov/research/projects/mpich2/downloads/tarballs/1.4.1p1/mpich2-1.4.1p1.tar.gz
Após o download, descompacte o seguinte arquivo:
tar -zxf mpich2-1.4.1p1.tar.gz
Após a descompactação, acesse o diretório: mpich2-1.4.1p1
Agora, será necessário configurar o MPICH2 através do seguinte comando:
./configure -prefix=/cluster/mpich2 --with-pm=hydra
Concluindo este procedimento, configuramos o MPICH2 para ser instalado em /cluster/mpich2, e juntamente com o Hydra, que fará o gerenciamento dos processos nos servidores do cluster.
Execute a instalação através dos seguintes comandos:
make
$ make install
Após a instalação, será necessário adicionar os binários e bibliotecas através da edição do seguinte arquivo:
vi ~/.bashrc
Insira as seguintes linhas, no final do arquivo:
Recarregue as novas variáveis no bash, através do seguinte comando:
source ~/.bashrc
Execute os seguintes comandos, para verificar se as variáveis foram carregadas com sucesso no bash:
which mpiexec
Se forem exibidos os paths dos binários e bibliotecas, significa que eles já estão disponíveis no PATH do bash sem a necessidade de digitar o caminho completo durante sua próxima execução.
Agora, será necessário configurar o arquivo hosts, que será responsável por identificar ao Hydra os servidores que fazem parte do cluster.
Crie o arquivo através do seguinte comando:
vi /cluster/hosts
Adiciones as seguintes linhas no arquivo:
Estas linhas representam, respectivamente, o servidor master e os servidores slaves do cluster.
Para isso, acesse o terminal como mpiuser:
# su - mpiuser
Acesse o /cluster. Faça o download do código fonte do John the Ripper, através do seguinte comando:
wget http://www.openwall.com/john/g/john-1.7.9.tar.gz
Após o download, descompacte os arquivos através do seguinte comando:
tar -zxf john-1.7.9.tar.gz
Acesse agora a pasta com o conteúdo dos arquivos através do seguinte comando:
cd john-1.7.9/src
Agora, basta compilar através do seguinte comando:
make linux-x86-any
Este comando compila o John the Ripper otimizado para uma arquitetura 32 bits comum.
Para outros tipos de arquitetura, basta compilá-lo utilizada qualquer uma das arquiteturas listadas através do seguinte comando:
make clean
* Importante: como ele será executado em um dos nós do cluster por hardwares diferentes, é importante que ele seja compilado em uma arquitetura compatível com todos os nós. Neste caso, o linux-x86-any garante essa compatibilidade com as máquinas virtuais utilizadas neste artigo.
Certifique-se que o John the Ripper está funcionando normalmente através dos seguintes comandos:
cd /cluster/john-1.7.9/run
$ ./john -test
Será exibida uma tela com os resultados dos testes de performance de todos os algoritmos utilizados.
Configuração
Nesta etapa, serão feitas as configurações do sistema, tais como atualização, instalação e configuração dos pacotes básicos.Também serão configurados usuários responsáveis pela execução dos serviços do cluster e também a preparação do ambiente.
É válido lembrar que, o servidor responsável por iniciar os serviços cluster é o host (nó) principal (master), e todos os demais serão os hosts (nós) secundários (slaves).
Configuração do servidor master
Esta configuração será feita com a instalação dos pacotes/ serviços: NFS, SSH, MPICH2 e John the Ripper, que serão utilizados por todo o cluster através da rede.Configuração do repositório
Acesse o terminal, como root, e 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
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 dos seguintes comandos:
# apt-get update
# apt-get upgrade all
Configuração de Rede
Acesse o terminal como rootEdite 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.1
netmask 255.255.255.0
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
auto eth1
iface eth1 inet static
address 10.1.1.1
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
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 editar o seguinte arquivo:
# vi /etc/sysctl.conf
Basta adicionar a seguinte linha, no final do arquivo:
net.ipv6.conf.all.disable_ipv6 = 1
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:
- Clique em Ok para prosseguir;
- Selecione Sem configuração no momento e clique em Ok para prosseguir;
- Clique em Sim para deixar o sistema de mensagens não configurado;
- 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ários e permissões
Para utilização do cluster com MPICH2, é necessário que todos os usuários tenham o mesmo UID e GUID em todas as estações utilizadas, uma vez que não estamos utilizando nenhum serviço de diretório.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.
Configuração do servidor NFS
O servidor NFS será utilizado para compartilhar todos os arquivos (binários, bibliotecas e senhas) utilizados durante a utilização do cluster.Para isso, entre no terminal como root. Digite o seguinte comando para a instalação do serviço NFS
# apt-get install nfs-kernel-server
Após a instalação, será necessário compartilhar o diretório /cluster que será acessado por todos os servidores do cluster.
Como o foco deste artigo é um ambiente de cluster de alta performance, não serão aplicadas técnicas de hardening. Portanto o compartilhamento estará acessível por todos os computadores da rede.
Faça o compartilhamento através do seguinte comando:
# echo '/cluster *(rw,sync,no_subtree_check)' >> /etc/exports
Reinicie o serviço do NFS através do seguinte comando:
# invoke-rc.d nfs-kernel-server restart
Instalação do SSH e libssl-dev
O SSH será utilizado para comunicação entre o servidor master e os servidores slaves, e a biblioteca "libssl-dev" será responsável pela implementação do suporte ao MD5.Para instalar o SSH e a biblioteca "libssl-dev", acesse o terminal como root.
Digite o seguinte comando para iniciar a instalação:
# apt-get install openssh-server libssl-dev
Agora, será necessário entrar com o usuário "mpiuser" (que irá executar o serviço de cluster), para a configuração do SSH afim de realizar a conexão através das chaves que serão criadas.
Acesse com o usuário mpiuser através do seguinte comando:
# su - mpiuser
Execute os seguintes comandos para gerar as chaves:
ssh-keygen –t dsa
Pressione ENTER 3 vezes, para gerar uma chave em branco.
Agora, digite os seguintes comandos para prosseguirmos com a configuração das chaves:
cd ~/.ssh
$ cat id_dsa.pub >> authorized_keys
Como todos os servidores irão montar o /cluster como diretório home do usuário "mpiuser", não será necessário configurá-las novamente.
Instalação e configuração do MPICH2
O MPICH será instalado através da compilação manual, para que possamos, desta forma, utilizar a versão estável mais atualizada e também para que o diretório destino dos binários e bibliotecas, seja acessível para todos os servidores do cluster, através da montagem do /cluster.Para isso, acesse o terminal como root.
Será necessário instalar os compiladores necessários através do seguinte comando:
# apt-get install build-essential gfortran
Após a instalação, acesse o terminal como mpiuser através do seguinte comando:
# su - mpiuser
Acesse o /cluster e crie os diretórios "src" e "mpich" através do seguinte comando:
mkdir mpich2 src
Acesse o /src e faça o download da última versão estável do MPICH2 (1.4.1p1), através do seguinte comando:
wget http://www.mcs.anl.gov/research/projects/mpich2/downloads/tarballs/1.4.1p1/mpich2-1.4.1p1.tar.gz
Após o download, descompacte o seguinte arquivo:
tar -zxf mpich2-1.4.1p1.tar.gz
Após a descompactação, acesse o diretório: mpich2-1.4.1p1
Agora, será necessário configurar o MPICH2 através do seguinte comando:
./configure -prefix=/cluster/mpich2 --with-pm=hydra
Concluindo este procedimento, configuramos o MPICH2 para ser instalado em /cluster/mpich2, e juntamente com o Hydra, que fará o gerenciamento dos processos nos servidores do cluster.
Execute a instalação através dos seguintes comandos:
make
$ make install
Após a instalação, será necessário adicionar os binários e bibliotecas através da edição do seguinte arquivo:
vi ~/.bashrc
Insira as seguintes linhas, no final do arquivo:
export PATH=/cluster/mpich2/bin:$PATH
LD_LIBRARY_PATH=/cluster/mpich2/lib:$LD_LIBRARY_PATH
LD_LIBRARY_PATH=/cluster/mpich2/lib:$LD_LIBRARY_PATH
Recarregue as novas variáveis no bash, através do seguinte comando:
source ~/.bashrc
Execute os seguintes comandos, para verificar se as variáveis foram carregadas com sucesso no bash:
which mpiexec
Se forem exibidos os paths dos binários e bibliotecas, significa que eles já estão disponíveis no PATH do bash sem a necessidade de digitar o caminho completo durante sua próxima execução.
Agora, será necessário configurar o arquivo hosts, que será responsável por identificar ao Hydra os servidores que fazem parte do cluster.
Crie o arquivo através do seguinte comando:
vi /cluster/hosts
Adiciones as seguintes linhas no arquivo:
deb01
deb02
deb03
deb02
deb03
Estas linhas representam, respectivamente, o servidor master e os servidores slaves do cluster.
Instalação e configuração do John the Ripper
O John the Ripper será instalado através dos últimos pacotes estáveis disponíveis no site oficial, para que seja compilado de maneira otimizada e esteja acessível a todos os usuários através do /cluster.Para isso, acesse o terminal como mpiuser:
# su - mpiuser
Acesse o /cluster. Faça o download do código fonte do John the Ripper, através do seguinte comando:
wget http://www.openwall.com/john/g/john-1.7.9.tar.gz
Após o download, descompacte os arquivos através do seguinte comando:
tar -zxf john-1.7.9.tar.gz
Acesse agora a pasta com o conteúdo dos arquivos através do seguinte comando:
cd john-1.7.9/src
Agora, basta compilar através do seguinte comando:
make linux-x86-any
Este comando compila o John the Ripper otimizado para uma arquitetura 32 bits comum.
Para outros tipos de arquitetura, basta compilá-lo utilizada qualquer uma das arquiteturas listadas através do seguinte comando:
make clean
* Importante: como ele será executado em um dos nós do cluster por hardwares diferentes, é importante que ele seja compilado em uma arquitetura compatível com todos os nós. Neste caso, o linux-x86-any garante essa compatibilidade com as máquinas virtuais utilizadas neste artigo.
Certifique-se que o John the Ripper está funcionando normalmente através dos seguintes comandos:
cd /cluster/john-1.7.9/run
$ ./john -test
Será exibida uma tela com os resultados dos testes de performance de todos os algoritmos utilizados.