Infotech Notes

22/Agosto/2008

Autenticando Máquinas Windows no servidor LDAP

Arquivado em: Windows, ldap — Gustavo @ 11:14 pm

Para quem já montou o servidor LDAP explicado nos posts anteriores, segue uma parte interessante.

É possível autenticar máquinas Windows (2000, 2003, XP e Servers) na base LDAP. A mágica acontece através do software da Comtarsia (http://signon.comtarsia.com/main/en/Download)

Este software trabalha em duas frentes – autenticação e sessão. Para a autenticação é necessária a instalação do Comtarsia Logon Client. Já para o gerenciamento da sessão, é necessária a instalação do Comtarsia SignOn Gate.

Estes dois softwares estão disponíveis para download no site da Comtarsia, e podem ser testados anytime, anywhere.

O Comtarsia Logon Client troca o MSGina (interface de login padrão do Windows) pelo Gina da Comtarsia. Através dele é possível realizar a autenticação na base LDAP, e eventualmente, quando for necessário, pode-se clicar na opção para usar o MSGina e se autenticar no Windows através de um usuário local ou também através de um usuário no AD.

Sim, eu instalei estes softwares da Comtarsia em uma máquina com autenticação em um AD e neste ponto eu posso escolher onde eu quero autenticar – LDAP ou AD. Eu posso garantr que funciona porque eu uso. Caso voce tenha alguma dúvida, deixe um comentário.

7/Agosto/2008

Link aggregation/Bonding em linux

Arquivado em: ldap — Gustavo @ 9:56 pm

Seguem algumas informações e dois scripts úteis para adição e configuração de interfaces em link agregation/bonding em linux. Eu fiz isso em Debian 3.1, mas vale para qualquer linux.

No exemplo abaixo (/etc/init.d/start_bondig) eu tenho um servidor com 4 interfaces de rede e estou criando 2 link aggregation, para uso em dois switches trabalhando com HSRP (Cisco). Eu vou criar a interface lógica bond0 com as interfaces físicas eth1 e eth2, e a interface lógica bond1 com as interfaces físicas eth3 e eth4.

Vale lembrar que se voce tem 1 servidor e 1 switch operando em modo bonding, a escolha do modo é muito importante para o correto balanceamento.

No caso do servidor, o melhor modo para balanceamento é o mode=0, que envia um pacote para cada interface alternadamente. A escolha do modo vale somente para o envio dos pacotes, uma vez que quando o bondiing ou aggregation está ativado, qualquer que seja o modo de configuração do bonding, o outro equipamento deve ser capaz de recebê-los sem problema. Ou seja, eu posso ter modo de envio 0 (Round-robin mode) do servidor para o switch e modo 1 (Active-backup mode) do switch para o servidor, e eles serão capazes de trocar tráfego sem problema.

#!/bin/sh
# arquivo /etc/init.d/start_bonding
# obtendo os MACs
MAC_ADDR_0=`ifconfig -a | grep eth1 | awk ‘{printf$5″\n”}’`
MAC_ADDR_1=`ifconfig -a | grep eth3 | awk ‘{printf$5″\n”}’`

# carregando os modulos em memoria
# mode=0 ==> Round-robin policy
# mode=1 ==> Active-backup policy
# mode=2 ==> Balance-xor policy
# mode=3 ==> Broadcast policy
# mode=4 ==> 802.3ad policy
# mode=5 ==> Balance-tlb (Adaptive transmit load balancing) policy
# mode=6 ==> Balance-alb (Adaptive load balancing) policy

# tip para carregar o segundo bonding
/sbin/modprobe bonding mode=0                           ## bond0
/sbin/modprobe bonding -o bonding1 mode=0      ## bond1

/sbin/ifconfig bond0 hw ether $MAC_ADDR_0
/sbin/ifconfig bond0 up

/sbin/ifconfig bond1 hw ether $MAC_ADDR_1
/sbin/ifconfig bond1 up

#interfaces para o switch
/sbin/ifenslave bond0 eth1
/sbin/ifenslave bond0 eth2

#interfaces para o brick
/sbin/ifenslave bond1 eth3
/sbin/ifenslave bond1 eth4

/sbin/ifconfig eth1 up
/sbin/ifconfig eth2 up
/sbin/ifconfig eth3 up
/sbin/ifconfig eth4 up

#========eof /etc/init.d/start_bonding

Para desfazer as interfaces, use este script

#!/bin/sh
# arquivo /etc/init.d/stop_bonding

/sbin/ifconfig br0 down
/usr/sbin/brctl delif br0 bond0
/usr/sbin/brctl delif br0 bond1
/usr/sbin/brctl delbr br0

/sbin/ifconfig eth1 down
/sbin/ifconfig eth2 down
/sbin/ifconfig eth3 down
/sbin/ifconfig eth4 down

/sbin/ifenslave -d bond0 eth1
/sbin/ifenslave -d bond0 eth2
/sbin/ifenslave -d bond1 eth3
/sbin/ifenslave -d bond1 eth4

/sbin/ifconfig bond0 down
/sbin/ifconfig bond1 down

#===========eof  /etc/init.d/stop_bonding

29/Julho/2008

LDAP com TLS/SSL

Arquivado em: Linux, ldap — Gustavo @ 6:28 pm

Seguem aqui os passos para adicionar um pouco de segurança ao sistema LDAP. No meu caso, eu utilizo um certificado auto-assinado. Não é a maneira mais segura, mas ajuda muito quando voce tem que autenticar os usuários e quer evitar que a senha seja lida caso algum sniffer esteja ativo.

Lembre-se de manter a parte privativa do certificado o mais seguro possível, pois é isto que garantirá a segurança e a privacidade das informações. O sistema usado como exemplo é um Red Hat AS 4 Update 6 e os comandos devem ser executados pelo usuário root.

Criação da autoridade certificadora e geração do scertificado:

cd /usr/share/ssl
rm -fr demoCA
/usr/share/ssl/misc/CA -newca
openssl req -newkey rsa:1024 -nodes -keyout newreq.pem -out newreq.pem /usr/share/ssl/misc/CA -sign

Com isto, voce já tem os certificados privados e público. Vamos agora colocar os arquivos certos nos lugares certos.

cp demoCA/cacert.pem /etc/openldap/cacerts/cacert.pem
cp newcert.pem /etc/openldap/cacerts/servercrt.pem
cp newreq.pem /etc/openldap/cacerts/serverkey.pem

Corrigindo as permissões e proprietários

chmod 0400 /etc/openldap/cacerts/serverkey.pem
chown -R ldap:ldap /etc/openldap/cacerts /etc/init.d/ldap restart

Copiando os certificados na máquina cliente ldap

scp /etc/openldap/cacerts/cacert.pem root@<ip_client>:/etc/openldap/cacerts/.

Com estes passos feitos, basta acertar as configurações dos arquivos abaixo nas máquinas LDAP Client:

# arquivo: /etc/ldap.conf
host <fqdn_ldap_server>
base ou=Users,dc=com
uri ldaps://<fqdn_ldap_server>/
ldap_version 3
port 636
timelimit 120
bind_timelimit 120
idle_timelimit 3600
pam_password md5
pam_password exop
ssl on
tls_checkpeer yes
tls_cacertfile /etc/openldap/cacerts/cacert.pem
tls_cacertdir /etc/openldap/cacerts
tls_reqcert never
tls_ciphers TLSv1
pam_password md5

# arquivo: /etc/openldap/ldap.conf
URI ldaps://<fqdn_ldap_server>:636
HOST <fqdn_ldap_server>
BASE ou=Users,dc=com
TLS_CACERTDIR /etc/openldap/cacerts
TLS_REQCERT never

20/Julho/2008

Montando um servidor LDAP, parte 3

Arquivado em: Linux, ldap — Gustavo @ 1:34 am

Bom, continuando os posts 1 e 2, seguem agora os arquivos de configuração /usr/local/etc/openldap/slapd.conf e /etc/init.d/ldap

Como eu não consigo formatar este post para representar corretamente os espaços nestes arquivos, eu vou anexá-los em um PDF. Estes arquivos referem-se à configuração do servidor Master LDAP (IP 10.0.0.31) e do servidor Slave (IP 10.0.0.32), contendo também o arquivo /etc/init.d/ldap, para início do serviço nos dois servidores.

Arquivo PDF com a configuração LDAP master e slave

Alguns simples problemas costumam acontecer:
- o diretório /var/lib/ldap não existe
- o script de inicializacao /etc/init.d/ldap não tem permissão de execução
- o diretório dos schemas é diferente do especificado no arquivo slapd.conf

Corrija-os e então inicie o ldap.

Após iniciar, voce pode usar o utilitário LDAP Admin (http://ldapadmin.sourceforge.net/) que roda em MS-Windows, facilitando a gerencia da árvore LDAP.

Não esqueça de adicionar a base (ou o topo) da árvore, que no nosso exemplo é o domínio dc=com. Para isto, basta criar um arquivo texto com as linhas a seguir e emitir o seguinte comando no seu servidor LDAP (nos dois servidores).

dn: dc=com
objectClass: domain
dc: com

Salve com o nome base.ldif (arquivo de texto puro, usando vi/vim ou outro editor) e rode o seguinte comando ldapadd -x -D “cn=Manager,dc=com” -W -f base.ldif

Ele pedirá uma senha. Informe a senha usada no comando slappasswd

Rode o LDAP Admin e veja a base de sua árvore LDAP no ar. A partir deste ponto, voce pode começar a criar a estrutura de sua árvore LDAP.

19/Julho/2008

Montando um servidor LDAP, parte 2

Arquivado em: ldap, sincronismo, vrrp — Gustavo @ 11:48 pm

Bom, depois de algum tempo na frente dos seus servidores compilando o OpenLDAP e o VRRP Daemon, chegou a hora de configurá-los e colocá-los em operação.

Vamos começar pelo VRRP que é mais fácil e mais simples. Para isso eu vou presumir 2 servidores com IPs 10.0.0.31 (LDAP Master) e 10.0.0.32 (LDAP Slave). O IP virtual que será o responsável pelas respostas das duas máquinas será o 10.0.0.30

Servidor Master (ip 10.0.0.31). Crie o arquivo /etc/init.d/vrrpd e coloque este texto nele

Arquivo PFD com a configuração do VRRP Server

Dê permissões de execução e crie o link em /etc/rc3.d/S94vrrpd. Os espaços deste script foram comidos na hora de publicar a mensagem. Mas o script é pequeno e fácil de entender.

Servidor Slave (ip 10.0.0.32). Crie o arquivo /etc/init.d/vrrpd e coloque este texto nele

Arquivo PDF com a configuração do VRRP Slave

Dê permissões de execução e crie o link em /etc/rc3.d/S94vrrpd

Com as configurações deste arquivo, também é possível executar um chkconfig –add vrrpd, sem a necessidade de criar o link manualmente. Eu fiz isto em um RedHat.

Inicie o serviço VRRP e faça os testes. Efetue um ping para o IP Virtual e então veja o arp deste IP. Então pare o serviço no servidor Master, e veja que o ping perde alguns pacotes mas logo volta a responder. Verifique novamente o arp deste IP e veja que o arp está diferente.

As mensagens deste serviço são colocadas no arquivo /var/log/messages e se parecem com estas

May 28 11:11:53 master-server vrrpd: VRRP ID 1 on eth1: we are now a backup router.
May 28 11:11:57 master-server vrrpd: VRRP ID 1 on eth1: we are now the master router.

Sugiro também adicionar em seu servidor DNS uma entrada A e PTR que resolva o nome e o reverso para este novo elemento em sua rede.

16/Maio/2008

Montando um servidor LDAP

Arquivado em: ldap, sincronismo, vrrp — Gustavo @ 1:23 am

Recentemente eu montei um servidor LDAP utilizando dois servidores rodando linux RedHat AS 4, com redundância através de VRRP e sincronismo da dase de dados LDAP.
Este post descreve todos os passos e dicas sobre como colocar este serviço no ar.

Algumas das características utilizadas são:
- Servidores com replicação da base LDAP
- Utilização de um software de virtualização de IPs para redundancia
- Autenticação com utilização de certificados para cifragem dos dados
- Testes com Autenticação de ambientes Windows (Cliente pago)

Servidor Linux:
O servidor utilizado não é um fator tão importante. Eu escolhi utilizar um RedHat AS4, mas pode ser feito também com SUSE, Debian, e mesmo em Unix (Solaris, HP-UX, AIX), pois todo o software utilizado deve ser compilado no servidor, então a distribuição pode ser a escolha de cada um. Penso que vale a pena ter a versão mais atualizada do linux/unix escolhido. Vale a pena lembrar que a versão RHES4 deve ter o update 5 instalado, ou superior. Se for update 4 ou inferior o ldap com password policy não vai funcionar.

VRRP Daemon:
O serviço VRRP é semelhante ao HSRP da Cisco, e permite que duas estações com IPs distintos (ex. 10.0.0.31 = Server1 e 10.0.0.32 = Server2) possam responder por um terceiro IP (10.0.0.30) com redundancia do serviço. Um dos servidores será o master e o outro será o slave. Quando o master ficar fora do ar, o slave assume a resposta pelo IP 10.0.0.30. Quando o server1 voltar ao ar, ele volta a responder pelo IP 10.0.0.30 e o server 2 devolve o IP ao master.
Este serviço é fundamental para garantir a redundancia do servidor, uma vez que na configuração do LDAP será feita a colocação de um master e um slave, com sincronismo da base de ldados LDAP entre os servidores.
O fonte deste recurso pode ser encontrado em https://sourceforge.net/projects/vrrpd/ e deve ser compilado nos dois servidores.

LDAP:
O servidor LDAP utilizado foi a última versão stable, localizada em http://www.openldap.org/software/download/OpenLDAP/openldap-stable/
Depois de baixar a versão, mova o arquivo para o diretório /usr/local e descompacte-o lá.
Rode os seguintes comandos para realizar a configuração e compilação:
# ./configure –enable-crypt –enable-bdb –disable-sql –enable-ppolicy –with-cyrsus-sasl –with-tls –disable-ipv6 –with-slurpd
# make depend && make && make install && echo $?

Se voce encontrar algum problema no configure, é porque deve estar faltando algum pacote necessário à compilação do openldap. Ao executar um rpm -qa | grep -i sasl, eu obtive estes pacotes
- cyrus-sasl-sql-2.1.19-14
- cyrus-sasl-md5-2.1.19-14
- cyrus-sasl-plain-2.1.19-14
- cyrus-sasl-ntlm-2.1.19-14
- cyrus-sasl-2.1.19-14
- cyrus-sasl-gssapi-2.1.19-14
- cyrus-sasl-devel-2.1.19-14

E ao executar um rpm -qa | grep -i ssl eu obtive os seguintes pacotes
- openssl096b-0.9.6b-22.46
- openssl-devel-0.9.7a-43.16
- pyOpenSSL-0.6-1.p23
- xmlsec1-openssl-1.2.6-3
- openssl-0.9.7a-43.16
- mod_ssl-2.0.52-32.3.ent
- perl-Crypt-SSLeay-0.51-5

A versão que eu uso do RedHat é AS4 Update 6

Com as dependências de pacotes resolvidas, o configure deve rodar sem problema, e coom isso os makes podem ser feitos. O echo $? deve retornar um 0 (zero), informando que não houve qualquer problema na compilação e instalação.

Caso voce utilize um servidor ldap master e um slave, execute a instalação do openldap nas duas máquinas, exatamente da mesma maneira.

Nos próximos dias eu continuarei com este post, mostrando como criar um slapd.conf, criar a árvore ldap inicial, criar as entradas na árvore ldap, criar os usuários e definir e aplicar as políticas permittidas pelo Password Policy

Blog no WordPress.com.