Squid com autenticação e ACLs apartir do grupos do Active Diretory

No ambiente corporativo o uso de Internet necessita de um amplo monitoramento, afinal se colocarmos um Proxy com acesso livre, não vamos poder verificar quem está acessando determinado site. Neste artigo vamos configurar o Squid com autenticação feita na base de dados LDAP e a criação de grupos de acesso no próprio Active Directory.

[ Hits: 42.240 ]

Por: yros aguiar em 30/06/2011


Configurações e Conclusão



Criando o arquivo de configuração do Squid

Após feita a instalação crie o arquivo squid.conf, dentro do diretório onde o squid foi instalado, não vamos utilizar o arquivo default pois o mesmo é muito extenso e tem muitas configurações que não utilizaremos, vamos criar um arquivo a partir do zero.

squid.conf

#inicio squid.conf

shutdown_lifetime 5 seconds
icp_port 0

#IP e Porta de conexão ao Proxy
http_port 172.16.1.1:8080

acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY

# Usuário e grupo do squid
cache_effective_user squid
cache_effective_group squid
strip_query_terms on

# Arquivo de pid/execução.
pid_filename /var/run/squid.pid

# Arquivos de Log
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
log_mime_hdrs off
forwarded_for off


#Acls Padroes

acl manager proto cache_object
acl webserver src 172.16.16.1/255.255.255.255
acl localhost src 127.0.0.1/255.255.255.255
acl all src 0.0.0.0/0.0.0.0
acl SSL_ports port 443 563
acl Safe_ports port 53 587 465 993 21
acl CONNECT method CONNECT

http_access allow manager webserver
http_access deny manager


# Acessos Padrao
http_access allow localhost
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports


# Sites com acesso livre sem passar por filtro de URL e autenticação
acl Sites_Livres dstdomain "/etc/squid/extras/sites_livres"
http_access allow Sites_Livres

# Sites que nao cacheam
acl semcache dstdomain "/etc/squid/extras/semcache"
no_cache allow semcache

# Sites de atualização do windows, sem regras
acl Windows_Update dstdomain "/etc/squid/extras/windowsupdate"
http_access allow Windows_Update

# Permite guardar no cache arquivos de atualização
refresh_pattern windowsupdate.com/.*\.(cab|exe|dll|msi) 10080 100% 43200 reload-into-ims
refresh_pattern download.microsoft.com/.*\.(cab|exe|dll|msi) 10080 100% 43200 reload-into-ims
refresh_pattern www.microsoft.com/.*\.(cab|exe|dll|msi) 10080 100% 43200 reload-into-ims
refresh_pattern au.download.windowsupdate.com/.*\.(cab|exe|dll|msi) 4320 100% 43200 reload-into-ims


# Libera o Acesso a Internet aos Servidores sem autenticação
acl servers_noauth src "/etc/squid/extras/server_noauth"
http_access allow servers_noauth


# Autenticação do Squid na Base LDAP/AD

# Programa de autenticação é o squid_ldap_auth, neste exemplo utilizando CentOS 5.5 ele fica no diretório /usr/lib64/squid/, procure-o na sua distro.
auth_param basic program /usr/lib64/squid/squid_ldap_auth -R -b "dc=nomedosubdominio,dc=dominio" -D "CN=usuariodepesquisaldap,OU=Unidadeorganizancionaldousuario,DC=nomedodominio,DC=dominio" -w "senha" -f sAMAccountName=%s -h 172.16.1.1

# essa é a parte mais complicada na configuração: para sabermos corretamente os parâmetros de dc, ou, temos que criar o usuário que sera utilizado para pesquisa na base LDAP, e depois de criado o usuário executar
#o seguinte comando no cmd: "dsquery -user nomedousuario" ele irá retornar a linha com os parametros corretos de OU, DC, CN, com isto em mãos configure os parametros acima.
# o ip 172.16.1.1 refere-se ao IP servidor AD, na qual será feita a autenticação LDAP.

# configuração do pop-up de login no squid
auth_param basic children 5
auth_param basic realm Digite seu Login e Senha para o Acesso Internet
auth_param basic credentialsttl 20 minutes

#Solicitação de autenticacao do proxy
acl Usuarios_do_Dominio proxy_auth REQUIRED


#Criação de ACL externa para montagem dos níveis de acesso em cima de grupos do active directory

#ACL externa para Autenticacao nas bases LDAP do PDC, a linha abaixo pesquisa se o usuário pertence a determinado grupo no domínio, e cria a acl de nome internet utilizando o programa squid_ldap_group

external_acl_type internet %LOGIN /usr/lib64/squid/squid_ldap_group -R -b "dc=nomedosubdominio,dc=dominio" -D "CN=usuariodepesquisaldap,OU=Unidadeorganizacionaldousuario,DC=apscoordenacao,DC=local" -w "hsm123" -f "(&(objectclass=person)(sAMAccountName=%v)(memberof=cn=%a,OU=unidadeoriganizacional,DC=nomedosubdomino,DC=dominio))" -h 172.16.1.1

# utiliza a Acl internet criada acima e verifica se o usuário que fez autenticação pertence ao grupo do domínio especificado, no caso: Grupo_Internet_Nivel1

acl Nivel1 external internet Grupo_Internet_Nivel1 src 172.16.1.0/24

# utiliza a Acl internet criada acima e verifica se o usuário que fez autenticação pertence ao grupo do domínio especificado, no caso: Grupo_Internet_Nivel2
acl Nivel2 external internet Grupo_Internet_Nivel2 src 172.16.1.0/24

# utiliza a Acl internet criada acima e verifica se o usuário que fez autenticação pertence a ao grupo do domínio especificado, no caso: Grupo_Internet_Nivel3
acl Nivel3 external internet Grupo_Internet_Nivel3 src 172.16.1.0/24

#Bloqueia sites porno
acl Porno dstdomain "/etc/squid/extras/porno"
http_access deny Porno

#bloqueios do nivel1

acl Palavras_Bloqueadas_Nivel1 url_regex -i "/etc/squid/extras/palavras_bloqueadas_nivel1"

acl Bloqueio_Nivel1 dstdomain "/etc/squid/extras/bloqueio_nivel1"
http_access deny Palavras_Bloqueadas_Nivel1

http_access deny Bloqueio_Nivel1

http_access allow Nivel1

# bloqueios do nivel2
acl streaming rep_mime_type ^video/x-ms-asf

#Regra para bloqueio de extensão de rádios online / arquivos de streaming:
acl proibir_musica urlpath_regex -i \.aif$ \.aifc$ \.flv$ \.asf$ \.aiff$ \.asf$ \.rmvb$ \.asx$ \.avi$ \.au$ \.m3u$ \.med$ \.mp3$ \.m1v$ \.mp2$ \.mp2v$ \.mpa$ \.mov$ \.mpe$ \.mpg$ \.mpeg$ \.ogg$ \.pls$ \.ram$ \.ra$ \.ram$ \.snd$ \.wma$ \.wmv$ \.wvx$ \.mid$ \.midi$ \.rmi$ \.flv$
http_reply_access deny streaming

acl Palavras_Bloqueadas_Nivel2 url_regex -i "/etc/squid/extras/palavras_bloqueadas_nivel2"
http_access deny proibir_musica

acl Bloqueio_Nivel2 dstdomain "/etc/squid/extras/bloqueio_nivel2"
http_access deny Palavras_Bloqueadas_Nivel2

# Bloqueia downloads
acl Downloads url_regex -i .exe$ .mp3$ .iso$ .zip$ .msi$ .mjpg$ .mpeg$ .mp4$ .ram$ .avi$ .wav$ .tar.gz$ .gz$ .bz2$ .arj$ .rar$ .rpm$ .wma$ .flv$ .mov$ .ra$ .rax$ .rm$ .rmm$ .m3u$ .smi$ .smil$ .aif$ .au$ .qt$ .mpg$ .rmvb$ .rmv$ .rm$ .mp2$ .mpa$ .vob$ .scr$ .cpl$

http_access deny Bloqueio_Nivel2

http_access allow Nivel2

#Bloqueios do nivel3

# Downloads bloqueados

acl Palavras_Bloqueadas_Nivel3 url_regex -i "/etc/squid/extras/palavras_bloqueadas_nivel3"

http_access deny Downloads


acl Bloqueio_Nivel3 dstdomain "/etc/squid/extras/bloqueio_nivel3"

http_access deny Palavras_Bloqueadas_Nivel3


http_access deny Bloqueio_Nivel3

http_access allow Nivel3

# Bloqueia os usuários não autenticados
http_access deny all


# Parâmetros de ajuste fino
emulate_httpd_log off
maximum_object_size 4096 KB
minimum_object_size 0 KB
cache_mem 2000 KB
cache_dir ufs /var/spool/squid 100 16 256
#httpd_accel_host virtual
#httpd_accel_port 80
#httpd_accel_with_proxy on
#httpd_accel_uses_host_header on
visible_hostname nome-do-proxy
unique_hostname nome-do-proxy
authenticate_ip_ttl 5 hour
error_directory /usr/share/squid/errors/Portuguese


# FIm do arquivo squid.conf

Não esqueça de criar os arquivos referente as ACLs, que fica dentro do diretório extras no diretório do squid:

Arquivos: porno, bloqueio_nivel1, bloqueio_nivel2, bloqueio_nivel3, palavras_bloqueadas_nivel1, palavras_bloqueadas_nivel2, palavras_bloqueadas_nivel3, sites_livres, semcache, windowsupdate, server_noauth

Os diretórios de logs, e permissões nos arquivos:

# adduser squid -g squid
# chown -R squid.squid /var/log/squid/
# chown -R squid.squid /etc/squid/extras/

Criando o diretório de cache:

# squid -z

Iniciando serviço:

# service squid start

Conclusão

Agora você pode determinar o nível de acesso do usuário de internet, somente colocando ou retirando ele do grupo do AD, na qual a internet foi liberada.

Espero que tenha conseguido ajudar a vocês, quaisquer dúvidas ou comentários sobre o artigo, estarei disposto a ajudar.

Boa sorte a todos!
Página anterior    

Páginas do artigo
   1. Instalação do Squid
   2. Configurações e Conclusão
Outros artigos deste autor

Controle de banda com Slackware 10 + CBQ + Iptables + DHCP

Introdução ao DevOps - Infraestrutura como código

Como gerenciar cotas de disco

Elaborando uma política de segurança para a empresa

Leitura recomendada

Fazendo hierarquia proxy/Squid

Tutorial de instalação do Squid no CentOS

Proxy com autenticação em servidores Samba ou Windows NT

Autenticando usuários do Squid em um banco de dados MySQL

Configurar servidor proxy Squid (Ubuntu)

  
Comentários
[1] Comentário enviado por djcelsodub em 30/06/2011 - 13:41h

Show de bola cara...
já utilizo o squid com esta configuração há algum tempo e funciona redondo.

excelente contribuição.

abs


Celso Faria
Americana/SP

[2] Comentário enviado por diogoborges em 18/10/2011 - 09:40h

Gostaria de uma ajuda de vocês pois consigo autenticar via LDAP no AD, mas minha intenção e fazer controle por grupo do AD. o link pra do fórum eh:
http://www.vivaolinux.com.br/topico/Debian/squid-autenticado-com-LDAP-por-grupo-no-AD

[3] Comentário enviado por bdelmedico em 07/12/2011 - 14:35h

Caros, estou tendo um problema chato no squid. ele esta autenticando tudo normal. porem qualquer alteraçao nos grupos do AD ele nao reconhece. dai eu tenho que dar o squid -k reconfigure

[4] Comentário enviado por awmoreira em 28/03/2012 - 13:35h

Caro yros,

Essa linha é necessária???
acl webserver src 172.16.16.1/255.255.255.255

Grato.

[5] Comentário enviado por yros em 28/03/2012 - 13:51h

acredito que sim, pois será a interface que o serviço está sendo escutado

[6] Comentário enviado por mou_338 em 19/03/2014 - 16:20h

Yros
Copie todo seu squid.conf alterando os dados necessarios mais ele pede autenticação e ai vai..Mas se tento restartar o servico ele da erro na acl de acl Nivel1 external internet Grupo_Internet_Nivel1 src 172.16.1.0/24

Segue o meu abaixo da uma olhada..

#inicio squid.conf

shutdown_lifetime 5 seconds
icp_port 0

#IP e Porta de conexãao Proxy
http_port 10.3.156.96:3128

acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY

# Usuáo e grupo do squid
cache_effective_user squid
cache_effective_group squid
strip_query_terms on

# Arquivo de pid/execuç.
pid_filename /var/run/squid.pid

# Arquivos de Log
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
log_mime_hdrs off
forwarded_for off


#Acls Padroes

acl manager proto cache_object
acl webserver src 10.3.156.190
acl localhost src 127.0.0.1
acl SSL_ports port 443 563
acl Safe_ports port 21 53 465 587 993
acl CONNECT method CONNECT
acl servers_noauth src "/etc/squid/extras/server_noauth"
acl Nivel1 external internet Internet_Nivel1 src 10.3.156.190:389


# Acessos Padrao


# Sites com acesso livre sem passar por filtro de URL e autenticaç
#acl Sites_Livres dstdomain "/etc/squid/extras/sites_livres"
#http_access allow Sites_Livres

# Sites que nao cacheam
#acl semcache dstdomain "/etc/squid/extras/semcache"
#no_cache allow semcache

# Sites de atualizaç do windows, sem regras
#acl Windows_Update dstdomain "/etc/squid/extras/windowsupdate"
#http_access allow Windows_Update

# Permite guardar no cache arquivos de atualizaç
refresh_pattern windowsupdate.com/.*\.(cab|exe|dll|msi) 10080 100% 43200 reload-into-ims
refresh_pattern download.microsoft.com/.*\.(cab|exe|dll|msi) 10080 100% 43200 reload-into-ims
refresh_pattern www.microsoft.com/.*\.(cab|exe|dll|msi) 10080 100% 43200 reload-into-ims
refresh_pattern au.download.windowsupdate.com/.*\.(cab|exe|dll|msi) 4320 100% 43200 reload-into-ims


# Libera o Acesso a Internet aos Servidores sem autenticaç
acl ldap-auth proxy_auth REQUIRED


# Autenticaç do Squid na Base LDAP/AD

# Programa de autenticaç é squid_ldap_auth, neste exemplo utilizando CentOS 5.5 ele fica no diretó /usr/lib64/squid/, procure-o na sua distro.
#auth_param basic program /usr/lib64/squid/squid_ldap_auth -R -b "dc=teste,dc=com" -D "CN=squid,OU=Proxy,DC=teste,DC=com" -w "[email protected]" -f sAMAccountName=%s -h 10.3.156.190

#auth_param basic program /usr/lib64/squid/squid_ldap_auth -R -b dc=teste,dc=com -f sAMAccouNtName=%s -h 10.3.156.190:389 -D cn=squid,cn-users,dc=teste,dc=com -w [email protected]

auth_param basic program /usr/lib64/squid/squid_ldap_auth -R -b dc=teste,dc=com -f sAMAccountName=%s -h 10.3.156.190:389 -D cn=Administrador,cn=Users,dc=teste,dc=com -w sserra#901

# essa é parte mais complicada na configuraç: para sabermos corretamente os parâtros de dc, ou, temos que criar o usuáo que sera utilizado para pesquisa na base LDAP, e depois de criado o usuáo executar
#o seguinte comando no cmd: "dsquery -user nomedousuario" ele iráetornar a linha com os parametros corretos de OU, DC, CN, com isto em mã configure os parametros acima.
# o ip 172.16.1.1 refere-se ao IP servidor AD, na qual seráeita a autenticaç LDAP.

# configuraç do pop-up de login no squid
auth_param basic children 5
auth_param basic realm Digite seu Login e Senha para Acesso a Internet
auth_param basic credentialsttl 20 minute

#Solicitaç de autenticacao do proxy
acl Nivel2 external internet Internet_Nivel2 src 10.3.156.190:389


#Criaç de ACL externa para montagem dos níis de acesso em cima de grupos do active directory

#ACL externa para Autenticacao nas bases LDAP do PDC, a linha abaixo pesquisa se o usuáo pertence a determinado grupo no domío, e cria a acl de nome internet utilizando o programa squid_ldap_group

external_acl_type internet %LOGIN /usr/lib64/squid/squid_ldap_group -R -b "dc=teste,dc=com" -D "CN=Administrador,CN=Users,DC=teste,DC=com" -w "sserra#901" -f "(&(objectclass=person)(sAMAccountName=%v)(memberof=cn=%a
,CN=UserS,DC=teste,DC=com))" -h 10.3.156.190:389"

# utiliza a Acl internet criada acima e verifica se o usuáo que fez autenticaç pertence ao grupo do domío especificado, no caso: Grupo_Internet_Nivel1

acl Nivel3 external internet Internet_Nivel3 src 10.3.156.190:389

# utiliza a Acl internet criada acima e verifica se o usuáo que fez autenticaç pertence ao grupo do domío especificado, no caso: Grupo_Internet_Nivel2
acl Porno dstdomain "/etc/squid/extras/porno"

# utiliza a Acl internet criada acima e verifica se o usuáo que fez autenticaç pertence a ao grupo do domío especificado, no caso: Grupo_Internet_Nivel3
acl Palavras_Bloqueadas_Nivel1 url_regex -i "/etc/squid/extras/palavras_bloqueadas_nivel1"

#Bloqueia sites porno
acl Bloqueio_Nivel1 dstdomain "/etc/squid/extras/bloqueio_nivel1"

#bloqueios do nivel1

acl streaming rep_mime_type ^video/x-ms-asf

acl proibir_musica urlpath_regex -i \.aif$ \.aifc$ \.flv$ \.asf$ \.aiff$ \.asf$ \.rmvb$ \.asx$ \.avi$ \.au$ \.m3u$ \.med$ \.mp3$ \.m1v$ \.mp2$ \.mp2v$ \.mpa$ \.mov$ \.mpe$ \.mpg$ \.mpeg$ \.ogg$ \.pls$ \.ram$ \.ra$ \
.ram$ \.snd$ \.wma$ \.wmv$ \.wvx$ \.mid$ \.midi$ \.rmi$ \.flv$



# bloqueios do nivel2
acl Palavras_Bloqueadas_Nivel2 url_regex -i "/etc/squid/extras/palavras_bloqueadas_nivel2"

#Regra para bloqueio de extensãde ráos online / arquivos de streaming:
acl Bloqueio_Nivel2 dstdomain "/etc/squid/extras/bloqueio_nivel2"
http_reply_access deny streaming

acl Downloads url_regex -i .exe$ .mp3$ .iso$ .zip$ .msi$ .mjpg$ .mpeg$ .mp4$ .ram$ .avi$ .wav$ .tar.gz$ .gz$ .bz2$ .arj$ .rar$ .rpm$ .wma$ .flv$ .mov$ .ra$ .rax$ .rm$ .rmm$ .m3u$ .smi$ .smil$ .aif$ .au$ .qt$ .mpg$ .
rmvb$ .rmv$ .rm$ .mp2$ .mpa$ .vob$ .scr$ .cpl$

acl Palavras_Bloqueadas_Nivel3 url_regex -i "/etc/squid/extras/palavras_bloqueadas_nivel3"

# Bloqueia downloads
acl Bloqueio_Nivel3 dstdomain "/etc/squid/extras/bloqueio_nivel3"



#Bloqueios do nivel3

# Downloads bloqueados

acl all src 0.0.0.0/0.0.0.0



http_access deny CONNECT !SSL_ports
http_access allow servers_noauth
http_access allow localhost
http_access deny Palavras_Bloqueadas_Nivel1
http_access deny Bloqueio_Nivel1
http_access deny Palavras_Bloqueadas_Nivel2
http_access deny Bloqueio_Nivel2
http_access allow Nivel2
http_access deny Palavras_Bloqueadas_Nivel3
http_access allow Bloqueio_Nivel3
http_access allow Nivel3
http_access deny Porno
http_access allow all all
http_access allow Nivel1





# Bloqueia os usuáos nãautenticados

# Parâtros de ajuste fino
emulate_httpd_log off
maximum_object_size 4096 KB
minimum_object_size 0 KB
cache_mem 2000 KB
cache_dir ufs /var/spool/squid 100 16 256
#httpd_accel_host virtual
#httpd_accel_port 80
#httpd_accel_with_proxy on
#httpd_accel_uses_host_header on
visible_hostname testeproxy
unique_hostname testeproxy
authenticate_ip_ttl 5 hour
#error_directory /usr/share/squid/errors/Portuguese


# FIm do arquivo squid.conf


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts