Linux slogan
Visite também: Segurança Linux · BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
Linux: OpenSuse
Por fanick6
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha



Artigo

Squid autenticando no Windows utilizando grupos do AD
Linux user
czelusniak
05/04/2010
Autenticando Squid no AD utilizando grupos do AD como base para o acesso, de forma que podemos habilitar a utilização do proxy ou não para os usuários, liberando ou não a utilização do MSN para os usuários também e permitindo que os administradores ou a diretoria navegue sem restrições.
Por: Robinson Czelusniak
[ Hits: 23307 ]
Conceito: 10.0   3 voto(s)3 voto(s)3 voto(s)3 voto(s)3 voto(s) + quero dar nota ao artigo

Configuração no Windows

Vamos precisar saber algumas informações e vamos precisar criar um usuário no Windows.

Precisamos saber qual é domínio do AD (Active Directory).

Clique no iniciar, depois em executar, digite dsa.msc e pressione ENTER.

Com este comando ele vai abrir o gerenciamento de usuários e grupos do AD, verifique qual é o nome do domínio. Exemplo: dominio.local.

Criar usuário:

Vamos criar um usuário para autenticar o Squid onde você cria seus usuários.

Crie um usuário com o nome "squid" e defina um senha para ele.

Vamos criar também 3 grupos.
  • PROXY_ADM
  • PROXY_MSN
  • PROXY_USERS

Porque os grupos?
  • O usuário do AD que estiver dentro do grupo PROXY_ADM terá acesso total as páginas;
  • O usuário do AD que estiver dentro do grupo PROXY_USERS terá acesso as páginas, mas com o bloqueios determinados;
  • O usuário do AD que estiver dentro do grupo PROXY_MSN terá acesso ao MSN.

IMPORTANTE: Se o usuário não estiver no grupo PROXY_USERS ou PROXY_ADM ele não navegará.

Instalando e configurando o Squid

A distribuição utilizada para este artigo foi o SUSE Linux 10.2.

Instalação do Squid:

# yast -i squid

Depois de instalado o Squid cria o diretório /etc/squid com os arquivos de configuração e são eles que vamos usar, digite:

# cd /etc/squid

Faça uma cópia do squid.conf:

# cp squid.conf squid.conf.old

Agora vamos editar o arquivo squid.conf:

# vi squid.conf

Procure a linha:

#http_port 3128

E descomente-a, deixando assim:

# porta pela qual o Squid libera o acesso
http_port 3128

Salve e saia:

<ESC> :wq <ENTER>

Pesquise pelo binário squid_ldap_auth:

# find / -iname squid_ldap_auth

Você deve obter o caminho completo do binário:

/usr/sbin/squid_ldap_auth

Agora vamos editar o arquivo squid.conf novamente:

# vi squid.conf

Localize a linha:

#auth_param basic program /usr/libexec/ncsa_auth /usr/etc/passwd

E adicione abaixo dela a seguinte linha:

auth_param basic program /usr/sbin/squid_ldap_auth -R -b dc=dominio,dc=local -f sAMAccountName=%s -h 192.168.0.254 -D cn=squid,cn=users,dc=dominio,dc=local -w password

Explicação:
  • dc=dominio,dc=local = domínio do AD ( meu exemplo no início, dominio.local)
  • 192.168.0.254 = Endereço IP do servidor AD
  • cn=squid,cn=users,dc=dominio,dc=local = Caminho completo de onde está o usuário
  • password = A senha que foi definida no AD

Descomente as seguinte linhas também:

auth_param basic children 5
auth_param basic realm Digite sua senha
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off

<ESC> :wq <ENTER>

Pesquise pelo binário squid_ldap_group:

# find / -iname squid_ldap_group

Você deve obter o caminho completo do binário:

/usr/sbin/squid_ldap_group

Agora vamos editar o arquivo squid.conf novamente:

# vi squid.conf

Localize no arquivo que trata sobre external_acl_type logo abaixo do que alteramos a pouco e adicione a seguinte linha:

external_acl_type ldap_group %LOGIN /usr/sbin/squid_ldap_group -R -b "dc=dominio,dc=local" -D cn=squid,cn=users,dc=dominio,dc=local -w password -f "(&(objectclass=person)(sAMAccountName=%v)(memberof=cn=%a,ou=groups,dc=dominio,dc=local))" -h 192.168.0.254

Explicação:
  • dc=dominio,dc=local = domínio do AD ( meu exemplo no início, dominio.local);
  • 192.168.0.254 = Endereço IP do servidor AD;
  • cn=squid,cn=users,dc=dominio,dc=local = Caminho completo de onde está o usuário;
  • password = A senha que foi definida no AD;
  • memberof=cn=%a,ou=groups,dc=dominio,dc=local = Local onde foi criado os 3 grupos no AD;

<ESC> :wq <ENTER>

Próxima página >>




Páginas do artigo
   1. Configuração no Windows
   2. Configurações das regras do Squid
   3. Criando arquivos e iniciando o Squid

Outros artigos deste autor

Leitura recomendada

Comentários
[1] Comentário enviado por vipervini em 08/04/2010 - 11:37h:

Uma duvida, p/ o usuario navegar ele vai precisar digitar o usuario e senha? ou vai de maneira integrada com o logon de windows? vlw

[2] Comentário enviado por czelusniak em 08/04/2010 - 12:14h:

Bom dia Vinicius,

Ele vai pedir usuário e senha, estou terminando um artigo onde explico como fazer para que ele funcionar de maneira integrada.

Obrigado.

[3] Comentário enviado por ctavares em 12/04/2010 - 12:29h:

Para Mim simplesmente não funcionou a autenticação por grupos, se eu liberar o site na ACL sem autenticação ou nas demais ele funciona mas pelo visto meu squid não consegue buscar informações sobre os grupos. Quando você coloca memberof=cn=%a,ou=groups,dc=dominio,dc=local = Local onde foi criado os 3 grupos no AD;

na verdade eu só preciso alterar depois de ou= né como no exemplo abaixo tudo antes fica igual ao que você escreve certo?

memberof=cn=%a,ou=squid,dc=empresa,dc=net

Ou eu estou entendendo errado?


[4] Comentário enviado por czelusniak em 12/04/2010 - 13:52h:

Seria isto mesmo, mas, você precisa verificar se o ou=squid é mesmo uma ou ou é um CN= , se for um cn você tem que alterar para

memberof=cn=%a,cn=squid,dc=empresa,dc=net

Qualquer coisa posta o squid.conf aí que para te ajudar, outra coisa, qual a distro que esta usando?


Um abraço.

[5] Comentário enviado por ctavares em 12/04/2010 - 14:04h:

Veja Bem, é uma OU Unidade Organizacional chamada squid, dentro dela tem um usuário chamado squid também dei a ele a senha squid para facilitar os testes. Eu estou usando DC Windows 2008 R2 e Ubuntu 9.04 para o squid que é a versão 2.7 stable 6, eu já havia feito a mudança do nome do binário e localização dele de squid_ldap_auth que no Ubuntu chama diferente e está em outro local. Eu testei com a autenticação por usuário e ela funciona só não funciona na autenticação em grupo.



[6] Comentário enviado por czelusniak em 12/04/2010 - 15:03h:

Ok, e dentro desta OU estão os grupos correto? O nome dos grupos estão idênticos (Letras maiúsculas e minúsculas)? cola a linha da ldap_group e as acls aí. para ver o que esta acontecendo.



[7] Comentário enviado por ctavares em 12/04/2010 - 15:29h:

Vou colocar todo o meu squid.conf para você ver.

Apenas respondendo a sua pergunta sim os grupos estão dentro da ou squid e estão todos em maiusculo igual ao script abaixo.

auth_param basic program /usr/lib/squid/ldap_auth -R -b dc=galaxia,dc=net -f sAMAccountName=%s -h 192.168.1.19 -D cn=squid,cn=squid,dc=galaxia,dc=net -w squid

auth_param basic children 5
auth_param basic realm Forneça seu nome de usuário e senha para navegar.
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off

external_acl_type ldap_group %LOGIN /usr/lib/squid/squid_ldap_group -R -b "dc=galaxia,dc=net" -D "cn=squid,cn=squid,dc=galaxia,dc=net" -w squid -f "(&(objectclass=person)(sAMAccountName=%v)(memberof=cn=%a,ou=squid,dc=galaxia,dc=net))" -h 192.168.1.19

#Examples:
#acl macaddress arp 09:00:2b:23:45:67
#acl myexample dst_as 1241
acl password proxy_auth REQUIRED

acl proxyadmins external ldap_group INTERNET_LIBERADA
acl proxyusers external ldap_group INTERNET_RESTRITA
acl sites_sem_autenticacao dstdom_regex -i "/etc/squid/rules/sites_sem_autenticacao"


#Recommended minimum configuration:
acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8

# Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl SSL_ports port 443 # https
acl SSL_ports port 563 # snews
acl SSL_ports port 873 # rsync
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
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 Safe_ports port 631 # cups
acl Safe_ports port 873 # rsync
acl Safe_ports port 901 # SWAT
acl purge method PURGE
acl CONNECT method CONNECT


http_access allow sites_sem_autenticacao
http_access allow proxyadmins
http_access allow proxyusers

# Only allow cachemgr access from localhost
http_access allow manager localhost
http_access deny manager

# Only allow purge requests from localhost
http_access allow purge localhost
http_access deny purge

# Deny requests to unknown ports
http_access deny !Safe_ports

# Deny CONNECT to other than SSL ports
http_access deny CONNECT !SSL_ports


#http_access allow localnet
http_access allow localhost

# And finally deny all other access to this proxy
http_access deny all

#Allow ICP queries from local networks only
icp_access allow localnet
icp_access deny all

# Squid normally listens to port 3128
http_port 3128

#We recommend you to use at least the following line.
hierarchy_stoplist cgi-bin ?

access_log /var/log/squid/access.log squid


#Suggested default:
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern (Release|Package(.gz)*)$ 0 20% 2880
refresh_pattern . 0 20% 4320



# Don't upgrade ShoutCast responses to HTTP
acl shoutcast rep_header X-HTTP09-First-Line ^ICY.[0-9]
upgrade_http0.9 deny shoutcast

# Apache mod_gzip and mod_deflate known to be broken so don't trust
# Apache to signal ETag correctly on such responses
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache


# TAG: extension_methods
# Squid only knows about standardized HTTP request methods.
# You can add up to 20 additional "extension" methods here.
extension_methods REPORT MERGE MKACTIVITY CHECKOUT

#Default:
# hosts_file /etc/hosts
hosts_file /etc/hosts

# Leave coredumps in the first cache dir
coredump_dir /var/spool/squid


[8] Comentário enviado por czelusniak em 12/04/2010 - 22:57h:

Carlos,

na linha onde contem o usuário que vai autenticar esta assim "cn=squid,cn=squid,dc=galaxia,dc=net" mas pelo que você me passou onde o usuário squid esta é um OU e não um CN, na minha vm (com Ubuntu ) também não havia funcionado então troquei para OU e funcionou outra coisa mudei a regra "http_access allow proxyusers", coloquei ela mais para baixo, é a ultima antes do "http_access deny all" assim ele consegue efetuar as restrições. Da uma olhada para ver não é isto amigo, aqui funcionou com o seu script.


Um abraço

[9] Comentário enviado por ctavares em 14/04/2010 - 08:58h:

czelusniak,
Me Desculpa eu estava afirmando que estava como OU quando na verdade estava como CN, depois das modificações funcionou perfeitamente, muito obrigado pelo ótimo trabalho e por ter me ajudado.

[10] Comentário enviado por ctavares em 14/04/2010 - 17:10h:

czelusniak,


[11] Comentário enviado por rogawa em 26/07/2010 - 17:25h:

Olá Robinson. Excelente artigo, muito bem explicado!

Bem, estou usando o Samba4 aqui como Domain Controller, apliquei seu artigo e as restrições funcionaram. Entretanto, resolvi fazer um teste. Através de um PC fora do domínio, eu consegui logar e navegar usando qualquer nome de usuário que estivesse previamente cadastrado no AD e dentro do grupo PROXY_USERS. Gostaria que isso não acontecesse, pois pretendo aplicar uma série de restrições usando GPOs, então pensei em usar na ACL, o computador logado no domínio ao invés do usuário. Essa abordagem é possível? Eu pretendo fazer um teste, alterando o parâmetro (&(objectclass=person) para (&(objectclass=computer). Não sei se fui claro o suficiente, mas resumidamente seria alterar a autenticação de "usuário" para "computador". Qualquer ajuda é bem-vinda e mais uma vez parabéns pelo artigo!



[12] Comentário enviado por czelusniak em 31/07/2010 - 16:38h:

Obrigado Rui,

Nunca fiz este teste mas acredito que se você tirar o objectclass=person ninguém irá logar pois ele é uma classe de usuário, e se você colocar o objectclass=computer talvez a autenticação só acontecerá se você você passar uma conta de computar e não de um usuário, mas mesmo assim uma máquina fora do domínio poderá logar, uma forma de você restringir isto é utilizando NTLM com o squid dai o proxy não pede autenticação mas só libera a navegação se você estiver logado com uma conta do domínio. Estou terminando um artigo com NTLM, quero ver se até a metade do mês disponibilizo, o problema é o tempo meu amigo, mas no próprio VOL você pode encontrar algumas alternativas. Espero ter ajudado.

[13] Comentário enviado por ulisses.santos em 03/08/2010 - 17:19h:

Amigo tem alguma forma de isto funcionar com o debian?

[14] Comentário enviado por rogawa em 03/08/2010 - 20:26h:

Valeu Robinson! De fato, estou lendo sobre NTLM e aparentemente essa é a única maneira de conseguir o que necessito. Enquanto seu artigo não sai, estou estudando este material http://www.linuxman.pro.br/autenticando_o_squid_no_ad_via_ntlm.pdf

[15] Comentário enviado por czelusniak em 06/08/2010 - 21:52h:

Olá Ulisses,

na prática deve funcionar sem problemas basta procurar os binários squid_ldap_group e squid_ldap_auth, você pode usar o find:

# find / -iname squid_ldap_auth

e

# find / -iname squid_ldap_group


O restante não é preciso alterar nada.

Um abraco.

[16] Comentário enviado por czelusniak em 06/08/2010 - 21:59h:

Boa noite Rui,

pelo que vi do link que você colocou aí, é isto mesmo estou indo na mesma base no meu artigo.

No pdf que você postou ele fala sobre o horário do servidor isto tem que estar sincronizado com o AD senão dá problemas mesmo, outro ponto é o DNS, mas é muito tranquilo, boa sorte na sua jornada aí e se tiver tempo posta aí o resultado ou se tiver problema posta aí também numa dessa posso ajudar.


Um abraco

[17] Comentário enviado por leonavegador em 15/10/2010 - 16:22h:

Caro Amigo czelusniak,

Segui o seu tutoria, fazendo as alterações necessárias para meu domínio com meu grupos enfim. O usuario se autentica redondo. Mas o que ocorre. Segundo seu tutoria se o usuário não for membro de nenhum grupo do AD ele não navegaga correto? No meu caso aqui mesmo ele não estando cadastrado no grupo para controle de conteudo ele consegue navegar. O que pode estar ocorrendo. Agaurdo seu retorno.

[18] Comentário enviado por nelsinho em 10/12/2010 - 15:55h:

Boa tarde

Caro Amigo czelusniak,

Minha duvida é a seguinte estou fazendo uns teste aqui na minha VM antes de implementar na minha rede.
Meu squid esta instalado no Debian 5 e eu nao conseguir localizar o arquivo squid_ldap_auth de forma nenhuma.
Gostaria da Ajuda de voces para que eu possa seguir o tutorial.

[19] Comentário enviado por gean.souza em 21/03/2011 - 12:32h:

Bom dia a todos,

Fiz este procedimento e funcionou certinho, mas preciso de uma ajuda. Eu gostaria de limitar o número de conexões por usuário, porém alguns deles devem ter conexão livre. Pergunta! Eu consigo limitar o número de conexões apenas para um grupo X, enquanto o grupo Y não possui limite?

Abraço!


Contribuir com comentário


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.