Ir para o conteúdo
ou

Software livre Brasil

0 comunidades

Nenhum(a)

Tela cheia
 Feed RSS

Blog

27 de Maio de 2009, 0:00 , por Software Livre Brasil - | Ninguém está seguindo este artigo ainda.

Autenticação Linux Ubuntu com LDAP

10 de Agosto de 2009, 0:00, por Software Livre Brasil - 66 comentários

(Autenticação de sistema Linux usando LDAP e mapeamento do home do usuário com o SAMBA em substituição ao NFS)

Pré-requisitos:

1 Introdução

Nesse artigo será mostrado como habilitar autenticação em sistema Linux, mas especificamente os sistemas baseados em Debian, tais como Ubuntu. Autenticação um sistema Linux em um servidor de autenticação com o LDAP é algo necessário e fundamental para o bom funcionamento de uma rede.

A autenticação do sistema Linux dá ao usuário o acesso a uma shell, por meio da qual ele pode interagir com o sistema. Autenticação só é possível devido ao módulo de autenticação que o Linux utiliza que é o PAM. Quando instalamos o pacote libnss-ldap, todos os ajustes no módulo PAM são feitos automaticamente.

# apt-get install libnss-ldap

Durante a instalação, alguns passos devem ser preenchidos. O primeiro passo é definir o ip do servidor LDAP, como mostra a figura 1.


Figura 1 – Configuração do ip do servidor LDAP

Na tela seguinte é solicitado o suffix do servidor LDAP, como motra a figura 02.


Figura 02 – Configuração do suffix

Na próxima tela é solicitada a versão do LDAP. Normalmente estamos trabalhando com a versão 3 do LDAP.

A próxima tela é muito importante, porque permite o armazenamento da semana do administrador do LDAP e possibilita a utilização desses dados por outras aplicações como NFS. A senha do administrador será armazenada em outro arquivo. Portanto escolha a opção "YES" como mostra a figura 03.

 

Figura 03 – Armazenamento do administrador do LDAP

A próxima tela define que o sistema vai utilizar o login do database.

 

Figura 04 – definição do login

Na telas seguintes é definido o administrador da base LDAP e a sua senha.

Após a instalação do pacote libnss-ldap todos os ajustes no PAM foram feitas pelo instalador. Dentro do diretório /etc/pam.d/, temos os arquivos common-account, common-auth, common-password contém as linhas de integração do PAM com LDAP.

Configuração dos arquivos

O arquivo nsswitch.conf define os locais onde o sistema operacional pesquisará para realizar autenticação. Na maioria dos casos é definido mais de um local, como, por exemplo, "passwd: files ldap", sendo que, neste caso, o sistema irá procurar primeiro nos arquivos (files) e em seguida no LDAP.

passwd:        files ldap
shadow:        files ldap
 group:        files ldap

Neste ponto, o sistema estará buscando as senhas na base de dados LDAP. Para verificar se isso está realmente acontecendo, use o comando getent:

# getent passwd

Ele deverá retornar todos os usuários que estão no LDAP.

Compartilhamento do HOME

Com o libnss-ldap instalado e o arquivo nsswitch.conf configurado, podemos fazer o teste para verificar se o sistema está autenticando os usuários do LDAP.

Discher login: clodonil

Password: * * * *

No directory, logginf in with HOME=/

[clodonil@Discher] /$

No exemplo acima, não existe o diretório /home/clodonil no sistema. O diretório é definido na base LDAP. Por isso que o sistema não encontrou o HOME do usuário, porque não existe. Para resolver, podemos configurar para ser montando o HOME do usuário que deve estar no servidor de arquivo, através do SAMBA ou NFS.

Neste artigo vamos utilizar o SAMBA devido aos problemas e "fama" do NFS. O SAMBA deve estar configurado e o mesmo usuário deve estar cadastrado no servidor SAMBA.

Vamos instalar os pacotes para montar o smbfs durante o login, os dois pacotes são libpam-mount e smbfs.

# apt-get install libpam-mount smbfs

Após a instalação vamos fazer um teste no shell para termos a certeza que o SAMBA está funcionando corretamente. Para isso vamos montar o HOME do usuário no /mnt.

# mount –t smbfs –o username=clodonil,password=senha //servidor_samba/clodonil /mnt

Se o mapeamento funcionar corretamente, vamos passar para a configuração do arquivo pam_mount.conf.xml que é o arquivo que faz o mapeamento automático do usuário após o login.

Vamos editar o arquivo /etc/security/pam_mount.conf.xml, adicionando a seguinte linha.

<volume fstype="smbfs" server="ip_do_servidor_samba" path="%(USER)" mountpoint="/home/%(USER)" options="iocharset=utf8,file_mode=0700,dir_mode=0700" />

Essa linha adicionada define que será utilizado o protocolo "smbfs", e também deve ser definido o ip do servidor do SAMBA no campo server. Os outros campos como %(USER) será substituído automaticamente pelo sistema na hora do login pelo usuário em questão.

Segue o arquivo /etc/security/pam_mount.conf.xml completo.

<?xml version="1.0" encoding="utf-8" ?>
quot;pam_mount.conf.xml.dtd">
<pam_mount>
<volume fstype="smbfs" server="ip_do_servidor_samba" path="%(USER)" mountpoint="/home/%(USER)" options="iocharset=utf8,file_mode=0700,dir_mode=0700" />
<debug enable="0" />

<mntoptions allow="nosuid,nodev,loop,encryption,fsck,nonempty,allow_root,allow_other" />
<mntoptions require="nosuid,nodev" />
<path>/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin</path>
<logout wait="0" hup="0" term="0" kill="0" />
<mkmountpoint enable="1" remove="true" />
</pam_mount>

Feito isso, será montado no sistema de arquivo o HOME do usuário na hora do login.

 



Servidor DNS (BIND9) – Integração Perfeita com o GOsa

9 de Agosto de 2009, 0:00, por Software Livre Brasil - 1Um comentário<!-- Easy AdSense V2.72 --> <!-- Post[count: 3] -->

1. Introdução

O servidor DNS é utilizado para resolver nomes de computadores, ou seja, toda vez que chega uma requisição com um nome (ex: www.nisled.org), ele o transforma em um endereço IP. O servidor DNS é a base da Internet. Para uma compreensão mais ampla, imagine a Internet sem o servidor DNS: tudo funcionaria sem problemas; no entanto, imagine que, ao invés de acessar os sites pelos nomes (www.uol.com.br, www.estadao.com.br, www.nisled.org, etc.), você teria que decorar o endereço IP dos servidores para poder acessá-los!

Se decorar número de telefone já é difícil, imagine decorar IPs.

Normalmente, o DNS mantém suas informações numa lista gravada num arquivo de texto simples. No entanto, ao estudar a sua estrutura, descobrimos que ele trabalha em forma de árvore. Portanto, é possível diminuir as despesas gerais de administração (gerenciamento dos domínios) guardando os dados do DNS em forma de árvore; a estrutura geral do OpenLDAP já contribui para isso.

Outro fator que contribui para o uso do OpenLDAP é o fato dos servidores DNS necessitarem de uma replicação de dados para o DNS secundário. Como esse serviço já vem implementado no OpenLDAP, torna-se muito mais fácil a sua implementação. Os requisitos de segurança para a replicação são satisfeitos pelo OpenLDAP, o que nem sempre acontece com os servidores DNS.

Vamos começar esse artigo, descrevendo como criar a estrutura do DNS dentro do LDAP com ajuda do GOsa. Neste artigo vamos utilizar como exemplo o domínio "curso.ldap" e o ip do servidor 192.168.0.1.

2. GOsa

O ambiente GOsa é uma poderosa ferramenta de gerenciamento de recursos de rede no LDAP, e como não poderia ser diferente, ele tem suporte para gerenciar as entradas para o servidor dns BIND.

Para começar a criar as entredas para o BIND, entre no ambiente GOsa e logo em seguida click no ícone "Systems" como mostra a figura 1.

 

Figura 1 – Ambiente central do GOsa

Ao entrar no "Systems" será mostrada todos os componentes cadastrados, caso existem. Na parte superior da tela temos as lista de sistemas que podem ser cadastrados. Escolha criar um novo servidor como mostra a figura 2.

 

Figura 2 – Lista de Sistemas

Ao entrar na tela para criar um novo servidor, automaticamente abrirá a aba "Generic". Nela devem ser preenchidos os campos "Server name" e o endereço de IP e MAC. Esses dados não são utilizados pelo DNS, apenas para cadastrar o servidor. A figura 3 mostra o cadastro desta tela.

 

Figura 3 – Cadastro do servidor

Após o cadastro dos dados na primeira aba, click na aba "DNS" para criar uma nova zona de DNS. Para isso click no botão "Add", como mostra a figura 4.

 

Figura 4 – Criação de uma zona de DNS

Para adicionar uma nova zona, preencha os dados de acordo com o domínio desejado. O campo "zone name" define o domínio que será criado. Também defina o endereço de rede e a mascara da rede. Os campo da área "SOA record" definem o cabeçalho do servidor dns, por isso preencha os campos "Primary dns Server for this zone" com o nome do servidor dns, como mostra a figura 5. Lembre-se de resolver esse nome no arquivo /etc/hosts do servidor dns. Também preencha os campos de email. Na área "MxRecords" registre os servidores de email deste domínio. Para editar os computadores deste domínio é necessário primeiramente salvar a zone para o botão "Zone records" habilitar.

 

Figura 5 – Criação da zona

Após salvar o registro da zona, aba novamente que o botão "Edit" estará habilitado e com ele podemos cadastrar os computadores do domínio, como mostra a figura 6.

 

Figura 6 – Criação das maquinas domínio

3. BIND9

Com a criação do domínio no GOsa, vamos passar para a instalação do servidor dns. Será utilizado o pacote pré-compilado para o servidor Ubuntu.

# apt-get install bind9

O próximo passo é a configuração da zona no bind9. Para isso altere o arquivo /etc/bind/named.conf acrescentando as seguintes linhas.

zone "curso.ldap" {
type master;
file "/etc/bind/db.curso.ldap";
};

zone "0.168.192.in-addr.arpa" {
type master;
file "/etc/bind/rec.curso.ldap";
};

O próximo passo é criar os arquivos db.curso.ldap e o arquivo rec.curso.ldap. Esses arquivos são criados através de um script que exporta as informações do LDAP (GOsa).

4. ldap2zone

Utilizaremos o script ldap2zone para exportar os registros da base LDAP. Esse script foi escrito com a linguagem de C, portanto é preciso compilá-lo. Para realizar essa tarefa entre no diretório /usr/local/src, e faça download do script.

# cd /usr/local/src
# wget www.venaas.no/dns/ldap2zone/ldap2zone.c

Antes de começar a compilar os fontes do script, instale os pré-requisitos que são as bibliotecas do LDAP e os compiladores.

# apt-get install libc6-dev gcc libldap2-dev

A compilação do script de exportação é bem simples. Segue o passo para a compilação.

# gcc -o ldap2zone -lldap -llber ldap2zone.c

Após a compilação mova o arquivo binário compilado para o diretório /usr/local/bin.

# mv ldap2zone /usr/local/bin

Agora com o script compilado, vamos realizar alguns testes para verificar se exportação está sendo corretamente.

Primeiro vamos exportar o db.

# ldap2zone curso.ldap. ldap://192.168.0.10 604800
$TTL 604800
@ IN SOA ns1.curso.ldap. clodonil.nisled.org. (
2009080904 ; Serialnumber
3600 ; Refresh
1800 ; Retry
720000 ; Expire
6400 ) ; Minimum TTL

NS ns1.curso.ldap.
MX 0 mail.curso.ldap.
MX 1 server.curso.ldap.
www 7440 A 192.168.0.1
mail 7440 A 192.168.0.1
server 7440 A 192.168.0.1
ns1 7440 A 192.168.0.1

Como pode ver a exportação foi feita corretamente, também vamos testar a exportação do reverso.

# ldap2zone 0.168.192.in-addr.arpa ldap://192.168.0.10 604800
$TTL 604800
@ IN SOA ns1.curso.ldap. clodonil.nisled.org. (
2009080904 ; Serialnumber
3600 ; Refresh
1800 ; Retry
720000 ; Expire
6400 ) ; Minimum TTL
NS ns1.curso.ldap.
MX 0 mail.curso.ldap.
MX 1 server.curso.ldap.
1 7440 PTR www.curso.ldap.
7440 PTR mail.curso.ldap.
7440 PTR server.curso.ldap.
7440 PTR ns1.curso.ldap
.

Para tornar a tarefa de exportação mais automatizada, vamos criar um script para exportar as entradas do LDAP e criar os respectivos arquivos. Segue o script.

#!/bin/bash

ldap2zone 0.168.192.in-addr.arpa ldap://192.168.0.10 604800 > /etc/bind/rev.curso.ldap
ldap2zone curso.ldap. ldap://192.168.0.10 604800 > /etc/bind/db.curso.ldap

Para não precisar ficar executando o script toda vez que fizer uma alteração pelo GOsa, vamos colocar o script no crontab e pedir para executar em 5 em 5 minutos.

*/5 * * * * /usr/local/bin/dns.sh

5. Teste

Para realizar os testes que precisamos, vamos alterar primeiramente reiniciar o servidor DNS.

# /etc/init.d/bind9 restart

O próximo passo é alterar o arquivo /etc/resolv.conf, e apontar para o servidor DNS que acabamos de configurar.

nameserver 192.168.0.1

Em seguida utilize o comando ping para verificar se o servidor tá "resolvendo" o nome pesquisa.

# ping www.curso.ldap
PING www.curso.ldap (192.168.0.1) 56(84) bytes of data.
64 bytes from nucleo.local (192.168.0.1): icmp_seq=1 ttl=64 time=0.037 ms
64 bytes from nucleo.local (192.168.0.1): icmp_seq=2 ttl=64 time=0.054 ms
64 bytes from nucleo.local (192.168.0.1): icmp_seq=3 ttl=64 time=0.056 ms

Conforme o resultado apresentado pelo comando ping, o servidor DNS tá funcionando corretamente.

6. Troubleshooting

  • Verifique se os arquivos db e rev estão sendo gerados pelos scripts;
  • Verifique os logs do bind9 (tail –f /var/log/daemon)
  • No GOsa verifique se colocou ponto (.) no final dos nomes definidos como servidor de e-mail.


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

4 de Agosto de 2009, 0:00, por Software Livre Brasil - 0sem comentários ainda<!-- Easy AdSense V2.72 --> <!-- Post[count: 3] -->

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.

 

Figura 01 – Réplica da base LDAP

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/
[root@master]# mv /opt/CAtls/newcert.pem /etc/ldap/tls/servercrt.pem
[root@master]# mv /opt/CAtls/newreq.pem /etc/ldap/tls/serverkey.pem

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/
[root@master]# mv /opt/CAtls/newcert.pem /home/clientecrt.pem
[root@master]# mv /opt/CAtls/newreq.pem /home/clientekey.pem

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

BASE    dc=curso,dc=ldap
URI     ldaps://localhost

TLS_CACERT /etc/ldap/cliente_tls/cacert.pem
TLS_CERT     /etc/ldap/cliente_tls/ldap.cliente.pem
TLS_KEY      /etc/ldap/cliente_tls/ldap.cliente.key.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/
ldap_bind_dn: cn=manager,dc=curso,dc=ldap
ldap_bind_pw: pedra
ldap_version: 3
ldap_port: 389
ldap_search_base: dc=curso,dc=ldap
ldap_uidattr: uid
ldap_password_attr: userPassword

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
dn:
supportedSASLMechanisms: DIGEST-MD5
supportedSASLMechanisms: LOGIN
supportedSASLMechanisms: PLAIN
supportedSASLMechanisms: NTLM
supportedSASLMechanisms: CRAM-MD5



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
SASL/DIGEST-MD5 authentication started
Please enter your password: senha
SASL username: admin
SASL SSF: 128
SASL data security layer installed.
dn:uid=admin,cn=digest-md5,cn=auth

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/DIGEST-MD5 authentication started
Please enter your password:
SASL username: admin@ldapserver
SASL SSF: 128

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

moduleload  syncprov
syncrepl rid=007
        provider=ldaps://10.0.0.102:636
        type=refreshOnly
        interval=00:00:00:10
        searchbase="dc=curso,dc=ldap"
        filter="(objectClass=*)"
        scope=sub
        schemachecking=off
        bindmethod=simple
        binddn="cn=Manager,dc=curso,dc=ldap"
        credentials=pedra

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

moduleload  syncprov
syncrepl rid=007
        provider=ldaps://10.0.0.102:636
        type=refreshOnly
        interval=00:00:00:10
        searchbase="dc=curso,dc=ldap"
        filter="(objectClass=*)"
        scope=sub
        schemachecking=off
        bindmethod=sasl
        authcid=admin
        credentials=x

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.

 



Proxy SQUID – Integração Perfeita com o GOsa

28 de Julho de 2009, 0:00, por Software Livre Brasil - 0sem comentários ainda

Squid com LDAP e controles de Sites por grupos e Quotas

Proxy é o elemento responsável pela ligação da rede interna do cliente com a rede externa, a internet. Quando o cliente da rede interna tenta acessar a Internet, ele solicita o acesso ao proxy. Este, por sua vez, acessa o conteúdo desejado e devolve-o para o cliente. Dessa forma, o cliente não tem acesso direto à Internet, o que constitui uma vantagem do ponto de vista da segurança.

Quando falo que é uma vantagem o cliente não ter acesso direto à Internet, significa que ele não pode utilizar ferramentas maliciosas contra outros hosts, em portas aleatórias. Um exemplo disso seria rodar um scanner ou tentar invadir um computador em outra porta que não seja a 80, que é utilizado para navegação.

Perceba que, neste caso, a preocupação é o cliente da rede interna tentar invadir alguma máquina na Internet. Lembre-se que a responsabilidade do que acontece na rede é do administrador da rede e, caso aconteça algum ataque a um host externo, este irá responsabilizar o administrador da rede na qual o invasor (usuário) estiver trabalhando.

Outra vantagem de instalar um Proxy é pelo recurso de cachê que normalmente acompanha o proxy. O cachê permite o armazenamento de sites dentro da rede interna. Ao usuário solicitar um site, o proxy verifica se o mesma encontra-se no cachê, e envia para o usuário sem precisar pesquisar na internet.

Para integração com o LDAP, vamos utilizar o Proxy SQUID que é um dos "open source" mais utilizado.

Instalação

A instalação do SQUID no Ubuntu Serve e Debian é simples é rápido. O comando "apt-get" faz a instalação.

[root@cabeca]# apt-get install squid3

Com a instalação feita, vamos passar para a configuração do SQUID. O arquivo de configuração é o squid.conf. Como ponto de partida, será adotado um squid.conf modelo. Este arquivo é funcional, porém exclui uma série de recursos que não será abordado neste documento. Para acrescer recursos no SQUID e fazer ajustes de outras configurações, é recomendável consultar a documentação no site oficial.

Crie um arquivo no diretório /etc/squid, chamado squid.conf e coloque a configuração do squid. Esta configuração tem algumas particularidades que vale a pena marcar.

  • Porta 3128: Porta que o squid aceita as configurações, configure o proxy no browser com este ip.
  • Acl rede src 10.0.0.0/24: Define a faixa de ip que corresponde à rede interna. Normalmente esta configuração é feita para permitir o acesso na internet da rede interna.
  • Cachê_dir: Define o diretório que ficarão os cachês
  • cache_effective_user: Define o usuário do squid.

Segue o arquivo squid.conf modelo:

  • /etc/squid3/squid.conf


acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT

http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost

#Liberando a Rede Local
acl rede src 10.0.0.0/24
http_access allow rede
http_access deny all
icp_access deny all
htcp_access deny all
http_port 3128
hierarchy_stoplist cgi-bin ?
cache_dir ufs /var/spool/squid3 100 16 256
access_log /var/log/squid3/access.log squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern (cgi-bin|\?) 0 0% 0
refresh_pattern . 0 20% 4320
cache_effective_user proxy
cache_effective_group proxy

Antes de prosseguir, teste se o SQUID está funcionando corretamente.

Cenário 1

Com o SQUID básico funcionando, vamos adotar o cenário 1 como teste. Neste cenário vamos considerar que é necessário apenas o controle do usuário por autenticação. Cada usuário que desejar acessar a Internet, obrigatoriamente utilizará um login e uma senha. As políticas de acesso a sites podem ser feitas utilizado como regras todos os usuário. Neste caso não temos recursos para gerenciar políticas de acessos para grupos específicos de usuários.

Lembrando que os usuários já tem que estar criado no GOsa, vamos acrescentar as seguintes linhas no squid.conf.

#Autenticador
#Acrescente as 4 linhas abaixo no início do arquivo squid.conf
auth_param basic program /usr/lib/squid3/squid_ldap_auth -D "cn=manager,dc=trigo" -w x -b ou=people,dc=trigo -h servidor_ldap -p 389 -v 3 -f "uid=%s"
auth_param basic children 5
auth_param basic realm ACESSO A INTERNO DO DOMINIO BACULO
auth_param basic credentialsttl 2 hours

#Acrescente as duas linhas abaixo logo após a regra "http_access allow rede"
acl autenticacao proxy_auth REQUIRED
http_access allow autenticacao

squid.conf completo com autenticação de usuário.
auth_param: Este parâmetro ajusta a forma de autenticação, que em nosso caso é o OpenLDAP. Portanto altere conforme as suas configurações. Observe os parâmetros –D que define o administrador base LDAP, a opção –w que define a senha, a opção –b que define a sub-arvore que será pesquisa.

As outras linhas do auth_param definem na sequência:

  • O Número de processos filhos que o SQUID vai abrir para receber as autenticações;
  • Uma mensagem que vai aparecer na tela de autenticação do cliente; e
  • Tempo que autenticação vai ser válida.

As últimas duas linhas são propriamente ditas à autenticação e permissão para navegação dos usuários autenticados.

Cenário 2

Com o cenário 1 funcionando, vamos passar para o cenário 2. Neste cenário vamos considerar que é necessário apenas o controle por grupos de usuários. Dessa forma podemos criar grupos e definir o que cada grupo pode acessar definindo assim uma política mais eficiente para controlar os usuários. Nesse cenário os usuários ainda continuam obrigatoriamente utilizando um login e uma senha para acessar a Internet, porém as políticas não são definidas por usuários individualmente.

Como exemplo. Vamos utilizar dois grupos, sendo compras e financeiro. Os usuários do grupo compras têm que acessar várias sites, já o grupo financeiro só deve acessar o site da empresa. A seguir segue as configurações para este cenário.

Lembrando que os usuários e os grupos já tem que estar criado no GOsa, como mostra a figura 1 e 2, vamos acrescentar as seguintes linhas no squid.conf.

 

Figura 1 – Grupo no Gosa

Figura 2 – Criação de grupos no Gosa

Com os grupos criados e usuários definidos, vamos configurar o squid.conf.

external_acl_type ldap_group %LOGIN /usr/lib/squid/squid_ldap_group -d -b "ou=groups,dc=clodonil,dc=trigo" -B "ou=users,dc=clodonil,dc=trigo" -f "(&(memberUid=%u)(cn=%g))" -p 389 -v3 -H ldap://localhost -D cn=Manager,dc=clodonil,dc=trigo -w x

acl senha proxy_auth REQUIRED
acl financeiro external ldap_group financeiro
acl compras external ldap_group compras
acl tudo dst 0.0.0.0/0.0.0.0

#Crie o arquivo sites_financieiro e coloque dentro os sites que serão liberados ou os sites que
#serão negados. Lembrando que dentro do arquivo ou todos os sites serão negados ou todos
#serão permitidos.

acl sites_financeiro dstdomain -i "/etc/squid/sites_financeiro"
acl sites_compras dstdomain -i "/etc/squid/sites_compras"  

http_access allow sites_financeiro financeiro
http_access allow !sites_compras compras

Percebe a linha "http_access allow !sites_compras compras", mas especificamente na !sites_compras que funciona como uma negação, dessa forma apenas os sites cadastrados no arquivo sites_compras NÃO poderam ser acessadas.

segue o squid.conf completo para autenticação de grupo.

Para finalizar teste no browser.

Cenário 3

Até este momento, mostramos como configurar o SQUID com autenticação por usuário e por grupo do LDAP criado pelo GOsa. O GOsa também tem a opção do SQUID na aba "Connectivity" que possibilita filtrar sites, limitar acesso a internet por tempo determinado ou por quota, como mostra a figura 03.

 

 

Figura 03 – Aba Connectivity do GOsa

Para fazer essas opções funcionarem é necessário utilizar os scripts que estão no diretório /usr/share/gosa/contrib/scripts que vem juntamente com a instalação do GOsa.

Uma breve descrição de cada script:

  • goAgent.pl

Não é necessário para o SQUID, pode ser utilizado para criar o home do usuário.

  • goQuota.pl

Esse script consulta o atributo quota no servidor LDAP e cria um banco de dados com essas quotas para uma leitura rápida pelo SQUID. O ideal é colocar esse script no crontab para ser executado de tempo em tempo para ativa mudanças feitas pelo GOsa.

  • goQuotaView.pl

Permite visualizar a quota de um usuário no console, desde que o DB seja criado pelo script "goQuota.pl".

Nota: No script, comente a linha abaixo.

forma:

#time2str("%d.%m.%Y %H:%M:%S",$cache{TIMESTAMP}),

  • goSquid.pl

Neste script é feito o redirecionamento para uma página caso a quota em MB seja excedido. Esse script verifica o tempo de navegação e o DB criado pelo "goQuota.pl".

Existe outros scripts que faz a censura de uma lista de sites, mas esse script não tem funcionando. Cada um desses scripts precisa ser editado para alguns ajustes, tais como os dados do servidor LDAP.

Como exemplo de como deve ser editado os scripts, vamos editar o goQuota.pl. A edição do script sempre estão na primeiras linhas

A alteração deve ser algo como:

my $LDAP_HOST = "servidor.trigo" ;
my $LDAP_PORT = "389";
my $LDAP_BASE = "ou=people,dc=trigo";

Todos os scripts foram feitos usando a linguagem Perl, por isso precisamos instalar o pacote de conexão entre o Perl e o LDAP. No ubuntu e debian, basta instalar o seguinte pacote:

# apt-get install libnet-ldap-perl

Para continuar a configuração, copie os scripts para o diretório /etc/gosa e adicione a seguinte linha no squid.conf

redirect_program /etc/squid/gosa/goSquid.pl
redirect_children 5

Essa linha verifica a base de dados criado pelo script "goQuota.pl" e quando a quota excede ele redireciona para um link definido no script.

Lembre-se de colocar o goQuota.pl no crontab.



Servidor DNS (BIND9) com OpenLDAP

23 de Junho de 2009, 0:00, por Software Livre Brasil - 0sem comentários ainda

By:Diego Pereira Grassato

Muitas vezes, é desejável para armazenar informações de DNS em um banco de dados, e não em zonas em arquivos texto ASCII plano. Armazenar estes arquivos em uma zona de dados pode reduzir muito overhead desde associar informações, tais como contato de faturamento, gerenciamento de contas, backup simplificado, etc., podem ser armazenadas e processadas no interior do mesmo banco de dados. Além disso, devido à natureza do DNS(concepção), a informação deve ser armazenada redundantemente em dois ou mais hosts. O clássico de dados através da replicação zona transferência não é confiável, inseguro e muitas vezes difíceis de administrar.

 Para ultrapassar este problema alguns projetos de DNS para armazenar informações em bancos de dados relacionais foram desenvolvidos. Como dito acima o DNS gravas sua informações em uma lista em arquivo de texto, no entanto se estudarmos sua estrutura veremos que ele trabalhar em forma de árvore, porque se trata de um sistema de diretório, igual ao LDAP. LDAP permite certa flexibilidade na sua base de dados usando esquema, assim como de uma organização cresce e muda constantemente; o banco de dados utilizado para armazenar informações tem que reflitam a organização.

1.  BIND (Named)

 BIND (Berkeley Internet Name Domain ou, como chamado previamente, Berkeley Internet Name Daemon) é o servidor para o protocolo DNS mais utilizado na Internet, especialmente em sistemas do tipo Unix, onde ele pode ser considerado um padrão de fato. Foi criado por quatro estudantes de graduação, membros de um grupo de pesquisas em ciência da computação da Universidade de Berkeley, e foi distribuído pela primeira vez com o sistema operacional BSD. O programador Paul Vixie, enquanto trabalhava para a empresa DEC, foi o primeiro mantenedor do BIND. Atualmente o BIND é suportado e mantido pelo Internet Systems Consortium. Seu site oficial é: https://www.isc.org/software/bind.

 O BIND é uma implementação do protocolo DNS e inclui os seguintes serviços:

  • Um servidor de domínios (named)
  • As bibliotecas para conversão de nomes de domínio em endereços de IP.
  • Outras ferramentas para verificar o funcionamento do servidor DNS e suas respectivas Zonas configuradas.
  • Para a versão 9, o BIND foi praticamente reescrito. Ele passou a suportar, dentre outras funcionalidades, a extensão DNSSEC e os protocolos TSIG e IPv6

1.1 Compilando BIND

 Primeiro precisamos baixar e extrair a fonte do BIND-SDB-LDAP. Podemos realizar esta tarefa, que vai para o diretório BIND:

http://bind9-ldap.bayour.com/bind-sdb-ldap-1.1.0.tar.gz

 Para maiores Informações de versões recentes do software:

 http://www.venaas.no/ldap/bind-sdb/

 BIND SDB LDAP é uma modificação do "Simplified Database" API que fornece uma interface LDAP para bind9 utilizando o "sdb". Com esta API, pode armazenar zonas do BIND no LDAP em vez de arquivos. Note que quando utiliza sdb, as zonas não são colocadas em cachê na memória, BIND irá efetivamente realizar uma pesquisa de dados sempre que recebe uma consulta.

Uma vez baixado, extraia-o para o diretório de sua escolha, executando o seguinte comando:

#root@host#tar -xzf bind-sdb-ldap-1.1.0.tar.gz

 Isto irá criar um bind-sdb-ldap-1.0 diretórios com a fonte no mesmo. 

 Agora vamos ao BIND, faça o download da fonte em:

 http://www.bind9.net/download

ou link direto

ftp://ftp.isc.org/isc/bind9/9.6.1rc1/bind-9.6.1rc1.tar.gz

 Procure baixa sempre a versão mais recente.

Copie a ldapdb.c bin/named e ldapdb.h para bin/named /include na árvore fonte.

root@host#cp ldapdb.c  ../bind-9.6.1rc1/bin/named/

 root@host#cp ldapdb.h ../bind-9.6.1rc1/bin/named/include

root@host#cd /root/bind-9.6.1rc1

Após os arquivos de origem tenham sido copiados para o diretório do bind9, então precisamos fazer algumas modificações no fonte do bind9 para que seja compilado com a nova API.

Altere os diretórios para /root/bind-9.6.1rc1/bin/named/Makefile.in e editar o arquivo e faça as seguintes modificações quando você vê estas linhas:

1
2
3
4
DBDRIVER_OBJS = ldapdb.@O@
DBDRIVER_SRCS = ldapdb.c 
DBDRIVER_INCLUDES = -I/usr/local/include
DBDRIVER_LIBS = -L/usr/local/lib -lldap -llber -lresolv

 Em seguida, será necessário modificar o arquivo para /root/bind-9.6.1rc1/bin/named/main.c no mesmo diretório do Makefile.in e procure a seguinte linha:

 /* #include "xxdb.h" */

Temos que mudar-lo para utilizar a fonte LDAPDB arquivo:

#include <ldapdb.h>

No mesmo arquivo, procure a inicialização linha:

/* xxdb_init(); */

Temos que adicionar uma linha abaixo dessa para usar o LDAPDB inicialização função:

ldapdb_ini();

E finalmente, precisamos encontrar a limpeza rotineira linha:

/* xxdb_clear(); */
Temos que adicionar uma linha abaixo dessa LDAPDB limpeza para utilizar a função:

ldapdb_clear();

 Assim que esse arquivo for salvo, deveremos ser capazes de retornar diretória base do bind9 para compilarmos com suporte a nova API.

root@host#cd /root/bind-9.6.1rc1

Utilizaremos estes parâmetros de compilação:

root@host :~/bind-9.6.1rc1#SLKCFLAGS="-O2 -march=i486 -mtune=i686" \
CFLAGS="$SLKCFLAGS" ./configure  --prefix=/usr --libdir=/usr/lib${LIBDIRSUFFIX}\
 --sysconfdir=/etc --localstatedir=/var \ 
 --with-libtool --mandir=/usr/man --enable-shared \
 --disable-static --enable-threads --with-openssl=/usr
 
root@host:~/bind-9.6.1rc1#make 
root@host :~/bind-9.6.1rc1#make install

2. Configurações OpenLdap

Com o servidor OpenLDAP devidamente instalado adicionaremos uma nova schema, faça o download altere seu nome:

root@host:~# http://www.venaas.no/ldap/bind-sdb/dnszone-schema.txt
root@host:~# mv dnszone-schema.txt dnszone-schema

 Copie o schema para o diretório de schemas do OpenLDAP:

root@host:~# cp dnszone.schema /etc/openldap/schema

Vamos configura o arquivo slapd.conf que fica no diretório /etc/openldap:  

root@host:~#vi /etc/openldap slapd.conf

 Você irá adicionar este novo schema logo abaixo deste:

1
2
3
4
5
include         /etc/openldap/schema/core.schema
include         /etc/openldap/schema/cosine.schema
include         /etc/openldap/schema/nis.schema
include         /etc/openldap/schema/inetorgperson.schema
include         /etc/openldap/schema/openldap.schema

Ficando assim:

1
2
3
4
5
6
include         /etc/openldap/schema/core.schema
include         /etc/openldap/schema/cosine.schema
include         /etc/openldap/schema/nis.schema
include         /etc/openldap/schema/inetorgperson.schema
include         /etc/openldap/schema/openldap.schema
include         /etc/openldap/schema/dnszone.schema

 No final do arquivo nos índices adicionará index zoneName,relativeDomainName eq,sub, ficará assim:

1
2
3
4
5
6
7
index   cn              eq
index   sn              eq
index   objectClass     eq
index   uid             eq
index   gidNumber       eq
index   uidNumber       eq
index   zoneName,relativeDomainName eq,sub

 Uma vez que o esquema tenha sido incluído, é preciso reiniciar OpenLDAP para que o processo slapd:  

root@host# /etc/rc.d/rc.openldap restart



Pronto nosso servidor OpenLDAP já está em funcionamento, vamos agora adicionar as entrada para configuração de nosso servidor. A maioria dos administradores já utiliza algum tipo de ferramenta de administração do LDAP para executar operações, como adicionar e remover as informações do banco de dados. Para este exemplo, nós iremos fornecer o que é comumente conhecido como um arquivo LDIF para usar como orientação para a inclusão de registros no banco de dados. Primeiro vamos olhar para uma norma zona normal configurada no /etc/named.conf arquivo pode ser semelhante a este:

 Domínio dtux.no-ip.org no Na med:

dtux.no-ip.org.zone

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$ORIGIN dtux.no-ip.org.
$TTL 86400
@     IN SOA    ns1.dtux.no-ip.org. root.dtux.no-ip.org. (
           2009061500   ; serial 
           28800        ; refresh (8 hours)
           14400        ; retry (4 hours)
           259200       ; expire (5 weeks 6 days 16 hours)
           86400        ; minimum (1 day)
)            
A       192.168.5.10
NS      dtux.no-ip.org.
NS      ns.dtux.no-ip.org.
NS      ns2.dtux.no-ip.org.
MX      5 dtux.no-ip.org.
mx1             IN      CNAME    mail.dtux.no-ip.org.
dtux            IN        A     192.168.5.10
ftp             IN        A     192.168.5.10
www             IN        A     192.168.5.10
ldap            IN        A     192.168.5.10
ns              IN        A     192.168.5.10
ns2             IN        A     192.168.5.3
cliente         IN        A     192.168.5.3
mail            IN        A     192.168.5.3
client          IN        A     192.168.5.1

  Zona Reversa:

5.168.192.in-addr.arpa

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ORIGIN 5.168.192.in-addr.arpa.
$TTL 78000
@       IN     SOA dtux.no-ip.org. diego@dtux.no-ip.org(
                        2009061500      ; versão
                        10800           ;refresh (3 horas)
                        3600            ;retry   (1  hora)
                        432006          ;expire  (5  dias)
                        86400          ;TTL     (1   dia)
                        )
;
@        IN      NS       dtux.no-ip.org.
         IN      NS       ns2.dtux.no-ip.org.
3        IN      PTR      192-168-5-3.dtux.no-ip.org.
10       IN      PTR      192-168-5-10.dtux.no-ip.org.

No LDIF do domínio dtux.no-ip.org do OpenLDAP ficará assim:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
dn: dc=BIND,dc=dtux,dc=no-ip,dc=org
objectClass: top
objectClass: dcObject
objectClass: organization
dc: BIND
o: DTuX BIND
 
dn: ou=teste,dc=BIND,dc=dtux,dc=no-ip,dc=org
objectClass: top
objectClass: organizationalUnit
objectClass: dcObject
dc: BIND
ou: teste
 
dn: zoneName=dtux.no-ip.org,ou=teste,dc=BIND,dc=dtux,dc=no-ip,dc=org
objectClass: top
objectClass: dNSZone
relativeDomainName: dtux.no-ip.org
zoneName: dtux.no-ip.org
 
dn: relativeDomainName=@,zoneName=dtux.no-ip.org,ou=teste,dc=BIND,dc=dtux,dc=no-ip,dc=org
objectClass: top
objectClass: dNSZone
relativeDomainName: @
zoneName: dtux.no-ip.org
dNSTTL: 86400
dNSClass: IN
sOARecord: ns1.dtux.no-ip.org. root.dtux.no-ip.org. 2009061500 28800 14400 2 59200 86400
aRecord: 192.168.5.10
nSRecord: dtux.no-ip.org.
nSRecord: ns.dtux.no-ip.org.
nSRecord: ns2.dtux.no-ip.org.
mXRecord: 5 dtux.no-ip.org.
 
dn: relativeDomainName=client,zoneName=dtux.no-ip.org,ou=teste,dc=BIND,dc=dtux,dc=no-ip,dc=org
objectClass: top
objectClass: dNSZone
relativeDomainName: client
zoneName: dtux.no-ip.org
dNSTTL: 86400
dNSClass: IN
aRecord: 192.168.5.1
 
dn: relativeDomainName=cliente,zoneName=dtux.no-ip.org,ou=teste,dc=BIND,dc=dtux,dc=no-ip,dc=org
objectClass: top
objectClass: dNSZone
relativeDomainName: cliente
zoneName: dtux.no-ip.org
dNSTTL: 86400
dNSClass: IN
aRecord: 192.168.5.3
 
dn: relativeDomainName=dtux,zoneName=dtux.no-ip.org,ou=teste,dc=BIND,dc=dtux ,dc=no-ip,dc=org
objectClass: top
objectClass: dNSZone
relativeDomainName: dtux
zoneName: dtux.no-ip.org
dNSTTL: 86400
dNSClass: IN
aRecord: 192.168.5.10
 
dn: relativeDomainName=ftp,zoneName=dtux.no-ip.org,ou=teste,dc=BIND,dc=dtux,dc=no-ip,dc=org
objectClass: top
objectClass: dNSZone
relativeDomainName: ftp
zoneName: dtux.no-ip.org
dNSTTL: 86400
dNSClass: IN
aRecord: 192.168.5.10

dtux.no-ip.org.ldif

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
dn: relativeDomainName=ldap,zoneName=dtux.no-ip.org,ou=teste,dc=BIND,dc=dtux,dc=no-ip,dc=org
objectClass: top
objectClass: dNSZone
relativeDomainName: ldap
zoneName: dtux.no-ip.org
dNSTTL: 86400
dNSClass: IN
aRecord: 192.168.5.10
 
dn: relativeDomainName=mail,zoneName=dtux.no-ip.org,ou=teste,dc=BIND,dc=dtux,dc=no-ip,dc=org
objectClass: top
objectClass: dNSZone
relativeDomainName: mail
zoneName: dtux.no-ip.org
dNSTTL: 86400
dNSClass: IN
aRecord: 192.168.5.3
 
dn: relativeDomainName=mx1,zoneName=dtux.no-ip.org,ou=teste,dc=BIND,dc=dtux,dc=no-ip,dc=org
objectClass: top
objectClass: dNSZone
relativeDomainName: mx1
zoneName: dtux.no-ip.org
dNSTTL: 86400
dNSClass: IN
cNAMERecord: mail.dtux.no-ip.org.
 
dn: relativeDomainName=ns,zoneName=dtux.no-ip.org,ou=teste,dc=BIND,dc=dtux,dc=no-ip,dc=org
objectClass: top
objectClass: dNSZone
relativeDomainName: ns
zoneName: dtux.no-ip.org
dNSTTL: 86400
dNSClass: IN
aRecord: 192.168.5.10
 
dn: relativeDomainName=ns2,zoneName=dtux.no-ip.org,ou=teste,dc=BIND,dc=dtux,dc=no-ip,dc=org
objectClass: top
objectClass: dNSZone
relativeDomainName: ns2
zoneName: dtux.no-ip.org
dNSTTL: 86400
dNSClass: IN
aRecord: 192.168.5.3
 
dn: relativeDomainName=www,zoneName=dtux.no-ip.org,ou=teste,dc=BIND,dc=dtux,dc=no-ip,dc=org
objectClass: top
objectClass: dNSZone
relativeDomainName: www
zoneName: dtux.no-ip.org
dNSTTL: 86400
dNSClass: IN
aRecord: 192.168.5.10

Agora zona reversa:

5.168.192.in-addr.ldif

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
dn: zoneName=5.168.192.in-addr.arpa,ou=teste,dc=BIND,dc=dtux,dc=no-ip,dc=org
objectClass: top
objectClass: dNSZone
relativeDomainName: 5.168.192.in-addr.arpa
zoneName: 5.168.192.in-addr.arpa
 
dn: relativeDomainName=10,zoneName=5.168.192.in-addr.arpa,ou=teste,dc=BIND,dc=dtux,dc=no-ip,dc=org
objectClass: top
objectClass: dNSZone
relativeDomainName: 10
zoneName: 5.168.192.in-addr.arpa
dNSTTL: 78000
dNSClass: IN
pTRRecord: 192-168-5-10.dtux.no-ip.org.
 
dn: relativeDomainName=3,zoneName=5.168.192.in-addr.arpa,ou=teste,dc=BIND,dc=dtux,dc=no-ip,dc=org
objectClass: top
objectClass: dNSZone
relativeDomainName: 3
zoneName: 5.168.192.in-addr.arpa
dNSTTL: 78000
dNSClass: IN
pTRRecord: 192-168-5-3.dtux.no-ip.org.
 
dn: relativeDomainName=@,zoneName=5.168.192.in-addr.arpa,ou=teste,dc=BIND,dc=dtux,dc=no-ip,dc=org
objectClass: top
objectClass: dNSZone
relativeDomainName: @
zoneName: 5.168.192.in-addr.arpa
dNSTTL: 78000
dNSClass: IN
nSRecord: dtux.no-ip.org.
nSRecord: ns2.dtux.no-ip.org.
sOARecord: dtux.no-ip.org. diego@dtux.no-ip.org 2009061500 10800 3600 432006&nbsp; 86400

Adicionaremos agora os LDIFs no servidor usando os seguintes comandos:

root@host#ldapadd -x -D cn=root,dc=dtux,dc=no-ip,dc=org -W -f dtux.no-ip.org.ldif
root@host# ldapadd -x -D cn=root,dc=dtux,dc=no-ip,dc=org -W -f 5.168.192.in-addr.ldif

3. Configurando o Named(Bind)

O named.conf é onde é armazenado as configurações em texto plano onde é indicado a localização das zonas no sistema. A configuração usual é parecida como está:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#Zona dtux.no-ip.org
zone "dtux.no-ip.org." IN {
        type master;
        file /var/named dtux.no-ip.org.zone";
  notify yes;
};
 
#Reverso da Zona
zone "11.168.192.in-addr.arpa" IN {
        type master;
        file "/var/named/11.168.192.in-addr.arpa";
        notify yes;
};
<span style="font-size:10pt">Agora ao inv&eacute;s de guarda as zonas em arquivos ir&atilde;o substitu&iacute;-las com a op&ccedil;&atilde;o do banco de dados LDAP, que ir&aacute; fazer uma chamada utilizando a ldapclient com nova biblioteca: </span>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#Zona dtux.no-ip.org
zone "dtux.no-ip.org" IN {
        type master;
database "ldap ldap://192.168.5.10/ou=teste,dc=BIND,dc=dtux,dc=no-ip,dc=org 10800";
        notify yes;
};
 
#Reverso da Zona
zone "5.168.192.in-addr.arpa" IN {
        type master;
database "ldap ldap://192.168.5.10/ou=teste,dc=BIND,dc=dtux,dc=no-ip,dc=org 10800";
        notify yes;
};
 
<span style="font-size:10pt"><span style="color:black">Ao fazer pesquisas BIND ir&aacute; fazer uma sub-&aacute;rvore abaixo da pesquisa base no URL. O n&uacute;mero </span>10800<span style="color:black"> &eacute; o TTL, que ser&aacute; utilizado para todas as entradas que n&atilde;o t&ecirc;m o atributo dNSTTL definido no esquema. </span></span><span style="color:black; font-size:10pt">A partir daqui, devemos iniciar bind9 e testar a nossa configura&ccedil;&atilde;o, simplesmente realizando uma pesquisa sobre o servidor de DNS: </span>

root@host#named -u root

Verificando os log de mensagens.

root@host#tail -f /var/log/messages

Jun 23 11:35:53 CLIENTE named[9485]: starting BIND 9.6.1rc1
Jun 23 11:35:53 CLIENTE named[9485]: built with '--prefix=/usr' '--libdir=/usr/lib' '--sysconfdir=/etc' '--localstatedir=/var' '--with-libtool' '--mandir=/usr/man' '--enable-shared' '--disable-static' '--enable-threads' '--with-openssl=/usr' 'CFLAGS=-O2 -march=i486 -mtune=i686'
Jun 23 11:35:53 CLIENTE named[9485]: adjusted limit on open files from 1024 to 1048576
Jun 23 11:35:53 CLIENTE named[9485]: found 1 CPU, using 1 worker thread
Jun 23 11:35:53 CLIENTE named[9485]: using up to 4096 sockets
Jun 23 11:35:54 CLIENTE named[9485]: loading configuration from '/etc/named.conf'
Jun 23 11:35:54 CLIENTE named[9485]: using default UDP/IPv4 port range: [1024, 65535]
Jun 23 11:35:54 CLIENTE named[9485]: using default UDP/IPv6 port range: [1024, 65535]
Jun 23 11:35:54 CLIENTE named[9485]: listening on IPv6 interfaces, port 53
Jun 23 11:35:54 CLIENTE named[9485]: listening on IPv4 interface lo, 127.0.0.1#53
Jun 23 11:35:54 CLIENTE named[9485]: listening on IPv4 interface eth0, 192.168.5.3#53
Jun 23 11:35:54 CLIENTE named[9485]: command channel listening on 127.0.0.1#953

Testando o nosso servidor:

root@host#&nbsp; nslookup dtux.no-ip.org
Server:&nbsp;&nbsp; ns.dtux.no-ip.org
Address:&nbsp; 192.168.5.3
 
Name:&nbsp;&nbsp;&nbsp;&nbsp; dtux.no-ip.org
Address:&nbsp; 192.168.5.3

Os nomes estão funcionando adequadamente ao buscar suas informações de que a zona de dados LDAP.

Segue um exemplo de named.conf completo:

#Aqui você deve informar o endereço da sua rede ou o ip das máquinas que podem utilizar este DNS
acl minha-rede {
   	127.0.0.1;
   	192.168.5.0/24;);
 
options {
directory "/var/named";
dump-file "/var/log/named/named_dump.db";
statistics-file "/var/log/named/named.stats";
memstatistics-file "/var/log/named/named.memstats";
minimal-responses yes;
empty-zones-enable no;
transfer-format many-answers;
forward only;
forwarders { 192.168.5.3; 192.168.5.10; };
allow-transfer  { 192.168.5.10; 192.168.5.3; 201.91.215.134;};
## Aqui você pode colocar algum DNS para realizar um forwarders caso na ##queria utilizar deixe estas linhas comentadas
version "[secured]";
listen-on-v6 { any; };
querylog yes;};
 
# Configuração de Log
logging {
      channel custom {
      severity info;
      file "/var/log/named/named.log "; # Onde armazenar as mensagens
      print-time yes; # Imprimir informações temporais
      print-severity yes;
      print-category yes; # Mostrar a categoria da mensagem
   };
   category config         {custom;};
   category notify         {custom;};
   category dnssec         {custom;};
   category general        {custom;};
   category security       {custom;};
   category xfer-in        {custom;};
   category xfer-out       {custom;};
   category lame-servers   {custom;};
};
# Na seção controls encontram-se os parâmetros para comunicação entre rndc e named
controls {   inet 127.0.0.1 port 953
      allow { 127.0.0.1; }
      keys { rndc; };
};
# A chave especificada para comunicação com o rndc, igual a contida em rndc.conf
key rndc {
   algorithm hmac-md5;
   secret "RgKH/lcrH7AKfyQV9QM7cQ==";
};
zone "." IN {
	type hint;
	file "caching-example/root.hints";
};
 
zone "localhost" IN {
	type master;
	file "caching-example/localhost.zone";
	allow-update { none; };
};
zone "0.0.127.in-addr.arpa" IN {
	type master;
	file "caching-example/named.local";
	allow-update { none; };
};
zone "dtux.no-ip.org" IN {
	type master;
	database "ldap ldap://192.168.5.10/ou=teste,dc=BIND,dc=dtux,dc=no-ip,dc=org 10800";
	notify yes;
};
zone "5.168.192.in-addr.arpa" IN {
	type master;
	database "ldap ldap://192.168.5.10/ou=teste,dc=BIND,dc=dtux,dc=no-ip,dc=org 10800";
	notify yes;
};

Segue um exemplo de rndc.conf completo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Use a chave rndc quando comunicar com o servidor "localhost"
server localhost { key rndc;
};
# Aqui estão os detalhes sobre a chave rndc
key rndc {
        algorithm       hmac-md5;
        secret "RgKH/lcrH7AKfyQV9QM7cQ==";
};
# Estas são as opções padrões
options {
        default-server  localhost;
        default-key     "key";
        default-port 953;
};
 
<code><span style="font-family:Calibri">Segue um exemplo de <strong>slapd.conf</strong> completo: </span></code>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
include	       /etc/openldap/schema/core.schema
include         /etc/openldap/schema/cosine.schema
include         /etc/openldap/schema/nis.schema
include         /etc/openldap/schema/inetorgperson.schema
include         /etc/openldap/schema/openldap.schema
include         /etc/openldap/schema/dnszone.schema
include         /etc/openldap/schema/dhcp.schema
include         /etc/openldap/schema/ppolicy.schema
include         /etc/openldap/schema/samba.schema
allow bind_v2 bind_anon_dn
pidfile		/var/run/slapd.pid
argsfile	/var/run/slapd.args
sizelimit       unlimited
idletimeout	30
password-hash		{SSHA}
password-crypt-salt-format "$1$.8s"
 
access to attrs=userPassword
	by self write
	by anonymous auth
	by dn="cn=root,dc=dtux,dc=no-ip,dc=org" write
	by * none
 
access to *
	by * read
 
database	 bdb
suffix		 "dc=dtux,dc=no-ip,dc=org"
rootdn		 "cn=root,dc=dtux,dc=no-ip,dc=org"
rootpw 	 dhcpserver
directory       /var/openldap-data
# Indices
index  cn			eq
index  sn			eq
index  objectClass		eq
index  gid			eq
index  gidNumber       		eq
index  uidNumber       		eq
index  memberUid       		eq
index  loginShell       	eq
index  zoneName             	eq
index  relativeDomainName    	eq
index  dhcpHWAddress         	eq
index  dhcpClassData         	eq
index  dhcpPrimaryDN         	eq
index  dhcpSecondaryDN       	eq
mode	 		0600
cachesize		2000