Squid autenticando no Windows utilizando grupos do AD

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.

[ Hits: 76.487 ]

Por: Robinson Czelusniak em 05/04/2010


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

Instalando Postfix e Dovecot no SLES 11 e autenticando em um diretório da Novell (Edir)

Squid com autenticação

Configurando o OpenVPN no SuSE Linux Enterprise Server (SLES)

SUSE Linux - Squid autenticando no Active Directory (AD)

CBQ (Controlador de banda) no Conectiva 10

Leitura recomendada

MySAR - Um ótimo analisador de logs do Squid

Tutorial de instalação do Squid no CentOS

Manual traduzido do Squid

Instalando natACL no Debian Etch (proxy autenticado)

Compilando o Squid com autenticação PAM

  
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!

[20] Comentário enviado por palara em 17/01/2013 - 09:35h

Desconsiderem minha falta deste conhecimento, mas como se cria uma OU? É dentro de /etc/squid???

[21] Comentário enviado por rbortholin em 25/02/2013 - 14:37h

Galera !

Preciso de uma ajuda !


Eu a príncipio fiz uma instalação básica do squid por #aptitude install squid, ai consegui fazr funcionar e tal, porém é necessário que ele se integre com o AD assim como ensinado neste tutorial !

Meu linux já está no dominio e e comunicando, porém preciso configrar essa 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

mas nao tenho a pasta /usr/sbin/squid_ldap_auth

Alguém tem alguma ideia

[22] Comentário enviado por soluz em 06/08/2013 - 09:50h

Pessoal,

Preciso de ajuda sobre o tema deste tutorial.

Simplesmente não tenho sucesso ao tentar fazer o Squid autenticar através dos grupos do AD do Windows Server 2012.

Segue meu squid.conf:

-----------

auth_param basic program /usr/lib/squid/ldap_auth -R -b "dc=dominio,dc=local" -D "cn=squid,cn=Users,dc=dominio,dc=local" -w "password" -f sAMAccountName=%s -h 192.168.0.1
auth_param basic children 5
auth_param basic realm Digite suas credenciais para acessar a internet
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
#
external_acl_type gruposad %LOGIN /usr/lib/squid/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)(merberof=cn=%a,cn=Users,dc=seap,dc=intranet))" -h 192.168.0.1
#
acl password proxy_auth REQUIRED
#
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 0.0.0.0/32
acl localnet src 192.168.0.0/24
#
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
#
acl proxyadmins external gruposad proxy_adm
acl proxyusers external gruposad proxy_users
#
acl sites_sem_autenticacao dstdom_regex -i "/etc/squid/arquivos/sites_sem_autenticacao"
#
acl downloads_proibidos urlpath_regex -i "/etc/squid/arquivos/downloads_proibidos"
#acl downloads_permitidos urlpath_regex -i "/etc/squid/arquivos/downloads_permitidos"
#
acl palavras_proibidas url_regex -i "/etc/squid/arquivos/palavras_proibidas"
acl palavras_permitidas url_regex -i "/etc/squid/arquivos/palavras_permitidas"
#
acl sites_proibidos dstdom_regex -i "/etc/squid/arquivos/sites_proibidos"
#acl sites_permitidos dstdom_regex -i "/etc/squid/arquivos/sites_permitidos"
#
acl urls_proibidas url_regex -i "/etc/squid/arquivos/urls_proibidas"
#acl urls_permitidas url_regex -i "/etc/squid/arquivos/urls_permitidas"
#
http_access allow sites_sem_autenticacao
http_access allow proxyadmins
http_access allow palavras_permitidas
http_access deny downloads_proibidos
http_access deny palavras_proibidas
http_access deny sites_proibidos
http_access deny urls_proibidas
http_access allow password proxyusers
#
http_access allow manager localhost
http_access deny manager
#
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localnet
http_access allow localhost
#
http_access deny all
#
icp_access allow localnet
icp_access deny all
#
http_port 3128
#
hierarchy_stoplist cgi-bin ?
#
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880
refresh_pattern . 0 20% 4320

-----------

[23] Comentário enviado por jonnatha_faria em 03/03/2016 - 03:22h

Amigo, excelente iniciativa, só tenho um comentário, se puder postar os confs mais simplificados, acho que fica mais fácil das pessoas aprenderem. Só uma crítica construtiva, parabéns!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts