--Firewall de conteúdo - Proxy Squid Squid trata-se de um servidor Proxy, que possibilita compartilhar internet entre host de uma rede, porém é usado também como um firewall de conteúdo, com a principal atribuição de filtrar e definir regras para o acesso à web. Outro importante recurso que possui é a sua função cache, que armazena os sites acessados e quando o acesso a este é solicitado, automaticamente é disponibilizado ao usuário sem que se precise ir até o destino do site para buscar os dados, atualizando apenas a parte dinâmica das páginas web, liberando e "economizando" banda de conexão internet. Instalação Sempre antes de instalar qualquer pacote no Linux deve-se atualizar o apt: # apt-get update Para servidores com Debian Like pode-se utilizar: # apt-get install squid Criar uma cópia de segurança (backup) do arquivos de configuração do Squid: # cd /etc/squid # cp squid.conf squid.conf.original Configuração do squid.conf O arquivo de configuração padrão do Squid se localiza em /etc/squid/squid.conf. Após a instalação deve-se abrir o arquivo squid.conf e realizar algumas mudanças para o funcionamento inicial. Porta do Squid O registro acima, em algumas versões do squid pode estar comentada com um "#" antes então deve-se removê-lo. Esta linha indica ao Squid em que porta ele utilizará para as requisições de tráfego, que por padrão no Squid é a porta 3128. http_port 3128 Obs: Caso se queira restringir o Squid a uma rede específica pode-se inserir o endereço do servidor da seguinte forma: http_port 192.168.1.1:3128 Espaço em disco para cache Para configurar o tamanho do cache e os seus diretórios deve-se editar o arquivo /etc/squid/squid.conf e localizar o registro: # cache_dir ufs /var/spool/squid 16 256 100 Onde: /var/spool/squid : local onde fica o cache do squid; 16 : quantidade de diretórios; 256 : quantidade de subdiretórios em cada diretório; 100 : quantidade em Mb do disco para armazenar a cache do Squid. Descomentar tirando o # e logo após alterar o valor desse cache para 64 64 500. # cache_dir ufs /var/spool/squid 64 64 500 Assim a configuração acima indica que o diretório de cache estará localizado em /var/spool/squid, terá 64 diretórios com 64 subdiretórios cada e 500 Mb de tamanho para armazenar as caches de navegação. Quantidade de memória usada pelo Squid Especifica o tamanho de memória RAM que o servidor disponibilizará para realizar as consultas. cache_mem 256 MB Pode-se alterar para o valor desejado, dependendo sempre de uma estimativa de quanto se tem de memória e de quanto se pode disponibilizar para o Squid. Nome do servidor Informa qual o nome do servidor bloqueou o acesso a um site caso se queira, por exemplo o cliente 192.168.1.107 tentou acessar o facebook por estar bloqueado, logo o navegador irá exibir uma mensagem informando que o servidor com nome ServidorProxy é que efetuou o bloqueio para que se saiba que não foi um erro de carregamento, mas sim um bloqueio. Caso se queira que seja visualizado o nome do servidor basta descomentar e alterar o nome: visible_hostname localhost Configurando regras iniciais O Squid já possui algumas regras padr?o ACL (Access Lists) que podem ser vistas logo abaixo, porém permite que se crie regras personalizadas inserindo-as no arquivo squid.conf. As ACL s?o regras de acesso que o Squid utiliza para determinar de que forma deverá proceder com o acesso ? internet pelos usuários. Exemplo do arquivo squid.conf: # nano /etc/squid/squid.conf acl SSL_ports port 443 #https acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https 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 Após localizar os ítens acima, logo abaixo da diretiva acl CONNECT method CONNECT pode-se iniciar a inserção das regras (ACL) personalizadas. Para essas ACL usa-se a diretiva http_access, que dita como as regras irão agir. Exemplo 1: negar acesso a sites. Criar no diretório do Squid mesmo (/etc/squid) um arquivo chamado sitesblock (lembrando sempre que arquivos no Linux não necessitam de extensão). # nano /etc/squid/sitesblock www.ig.com.br uol.com.br Exemplo 2: Criar arquivo de strings proibidas: # nano /etc/squid/stringsblock ifms Após salvar e fechar o arquivo, retornar novamente ao arqiuvo squid.conf e criar a regra abaixo das ACL padr?o: # nano /etc/squid/squid.conf acl stringsblock url_regex "/etc/squid/stringsblock" acl sitesblock url_regex "/etc/squid/sitesblock" acl rede src 192.168.1.0/24 acl host src 192.168.1.11 Agora deve-se confirmar os itens a seguir no arquivo /etc/squid/squid.conf: # host 192.168.1.11 (ou o IP da MV-XP ou MV-Seven) tem acesso liberado http_access deny host # A partir da regra acima qualquer host que acessar os sites estará proibido a lista em sitesblock http_access deny stringsblock http_access deny sitesblock # Todo o range de rede declarado pode acessar a internet, exceto os sites bloqueados http_access allow rede #Se não se encaixa em nenhuma das ACL acima, não poderá ter acesso à internet: http_access deny all Obs: as regras são regidas pela http_access e são lidas de cima para baixo, logo, as regras acima tem privilégios sobre os de baixo Após as alterações realizadas e salvo o arquivo, ou reiniciar o squid (que pode demorar um pouco devido ao carregamento de sua cache): # /etc/init.d/squid restart ou # service squid restart Ou fazer somente a releitura do arquivo de configuração, recomendado pois a inicialização das regras é imediata: # squid -k reconfigure Após isso fazer o teste e ver se os hosts da rede executam o sites bloqueados e se no host liberado os sites s?o carregados. Como o Proxy Squid n?o está no modo transparente (modo redirecionamento) deve-se configurar o acesso ao proxy no navegador. ACL As ACL (regras)s?o escritas no padr?o: acl nome_da_acl tipo ocorrencia | "localização" As ACL podem ser de vários tipos, cada qual indicada para um tipo de regra espec?fica, sendo que os mais comuns s?o: srcdomain - tipo indicado para verificar o dom?nio da máquina cliente. Os dom?nios ser?o obtidos por resolução reversa de IP, o que pode causar atrasos para a resposta da requisição. A definição do dom?nio deve ser feita da seguinte forma: ".meudominio.com.br", n?o podendo ser esquecido o "." (ponto) no in?cio; time - usado para especificar dias da semana e horários. Os dias da semana s?o definidos através de letras que os representam, e os horários através de intervalos na forma hora:minuto_inicio-hora:minuto_final. Os dias da semana s?o especificados assim: S - Sunday (Domingo), M - Monday (Segunda-feira), T - Tuesday (Ter?a-feira), W - Wednesday (Quarta-feira), H - Thursday (Quinta-feira), F - Friday (Sexta-feira) e A - Saturday (Sábado); src - utilizado para indicar endere?os IP de origem. Pode-se especificar um endere?o de rede, como 192.168.16.0/24, um endere?o de um determinado host, como 192.168.16.10/24 ou uma faixa de endere?os, como 192.168.16.10-192.168.16.20/24; dst - semelhante ao porém relacionada ao endere?o de destino; dstdomain - usado da mesma forma que srcdomain, entretanto com relação ao destino; srcdom_regex - avalia o dom?nio usando express?es regulares. Seu uso é semelhante ?s duas anteriores, acrescentando a flexibilidade do uso da express?o regular; dstdom_regex - usado da mesma forma que srcdom_regex, entretanto com relação ao destino; url_regex - percorre a URL ? procura da express?o regular especificada. Deve ser observado que a express?o é case-sensitive, para que seja case-insensitive deve ser usada a opção -i. ? o tipo mais comum de ACL, dada a flexibilidade proporcionada pelo uso de express?es regulares; urpath_regex - tipo semelhante ? url_regex, mas procura a express?o regular na URL sem levar em conta o nome do servidor e o protocolo, isto quer dizer que a procura será feita apenas na parte da URL após o nome do servidor, como por exemplo, na URL http://www.servidor.com.br/pasta/[*****].html, a procura será realizada apenas na parte /pasta/[*****].html. Ela é também case-sensitive, para que seja case-insensitive deve ser usada a opção -i; port - realiza o controle pela porta de destino do servidor, neste tipo deve ser especificado o número da porta; proto - serve para especificar o protocolo, como por exemplo FTP ou HTTP; method - especifica o tipo de método usado na requisição, como por exemplo GET, CONNECT ou POST; browser - usa uma express?o regular para associar com os dados do cabe?alho HTTP e combinando ent?o com o navegador utilizado pelo cliente; ident - Realiza o controle de acesso baseado no nome do usuário. Este tipo requer um servidor Ident rodando na máquina do cliente; ident_regex - semelhante a ident, mas utilizando express?o regular; proxy_auth - tipo usado para implementar autenticação de usuários no proxy. A autenticação é feita com uso de softwares externos. Podem ser passados os nomes dos usuários ou usada a opção REQUIRED para que seja autenticado qualquer usuário válido; snmp_community - tipo usado para especificar o nome da comunidade SNMP para que se possa monitorar o Squid através deste protocolo; maxconn - especifica um limite de conex?es vindas de um determinado cliente, interessante para uso com outras ACLs de forma a limitar quantidades de conex?es para determinados endere?os espec?ficos; req_mime_type - especifica uma express?o regular para ser verificada no cabe?alho da requisição em busca de um tipo MIME que coincida com o especificado; arp - tipo usado para construir lista de acesso baseada no MAC Address da interface de rede do cliente, ou seja, em vez de endereço IP da placa, usa-se o seu endereço MAC. Proxy transparente Para tornar o Squid um proxy transparente (sem necessidade de se configurar o IP e porta nos navegadores) deve-se alterar a entrada: http_port 3128 para: http_port 3128 transparent Salvar o arquivo e reiniciar o Squid: # squid -k reconfigure ----------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------- OBS: Para liberar o roteamento entre as interfaces de rede externa e interna deve-se alterar o valor do arquivo ip_forward de 0 para 1: # echo 1 > /proc/sys/net/ipv4/ip_forward OBS: SEM ESSA CONFIGURAÇÃO DE ROTEAMENTO NÃO SERÁ POSSÍVEL COMPARTILHAR INTERNET DA INTERFACE EXTERNA (NAT) PARA A INTERNA (INTNET) ----------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------- Pronto agora o srvidor Proxy Cache Squid está pronto para ser utilizado pelos clientes que devem ter o endereço 19.168.1.1 e a porta 3128 configuradas na opção Conexões do navegador de internet. Obs: somente após a inserção do endereço IP e porta é que o cliente passará a navegar na internet. Obs: caso queira limpar oscomentários do squid.conf proceder executando os seguintes comandos: # cd /etc/squid # mv squid.conf squid.conf.original # egrep "^#|^$" squid.conf.original > squid.conf