Squid Autenticando no Windows Server 2008 R2
Autor: Emerson  Ramos Almeida | Publicado: 2013-07-07T18:04:00-03:00








O Squid é um poderoso servidor proxy que
suporta conexões HTTP e HTTPS entre outros, ele reduz incrivelmente a
utilização de link e melhora o tempo de resposta fazendo cache das requisições
mais frequentes de páginas da internet em redes de computadores, entretanto
usar ele em ambientes de médio e grande porte torna-se um pouco complicado uma
vez que temos diversos usuários com politicas diferentes de acesso aos sites,
neste artigo demonstrarei como integrar o Squid ao Active Directory do Windows
2008 permitindo e liberando o acesso a sites por grupos de usuários.

Esse ambiente foi testado utilizando um
Windows 2008 R2 e um servidor Ubuntu 10.04 LTS com o Squid 2.7.

1. Primeiramente vamos preparar o ambiente
Windows, demonstrar como fazer em detalhes as configurações no AD não faz parte
do escopo do artigo mas no google diversos artigos demonstram como fazer.

Dentro de Active Directory Users and
Computers vamos primeiramente criar uma OU com o nome squid, criar dentro dela
o usuário squid e determinar uma senha forte para ele, criar também dois grupos
de usuários, INTERNET_LIBERADA e INTERNET_RESTRITA.

Essas configurações foram tudo o que precisam
ser feitas no Windows, daqui para diante será tudo no servidor Linux e Squid.

Para entendermos melhor a ideia e o porque do
que foi feito no AD veja:

O usuário squid será apenas para que o
servidor squid possa se autenticar no AD e ter acesso as contas de usuários e
grupos.

O grupo INTENRET_LIBERADA como sugerido pelo
próprio nome deverá conter os usuários que poderão ter acesso a internet, mais
adiante veremos ainda que para eles todos os sites serão liberados menos os que
estiverem classificados como sites proibidos dentro do server Squid.

O grupo INTERNET_RESTRITA deverá ter dentro
de si os usuários que terão todos os sites da internet bloqueados menos os
sites que estiverem liberados pelo administrador.

Obs.: A imaginação será o limite para as
regras que poderão ser criadas, mais grupos com finalidades diferentes poderão
ser incluídos de acordo com a necessidade de cada administrador.



2. Vamos instalar agora o Squid no servidor
Linux, para isso execute.

$ sudo apt-get install squid

3. Depois de instalado vamos configurar o
squid.conf que fica dentro de /etc/squid, vamos fazer uma cópia de segurança do
arquivo original do squid.conf

$ sudo cp squid.conf squid.conf.old

vamos então editar o arquivo squid.conf
alterando os parametros padrões e adicionando os novos deixando exatamente
assim:

##########################################################################

# SQUID 2.7 em Ubuntu 10.04LTS - Integrado
com Active Directory

#seudominio.local&nbsp;deverá ser substituído pelo seu
domínio válido exemplo empresa.br

#seuip&nbsp;deverá ser substituído pelo seu
endereço de IP do Controlador de domínio

#senha&nbsp;– Senha definida por você para o
usuário squid criado no AD.

##########################################################################

#Configurações de cache do Squid

#Cache de Ram

cache_mem 1024 MB # Determina o espaço da
memoria ram que será reservada para o cache.

maximum_object_size_in_memory 256 KB #
Determina o tamanho maximo que um unico objeto poderá ter para ficar no cache
ram.



#Cache em Disco

maximum_object_size 750 MB # Espaço do disco
destinado a ser usado como cache do squid

minimum_object_size 0
KB

cache_swap_low 90

cache_swap_high 95 # Limite máximo do cache
que ele pode chegar, depois disso começa a deletar cache mais antigo.



#Diretorio de armazenamento do Cache

cache_dir ufs /var/spool/squid 4096 16 256



#Linguagem de mensagem de erro do Squid

error_directory
/usr/share/squid/errors/Portuguese/



# Configuração da integração do Squid com o
AD

auth_param basic program
/usr/lib/squid/ldap_auth -R -b dc=seudominio,dc=local&nbsp;-f sAMAccountName=%s -hseuip&nbsp;-D cn=squid,ou=squid,dc=seudominio,dc=local&nbsp;-w&nbsp;senha



# Mensagem da popup que será aberta quando
algum site não estiver liberado, só irá aceitar as contas de usuário que forem
membro do grupo INTERNET_LIBERADA

auth_param basic children 5

auth_param basic realm Site nao liberado,
entre com usuario e senha.

auth_param basic credentialsttl 2 hour

auth_param basic casesensitive off



external_acl_type ldap_group %LOGIN
/usr/lib/squid/squid_ldap_group -R -b dc=seudominio,dc=local&nbsp;-D cn=squid,ou=squid,dc=seudominio,dc=local&nbsp;-w&nbsp;senha&nbsp;-f
(&amp;(objectclass=person)(sAMAccountName=%v)(memberof=cn=%a,ou=squid,dc=seudominio,dc=local)) -h&nbsp;seuip



#ACL Restringe acesso a Internet por Grupos
do AD

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

acl sites_proibidos dstdom_regex -i
/etc/squid/rules/sites_proibidos

acl sites_restritos dstdom_regex
/etc/squid/rules/sites_restritos



acl password proxy_auth REQUIRED



# Lista de IP's externos liberados

acl ips_liberados dst
/etc/squid/rules/ips_liberados



#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



# Configuracao das
regras de acesso

http_access deny
sites_proibidos

http_access deny
sites_restritos !proxyadmins

http_access allow ips_liberados
all

http_access allow sites_sem_autenticacao

http_access allow
proxyadmins

http_access allow
proxyusers

http_access allow
localhost



# 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



#Libera acesso para usuários convencionais

http_access allow proxyusers



# 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



# Por padrão Squid escuta pelas na porta 3128
para ele também escutar na porta 8080 foi adicionado nova httpport.

http_port 3128

http_port 8080





#We recommend you to
use at least the following line.

hierarchy_stoplist cgi-bin ?



#Arquivo de logs de acesso do Squid

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





#Suggested default:

refresh_pattern ^ftp:
40 20% 10080

refresh_pattern
^gopher: 40 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

#Fim da configuracao do squid.conf

Salve e saia do arquivo de configuração.





4. Vamos agora criar as listas de sites
proibidos, liberados e outros, em /etc/squid crie uma pasta chamada rules e
dentro dessa pasta os arquivos conforme abaixo.&nbsp;

$&nbsp;sudo mkdir /etc/squid/rules
$ sudo touch
/etc/squid/rules/sites_sem_autenticacao
$ sudo touch
/etc/squid/rules/sites_proibidos
$ sudo touch
/etc/squid/rules/sites_restritos
$ sudo touch
/etc/squid/rules/ips_liberados&nbsp;

Vamos entender oque cada arquivo de regras deverá fazer.



sites_sem_autenticacao - Todos os sites
contidos nesse documento estarão liberados por padrão para todo mundo, nele
poderá ser colocado por exemplo o endereço da intranet da empresa, site da
empresa e demais sites que podem ser acessados por qualquer um.



sites_proibidos – Todos os sites que não
serão acessados nem pelas pessoas que estarão no grupo INTERNET_LIBERADA sites
como sites de sexo, badalas e etc são sugestões.



ips_liberados – Todos os endereços Ips
válidos colocados aqui dentro serão liberados para todos da empresa sem
necessidade de autenticação, é similar a regra sites_sem autenticacao mas é
para endereços IP.

5. Vamos agora criar o cache para o Squid e reiniciar o serviço squid para que
as regras entrem em funcionamento.

$ sudo&nbsp;squid -z&nbsp;
$&nbsp;sudo service squid restart

6. Agora devemos colocar no bronser das estações o IP e porta do servidor
squid, isso pode ser feito manualmente ou via regra do próprio AD.



No internet explorer

Ferramentas-&gt;Opções da
Internet-&gt;Conexões-&gt;Configurações da LAN



No Firefox

Ferramentas-&gt;Opções-&gt;Avançado-&gt;Rede-&gt;Configurar
Conexão