quinta-feira, 14 de maio de 2009

Artigo - Squid + NTLM + Active Directory

Depois de bater cabeça fiz meu próprio tutorial para quem precisa autenticar a internet juntamente com seu controlador de domínio(PDC). Tenho certeza que se chegarem ao fim terão um funcionamento perfeito da autenticação, pois já o fiz várias vezes em vários clientes.


Distribuição Usada:

Ubuntu Server 8.04 (mas deve funcionar em qualquer uma)

Pacotes necessários:
samba-3.0.21c.tar.gz
squid-2.5.STABLE12.tar.gz

Considerações:

Nome do domínio: DOMINIO

Nome completo do domínio: DOMINIO.LOCAL
Nome do Servidor: SERVIDOR (Controlador de Domínio)

IP do Servidor(Controlador de Domínio): 192.168.0.1

Baixe os pacotes

# cd /usr/src

# wget http://ppp.samba.org/samba/ftp/stable/samba-3.0.21c.tar.gz

# wget http://www.squid-cache.org/Versions/v2/2.5/squid-2.5.STABLE12.tar.gz


Descompacte compile e instale o Samba

# tar zxvf samba-3.0.21c.tar.gz

# cd samba-3.0.21c/source

# ./configure --bindir=/bin --sbindir=/usr/sbin --with-winbind --with-winbind-auth-challenge

# make && make install


Copie a biblioteca do Winbind e crie um link simbólico

# cp /usr/src/samba-3.0.21c/source/nsswitch/libnss_winbind.so /lib

# ln -s /lib/libnss_winbind.so /lib/libnss_winbind.so.2

Edite o arquivo /etc/hosts o adicione o ip do controlador de domínio

# vim /etc/hosts


Coloque a seguinte linha alterando os nomes de acordo com sua rede e nomes


192.168.0.1 servidor.dominio.local servidor


Instale o ntpdate para sincronizar o horário dos servidores

# apt-get update

# apt-get install ntpdate

# ntpdate servidor


Instale os seguintes pacotes krb5-kdc krb5-config krb5-clients libpam-krb5 krb5-user

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


Edite o arquivo /etc/krb5.conf

# vim /etc/krb5.conf


E deixe da seguinte forma:


[libdefaults]

default_realm = DOMINIO.LOCAL

krb4_config = /etc/krb.conf

krb4_realms = /etc/krb.realms

kdc_timesync = 1

ccache_type = 4

forwardable = true

proxiable = true

v4_instance_resolve = false

v4_name_convert = {

host = {

rcmd = host

ftp = ftp

}

plain = {

something = something-else

}

}

fcc-mit-ticketflags = true

[realms]

DOMINIO.LOCAL = {

kdc = 192.168.0.1

admin_server = 192.168.0.1:749

default_domain = 192.168.0.1

}

[domain_realm]

domínio.local = DOMINIO.LOCAL

.domínio.local = DOMINIO.LOCAL

[login]

krb4_convert = true

krb4_get_tickets = false


Agora vamos inicializar a comunicação com controlador de domínio


# kinit administrador@DOMINIO.LOCAL


Onde “administrador” é uma conta administrador do servidor.


Dê o comando


# klist


Se tudo der certo você vera uma mensagem como esta:


klist: No credentials cache found (ticket cache FILE:/tmp/krb5cc_0)

Kerberos 4 ticket cache: /tmp/tkt0

klist: You have no tickets cached


Agora edite o arquivo /etc/nsswitch.conf

# vim /etc/nsswitch.conf


altere as linhas:


passwd: compat

group: compat

para:

passwd: compat winbind

group: compat winbind


Crie e edite o arquivo /usr/local/samba/lib/smb.conf


# vim /usr/local/samba/lib/smb.conf


deixando assim:


[global]

workgroup = DOMINIO

server string = Servidor Proxy

netbios name = proxy

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

max log size = 0

security = domain

password server = SERVIDOR

socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192

encrypt passwords = yes

wins server = SERVIDOR

winbind separator = "+"

winbind uid = 10000-20000

winbind gid = 10000-20000

template homedir = /dev/null

template shell = /dev/null

winbind use default domain = yes


Crie a pasta e dê permissão e reinicie o samba


# mkdir /var/log/samba

# chmod 777 -R /var/log/samba/

# nmbd restart

# smbd restart

# winbindd restart


Agora vamos ingressar o servidor proxy no domínio e restartar o samba. Digite a senha do usuário usado (administrador no caso) após dar o comando de ingresso.


# net rpc join DOMINIO -U administrador


# nmbd restart

# smbd restart

# winbindd restart


Para testar digite “wbinfo –u”. Se tude der certo, você terá a listagem de usuários do domínio.


Agora vamos descompactar, compilar e instalar o squid.


# cd /usr/src

# tar zxvf squid-2.5.STABLE12.tar.gz

# cd squid-2.5.STABLE12

# ./configure --sbindir=/usr/sbin --sysconfdir=/etc/squid --enable-default-err-language=Portuguese --enable-delay-pools --enable-underscores --enable-auth="ntlm,basic" --enable-external-acl-helpers="winbind_group,wbinfo_group," --enable-store-io=ufs,aufs,diskd --enable-snmp --enable-linux-netfilter --enable-basic-auth-helpers="winbind" --enable-ntlm-auth-helpers="SMB,winbind" --with-winbind-auth-chalenge

# make && make install


Configurando o squid

# mv /etc/squid/squid.conf /etc/squid/squid.conf.original

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


Adicione as linhas a seguir ao seu squid.conf. As linhas em vermelho devem ser adicionadas, e as outras são apenas para referencia a localização das outras. Altere as acls abaixo a gosto para dar permissões diferentes aos usuários do proxy.


cache_effective_user proxy

auth_param ntlm program /bin/ntlm_auth DOMINIO/SERVIDOR --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 /bin/ntlm_auth DOMINIO/SERVIDOR --helper-protocol=squid-2.5-basic

auth_param basic children 5

auth_param basic realm Digite seu login e senha.

auth_param basic credentialsttl 2 hours

auth_param basic casesensitive off


acl CONNECT method CONNECT

acl acesso proxy_auth REQUIRED # Solicitando a autenticação

http_access allow manager localhost


http_access deny CONNECT !SSL_ports

http_access allow acesso # Liberando usuários autenticados

http_access allow all


Para finalizar


# mkdir /usr/local/squid/var/cache

# touch /usr/local/squid/var/logs/store.log

# touch /usr/local/squid/var/logs/access.log

# chown -R proxy.proxy /usr/local/squid/var/cache

# chown proxy /usr/local/squid/var/logs/store.log

# chown proxy /usr/local/squid/var/logs/access.log

# chown root.proxy /usr/local/samba/var/locks/winbindd_privileged

# winbindd restart

# nmbd restart

# smbd restart

# squid -z

# squid &


Não se esqueça de configurar o proxy no navegador das estações na porta 3128(ou mais conveniente caso alterou no squid.conf) e também não esqueçam de colocar o samba e winbind num script de inicializacao do sistema.(ex. /etc/rc.local). Qualquer dúvida fiquem a vontade para perguntar, pq responderei na medida do possível.