Squid (squid.conf)
Proxy com restrições por máquinas e por usuários em hierarquia
Categoria: Segurança
Software: Squid
[ Hits: 14.895 ]
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 !
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Flatpak: remover runtimes não usados e pacotes
Mudar o gerenciador de login (GDM para SDDM e vice-versa) - parte 2
Como atualizar o Debian 8 para o 10 (10)
Dica sobre iptables ACCEPT e DROP (6)
NGNIX - Aplicar SNAT para evitar roteamento assimetrico (29)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta