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: 44.342 ]

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

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

Como gerenciar cotas de disco

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

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

Leitura recomendada

Limitando download com Squid

Squid - Entendendo um pouco as configurações

Squid avançado + OpenLDAP

Squid + Bridge + TProxy no CentOS 5.4

OpenBSD Proxy - Squid, SquidGuard, SquidClamAV e AdZapper

  
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 "sserra@001" -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 sserra@001

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

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts