(Ajuda) Squid + Autenticação [RESOLVIDO]

1. (Ajuda) Squid + Autenticação [RESOLVIDO]

Fernando de oliveira
mendesbr

(usa Ubuntu)

Enviado em 05/10/2014 - 01:10h

Ola pessoal.

Como o assunto do tópico diz, preciso de uma ajuda relacionada a autenticação no squid.
Fazem duas semanas que venho estudando na medida do possível o squid para elaborar uma configuração que utilize autenticação, junto a restrição de sites http e https.
Acredito que relacionado ao http e https eu já tive sucesso pois consigo bloquear os sites que desejo,

O meu objetivo é fazer controle de 3 grupos de usuários com restrições diferentes para da cada um deles.

Ja li muitos artigos aqui e em diversos locais que tratam especificamente de problemas similares, porém eu não consigo nenhuma solução que de fato funcione, mesmo seguindo a risca os artigos. Gostaria de sanar algumas dúvidas que tenho ao quais surgiram conforme fui pesquisando e lendo os artigos. Vou postar meu .conf para vocês confirirem.

http_port 3128
https_port 3129 ssl-bump dynamic_cert_mem_cache_size=4MB cert=/etc/squid3/certificados/key.crt key=/etc/squid3/certificados/key.key
visible_hostname servidorproxy

sslcrtd_program /usr/lib/squid3/ssl_crtd -s /var/lib/ssl_db -M 4MB
sslcrtd_children 15

always_direct allow all
ssl_bump allow all
sslproxy_cert_error allow all
sslproxy_capath /etc/squid3/ssl
sslproxy_flags DONT_VERIFY_PEER
#sslproxy_cert_error allow TrustedName

auth_param basic program /usr/bin/ncsa_auth /etc/squid3/auth_file
auth_param basic children 15
auth_param basic realm "Informe seu usuario e senha"
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off

cache_mem 64 MB
maximum_object_size_in_memory 64 KB
maximum_object_size 512 MB
minimum_object_size 0 KB
cache_swap_low 90
cache_swap_high 95
cache_dir ufs /var/spool/squid 2048 16 256
cache_access_log /var/log/squid/access.log
refresh_pattern ^ftp: 15 20% 2280
refresh_pattern ^gopher: 15 0% 2280
refresh_pattern . 15 20% 2280

acl all src all
acl manager proto cache_object
acl localhost src 192.168.0.101/32
acl SSL_ports port 443 563
acl Safe_ports port 21 80 443 563 70 210 280 488 59 777 901 1025-65535
acl purge method PURGE
acl CONNECT method CONNECT

acl autenticados proxy_auth REQUIRED

acl diretoria proxy_auth "/etc/squid3/grupos/diretoria"

acl recepcao proxy_auth "/etc/squid3/grupos/recepcao"

acl outros proxy_auth "/etc/squid3/grupos/outros"

acl sites_restritos dstdomain "/etc/squid3/acls/sites_bloqueados"
#http_access deny blocked-sites

acl sites_recepcao dstdomain "/etc/squid3/acls/sites_recepcao"

#acl bloqueados url_regex -i "/etc/squid3/acls/https_sites"
acl palavras_proibidas url_regex -i "/etc/squid3/acls/palavras_proibidas"

http_access allow diretoria
http_access allow outros !palavras_proibidas !sites_restritos
http_access deny recepcao !sites_recepcao

#http_access allow autenticados
#http_access deny blocked-sites

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

acl redelocal src 10.42.0.0/24
http_access allow localhost
http_access allow redelocal
http_access deny all


Essa minha configuração está funcionando. O navegador pede autenticação e a realizo com sucesso com os usuarios que cadastrei dentro do arquivo auth_file.
Porém não consigo realizar a restrição de conteúdo para os mesmos, seja de forma individual ou de grupos que é a minha real necessidade.

Sendo assim, minha duvida esta relacionada ao entendimento de como funciona a autenticação do ncsa_auth.

O que eu entendo é o seguinte:

 
#Aqui pelo que eu entendi informamos primeiro o caminho do programa usado na autenticação e depois o caminho cujo irá armazenar as senhas.
auth_param basic program /usr/bin/ncsa_auth /etc/squid3/auth_file


Ai vem minha pergunta: Como vou fazer para que eu tenha restrições diferentes para os usuários que salvei no arquivo auth_file?
Imagino que seja pelos grupos como no atigo que li de um membro aqui do VOL no link http://www.vivaolinux.com.br/artigo/Squid-+-Iptables-Combinacao-Infalivel/?pagina=4.

No artigo o autor define 3 grupos separados por diretórios que serviram de inspiração para os meus que constam ali no .conf (Diretoria, recepção e outros). Dentro de cada diretório ele cria um arquivo similar ao auth_conf, onde o mesmo realiza o cadastro de novos usuários que percentem a esse grupo. Minha dúvida é, se na minha configuração ali do .conf eu passo o arquivo para salvar as senhas como auth_file, como eu vou relacionar esse arquivo com os criados em cada diretório dos grupos?

Me deixando ainda mais confuso, o autor diz na pagina 3 que vamos utilizar o ncsa_auth mas na pagina seguinte, ele expoe da seguinte maneira a autenticação

auth_param basic program /usr/lib/squid3/msnt_auth 


Seguindo fielmente as configurações dele, simplesmente não funciona.

Uma outra página que encontrei relacionada ao meu problema é a seguinte: http://mundodacomputacaointegral.blogspot.com.br/2011/12/configurando-servidor-proxy-autenticado.htm....

Nesse artigo o autor expõe a configuração (auth_param basic program) como a que consta na minha, informando o programa de autenticação e o arquivo que armazena as credenciais, como mostrado no .conf dele:

 
#autenticação dos usuários para acesso
auth_param basic program /usr/local/squid/libexec/ncsa_auth /usr/local/squid/etc/passwd
auth_param basic children 5
auth_param basic realm COMPUTAÇÃO INTEGRAL
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
acl autenticados proxy_auth REQUIRED
http_port 3128
visible_hostname mundodacomputacao

cache_mem 128 MB
maximum_object_size 512 MB
minimum_object_size 0 KB
cache_swap_low 90
cache_swap_high 95
cache_dir ufs /var/spool/squid 2048 16 256
cache_access_log /usr/local/squid/var/logs/cache.log
refresh_pattern ^ftp: 15 20% 2280
refresh_pattern ^gopher: 15 0% 2280
refresh_pattern . 15 20% 2280

acl manager proto cache_object
acl localhost src 127.0.0.1
acl autenticados proxy_auth REQUIRED
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 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 901 #swat
acl Safe_ports port 1025-65535 #portas altas
acl purge method PURGE
acl CONNECT method CONNECT
acl SSL_ports port 443 563

##ACLS
#criando ACLs para os usuários com acesso livre e restrito
acl grupo_liberado proxy_auth "/usr/local/squid/usuarios_liberados"
acl grupo_limitado proxy_auth "/usr/local/squid/usuarios_limitados"

#criando ACLs para restrição de sites e palavras
acl sitesbloqueados url_regex -i "/usr/local/squid/dominiosbloqueados"
acl palavrasproibidas url_regex -i "/usr/local/squid/palavrasproibidas"
acl sitespermitidos url_regex -i "/usr/local/squid/dominiospermitidos"

#ACL para bloquear skype
acl acl_url_im_skype url_regex ^((0|1[0-9]{0,2}|2[0-9]{0,1}|2[0-4][0-9]|25[0-5]|[3-9][0-9]{0,1})\.){3}(0|1[0-9]{0,2}|2[0-9]{0,1}|2[0-4][0-9]|25[0-5][3-9][0-9]{0,1})(:|/|$\?)

#controle de acesso
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 deny sitesbloqueados !grupo_liberado
#http_access deny palavrasproibidas !grupo_liberado
#http_access deny CONNECT acl_url_im_skype !grupo_liberado
http_access allow sitespermitidos

http_access allow localhost
http_access allow autenticados grupo_liberado
http_access allow autenticados grupo_limitado !sitesbloqueados !palavrasproibidas !acl_url_im_skype

http_access deny all
error_directory /usr/local/squid/share/errors/pt-br


Porém o mesmo no decorrer da página cria dois grupos com arquivos de credenciais diferentes daquele informado no .conf, como mostrado a baixo:


Cadastrando usuários no proxy squid
#htpasswd -c /usr/local/squid/etc/passwd usuario1
Nota: O argumento -c é necessário apenas na primeira vez para criar o arquivo /usr/local/squid/etc/passwd.
#htpasswd /usr/local/squid/etc/passwd usuario2

Adicione os usuários com acesso livre no arquivo /usr/local/squid/usuarios_liberados
/usr/local/squid/usuarios_liberados
sysadmin
suportesystem

Adicione os usuários com acesso restrito no arquivo /usr/local/squid/usuarios_limitados
/usr/local/squid/usuarios_limitados
#Exemplo
usuario1
usuario3
usuario6


Onde no .conf dele, ele define as seguintes regras:



##ACLS
#criando ACLs para os usuários com acesso livre e restrito
acl grupo_liberado proxy_auth "/usr/local/squid/usuarios_liberados"
acl grupo_limitado proxy_auth "/usr/local/squid/usuarios_limitados"

#criando ACLs para restrição de sites e palavras
acl sitesbloqueados url_regex -i "/usr/local/squid/dominiosbloqueados"
acl palavrasproibidas url_regex -i "/usr/local/squid/palavrasproibidas"
acl sitespermitidos url_regex -i "/usr/local/squid/dominiospermitidos"

#ACL para bloquear skype
acl acl_url_im_skype url_regex ^((0|1[0-9]{0,2}|2[0-9]{0,1}|2[0-4][0-9]|25[0-5]|[3-9][0-9]{0,1})\.){3}(0|1[0-9]{0,2}|2[0-9]{0,1}|2[0-4][0-9]|25[0-5][3-9][0-9]{0,1})(:|/|$\?)

#controle de acesso
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 deny sitesbloqueados !grupo_liberado
#http_access deny palavrasproibidas !grupo_liberado
#http_access deny CONNECT acl_url_im_skype !grupo_liberado
http_access allow sitespermitidos

http_access allow localhost
http_access allow autenticados grupo_liberado
http_access allow autenticados grupo_limitado !sitesbloqueados !palavrasproibidas !acl_url_im_skype

http_access deny all
error_directory /usr/local/squid/share/errors/pt-br


Deste modo, novamente não entendo como fica a relação do arquivo passwd que ele informou com os criados depois dentro do diretorio dos grupos.
Segui fielmente esse exemplo e também não obtive sucesso.

Como ficou claro, está me faltando conhecimento relacionado a essa parte sendo que ja li bastante mas não encontro nada.. deste modo peço a ajuda de vocês para mim conseguir chegar a uma solução se possível.

Obrigado!




  


2. Re: (Ajuda) Squid + Autenticação [RESOLVIDO]

Buckminster
Buckminster

(usa Debian)

Enviado em 05/10/2014 - 06:30h

Veja bem, não confunda a autenticação com as liberações e os bloqueios.

O arquivo de senhas e usuários para autenticação no Squid pode ser um só, é recomendável até.,

Os grupos depois tu define através das ACLs. Dentro dos arquivos dos grupos, por exemplo,

acl diretoria proxy_auth "/etc/squid3/grupos/diretoria"

dentro do arquivo 'diretoria' tu irá colocar os usuários que irão fazer parte do grupo 'diretoria', no grupo 'recepção' a mesma coisa. Só tome o cuidado de não repetir usuários em dois grupos, ou seja, um mesmo usuário não pode estar em dois ou mais grupos.

Feita essa definição, o Squid depois se 'acha' sozinho com o arquivo de senhas e com os arquivos dos grupos.

Importante: dentro de qualquer arquivo que tu definir no Squid, por exemplo, o arquivo de um grupo, tu deve colocar um usuário por linha, a mesma coisa nos arquivos de sites liberados/bloqueados, um por linha dando enter após cada linha:

.google.com
.google.com.br
www.boafoda.com
meusite.com

O que tu deve tomar cuidado também é com a ordem de colocação das regras, por exemplo:

http_access allow diretoria
http_access allow outros !palavras_proibidas !sites_restritos
http_access deny recepcao !sites_recepção

Na primeira linha tu está liberando geral para a diretoria.
Na segunda linha tu associou a ACL 'outros' com a negação de 'palavras_proibidas' e 'sites_proibidos'. Essa não é uma boa prática. O Squid costuma se perder quando se associa 3 ou mais ACLs na mesma linha.
A terceira linha não faz sentido nenhum. Acredito que tu inverteu as bolas. Tu pretendia liberar a ACL 'sites_recepcao' para os usuários do grupo 'recepcao'.

Faça assim e teste:

http_access allow diretoria
http_access allow outros !palavras proibidas
http_access allow outros !sites_restritos
http_access deny sites_recepcão !recepção

E pode comentar essas linhas:
#acl redelocal src 10.42.0.0/24
#http_access allow redelocal

Outra coisa, tenha cuidado com os parâmetros das ACLs, por exemplo, dstdomain << esse parâmetro significa que dentro do arquivo dessa ACL deve ter somente domínios (www.algumacoisa.com, algumacoisa.com, etc), um por linha.

url_regex >> significa que dentro do arquivo pode ter somente palavras, uma por linha; url_regex bloqueia por pedaços encontrados na URL, pedaço estes definidos dentro do arquivo, um por linha:

[*****]
orkut.com
.com.br << coloque uma linha assim dentro do arquivo e veja o que acontece.

Se tu colocar uma palavra dentro de uma ACL dstdomain ela não irá funcionar, esse tipo de acl aceita somente domínios, e assim por diante, cada ACL tem seu tipo definido de acordo com o que tu colocar: url_regex, dstdomain, etc.
O -i em url_regex -i torna a ACL "case insensitive", ou seja, ela não diferencia maiúsculas de minúsculas.
CHINA é igual à china, ChIna é igual à cHinA.

Essa ACL
acl localhost src 192.168.0.101/32
fazendo isso tu está definindo uma ACL padrão do Squid como ACL de rede local. Isso dá confusão.
A ACL localhost é padrão do Squid, já vem definida como 127.0.0.1.

Dependendo da versão do teu Squid, não precisa definir a ACL localhost.
Execute squid -v e veja qual a versão dele.

Aqui
cache_mem 64 MB
considere aumentar esse valor de 64 MB.
Quanto de memória RAM tu tem nesse servidor e quais os serviços instalados nele?

http://www.vivaolinux.com.br/artigo/Squid-Entendendo-um-pouco-as-configuracoes/

http://www.vivaolinux.com.br/artigo/Manual-traduzido-do-Squid/



3. Re: (Ajuda) Squid + Autenticação [RESOLVIDO]

Fernando de oliveira
mendesbr

(usa Ubuntu)

Enviado em 05/10/2014 - 14:21h

Oi buckminster, muito obrigado pela resposta, já me esclareceu algumas coisas e surgiu mais algumas dúvidas.

Vou ir por partes:

dentro do arquivo 'diretoria' tu irá colocar os usuários que irão fazer parte do grupo 'diretoria', no grupo 'recepção' a mesma coisa. Só tome o cuidado de não repetir usuários em dois grupos, ou seja, um mesmo usuário não pode estar em dois ou mais grupos.

Feita essa definição, o Squid depois se 'acha' sozinho com o arquivo de senhas e com os arquivos dos grupos.


Nesses arquivos aos quais eu já tenho definido, quando você diz que vou colocar os usuários que irão fazer parte do grupo 'diretoria', você se refere para eu colocar o usuário de modo manual, ou seja, escrever o nome dos usuários eu mesmo um em cada linha, ou persistir os usuários através do comando 'htpasswd /etc/squid3/diretoria paulo' por exemplo?

Em relação as ACLs:


http_access allow diretoria
http_access allow outros !palavras_proibidas !sites_restritos
http_access deny recepcao !sites_recepção

Na primeira linha tu está liberando geral para a diretoria.
Na segunda linha tu associou a ACL 'outros' com a negação de 'palavras_proibidas' e 'sites_proibidos'. Essa não é uma boa prática. O Squid costuma se perder quando se associa 3 ou mais ACLs na mesma linha.
A terceira linha não faz sentido nenhum. Acredito que tu inverteu as bolas. Tu pretendia liberar a ACL 'sites_recepcao' para os usuários do grupo 'recepcao'.

Faça assim e teste:

http_access allow diretoria
http_access allow outros !palavras proibidas
http_access allow outros !sites_restritos
http_access deny sites_recepcão !recepção



Vou seguir seus conselhos! Só no caso ali da recepção, eu quis dizer que negaria tudo para o grupo recepção exceto os sites que foram definidos no arquivo sites_recepcao. Aconselha um outro modo de fazer o mesmo?


E pode comentar essas linhas:
#acl redelocal src 10.42.0.0/24
#http_access allow redelocal

Outra coisa, tenha cuidado com os parâmetros das ACLs, por exemplo, dstdomain << esse parâmetro significa que dentro do arquivo dessa ACL deve ter somente domínios (www.algumacoisa.com, algumacoisa.com, etc), um por linha.

url_regex >> significa que dentro do arquivo pode ter somente palavras, uma por linha; url_regex bloqueia por pedaços encontrados na URL, pedaço estes definidos dentro do arquivo, um por linha:

[*****]
orkut.com
.com.br << coloque uma linha assim dentro do arquivo e veja o que acontece.

Se tu colocar uma palavra dentro de uma ACL dstdomain ela não irá funcionar, esse tipo de acl aceita somente domínios, e assim por diante, cada ACL tem seu tipo definido de acordo com o que tu colocar: url_regex, dstdomain, etc.
O -i em url_regex -i torna a ACL "case insensitive", ou seja, ela não diferencia maiúsculas de minúsculas.
CHINA é igual à china, ChIna é igual à cHinA.

Essa ACL
acl localhost src 192.168.0.101/32
fazendo isso tu está definindo uma ACL padrão do Squid como ACL de rede local. Isso dá confusão.
A ACL localhost é padrão do Squid, já vem definida como 127.0.0.1.

Dependendo da versão do teu Squid, não precisa definir a ACL localhost.
Execute squid -v e veja qual a versão dele.


Comentei as linhas que indicou e o serviço funcionou normal =D.

Em relação a logística das ACLs de url_regex e dstdomain acho que elaborei corretamente os arquivos. Obrigado pelos 'warnings'.

A versão do meu squid é a 3.1.19.



Aqui
cache_mem 64 MB
considere aumentar esse valor de 64 MB.
Quanto de memória RAM tu tem nesse servidor e quais os serviços instalados nele?

http://www.vivaolinux.com.br/artigo/Squid-Entendendo-um-pouco-as-configuracoes/

http://www.vivaolinux.com.br/artigo/Manual-traduzido-do-Squid/


Esse servidor foi comprado só para o proxy. Possui 8gb de RAM. Quantos recomenda que eu coloque de cache_mem?
O serviço vai atuar em uma rede pequena de 12 hosts aproximadamente.
O unico serviço instalado nele é o squid3 mesmo, até o momento.

Estou lendo os artigos indicados, maiz uma vez muito obrigado!


4. Re: (Ajuda) Squid + Autenticação [RESOLVIDO]

Fernando de oliveira
mendesbr

(usa Ubuntu)

Enviado em 05/10/2014 - 19:31h

Fiquei o dia todo mechendo aqui e to conseguindo bloquear pro grupo agora.
Ta funcionando redondo de acordo com o que eu precisava =D

Estou utilizando apenas um arquivo para armazenar as senhas conforme sugerido pelo buckminster.
Dentro dos arquivos que determinam os grupos, coloco o mesmo nome do usuario que foi cadastrado no arquivo que armazena as senhas.

Uma duvida que tenho agora só que é mais por estética, como eu consigo personalizar aquela página 'default' do navegador (chrome) que diz 'Esta pagina da web não está disponível'.
Esta pagina aparece quando o usuário tenta acessar uma pagina https como gmail ou facebook, ai ela bloqueia mas ao invés de aparece a página de erro do squid, aparece essa do navegador.










5. Re: (Ajuda) Squid + Autenticação [RESOLVIDO]

Buckminster
Buckminster

(usa Debian)

Enviado em 07/10/2014 - 16:50h

Coloque 4096 MB de cache_mem.

As páginas de erros tu configura no error_directory. Entra no arquivo correspondente, errors/pt-br.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts