Menu Principal

sexta-feira, 17 de fevereiro de 2012

Réplica da base LDAP com SSL/TLS e SASL

FONTE: http://www.nisled.org/index.php?/Demo-category/securities-and-financial-reporting.html

A réplica na base LDAP é um elemento de fundamental importância para segurança dos dados e para balanceamento de carga.
 Como mostra a figura 1, podemos ter um servidor “master” que recebe os dados e distribui para outros “slave” que pode estar em qualquer parte da empresa, desde um servidor ao lado até em um servidor na matriz em outro país.


A réplica é uma solução bastante utilizada, porém também é um dos momentos mais críticos, pois os dados “inteiros” são transferidos pela rede e até pela Internet. Por isso é de fundamental importância a implementação de métodos que protejam essas informações de curiosos. Neste artigo vamos utilizar duas formas de proteção dos dados, que são:

  • TLS/SSL – Criação de um canal criptografado para transferência dos dados; e
  • SASL – Vamos utilizar Cyrus-SASL, que implementa uma camada de segurança na autenticação.
Para demonstrar os recursos do LDAP, vamos começar desde a instalação até a réplica da base LDAP. Vamos utilizara distribuição Ubuntu-Server.
1- Instalação do servidor LDAP
Para instalação do OpenLDAP vamos utilizar os pacotes pré-compilados da distribuição.
[root@master]# apt-get install slapd ldap-utils
Com a instalação feita, o próximo passo é a configuração do LDAP. Para isso apague o diretório slapd.d que está dentro do diretório /etc/ldap e crie o arquivo slapd.conf, conforme o exemplo a seguir:
include         /etc/ldap/schema/core.schema
include         /etc/ldap/schema/cosine.schema
include         /etc/ldap/schema/inetorgperson.schema
include         /etc/ldap/schema/openldap.schema
include         /etc/ldap/schema/nis.schema
include         /etc/ldap/schema/misc.schema
password-hash           {CRYPT}
defaultsearchbase       dc=curso,dc=ldap
pidfile         /var/run/slapd/slapd.pid
argsfile        /var/run/slapd/slapd.args
loglevel        1024
modulepath      /usr/lib/ldap
moduleload      back_bdb
moduleload      back_monitor
access to dn.base=""
by * read
access to dn.base="cn=Subschema"
by * read
access to dn.subtree=cn=Monitor
by * read
database        monitor
database        bdb
cachesize       5000
mode            0600
suffix          "dc=curso,dc=ldap"
checkpoint      512 720
rootdn  "cn=manager,dc=curso,dc=ldap"
rootpw  pedra
# Indexing
index   default                                                 sub
index   uid,mail                                                eq
directory       "/var/lib/ldap "
lastmod on

Mude o dominio (dc=curso,dc=ldap) LDAP para aquele que desejar. Em seguida altere o arquivo /etc/default/slapd, e acresce altere a seguinte linha:
SLAPD_CONF="/etc/ldap/slapd.conf"
Feito essas configurações, já podemos iniciar o slapd.
[root@master]# /etc/init.d/slapd restart
Verifique se a porta 389 está aberta.
1.2 -  Criação da base
A figura 2 mostra a estrutura que vamos utilizar na base LDAP.

Segue o arquivo estrutura.ldif
dn: dc=curso,dc=ldap
objectClass: top
objectClass: dcObject
objectClass: organization
dc: curso
o: Sistema de Backup
dn:ou=people,dc=curso,dc=ldap
objectClass: top
objectClass: organizationalunit
objectClass: dcObject
dc: curso
ou:people
dn:ou=group,dc=curso,dc=ldap
objectClass: top
objectClass: organizationalunit
objectClass: dcObject
dc: curso
ou:group
dn:uid=jose,ou=people,dc=curso,dc=ldap
objectClass: top
objectClass: person
objectClass: posixAccount
objectClass: inetOrgPerson
cn:jose
sn: sila
mail:  jose@jose.com
telephonenumber:11-11-1-11
uid: jose
userPassword: x
homeDirectory: /home/jose
displayName: Jose Silva
loginShell: /dev/null
uidNumber: 512
gidNumber: 100
dn: cn=administrador,ou=group,dc=curso,dc=ldap
objectClass: posixGroup
cn: administrador
gidNumber: 999
memberUid: jose

Com o arquivo criado, vamos utilizar o comando ldapadd para importar o arquivo LDIF para a base LDAP
[root@master]# ldapadd –f estrutura.ldif –x –D cn=manager,dc=curso,dc=ldap –W
2 - SSL
Com a estrutura da base LDAP feita, vamos implementar o TLS/SSL no servidor LDAP. Para isso certifique que o pacote opessl esteja instalado. No primeiro passo vamos criar o diretório que será criado o CA (certificador).
[root@master]# mkdir /opt/CAtls
Dentro do diretório criado, execute o script CA.sh –newca para criar um novo CA.
[root@master]opt/CAtls# /usr/lib/ssl/misc/CA.sh –newca
No campo “Enter PEM pass phrase” defina a senha para validação do certificado. Esta Senha vai ser usada para validação das chaves. Preencha os campos como mostra a figura 03;

}  No campo “A challenge password []:”, não defina nada, pressione “enter”. Essa é uma senha além da chave. Toda vez que for utilizar a chave terá que digitar a senha.
}  No campo “Enter pass phrase for” digite a senha definida no “Enter PEM pass phrase”
Após a criação do CA, vamos criar a chave:
[root@master]opt/CAtls# openssl req -newkey  rsa:1024  -nodes -keyout newreq.pem -out newreq.pem
E para finalizar é necessário assinar a chave utilizando o CA criado.
[root@master]opt/CAtls# /usr/lib/ssl/misc/CA.sh –sign
}  Digite a senha do CA e responda todos os questionamentos como “yes”
Agora temos as seguintes chaves:

Copie as chaves para o diretório LDAP:
Crie o diretório para chave no slapd:
[root@master]# mkdir /etc/ldap/tls
Copie as chaves:
[root@master]# cp /opt/CAtls/demoCA/cacert.pem /etc/ldap/tls/
E para terminar a configurar, temos que incluir as seguintes linhas no arquivo slapd.conf:
TLSCACertificateFile /etc/ldap/tls/cacert.pem
TLSCertificateFile /etc/ldap/tls/servercrt.pem
TLSCertificateKeyFile /etc/ldap/tls/serverkey.pem
# Verificação no cliente não é requirida
TLSVerifyClient never
Para o LDAP iniciar automaticamente o SSL, é necessário novamente alterar o arquivo /etc/default/slapd e mudar a seguinte linha:
SLAPD_SERVICES="ldap:/// ldapi:/// ldaps:///“
Reinicie o servidor LDAP e verifique se a porta 636 está aberta.
2.1 - Cliente LDAP com SSL
Antes de iniciar a réplica da base LDAP, vamos testar se o servidor LDAP está respondendo corretamente com o SSL. Para fazermos os testes, crie as chaves no cliente igualmente como criamos no servidor.
Copei as chaves para o diretório /home/tls
[root@master]# cp /opt/CAtls/demoCA/cacert.pem /home/tls/
No primeiro teste vamos utilizar o próprio openssl para fazer a conexão com o servidor.
[root@master]# openssl s_client –connect  master.curso.ldap:636 –showcerts –state –CAfile /home/tls/cacert.pem


Perceba o “Verify Return Code”, deve estar ok. Para finalizar o programa utilize o CTRL+ C.
Para ldapsearch ou alguém outro programa do LDAP poder funcionar utilizando a conexão SSL, vamos editar o arquivo /etc/ldap/ldap.conf acrescentando as configurações das chaves criadas no cliente.
URI     ldaps://localhost
TLS_CACERT /home/tls/cacert.pem
TLS_CERT     /home/tls/ldap.clientecrt.pem
TLS_KEY      /home/tls/ldap.clientekey.pem
TLS_REQCERT never
Feito isso já podemos testar a conexão utilizando o comando LDAPSEARCH. Como mostra o comando seguinte:
[root@master]# ldapsearch -b dc=curso,dc=ldap -D cn=manager,dc=curso,dc=ldap -w pedra –Z
A opção “-Z” faz o ldapsearch utilizar a conexão tls. Esse comando deve retornar toda a estrutura da base LDAP.
3 - SASL
SASL é um acrônimo para Simple Authentication and Security Layer, como o nome diz é uma camada de segurança para autenticação simples, provendo uma camada de criptografia para os protocolos orientados à conexão.
A implementação SASL do slapd utiliza o software Cyrus SASL com suporte a vários mecanismos, incluindo DIGEST-MD5 e CRAM-MD5. Vamos instalar o SASL com suporte ao LDAP usando os pacotes do ubuntu-server, como mostra os comandos a seguir.
[root@master]# apt-get install sasl2-bin libsasl2-2 libsasl2-modules libsasl2-modules-ldap
O LDAP e o SASL irão se comunicar em ambas os lados. Isso significa que vamos fazer o LDAP reconhecer os usuário da base SASL e fazer o SASL reconhecer os usuários do LDAP.
3.1 -  LDAP para SASL
Nessa primeira parte vamos fazer a configuração para que o SASL reconheça os usuários da base LDAP. Para fazer isso, primeiramente vamos configurar o arquivo /etc/default/ saslauthd.
START=yes
DESC="SASL Authentication Daemon"
NAME="saslauthd"
MECHANISMS="ldap"
MECH_OPTIONS=""
THREADS=5
OPTIONS="-c -m /var/run/saslauthd"
Neste arquivo o mais importante é mudar o comando “START” para “yes”, assim o SASL vai ser inicializado automaticamente, a outra alteração é o “MECHANISMS” para buscar os usuários no LDAP. Também é preciso configurar o arquivo /etc/ saslauthd.conf para fazer o SASL buscar as informações na base LDAP.
ldap_servers: ldap://localhost/
Neste arquivo mude os atributos, ldap_bind_dn e o ldap_bind_pw para as informações da sua base LDAP. Faça a mesma coisa com o atributo ldap_search_base.
Antes teste o SASL lembre-se de reinicar o SASL
[root@master]# /etc/init.d/saslauthd restart
Vamos testar para saber se o SASL tá buscando os usuário na base LDAP.
[root@master]# root@ldapserver:/etc# testsaslauthd -u jose -p x
0: OK "Success."
A parâmetro “–u” especifica o usuário e o “–p” a senha. Como você pode ver a configuração do SASL com LDAP tá funcionando perfeitamente.
Em alguns casos é necessário ajustar a permissão do diretório /etc/sasldb2 para que a autenticação funcione.
3.2 -  SASL para LDAP
Neste ponto vamos fazer o LDAP reconhecer os usuários criados na base do SASL.
Primeiramente crie um usuário na base do SASL. É aconselhável ser o mesmo usuário do rootdn do LDAP. O comando que cria usuário no SASL
[root@master]# saslpasswd2 -c admin
Ao executar esse comando, será pedida uma senha para a criação do usuário.
Também é preciso executar o comando ldapsearch para verificar se o LDAP tem suporte ao SASL.
[root@master]# ldapsearch -x  -LLL -s "base" -b "" supportedSASLMechanisms
A saída à cima mostra que o LDAP está com suporte ao SASL. O próximo comando que vamos utilizar é o ldapwhoami e ldapsearch para autenticar o usuário do SASL.
[root@master]# ldapwhoami -h localhost -U admin
Como mostra o comando acima, o LDAP autenticou o usuário do SASL corretamente. E agora podemos usar o usuário do SASL para outras aplicações do LDAP, tais como ldapsearch.
[root@master]# ldapsearch -U admin@ldapserver -b 'dc=curso,dc=ldap' '(objectclass=*)'
SASL username: admin@ldapserver
SASL data security layer installed.
# curso.ldap
dn: dc=curso,dc=ldap
objectClass: top
objectClass: dcObject
objectClass: organization
dc: curso
o: Clodonil Trigo
# people, curso.ldap
dn: ou=people,dc=curso,dc=ldap
objectClass: organizationalUnit
ou: people

O ldapsearch autenticou o SASL corretamente, como mostra a saída acima.
4 - Réplica
Agora com o SSL/TLS e SASL configurados e funcionando, podemos passar para configuração da réplica de conforma segura. Vamos utilizar a réplica com Syncrepl, que é a forma mais moderna.
As principais características do syncrepl são:
  • Trabalha no modo stateful. A réplica é baseado em status, não precisa de arquivo de logs;
  • Sincronização completa;
  • Cliente inicia a réplica;
  • Sincronização baseado em eventos ou por períodos (rajadas);
  • Multi-Master;
Vamos dividir a configuração em duas partes, sendo o master o servidor que recebe as alterações na base LDAP. Já o slave é o servidor que recebe as mudanças do servidor master.
MASTER:
A configuração do master que é o provider são as seguintes:
moduleload  syncprov
overlay syncprov
syncprov-checkpoint 100 10
syncprov-sessionlog 100
index entryCSN   eq
index entryUUID eq
Acrescente essas configurações no slapd.conf do master. Segue o slapd.conf do master completo.
SLAVE:
Já do lado slapd.conf do slave vamos mostar duas configurações que podem trocar a transferência dos arquivos durante a réplica bem segura.
O primeiro é usando SSL, mas com autenticação simple. As linhas a seguir deve ser incluídas no slapd.conf do slave (link do slapd.conf completo):
provider=ldaps://10.0.0.102:636
A configuração do slave que estamos utilizando trabalha com SSL (ldaps://10.0.0.102:636) e trabalha em modo de rajada em cada 10 segundos. Perceba a tabulação após a primeira linha. Essa tabulação é de fundamental importância para o funcionando da réplica.
A outra configuração alternativa para slapd.conf dá réplica é utilizar o SSL com autenticação SASL.
A seguir estão as linhas para implementar a réplica com SASL e SSL juntos (slapd.conf completo com sasl).
provider=ldaps://10.0.0.102:636
A configuração do syncrepl com SASL e SSL é muito parecida com o anterior. As principais mudanças são os “bindmethod” que foi mudado para sasl e o “authcid” que define o usuário do SASL.
Após ter escolhido uma das formas de réplica, inicie o servidor master e em seguida inicie o servidor slave que automaticamente os atributos do master serão replicados no slave.
Em caso de erro, inicie o slapd em modo de debug para identificar os erros.
[root@master]# slapd –d 123 –u openldap
E com isso temos a configuração de um dos principais recursos do LDAP que é a réplica em modo seguro com SSL/TLS e com autenticação segura com SASL. Lembrando que esses recursos estão disponíveis para outros recursos.

Nenhum comentário:

Postar um comentário