SQUID - DICAS DE CONFIGURAÇÃO Autor: Vanderlei Pollon (vanderlei@pollon.org) Este singelo documento foi escrito com o intuito de auxiliar alguém que esteja com dificuldades em configurar um proxy http em Linux. Não sou o dono da verdade e,portanto, alguns erros podem estar contidos neste texto (além dos erros de acentuação, concordância, sintaxe,...). Algum dia, quando eu tiver tempo, revisarei e atualizarei este documento. Contribuições e observações são bem-vindas. Não se acanhem. Pacotes: 1- squid - o software que faz proxy. 2- squidGuard - para filtrar a passagem de arquivos de som, filmes, imagem,... pelo proxy. 3- squid-auth - o pacote que fornece interface para diversos tipos de autenticação do squid. Sem este software apenas podemos ter acls que envolvam endereços ips. 4- SARG - Squid Analysis Report Generator - Para ver as logs por browser . Sarg gera relatórios em html cujos campos são: users, IP Addresses, bytes, sites and times. 5- apache - servidor www para a visualização de páginas (logs) no formato html. 6- logrotate - para fazer o gerenciamento das logs do squid. 7- ???????? - uma pacote que permita aos usuários alterar as suas senhas via browser. Este pacote dependerá do tipo de autenticação que o squid utilizará. O squid trabalha com 3 protocolos: http, ftp e https. Os dados do https não ficam no cache porque o squid não consegue ler os dados (estão criptografados). O tráfego do protocolo https dá-se pelo método CONNECT (conexão direta nas portas seguras). ACL - Access Control List A criação de uma acl dá-se pela inclusão de uma linha no arquivo /etc/squid.conf e segue o seguinte esquema: acl nome_da_acl tipo_da_acl string ou arquivo onde: acl -> faz parte da sintaxe do comando. Informa ao squid que esta linha refere-se à criação de uma acl nome_da_acl -> um nome qualquer para a acl. Este nome será utilizado mais tarde na definição das regras. tipo_da_ acl -> a acl que está sendo criada pode ser de um dos seguintes tipos: src dst srcdomain dstdomain url_pattern urlpath_pattern time port proto method browser user Existem algumas acls que já estão definidas por padrão. É bom dar uma olhada nelas e entender como elas funcionam. As acls que devem estar criadas por padrão são as seguintes: #Recommended minimum configuration: acl all src 0.0.0.0/0.0.0.0 acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl SSL_ports port 443 563 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 # unregistered ports 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 Exemplos de utilização de acls (1) - Limitando, através de uma lista de endereços Ips, quais clientes que podem acessar o squid # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS #Cria uma acl chamada quem_pode acl quem_pode src "/etc/squid/ip_pode" #Define uma regra que utiliza a acl criada (qem_pode) http_access allow quem_pode # And finally deny all other access to this proxy #http_access allow all http_access deny all -> e o arquivo /etc/squid/ip_pode conteria a listagem dos ips dos clientes que poderiam acessar o squid. Exemplo: 10.2.129.73 10.2.129.97 10.2.129.78 10.2.138.119 (2) - Limitando quais clientes podem acessar o squid através da especificação da rede a qual os clientes pertencem #Cria uma acl chamada quem_pode #Esta acl envolve toda a rede 192.168.0.0 acl quem_pode src 192.168.0.0/255.255.255.0 #Define uma regra que utilia a acl criada http_access allow quem_pode #Nega acesso a todos os demais clientes http_access deny all (3) - Especificando mais de uma rede para acessar o squid #Cria uma acl chamada quem_pode. Esta acl englobará duas redes acl quem_pode src 192.168.0.0/255.255.255.0 192.168.1.0/255.255.255.0 #Define uma regra que utilizará a acl criada http_access allow quem_pode #Nega acesso a todos os demais clientes http_access deny all Obs.: a mesma acl poderia ser criada com duas linhas: acl quem_pode src 192.168.0.0/255.255.255.0 acl quem_pode src 192.168.1.0/255.255.255.0 (4) - Limitand o horário de acesso ao squid. acl all src 0.0.0.0/0.0.0.0 acl minharede src 192.168.0.0/255.255.255.0 #Cria uma acl chamada horario que envolve os dias segunda a sexta das 09:00 às 18:00. O H está correto, caso contrário haveria dois Ts. acl horario time MTWHF 09:00-18:00 #O cliente só terá acesso quando satisfizer as condições das duas acls (vale a regra "E") quando há mais que uma acl listada. http_access allow minharede horario http_access deny all AUTENTICAÇÃO: - o squid pode "terceirizar" a autenticação de usuários (1) - Autenticação em um arquivo de usuários e senhas do squid. - instalar o pacote squid-auth - localizar o executável ncsa_auth (/usr/lib/squid/ncsa_auth) - incluir a seguinte linha no arquivo squid.conf authenticate_program /usr/lib/squid/ncsa_auth /etc/squid/passwd - esta linha diz ao squid para utilizar o programa ncsa_auth para autenticar contra o arquivo /etc/squid/passwd que conterá os usuários e senhas. - criar o arquivo de usuários e senhas com um comando do tipo htpasswd -c /etc/squid/passwd teste - irá adiconar o usuário teste no arquivo de usuários e senhas. Solicitará senha e confirmação. - criar uma acl com uma linha do tipo acl autenticados proxy_auth REQUIRED que diz ao squid que todos os usuários que satisfizerem a autenticação pertencerão a acl "autenticados" - criar uma regra para a utilizar a acl "autenticados" http_access allow autenticados Obs.: com duas acls o proxy funcionaria assim (a) http_access allow quem_pode http_access allow autenticados http_access deny all Se o usuário estiver em um ip da acl quem_pode (ver acima) entra na primeira regra e acessa o proxy. Se o usuário não se encaixa na primeira regra será testado na segunda; se souber o usuário e a senha, passa pelo proxy. (b) http_access allow quem_pode autenticados Se o usuário satisfizer as duas acls (estiver em um ip da acl "quem_pode" e souber o usuário e senha) poderá urilizar o proxy. (2) - Autenticação via pam (autentica onde o pam autentica) - na maioria dos casos, se nada foi alterado, a autenticação é no passwd/shadow da máquina onde está instalado o squid. - instalar o pacote squid-auth - localizar o executável pam_auth (/usr/lib/squid/pam_auth) - # chmod 4755 /usr/lib/squid/pam_auth (para o CL, suid) - incluir a seguinte linha no arquivo squid.conf authenticate_program /usr/lib/squid/pam_auth - esta linha diz ao squid que ele autenticará no pam (que por sua vez poderá autenticar em vários lugares, o padrão é utilizar o passwd e o shadow). - cadastrar os usuários no arquivo de passwd local #useradd ovo (solicitará senha) - criar uma acl com uma linha do tipo acl autenticados proxy_auth REQUIRED que diz ao squid que todos os usuários que satisfizerem a autenticação pertencerão à acl "autenticados" - criar uma regra para a utilizar a acl "autenticados" http_access allow autenticados - Obs.: com duas acls funcionaria como no exemplo anterior. (3) - Autenticação via samba (*** não funcionou *** ) - instalar o pacote squid-auth - localizar o executável smb_auth (/usr/lib/squid/smb_auth) - incluir a seguinte linha no arquivo squid.conf authenticate_program /usr/lib/squid/smb_auth - esta linha diz ao squid que ele autenticará no samba - criar uma acl com uma linha do tipo acl autenticados proxy_auth REQUIRED que diz ao squid que todos os usuários que satisfizerem a autenticação pertencerão à acl "autenticados" - criar uma regra para a utilizar a acl "autenticados" http_access allow autenticados - Obs.: com duas acls funcionaria como no primeiro exemplo. ===================== H T T P S ================================ A configuração padrão do squid trata o https da seguinte maneira: acl SSL_ports port 443 563 acl CONNECT method CONNECT http_access deny CONNECT !SSL_ports A regra da terceira linha diz ao squid para negar a conexão para os clientes da acl CONNECT (que estão tentando fazer conexão direta às portas) quando estas portas não fizerem parte da acl SSL_ports). ==== Exemplo de configuração que libera os três protocolos ============= authenticate_program /usr/lib/squid/pam_auth acl autenticados proxy_auth REQUIRED acl all src 0.0.0.0/0.0.0.0 acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl SSL_ports port 443 563 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 563 3456 # https, snews acl Safe_ports port 70 #gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports 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 http_access allow manager localhost http_access deny manager http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow autenticados http_access deny all Esta configuração libera ftp, http e https (nas portas 443 e 563) para todos os usuários que se autenticarem no squid. === Combinando o acesso aos protocolos com a autenticação de usuários #Utiliza a base de dados do squid para autenticar os usuários authenticate_program /usr/lib/squid/ncsa_auth /etc/squid/passwd acl autenticados proxy_auth REQUIRED acl all src 0.0.0.0/0.0.0.0 acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl SSL_ports port 443 563 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 # unregistered ports 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 acl ftp proto FTP acl http proto HTTP #Dois arquivos texto com a listagem dos usuários (um nome por linha) acl ftpaccess user "/etc/squid/ftpaccess" acl httpaccess user "/etc/squid/http_e_ https" http_access allow manager localhost http_access deny manager http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow localhost http_access allow ftp ftpaccess autenticados http_access allow http httpaccess autenticados #Quem pode conectar-se por http tambem pode conectar-se por https http_access allow CONNECT httpaccess autenticados http_access deny all ====== Bloqueio de URL s acl porno url_regex "/etc/squid/porno" http_access deny porno all Criar o arquivo texto (/etc/squid/porno) com as expressões proibidas para nomes de sites. Sites cujo acesso é proibido. Exemplo: expre1 expre2 expre3 Obs.: Reiniciar o squid (kill -HUP) cada vez que este arquivo for alterado. Este arquivo só é lido na inicialização do squid. ==== Logs via browser ========================================== - instalar o pacote sarg (instalei o rpm do sarg p/RedHat 7.x no CL8 e funcionou). - configurar o sarg (/etc/sarg/sarg.conf) - colocar na cron o sarg. Existe um exemplo de configuração para a cron do sarg em /etc/sarg/sarg.cron. Um exemplo seria linhas semelhantes às seguinte no arquivo /etc/crontab: ## Gera as logs de acesso ao proxy ## (o sarg.daily irá gerar as páginas html e colocá-las no diretório especificado. O padrão é /var/www/html/squid/...) . Para não alterar no apache é bom mudar , dentro do sarg.daily, para /var/www/default/squid. #Mudar , pelas mesmas razões, o diretório padrão de sarg.weekly e sarg.monthly. 01 0 * * * root /usr/sbin/sarg.daily 2>/var/log/erro.contab.proxy 05 0 * * 0 root /usr/sbin/sarg.weekly 2>/var/log/erro.contab.proxy 30 1 * * 1 root /usr/sbin/sarg.monthly 2>/var/log/erro.contab.proxy - apontar o browser para http:///squid/ - Obs.: no arquivo sarg.conf valem as linhas abaixo. # A linha a seguir cria os relatórios por ip do cliente user_ip yes # A linha a seguir cria os relatórios por nome do cliente ( nome de login), sempre que possível. Quando não é possível, faz o relatório por ip (as vezes as acls liberam acesso para ips sem autenticação) user_ip no