Squid (squid.conf)
Proxy com restrições por máquinas e por usuários em hierarquia
Categoria: Segurança
Software: Squid
[ Hits: 14.948 ]
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 !
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Título: Descobrindo o IP externo da VPN no Linux
Armazenando a senha de sua carteira Bitcoin de forma segura no Linux
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Instalando Brave Browser no Linux Mint 22
vídeo pra quem quer saber como funciona Proteção de Memória:
Encontre seus arquivos facilmente com o Drill
Mouse Logitech MX Ergo Advanced Wireless Trackball no Linux
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Linux Lite Demorando Muito Para Ligar (1)
PC não liga no filtro de linha (4)
Remoção de propaganda com o programa Comskip[AJUDA] (2)