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:
Muito bom! Parabéns. Vou fazer o procedimento. Abraços
Postar um comentário