{"id":55,"date":"2010-07-26T15:35:22","date_gmt":"2010-07-26T18:35:22","guid":{"rendered":"http:\/\/blog.digavoip.com.br\/2010\/07\/26\/squid-8-parte-proxy-com-autenticacao\/"},"modified":"2010-07-26T15:35:22","modified_gmt":"2010-07-26T18:35:22","slug":"squid-8-parte-proxy-com-autenticacao","status":"publish","type":"post","link":"https:\/\/blog.abratel.com.br\/?p=55","title":{"rendered":"Squid &#8211; 8 parte &#8211; Proxy com autentica\u00e7\u00e3o"},"content":{"rendered":"<p>Cr\u00e9ditos: Carlos E. Morimoto<\/p>\n<p>Voc\u00ea pode adicionar uma camada extra de seguran\u00e7a exigindo autentica\u00e7\u00e3o no proxy. Este recurso pode ser usado para controlar quem tem acesso \u00e0 internet e auditar os acessos em caso de necessidade. Quase todos os navegadores oferecem a op\u00e7\u00e3o de salvar a senha, de modo que o usu\u00e1rio precisa digit\u00e1-la apenas uma vez a cada sess\u00e3o:<\/p>\n<p>A forma mais simples de implementar autentica\u00e7\u00e3o no Squid \u00e9 usando o m\u00f3dulo &#8220;ncsa_auth&#8221;, que faz parte do pacote principal. Ele utiliza um sistema simples, baseado em um arquivo de senhas, onde voc\u00ea pode cadastrar e bloquear os usu\u00e1rios rapidamente.<br \/>\nPara criar o arquivo de senhas, precisamos do script &#8220;htpasswd&#8221;. Nas distribui\u00e7\u00f5es derivadas do Debian ele faz parte do pacote apache2-utils, que voc\u00ea pode instalar via apt-get:<br \/>\n# apt-get install apache2-utils<br \/>\nNo CentOS e no Fedora ele faz parte do pacote principal do apache (o pacote &#8220;httpd&#8221;), que pode ser instalado atrav\u00e9s do yum.<br \/>\nEm seguida, crie o arquivo que ser\u00e1 usado para armazenar as senhas, usando o comando &#8220;touch&#8221; (que simplesmente cria um arquivo de texto vazio):<br \/>\n# touch \/etc\/squid\/squid_passwd<br \/>\nO pr\u00f3ximo passo \u00e9 cadastrar os logins usando o htpasswd, especificando o arquivo que acabou de criar e o login que ser\u00e1 cadastrado, como em:<br \/>\n# htpasswd \/etc\/squid\/squid_passwd gdh<br \/>\nDepois de terminar de cadastrar os usu\u00e1rios, adicione as linhas que ativam a autentica\u00e7\u00e3o no squid.conf:<br \/>\nauth_param basic realm Squid<br \/>\nauth_param basic program \/usr\/lib\/squid\/ncsa_auth \/etc\/squid\/squid_passwd<br \/>\nacl autenticados proxy_auth REQUIRED<br \/>\nhttp_access allow autenticados<br \/>\nO &#8220;auth_param basic realm Squid&#8221; indica o nome do servidor, da forma como ele aparecer\u00e1 na janela de autentica\u00e7\u00e3o dos clientes; esta \u00e9 na verdade uma op\u00e7\u00e3o meramente est\u00e9tica. O &#8220;\/usr\/lib\/squid\/ncsa_auth&#8221; \u00e9 a localiza\u00e7\u00e3o da biblioteca respons\u00e1vel pela autentica\u00e7\u00e3o. Eventualmente, ela pode estar em uma pasta diferente dentro da distribui\u00e7\u00e3o que estiver usando; nesse caso, use o comando &#8220;locate&#8221; ou a busca do sistema para encontrar o arquivo e altere a linha indicando a localiza\u00e7\u00e3o correta. Finalmente, o &#8220;\/etc\/squid\/squid_passwd&#8221; indica a localiza\u00e7\u00e3o do arquivo de senhas que criamos no passo anterior.<br \/>\nEstas quatro linhas criam uma acl chamada &#8220;autenticados&#8221; (poderia ser outro nome), que cont\u00e9m os usu\u00e1rios que se autenticarem usando um login v\u00e1lido. Estas linhas devem ser colocadas antes de qualquer outra regra que libere o acesso, j\u00e1 que, se o acesso \u00e9 aceito por uma regra anterior, ele n\u00e3o passa pela regra que exige autentica\u00e7\u00e3o.<br \/>\nEntretanto, se voc\u00ea usar uma configura\u00e7\u00e3o similar a essa:<br \/>\nauth_param basic realm Squid<br \/>\nauth_param basic program \/usr\/lib\/squid\/ncsa_auth \/etc\/squid\/squid_passwd<br \/>\nacl autenticados proxy_auth REQUIRED<br \/>\nhttp_access allow autenticados<br \/>\nacl redelocal src 192.168.1.0\/24<br \/>\nhttp_access allow localhost<br \/>\nhttp_access allow redelocal<br \/>\nhttp_access deny all<br \/>\n&#8230; vai notar que a regra de autentica\u00e7\u00e3o essencialmente desativa a regra que bloqueia o acesso de usu\u00e1rios fora da rede local. Todos os usu\u00e1rios tem acesso ao prompt de autentica\u00e7\u00e3o e todos que se autenticam ganham acesso, mesmo que estejam utilizando endere\u00e7os fora da faixa usada na rede. Para evitar isso, \u00e9 necess\u00e1rio restringir o acesso de usu\u00e1rios fora da rede local antes da regra de autentica\u00e7\u00e3o. Veja um exemplo:<br \/>\n# Bloqueia acessos de fora da rede local antes de passar pela autentica\u00e7\u00e3o:<br \/>\nacl redelocal src 192.168.1.0\/24<br \/>\nhttp_access deny !redelocal<br \/>\n# Outras regras de restri\u00e7\u00e3o v\u00e3o aqui, de forma que o acesso seja negado<br \/>\n# antes mesmo de passar pela autentica\u00e7\u00e3o:<br \/>\nacl bloqueados url_regex -i &#8220;\/etc\/squid\/bloqueados&#8221;<br \/>\nhttp_access deny bloqueados<br \/>\n# Autentica o usu\u00e1rio:<br \/>\nauth_param basic realm Squid<br \/>\nauth_param basic program \/usr\/lib\/squid\/ncsa_auth \/etc\/squid\/squid_passwd<br \/>\nacl autenticados proxy_auth REQUIRED<br \/>\nhttp_access allow autenticados<br \/>\n# Libera o acesso da rede local e do localhost para os autenticados,<br \/>\n# bloqueia os demais:<br \/>\nhttp_access allow localhost<br \/>\nhttp_access allow redelocal<br \/>\nhttp_access deny all<br \/>\nVeja que agora usamos a regra &#8220;http_access deny !redelocal&#8221; no in\u00edcio da cadeia. A exclama\u00e7\u00e3o inverte a l\u00f3gica da regra, fazendo com que ela bloqueie todos os endere\u00e7os que n\u00e3o fizerem parte da acl &#8220;redelocal&#8221;.<br \/>\nAo implementar a autentica\u00e7\u00e3o, voc\u00ea passa a poder criar regras de acesso com base nos logins dos usu\u00e1rios e n\u00e3o mais apenas com base nos endere\u00e7os IP. Imagine, por exemplo, que voc\u00ea queira que apenas dois usu\u00e1rios da rede tenham acesso irrestrito ao proxy. Os demais (mesmo depois de autenticados), poder\u00e3o acessar apenas no hor\u00e1rio do almo\u00e7o, e quem n\u00e3o tiver login e senha v\u00e1lidos n\u00e3o acessa em hor\u00e1rio nenhum. Neste caso, voc\u00ea poderia usar esta configura\u00e7\u00e3o:<br \/>\nauth_param basic program \/usr\/lib\/squid\/ncsa_auth \/etc\/squid\/squid_passwd<br \/>\nacl autenticados proxy_auth REQUIRED<br \/>\nacl permitidos proxy_auth gdh tux<br \/>\nacl almoco time 12:00-13:00<br \/>\nhttp_access allow permitidos<br \/>\nhttp_access allow autenticados almoco<br \/>\nAqui temos os usu\u00e1rios que passaram pela autentica\u00e7\u00e3o divididos em duas regras. A acl &#8220;autenticados&#8221; inclui todos os usu\u00e1rios, enquanto a acl &#8220;permitidos&#8221; cont\u00e9m apenas os usu\u00e1rios gdh e tux.<br \/>\nGra\u00e7as \u00e0 regra &#8220;http_access allow permitidos&#8221;, os dois podem acessar em qualquer hor\u00e1rio, enquanto os demais caem na regra &#8220;http_access allow autenticados almoco&#8221;, que cruza o conte\u00fado das acls &#8220;autenticados&#8221; e &#8220;almo\u00e7o&#8221;, permitindo que eles acessem, mas apenas das 12:00 \u00e0s 13:00.<br \/>\nAl\u00e9m do m\u00f3dulo ncsa_auth que, como vimos, permite usar um arquivo de senhas separado, v\u00e1lido apenas para o proxy, o Squid suporta tamb\u00e9m um conjunto de m\u00f3dulos que permitem fazer com que o Squid se autentique em um servidor externo, integrando o proxy a um sistema de autentica\u00e7\u00e3o j\u00e1 existente.<br \/>\nO mais simples \u00e9 o m\u00f3dulo smb_auth, que permite que o Squid autentique os usu\u00e1rios em um servidor Samba, configurado como PDC. Com isso, os usu\u00e1rios passam a utilizar o mesmo login e senha que utilizam para fazer logon. Para usar o smb_auth, voc\u00ea usaria a configura\u00e7\u00e3o a seguir, especificando o dom\u00ednio (na op\u00e7\u00e3o -W) e o endere\u00e7o do servidor PDC (na op\u00e7\u00e3o -U):<br \/>\nauth_param basic realm Squid<br \/>\nauthenticate_ip_ttl 5 minutes<br \/>\nauth_param basic program \/usr\/lib\/squid\/smb_auth -W dominio -U 192.168.1.254<br \/>\nacl autenticados proxy_auth REQUIRED<br \/>\nhttp_access allow autenticados<br \/>\nCom o m\u00f3dulo smb_auth, o Squid simplesmente repassa o login e senha fornecido pelo usu\u00e1rio ao servidor PDC e autoriza o acesso caso o PDC retorne uma resposta positiva. N\u00e3o \u00e9 necess\u00e1rio que o servidor com o Squid fa\u00e7a parte do dom\u00ednio, nem que exista uma c\u00f3pia do Samba rodando localmente (s\u00e3o necess\u00e1rios apenas os pacotes &#8220;samba-client&#8221; e &#8220;samba-common&#8221;, que correspondem ao cliente Samba), por isso a configura\u00e7\u00e3o \u00e9 bastante simples. Naturalmente, para utilizar esta configura\u00e7\u00e3o voc\u00ea deve ter um servidor PDC na sua rede, como aprenderemos a configurar em detalhes no cap\u00edtulo sobre o Samba.<br \/>\nOutros m\u00f3dulos que podem ser usados s\u00e3o o &#8220;squid_ldap_auth&#8221;, que permite que o servidor autentique os usu\u00e1rios em um servidor LDAP e o &#8220;ntlm_auth&#8221;, que permite integrar o servidor Squid ao Active Directory. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cr\u00e9ditos: Carlos E. Morimoto Voc\u00ea pode adicionar uma camada extra de seguran\u00e7a exigindo autentica\u00e7\u00e3o no proxy. Este recurso pode ser usado para controlar quem tem acesso \u00e0 internet e auditar os acessos em caso de necessidade. Quase todos os navegadores oferecem a op\u00e7\u00e3o de salvar&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[2],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=\/wp\/v2\/posts\/55"}],"collection":[{"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=55"}],"version-history":[{"count":0,"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=\/wp\/v2\/posts\/55\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=55"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=55"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=55"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}