Archive for the tag 'OpenLDAP'

cn=Monitor

clodonil October 22nd, 2009

O pós-instalação de um servidor de diretório como o LDAP (OpenLDAP) é um dos momentos mais críticos para uma rede e para o administrador. O Servidor está instalado e funcionando, porém alguns informações de performance são fundamentais para determinar que o trabalho realmente terminou. Em muitos casos após a instalação e configurações que começa realmente o serviço pesado de ajustes finos e otimização do servidor.
Para que essa otimização acontecer é necessário obter informações reais do servidor, tais como acesso por segundo, os tipos de acesso e assim por diante. Antes do surgimento da função monitor do LDAP, essa tarefa era muito completa e árdua.
Entretanto com a função monitor, ficou mais fácil o administrador obter esses dados. Usando a função monitor, têm surgido ferramentas que apresentam esses dados em forma de gráficos e tabelas, e uma dessas ferramentas é o CN=MONITOR.

Essa ferramenta tem as seguintes características:

 

  • Verify Load Balancing, DNS and Server level (RedHat / Fedora / Sun Only)
  • Verify Replication, (RedHat / Fedora / Sun Only)
  • Verify Cache Size, (RedHat / Fedora / Sun Only)
  • Mail Report of weekly load
  • Summary Graph of monitoring
  • View Schema (Most Vendors)

CN=Monitor trabalhar com os seguintes servidores:

  • RedHat and Fedora/389 Directory Server
  • Novell eDirectory Server
  • General Monitoring such as response time, server availability (All)
  • OpenLDAP

 

Particularmente gostei muito dessa ferramenta porque centraliza os dados e com poucos clicks e através de gráficos é possível visualizar a situação do servidor.

 

O CN=MONITOR, apresenta informações sobre o tipo de operações que o LDAP está realizado, tais como pesquisa, escrita,alteração.

 

OpenLDAP com suporte ao MySQL

clodonil August 16th, 2009

 By:Cristiano Bosenbecker Hellwig

OpenLDAP é um software livre que implementa o protocolo LDAP. Ele é usado para centralizar informações de forma hierárquica, por exemplo, centralizar senhas de usuários de diversos servidores em uma única base.
Também é usado para centralizar aplicativos de servidores como (proxy, samba, ftp, emails, lista de endereços), entre outros.
O LDAP permite a centralização de informações sobre usuários, senhas, diretórios home etc, em um único lugar na rede.


LDAP – Protocolo Leve de Acesso a Diretórios (tuttle 2003). Afirma que o LDAP é um padrão aberto capaz de facilitar, de forma flexível, o compartilhamento, a manutenção e o gerenciamento de grandes volumes de informações, definindo um método-padrão de acesso e atualização de informações dentro de um diretório.

O que é um diretório?

Diretório literalmente significa "algo usado para indicar direções", ou seja, algo que indica um caminho para se chegar àquilo que se procura. Exemplo disso: a lista telefônica, que você utiliza para pegar o endereço, telefone e tudo mais, caso queira comprar um lanche ou algo do tipo. Qualquer aplicação que tiver suporte ao protocolo LDAP poderá se conectar a sua base e obter as informações necessárias. A procura do LDAP funciona entrando na raiz e vai percorrendo os nós filhos até achar a informação desejada, de forma organizada, orientada a objetos. Não se usa mais a árvore de diretórios do estilo X.500, é usado agora estilo DNS.

O objetivo dessa documentação  é a integração do  openldap com banco de dados mysql, ao invés de usar o berkeleyDB.No caso é muito usado, quando queremos fazer o openldap se adequar em alguma aplicação proprietária ou software livre, que já tenha sua base de usuários  e senhas cadastradas do banco de dado mysql.

Compilação usando debian5 em uma máquina virtual, 256 de RAM , 10 GB HD.

Ambiente de teste – preparação

Vamos compilar o openldap com suporte ao Berkeley DB,  logs (Syslog) , SQL. Uma partição do hd, reservada apenas para o ponto de montagem /opt , onde ficará todos os aplicativos compilados. Se logue como root  no sistema linux, e agora  mão na massa ! 

# cd /usr/src 

Baixando o código-fonte dos aplicativos. Instalando os softwares necessários para compilação dos código-fontes.

#  apt-get install g++ make 

Bibliotecas necessárias para o openldap

# apt-get install autotools-dev libltdl3 libltdl3-dev libtool

 Berkeley DB ultima versão  estável

# wget http://ftp.momo-i.org/pub/other/db-4.7.25.tar.gz

Openldap ultima versão estável

# wget ftp://ftp.openldap.org/pub/OpenLDAP/openldap-release/openldap-2.4.16.tgz

Além da compilação do openldap com suporte sql, é preciso compilar o ODBC   e instalar o driver pré-compilado do mysql (libmyodbc) por apt-get.

# wget http://www.iodbc.org/downloads/iODBC/libiodbc-3.52.6.tar.gz
# apt-get install libmyodbc

MySQL 5.0 ( Banco de Dados )

# apt-get install mysql-server-5.0

Configurando código-fonte e instalando BerkelyDB e OpenLDAP

Vamos agora na parte de configuração do código-fonte  e instalação aos respectivos caminhos corretos.

1) Configurando  e compilando código fonte  do Berkerley DB (Base de Dados da Berkerley).

Entrando no diretório padrão, onde serão feitas as compilações e configurações.

# cd /usr/src/

Descompactando o código fonte do BerkeleyDB

# tar zxvf db-4.7.25.tar.gz

Entrando no diretório descompactado.

# cd db-4.7.25/build_unix

Configurando o código fonte do BerkeleyDB

# ../dist/configure –prefix=/opt/db4725

Compilando o código fonte e instalando o aplicativo no seguinte diretório /opt/db4725

# make && make install

2) Configurando e compilando código fonte do ODBC .

Entrando no diretório padrão, onde serão feitas as compilações e configurações.

# cd /usr/src/

Descompactando o código fonte do libiodbc.

# tar zxvf libiodbc-3.52.6.tar.gz

Entrando no diretório descompactado.

# cd libiodbc-3.52.6

Configurando o código fonte do libiodbc

# ./configure –prefix=/opt/odbc –with-pthreads

Compilando o código fonte e instalando  o aplicativo no seguinte diretório /opt/odbc

# make && make install

3) Configurando e compilando código fonte do Openldap com:

Suporte a criptografia (crypt , plaintext).
Suporte ao Banco de Dados ( bdb , hdb,sql(ODBC, para suporte a outros banco de dados).
Suporte a Réplica.
Suporte a Sistema de Logs (Syslog).
Entrando no diretório padrão, onde serão feitas as compilações e configurações.

# cd /usr/src/

Descompactando o código fonte do openldap

# tar zxvf openldap-2.4.16.tgz

Entrando no diretório descompactado.

# cd /usr/src/openldap-2.4.16

Exportando  as variáveis de ambiente necessárias para ter uma instalação com sucesso.

# export CPPFLAGS="-I/opt/odbc/include -I/usr/include/ -I/opt/db4725/include"
# export LDFLAGS="-L/opt/odbc/lib -L/opt/db4725/lib"
# export LD_LIBRARY_PATH="/opt/db4725/lib"

Setando o caminho das  libs de cada aplicação,  no arquivo central de bibliotecas do sistema linux. 

# echo "/opt/db4725/lib" >> /etc/ld.so.conf
# echo "/opt/odbc/lib" >> /etc/ld.so.conf

Atualizando Bibliotecas do sistemas.

# ldconfig

Configurando o código fonte do openldap.

# ./configure –prefix=/opt/ldap –sysconfdir=/opt/ldap/etc –enable-crypt=yes –enable-modules=yes  –enable-syslog=auto –enable-slurpd=yes –enable-bdb –enable-sql=yes

Conferindo se faltou alguma dependência do openldap.

# make depend

Compilando o código fonte e instalando  o aplicativo no seguinte diretório /opt/ldap.

# make  &&  make install

Setando os binários no PATH e setando o OpenLDAP na inicialização

Colocando todos os caminhos de binários de aplicativos no PATH do Linux. Use seu editor predileto, no caso usei o vim

/opt/db4725/bin:/opt/odbc/bin:/opt/ldap/bin:/opt/ldap/libexec:/opt/ldap/sbin

# vi /etc/profile

Modificar o PATH atual de :

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

para:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/db4725/bin:/opt/odbc/bin:/opt/ldap/bin:/opt/ldap/libexec:/opt/ldap/sbin"

Agora vamos salvar e sair do arquivo. Agora vamos reler o arquivo de variáveis de ambiente e setar o PATH novo.

# source /etc/profile

Pronto, agora você estará habilitado para acessar todas as ferramentas de administração dos aplicativos a partir de qualquer lugar, sem precisar o caminho de localização do arquivo.

# Colocando o openldap rodar na inicialização do  sistema linux.

Ficará assim.

# vi /etc/rc.local

/opt/ldap/libexec/slapd

exit 0

Pronto.Feito isso, tudo ok.

Configurando o OpenLDAP para acesso ao MySQL (parte1)

Configurando o Openldap para acesso ao mysql. Nesse estudo de caso, não abordarei sobre configurações do mysql.

Então mão na massa.

 Como administrador do sistema linux, vamos criar base de dados, chamado ldap.

 # mysqladmin -u root -p create ldap

Agora vamos alterar o arquivo de configurar slapd.conf, para se utilizar do modo SQL

Segue as instruções abaixo:

Use seu editor predileto, no caso usei vim.

# vi /opt/ldap/etc/openldap/slapd.conf 

allow bind_v2

# Schema and objectClass definitions

include         /opt/ldap/etc/openldap/schema/core.schema
include         /opt/ldap/etc/openldap/schema/cosine.schema
include         /opt/ldap/etc/openldap/schema/inetorgperson.schema

pidfile         /opt/ldap/var/run/slapd.pid
argsfile        /opt/ldap/var/run/slapd.args

loglevel        256
moduleload      back_sql

database sql
suffix          "dc=dominio,dc=com"
rootdn          "cn=admin,dc=dominio,dc=com"

# Pode-se utilizar o tipo de criptografia CRYPT, to usando plaintext, apenas para fins didáticos.
# Coloque  a senha de administrador do openldap.

rootpw       senha

dbname ldap
dbuser root
dbpasswd senha

subtree_cond "ldap_entries.dn LIKE CONCAT(‘%’,?)"
insentry_stmt "INSERT INTO ldap_entries (dn,oc_map_id,parent,keyval) VALUES (?,?,?,?)"
has_ldapinfo_dn_ru no

 

Configurando o OpenLDAP para acesso ao MySQL (parte2) 

Configurando o ODBC

Confirme a opção, para adicionar o Mysql automaticamente como um driver ODBC. Que modificará o arquivo /etc/odbcinst.ini

Ficando assim:

[MySQL]

Description             = MySQL driver
Driver           = /usr/lib/odbc/libmyodbc.so
Setup           = /usr/lib/odbc/libodbcmyS.so
CPTimeout              =
CPReuse                 =
UsageCount            = 1

# dpkg-reconfigure libmyodbc

Agora no arquivo /etc/odbc.ini. Ficará desse jeito, configurando com os dados do servidor mysql.

[ODBC Data Sources]

ldap     = MySQL LDAP DSN 

[ldap]
Driver       = /usr/lib/odbc/libmyodbc.so
Description  = MySQL  LDAP DSN
Server       = localhost
Port         = 3306
User         = root
Password     = senha
Database     = ldap

# Coloque o caminho correto do socket do mysql
Socket       = /var/run/mysqld/mysqld.sock

# Coloque o caminho de onde você compilou o libiodbc

[ODBC]
InstallDir    = /opt/odbc/lib/

Agora com ODBC e Openldap configurados e instalados,  vamos testar a conexão entre o  ODBC e o MySQL, antes de iniciar o serviço do OpenLdap.

Configurando o OpenLDAP para acesso ao MySQL (parte3)

Vamos digitar  ?  para ver todas as conexões.

# iodbctest

iODBC Demonstration program
This program shows an interactive SQL processor
Driver Manager: 03.52.0607.1008

Enter ODBC connect string (? shows list): ?

DSN                              | Driver         
——————————————————————————
ldap                             | MySQL LDAP DSN
Enter ODBC connect string (? shows list):

Configurando o OpenLDAP para acesso ao MySQL (parte4)

Testando comunicação entre ODBC com  mySQL

# iodbctest

iODBC Demonstration program
This program shows an interactive SQL processor
Driver Manager: 03.52.0607.1008 
Enter ODBC connect string (? shows list): ?
DSN                              | Driver
——————————————————————————
ldap                             | MySQL LDAP DSN             

Enter ODBC connect string (? shows list):  DSN=ldap

Caso ocorrer algum erro, revise as configurações do /etc/odbc.ini e my.cnf. Se estiver tudo ok, aparecerá a seguinte mensagem.

Enter ODBC connect string (? shows list): DSN=ldap
Driver: 03.51.15 (libmyodbc3.so)

SQL>
Para testar, digite:

SQL>
show databases;
Database
—————————————————————-
information_schema
ldap
mysql
result set 1 returned 3 rows.
SQL>

Pronto , está tudo funcionando.

Fazendo o OpenLDAP trabalhar com MySQL (final)

Agora com ambos funcionando, é necessário importar algumas tabelas que vêm com o código fonte do openldap, que fica em: Entrando no diretório mysql, que contém as tabelas necessárias para o funcionamento do openldap com o mysql.

# cd /usr/src/openldap-2.4.16/servers/slapd/back-sql/rdbms_depend/mysql/

Criando todas as tabelas e inserindo informações de exemplos.

# mysql -u root -p ldap < backsql_create.sql
# mysql -u root -p ldap < testdb_data.sql
# mysql -u root -p ldap < testdb_metadata.sql

Bom a partir de agora, toda a estrutura necessária para funcionar o openldap com mysql, está pronta. Depois utilizando o phpmyadmin, altere as informações, de acordo com o seu domínio cadastrado no LDAP.

Pronto vamos inicializar o Openldap e m  modo debug, para testar senão aparecerá nenhum erro.

# slapd -d5

Caso contrário, irá aparecer umas mensagens de conexão mysql. Mostrando que está tudo funcionando corretamente. Para iniciar sem o debug, (processo normal).

Apenas digite: 

# slapd

Tudo pronto, valeu a pena o trabalho de compilar.

Agradecimentos

Quero agradecer aos  meus amigos Clodonil Honório, que escreveu o livro OpenLDAP, uma abordagem integrada e também ao meu amigo Nielsen Alves de Oliveira.

 

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

clodonil August 9th, 2009

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 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 existão. 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" ,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 da rede e a mascara. 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 cadastrar essa servidor no registro de nome e também 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, lembre-se que o nome do servidor neste caso deve terminar com ponto (mail.curso.ldap.). 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/rev.curso.ldap";
};

O próximo passo é criar os arquivos db.curso.ldap e o arquivo rev.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 realizada.

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

 

Next »