Squid (squid.conf)

Proxy com restrições por máquinas e por usuários em hierarquia

Categoria: Segurança

Software: Squid

[ Hits: 14.907 ]

Por: Edson G. de Lima


Este arquivo mostra como fazer um controle de acesso por usuários e por máquinas. Sendo que o controle de acesso por usuários é feito de maneira hierárquica e com obrigatoriedade de autenticação para todos os usuários, sem excessão!


As partes mais importantes do arquivo estão comentadas para facilitar a implementação, ou para se fazer modificações para adequação a outras necessidades.



A proposta é utilizar um Sistema de Autenticação que aproveite a relação de usuários cadastrados em um PDC/BDC. Estabelecendo quatro níveis de hierarquia:


  • Usuário administrador;

  • Grupo de usuários com liberdade de acesso de qualquer máquina e restrições "leves";

  • Grupo de usuários com restrições de máquinas e de sites;

  • Usuários do Domínio que não terão acesso à internet.


Ideal para empresas, onde haja necessidade de um controle de acesso tanto por máquinas quanto por usuários.


#   CONFIGURAÇOES BÁSICAS do arquivo squid.conf:
#  -------------------------------------------------------------------

#   A porta de escuta padrão é 3128

http_port 3328

#   As 02 linhas abaixo pertencem ao Squid e podem ser utilizadas 
#para se colocar urls que não farão cache:
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY

icp_port 0

htcp_port 0

snmp_port 0

cache_mem 180 MB

cache_swap_low 90

cache_swap_high 95

maximum_object_size 8000 KB

minimum_object_size 0 KB

maximum_object_size_in_memory 4000 KB

cache_dir ufs /var/cache/squid 400 32 128

cache_access_log /var/log/squid/access.log

cache_log /var/log/squid/cache.log

cache_store_log /var/log/squid/store.log

cache_swap_log /var/log/squid/swap.log

debug_options ALL,2


#   SQUID COM AUTENTICAÇÃO DE USUÁRIOS:
#  ---------------------------------------------------------------

#   Por  padrão, o Squid não trabalha com autenticação, por isto é 
#necessário um serviço externo. 
#   Para que o recurso de autenticação funcione é necessário que: 

# 1- Haja (no mínimo) uma acl e uma regra que façam menção à 
#autenticação; 

# 2- Se for utilizado um serviço de autenticação externo como o 
#"smb_auth" para aproveitar uma relação de usuários_senha em 
#um PDC/BDC, com o SAMBA ou o Windows NT/2000 será #necessário ainda: 

# a- Instalar o "samba-clients" na máquina que está rodando o Squid. 
#(apt-get install samba-clients). Se for instalado somente o Samba, 
#o módulo samba-clients não será instalado. 

# b- Apontar a tag "auth_param basic program" para o local (diretório)
#onde está o arquivo "smb_auth" seguido dos parâmetros:
# -W DOMÍNIO_DO_PDC -U IP_DO-PDC 

# c- No PDC, deverá ser feito o seguinte: 
# c1 - Criar um arquivo texto com a palavra "allow". (SEM AS #ASPAS!!!); 

# c2 - Salvar com o nome de "proxyauth". (SEM AS ASPAS!!!) na pasta
# "netlogon"; 

# c3 - Verificar se o arquivo foi salvo com alguma extensão. Em caso 
#afirmativo, remova a extensão de tipo de arquivo renomear); 

# c4 - Compartilhar a pasta ?netlogon? em modo leitura com todos os 
#usuários do domínio. 

# Parâmetro para autenticação de usuários. 
# Alterar o caminho abaixo conforme sua Distro:

auth_param basic program /usr/lib/squid/smb_auth -W DOMINIO -U 10.x.x.x 
# Sendo: Domínio=seu domínio e 10.x.x.x=IP do seu PDC/AD. 

#   As 03 linhas abaixo pertencem ao Squid: 
auth_param basic children 5 
auth_param basic realm Existe um controle dos acessos ! 
auth_param basic credentialsttl 2 hours 

# Na linha: "auth_param basic realm" insere-se o texto que irá 
#aparecer na caixa de autenticação. 
# Se a versão do seu Squid for inferior a 2.5, será autenticate 
#program, mas a política é a mesma. 

request_body_max_size 4000 KB 

#   As 03 linhas abaixo pertencem ao Squid: 
refresh_pattern ^ftp:      1440   20%   10080 
refresh_pattern ^gopher:   1440   0%   1440 
refresh_pattern .      0   20%   4320 

#    ******************************************** 

#         LISTAS DE CONTROLE DE ACESSO (ACL) 
#      ------------------------------------------------------------- 
# Sem dúvida, esta é uma das Seções mais importantes do Squid, tanto 
#ao que se refere a "controle" quanto também "performance". 
# Sempre que se usar uma ACL, deve-se também usar uma REGRA DE ACESSO 
#(http_access) correspondente. 

# Quando se está usando um arquivo (em forma de lista) para #buscar dados, estes dados deverão estar "um em cada linha". 
#(EX: lista de usuários). 

# Expressões regulares (regex) são "case-sensitive", para torná-las 
#"case-INsensitive", deve-se utilizar a opção -i . 

# O padrão para uma ACL é: 
#   acl | NOME_DA_ACL | TIPO_DA_ACL |  AÇÃO/CONDIÇÃO 

# O NOME_DA_ACL é o que deverá aparecer na REGRA de ACESSO 
#(http_access), onde será especificado que tratamento deverá ser dado 
#àquela acl (deny ou allow); isto é, negar ou permitir. 


#   REGRAS DE ACESSO (http_access) 
#  ----------------------------------------------- 

# A ordem das acls não faz diferença, porém a ordem das regras 
#é fundamental para o controle adequado. Podemos resumir do seguinte 
#modo: na acl você diz "o que" deseja controlar e, na regra, você diz 
#"como" irá controlar. 

# Deve-se tomar o cuidado para não liberar uma acl antes de uma 
#negação desejada e vice-versa. 
### Exemplo: 
#   acl SITES_RESTRITOS url_regex  "/dir/ListaSitesRestritos" 
#   acl GERENCIA proxy_auth "/dir/ListaGerentes" 
#   acl USUARIOS proxy_auth "/dir/ListaUsuários" 
#   http_access allow GERENCIA 
#   http_access deny SITES_RESTRITOS 
#   http_access allow USUARIOS 
### No exemplo acima, os gerentes poderão acessar os sites restritos 
#e os demais usuários Não! 

# Existe a recomendação de se "fechar" tudo no final: 
#(http_access deny all). 

#   REPETINDO: A ordem das REGRAS é MUITO importante! 

# Um recurso muito importante para a combinação de DUAS ACLs e UMA 
#REGRA é o uso do caracter ! (isto mesmo, ponto de exclamação). 

# Sua utilização é feita do seguinte modo: 
# http_access deny/allow NOME_ACL_1 !NOME_ACL_2 
#(A acl depois do ponto de exclamação não é precedida de espaço). 

#   O caracter "ponto de exclamação" significa sempre a "excessão" 
#para alguma regra, significa também, "o que não for". Significa 
#que a acl mencionada depois do ponto de exclamação terá um tratamento 
#oposto ao que se está determinando para a primeira acl (dentro da 
#regra "http_access"). 

#   Poderia ser interpretado da seguinte forma: DENY/ALLOW acl_1 
#"com excessão" da acl_2. Ou então: o que não for pertencente à 
#acl_2, terá o tratamento determinado para a acl1. 

### Exemplo de sua utilização: 
#   acl REDE_LOCAL 10.x.x.x/255.255.255.0 
#   ACL IPs_LIBERADOS src "/dir/ARQUIVO_COM_LISTA_IPs" 
#   http_access deny REDE_LOCAL !IPs_LIBERADOS 
### Neste exemplo estou negando para a rede local, com excessão dos 
#IPs listados para serem liberados. 


#   CONFIGURAÇÃO DAS ACLs E REGRAS DE ACESSO: 
#  -------------------------------------------------------------- 

# Como haverá autenticação por usuário, porém, nem todo usuário 
#cadastrado no PDC poderá "sair", a acl referente à "requisição de 
#autenticação" deverá vir antes das demais (por recomendação do 
#squid.conf.default) e, como estaremos autenticando os usuários 
#no PDC, então, deverá ter seu acesso negado no http_access. 

# Outro detalhe importante é que a regra correspondente a esta acl 
#deverá ficar depois da que corresponde à acl referente à liberação 
#dos usuarios que poderão sair. 

# Será exigida a autenticação para toda requisição:
acl autenticação proxy_auth REQUIRED 

# Melhor definição de sua rede:
acl rede_empresa src 10.x.x.x/255.255.255.0 

# As acl abaixo vêm descomentadas por padrão: 

acl all src 0.0.0.0/0.0.0.0             # abre para qualquer IP 
acl manager proto cache_object   # pertence ao próprio Squid 
acl localhost src 127.0.0.1/255.255.255.255 # abre p a máquinalocal 
acl to_localhost dst 127.0.0.0/8    # abre para a máquina local 
acl SSL_ports port 443 563       # ssl 
acl Safe_ports port 80             # http 
acl Safe_ports port 21             # ftp 
acl Safe_ports port 443 563       # https, snews 
acl Safe_ports port 70             # gopher 
acl Safe_ports port 210          # wais 
acl Safe_ports port 1025-65535     # portas altas 
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 CONNECT method CONNECT   # método de conexão (é padrão). 

#   LISTA DE ACESSO (ACLs) SUGERIDAS: 
acl atualização proxy_auth administrador 
acl IPs_liberados src "/etc/squid/IPs_liberados" 
acl master_users proxy_auth "/etc/squid/master_users" 
acl usuarios_internet proxy_auth "/etc/squid/usuarios_internet" 
acl sites_uteis url_regex "/etc/squid/sites_uteis" 
acl inutilidades url_regex "/etc/squid/inutilidades" 
acl mp3 url_regex -i.*\.mp3$ 
acl avi url_regex -i.*\.avi$ 
acl exe url_regex -i.*\.exe$ 

# As regras de acesso abaixo vêm descomentadas por padrão: 

http_access allow manager localhost 
http_access deny manager 
http_access deny !Safe_ports 
http_access deny CONNECT !SSL_ports 
http_access deny to_localhost 

#   REGRAS DE ACESSO REFERENTES ÀS ACLs SUGERIDAS: 
# A SEQÜÊNCIA DESTAS REGRAS É MUITO, MUITO IMPORTANTE!!! 
http_access allow administrador 
http_access allow sites_uteis 
http_access deny inutilidades 
http_access allow master_users 
http_access deny mp3 
http_access deny avi 
http_access deny exe 
http_access deny rede_empresa !IPs_liberados 
http_access allow usuarios_internet 
http_access deny autenticação 

# Caso se queira liberar para todos os IPs da Empresa, 
#descomentar a linha abaixo e comentar a acl e regra que faz 
#menção a IPs_liberados; 

###http_access allow rede_empresa 

#   Não esquecer de que, ao final, deve-se negar tudo que não tenha 
#sido explicitamente aberto. Isto será feito "negando" para a 
#ACL all (a primeira acl que foi criada, referindo-se a todo IP): 

http_access deny all

# ----------------------------------------
# Comentário sobre as regras acima:
# ----------------------------------------
# 1- O usuário administrador tem acesso de qualquer máquina e
#para qualquer site (é necessário existir no PDC);
# 2- Libera os sites listados no arquivo sites_uteis, normalmente, 
#sites que são necessários o acesso e que podem estar sendo
#barrados por palavras listadas no arquivo inutilidades;
# 3- Nega acesso às requisições que contenham em suas urls,
#palavras que estejam listadas no arquivo inutilidades;
# 4- Dentro das condições acima, saem os usuários relacionados
#no arquivo master_users, que poderão sair de qualquer máquina
#e com algumas restrições (normalmente a direção da empresa);
# 5- Nega-se acesso a sites de .mp3, .avi, .exe para quem vier 
#daqui por diante;
# 6- O adm e os gerentes já estão navegando, já podemos negar
#acesso para as máquinas, isto é, vamos liberar apenas para as #máquinas relacionadas no arquivo IPs_liberados;
# 7- Liberamos para os usuários listados no arquivo #usuarios_internet, que somente poderão sair de máquinas 
#previamente liberadas e, como todos os demais, após terem se
#autenticado;
#8- E, para finalizar, negamos a acl que trata da autenticação, deste
#modo, os usuários que só devem ter acesso ao Domínio da #Empresa e não devem ter permissão para sair para a internet #serão barrados. (As permissões estão sendo feitas nas acls/regras #acima!).
#9- Negamos para qualquer requisição que não atenda aos padrões
#estipulados pelas regras acima com http_access deny all .


#*********************************************

#   As 02 linhas abaixo pertencem ao Squid:
http_reply_access allow all
icp_access allow all

cache_mgr TI_Empresa@seu_domínio

cache_effective_user proxy (ou nobody)

cache_effective_group proxy (ou nobody)

visible_hostname proxy.empresa.intranet

error_directory /usr/share/squid/errors/Portuguese

# A linha abaixo pertence ao Squid:
coredump_dir /var/cache/squid

#   Como estamos utilizando o proxy com autenticação de usuários,
#NÃO adianta "forçar a barra" em querer usar proxy_transparente: 
httpd_accel_with_proxy off


### Edson G. de Lima
### Venha conhecer o Pantanal !
  


Comentários
[1] Comentário enviado por carolinesv em 23/11/2006 - 15:05h

Muito legal seu arquivo de configuração!!!

Consegui configurar aqui direitinho!!

Mas me diz uma coisa, é realmente necessário editar "manualmente" nos arquivos master_users e usuarios_internet quem tem e quem não tem acesso a internet? Vc faz assim ou tem algum meio de dizer isso ao criar o usuário no samba?
Tem como especificar isso por grupos?
E pq vc usa a porta 3328 ao invés da 3128?

Valeu.

Seu arquivo me ajudou muito e me esclareceu sobre várias dúvidas... tudo q eu achava na internet era incompleto ou não funcionava.


[2] Comentário enviado por lucianosilva em 16/02/2007 - 16:42h

Muito Legal seu arquivo, me ajudou a entender como funciona o tratamento das regras...

[3] Comentário enviado por vitoramadmartins em 18/12/2015 - 17:25h

ola! eu queria saber se o usuario logado ele pode logar em outro computador? eu to tentando como fazer pra o usuario nao consegui logar ao mesmo tempo em outro... nao fornecer a senha pros outros! se tiver ideia agradeco!

[4] Comentário enviado por Xxoin em 19/12/2015 - 01:47h

Vitor, boa noite. Não estou mais trabalhando com Squid e confesso que me encontro um tanto "enferrujado" no uso desta maravilhosa ferramenta. O que posso sugerir é você combinar a lista de usuários com uma lista de IPs ou MAC. Tenho uma ligeira lembrança da possibilidade de combinar duas regras em uma mesma ACL, daí você poderá associar determinados usuários às respectivas máquinas que usam e negar a saída caso não atenda a este padrão... Um forte abraço! E... Viva o Linux!!


Contribuir com comentário

  



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts