quinta-feira, 31 de janeiro de 2008

INTEGRANDO O SAMBA E SQUID COM O ACTIVE DIRECTORY USANDO O KERBEROS E WINBIND

PREPARAÇÃO PARA O AMBIENTE

Será necessário um servidor Windows 2000 ou 2003 atuando como Domain Controller e um servidor Linux para Proxy.

Neste caso específico, o servidor Linux está rodando Debian Etch e ou CentOS 4, mas o tutorial também pode ser utilizado com outras versões de Linux. yt


Obs.: É obrigatório que exista um SERVIDOR WINS na REDE!

Vamos instalar as dependências para dar seqüência ao tutorial:

Primeiro, edite o arquivo /etc/hosts colocando o nome e o ip do seu Domain Controller:

# vi /etc/hosts

10.100.0.165 nelinho-sp.com.br nelinho-sp

10.100.0.165 server01. nelinho-sp.com.br server01

127.0.0.1 localhost.localdomain localhost prx


Em seguida, vamos instalar o NTPDATE para efetuar o sincronismo de horário entre o

Servidor Linux e um NTP Server:

# apt-get install ntpdate


Instalação do Kerberos

- Kerberos p/ Linux (Debia Sarge e Etch)

# apt-get install krb5-kdc krb5-config krb5-clients libpam-krb5 krb5-user


  • Kerberos p/ Linux Centos 4 e 5

#yum install krb5-libs

#yum install krb5-workstation

#yum install krb5-server


Após a instalação edite o arquivo krb5.conf:

#vi /etc/krb5.conf


[libdefaults]

ticket_lifetime = 24000

default_realm = NELINHO-SP.COM.BR

dns_lookup_realm = false

dns_lookup_kdc = false


[realms]

NELINHO-SP.COM.BR = {

kdc = 10.100.0.165

admin_server = 10.100.0.165:749

default_domain = 10.100.0.165

}

[domain_realm]

.nelinho-sp.com.br = NELINHO-SP.COM.BR

nelinho-sp.com.br = NELINHO-SP.COM.BR

[login]

krb4_convert = true

krb4_get_tickets = false

[logging]

kdc = FILE:/var/log/krb5kdc.log

admin_server = FILE:/var/log/kadmin.log

default = FILE:/var/log/krb5lib.log


Salve e feche.


Vamos editar alguns dos arquivos de configuração e efetuar a comunicação entre o Proxy e o Domain Controller via Kerberos.

Primeiro, é necessário que o horário do servidor Linux e do Servidor Windows estejam sincronizados. Para isto, iremos utilizar um servidor NTP, seguindo os seguintes passos:

- Servidor Linux

# ntpdate ntp.cais.rnp.br


- Servidor Windows

C:\Winnt> net time /setsntp:ntp.cais.rnp.br

C:\Winnt> net stop w32time & net start w32time


Em seguida, vamos iniciar a comunicação entre o Linux e o Domain Controller utilizando Kerberos. (Lembrando que o domínio utilizado neste tutorial chama NELINHO-SP.COM.BR)

# kinit administrator@NELINHO-SP.COM.BR


Será solicitada a senha do usuário “administrator”. Se tudo correu bem, você irá rodar o comando “klist” e o retorno será semelhante ao que obtivemos, conforme abaixo:

# kinit administrator@LAB.VIRTUAL

Password for administrator@LAB.VIRTUAL:

# klist

Ticket cache: FILE:/tmp/krb5cc_0

Default principal: administrator@LAB.VIRTUAL

Valid starting Expires Service principal

02/22/07 14:25:47 02/23/07 00:25:47 krbtgt/LAB.VIRTUAL@LAB.VIRTUAL

Kerberos 4 ticket cache: /tmp/tkt0

klist: You have no tickets cached


Se a saída do comando for diferente do apresentado acima, verifique:

  • Se não há erro no arquivo krb5.conf

  • Se o horário não está sincronizado entre as máquinas;

  • Se a senha do administrador foi alterada.


Vamos instalar o winbind:

#apt-get install winbind


Em seguida, vamos editar o arquivo nsswitch.conf

# vi /etc/nsswitch.conf

E alterar as linhas:

DE:

passwd: compat

group: compat

PARA:

passwd: compat winbind

group: compat winbind


Obs.: NÃO INICIE O WINBIND


Vamos instalar o samba no Debian Sarge ou Etch:

#apt-get install samba samba-common


Vamos instalar o samba no CentOS 4 ou 5:

#yum install samba


Edite o arquivo smb.conf:

#vi /etc/samba/smb.conf


[global]

workgroup = nelinho-sp

server string = squid server

netbios name = dvto2

log level = 2

log file = /var/log/samba/%m.log

max log size = 50

security = ads

password server = 10.100.0.165

encrypt passwords = true

socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192

winbind uid = 10000-20000

winbind gid = 10000-20000

winbind enum users = yes

winbind enum groups = yes

template homedir = /dev/null

template shell= /dev/null

winbind use default domain = yes

interfaces = 10.100.0.0/16

bind interfaces only = yes

realm = nelinho-sp.com.br


#======= Share Definitions=========


[homes]

comment = Home Directories

browseable = no

writable = yes

valid users = %S

create mode = 0664

directory mode = 0775


[printers]

comment = All Printers

path = /var/spool/samba

browseable = yes

guest ok = yes

writable = no

printable = yes


Obs: ANTES DE INICIAR O SAMBA DEVEMOS INGRESSAR O SAMBA NO DOMÍNIO. ANTES DE INGRESSAR FAÇA AS SEGUINTES VERIFICAÇÕES:

  • VERIFIQUE SE O ARQUIVO /etc/samba/secrets.tdb FOI CRIADO, SE SIM APAGUE-O. ESTE ARQUIVO PRECISA SER EXCLUIDO PORQUE ELE GUARDA AS CONFIGURAÇÕES DE DOMÍNIOS ANTERIORES.

  • VERIFIQUE NA MÁQUINA WINDOWS SE A MÁQUINA SAMBA JÁ ESTÁ INGRESSADA, SE SIM EXCLUA.


Para incluir a máquina no domínio execute:

#net ads join -Uadministrator%password [senha do administrador]


Se a máquina ingressou com sucesso uma mensagem de sucesso vai aparecer, um novo arquivo secrets.tdb vai ser criado e a máquina vai aparecer no AD.

Inicie o samba e o winbind:

#/etc/init.d/smb start

#/etc/init.d/winbind start


DETALHES QUE DEVEM SER LEVADOS EM CONSIDERAÇÃO


Na máquina windows o domínio nelinho-sp.com.br deve ser pingado e a resposta deve ser algo como:

ping nelinho-sp.com.br

PING nelinho-sp.com.br (10.100.0.165) 56(84) bytes of data.

64 bytes from nelinho-sp.com.br (10.100.0.165): icmp_seq=0 ttl=128 time=1.59 ms

64 bytes from nelinho-sp.com.br (10.100.0.165): icmp_seq=1 ttl=128 time=0.680 ms

64 bytes from nelinho-sp.com.br (10.100.0.165): icmp_seq=2 ttl=128 time=0.825 ms


--- nelinho-sp.com.br ping statistics ---

3 packets transmitted, 3 received, 0% packet loss, time 2001ms

rtt min/avg/max/mdev = 0.680/1.032/1.592/0.401 ms, pipe 2


Se não pinga o mesmo não está resolvendo nomes. Verifique o DNS se está como autoritarivo (se o dns que estiver apontado está instalado na mesma máquina do AD). A resolução de nomes é importante para o funcionamento do AD com a integração.


CONFIGURANDO O SQUID PARA AUTENTICAR VIA NTLM


A versão instalada para os devidos funcionamentos foi a 2.5.

- Efetuando backup do arquivo de configuração original

# cd /etc/squid

# mv squid.conf squid.original

- Limpando todas as linhas comentadas do squid.original e gerando o squid.conf

# egrep -v "^#|^$" squid.original > squid.conf


Editando o arquivo squid.conf e colocando as linhas abaixo (As linhas em vermelho são as linhas utilizadas pela autenticação NTLM:

# vi /etc/squid/squid.conf


http_port 3128

cache_effective_user squid

cache_effective_group squid

cache_log /var/log/squid/cache.log

cache_access_log /var/log/squid/access.log

cache_store_log /var/log/squid/store.log

hierarchy_stoplist cgi-bin ?

acl QUERY urlpath_regex cgi-bin \?

no_cache deny QUERY

auth_param ntlm program /usr/bin/ntlm_auth -d NELINHO-SP --helper-protocol=squid-2.5-ntlmssp

auth_param ntlm use_ntlm_negotiate off

auth_param ntlm children 10

auth_param ntlm max_challenge_reuses 0

auth_param ntlm max_challenge_lifetime 5 minutes

auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic

auth_param basic children 5

auth_param basic realm Digite o LOGIN/SENHA

auth_param basic credentialsttl 2 hours

auth_param basic casesensitive off

refresh_pattern ^ftp: 1440 20% 10080

refresh_pattern ^gopher: 1440 0% 1440

refresh_pattern . 0 20% 4320

acl all src 192.168.88.0/255.255.255.0

acl manager proto cache_object

acl localhost src 127.0.0.1/255.255.255.255

acl to_localhost dst 127.0.0.0/8

acl SSL_ports port 443 563

acl Safe_ports port 80 # http

acl Safe_ports port 21 # ftp

acl Safe_ports port 443 563 # https, snews

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

acl acesso proxy_auth REQUIRED # Solicitando a autenticação

http_access allow manager localhost

http_access deny manager

http_access deny !Safe_ports

http_access deny CONNECT !SSL_ports

http_access allow acesso # Liberando usuários autenticados

http_access allow all

http_reply_access allow all

icp_access allow all

coredump_dir /usr/local/squid/var/cache

Criando o cache e iniciando o squid.

# squid -z


Para utilizar as regras baseadas em Grupos do Active Directory, utilize as seguintes linhas no seu squid.conf:


external_acl_type nt_group %LOGIN /usr/lib/squid/wbinfo_group.pl

acl AllowedWindowsGroups external nt_group GrupodoAD

http_access allow AllowedWindowsGroups


Depois de editar o seu squid.conf, não esqueça de recarregá-lo:

# squid –k reconfigure


Para verificar se a autenticação ntlm_auth está funcionando execute:

#/usr/bin/ntlm_auth --domain=nelinho-sp.com.br –username=[informe o login do AD]

Password:[digite a senha]

NT_STATUS_OK: Success (0x0)

Se a informação acima aparecer quer dizer que o usuário está autenticando, caso contrário não. Se aparecer a mensagem abaixo, a senha está errada:

NT_STATUS_WRONG_PASSWORD: Wrong Password (0xc000006a)


ANALISES DE ERROS E SOLUÇÕES

Para analisar se o squid vai iniciar com algum erro, execute ele em modo de debug:

#squid -d 2


ERROS

winbind client not authorized to use winbindd_pam_auth_crap Ensure permissions on /var/lib/samba/winbindd_privileged are set correctly – Este erro aparece quando a permissão de grupo para a pasta winbindd_privileged não está o grupo squid. Execute:

#chgrp chgrp proxy winbindd_privileged

#chmod 750 winbindd_privileged


REFERÊNCIA BIBLIOGRÁFICA

KANETO, Guilherme. Autenticando o Squid no Active Directory via NTLM. Data 09/06/2007.

MELO, Sandro. BS7799, da Tática a Prática em Servidores Linux. Alta Books.

FAHDAZIZ. Configuring Samba 3.0 To Use The ADS Security Mode (CentOS). Endereço Eletrônico: http://www.howtoforge.com/samba_ads_security_mode. Data: 10/12/2007.

Um comentário:

Anônimo disse...

Muito bom! Parabéns. Vou fazer o procedimento. Abraços