TUTORIAL DE SQUID Versão 3.1 Autora: Juliana Cristina dos Santos Email: professora.julianacristina@gmail.com 1 SERVIDOR PROXY Serviço proxy é um representante do cliente web, que busca na Internet o conteúdo requisitado por este. Desse modo, o serviço proxy se situa como um intermediário entre o cliente web [navegador] e o serviço web na internet. Por exemplo, quando determinado cliente solicita alguma página em http://www.es.senai.br, o serviço proxy busca essa página na Internet e a entrega ao cliente, atendendo à solicitação. Um serviço proxy normalmente é usado com as seguintes funções: Cache: uma vez atendida à solicitação de determinado cliente, o arquivo que foi buscado na Internet é guardado no cache, então quando o próximo cliente solicitar esse mesmo conteúdo o servidor proxy não precisará buscar na internet de novo, pois já tem no cache. Isso agiliza o acesso à internet e economiza banda de dados [link] de acesso à internet; Regras de filtragem: como o proxy centraliza as atividades de acesso à internet, basta aplicar filtros de acesso a conteúdo no serviço proxy que irá afetar a todos os clientes web. 2 PROXY SQUID Squid é um serviço proxy e daemon cache web. É usado principalmente no acesso HTTP, HTTPS e FTP. O proxy Squid é popular devido a sua performance, economia e recursos avançados. 3 TOPOLOGIA DE REDE A partir da topologia utilizada no exercício anterior, sobre iptables, criaremos a seguinte topologia de rede: Segue na tabela abaixo os sistemas operacionais, e os serviços que serão configurados nas máquinas virtuais: HOSTNAME SISTEMA OPERACIONAL SERVIÇOS FW-1 Linux Firewall (iptables) e proxy (Squid) Página 1 de 11
FW-2 Linux Firewall (iptables) e proxy (Squid) SRV2-1 Windows Server 2003 Active Directory, DNS VM1-1 Linux VM2-1 Linux com Interface gráfica VM2-2 Windows XP OBS: Os IPs, roteamento, e regras do firewall permanecerão os mesmos do exercício anterior, salvo se for requisitado alguma alteração. 4 ACTIVE DIRECOTY Instale o Windows Server 2003 Standard/Enterprise, e configure o servidor com: IP: 172.16.2.201 Hostname: SRV2-1 Instale o Active Directory e configure o domínio ics2.com.br. No Active Directory, a) Crie a OU (unidade organizacional) com nome Internet. b) Dentro da OU Internet, crie os grupos de segurança (globais) AcessoRestrito e AcessoTotal. c) Dentro da OU Internet crie os seguintes usuários: Nome Login Senha Joao Joao Joao Pedro Pedro Pedro Maria Maria Maria Proxy User proxy_user proxy d) Insira o usuário pedro no grupo AcessoTotal e os usuários maria e joao no grupo AcessoRestrito. 5 POLÍTICA DO PROXY Cada rede terá as seguintes políticas de acesso: Rede 172.16.1.0/24 Bloqueia sites como orkut.com, facebook.com, twitter.com, entre outros. Libera alguns sites como facebook.com, entre outros, na hora do almoço. Bloqueia acesso do que não for da rede local (172.16.1.0/24). Página 2 de 11
Libera acesso a todos os sites. Rede 172.16.2.0/24 Libera acesso a certos sites (orkut.com, twitter.com) no horário de almoço. (Não precisa autenticar) Para os usuários pertencentes ao grupo do Actice Directory: cn=acessorestrito,ou=internet,dc=ics2,dc=com,dc=br libere somente acesso a alguns sites (google.com, abril.com, gazetaonline.com.br). Para os usuários pertencentes ao grupo do Actice Directory: cn=acessototal,ou=internet,dc=ics2,dc=com,dc=br acesso total. Bloqueia todas as demais conexões. 6 INSTALAÇÃO DO PROXY SQUID Para descobrir se o serviço Squid está instalado, procurar pelo seu script de inicialização em /etc/init.d: # ls /etc/init.d/ grep squid Se não houver saída no comando acima é indicativo de que o serviço Squid não está instalado. Nesse caso, instalar com o comando apt-get: # apt get install squid3 squid3 common Após instalado, verificar se existem os seguintes arquivos: # file /etc/init.d/squid3 /etc/init.d/squid3: POSIX shell script text executable # file /usr/sbin/squid3 /usr/sbin/squid3: ELF 64 bit LSB executable, x86 64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, stripped # file /etc/squid3/ /etc/squid3/: directory /etc/init.d/squid é o script de inicialização do serviço squid; /usr/sbin/squid é o executável que dará origem ao processo daemon; /etc/squid é o diretório de configuração do serviço squid. Página 3 de 11
7 CONFIGURAÇÃO DO SERVIÇO Os procedimentos descritos nesta seção devem ser executados no FW-1. Inicialmente, olhar as configurações de instalação do serviço. Para isso, entrar no diretório /etc/squid: # cd /etc/squid3/ # ls errorpage.css msntauth.conf squid.conf O arquivo de configuração do serviço é "squid.conf". # more squid.conf Porém, esse arquivo tem quase 5.000 linhas, então procurar alguma coisa olhando linha a linha não é boa ideia. E dessas quase 5000 linhas, a maior parte são comentários ou linha em branco. Desse modo, visualizar o conteúdo do arquivo sem linhas de comentário e sem linhas em branco ajuda muito, e isso é obtido com o comando abaixo: # grep v "^#" squid.conf grep v "^$" more Antes de fazer qualquer alteração no arquivo é recomendável fazer o backup deste, caso seja necessário voltar a configuração inicial: # cp squid.conf squid.conf.bkp Configure as seguintes linhas no arquivo de configuração: visible_hostname FW1 Proxy # Nome que é visível nas páginas de erro http_port 3128 transparent # Porta de escuta do Squid # #CONFIGURAÇÃO DO CACHE maximum_object_size 20 MB # Tamanho máximo do objeto em cache minimum_object_size 0 KB # Tamanho mínimo do objeto em cache cache_swap_low 90 # Os objetos mais antigos até a capacidade máxima ficar em 90% Página 4 de 11
cache_swap_high 95 # Quando o cache em disco atingir 95% de sua capacidade máxima, o Squid automaticamente irá apagar arquivos cache_dir ufs /var/spool/squid3 100 16 256 # Diretório onde está armazenado o cache de disco, tamanho do cache em MB, quantidade de diretório e subdiretórios # # ACLS E POLÍTICAS acl SSL_ports port 443 acl Safe_ports port 80 acl Safe_ports port 21 # http # ftp acl Safe_ports port 443 acl Safe_ports port 70 acl Safe_ports port 210 # gopher # https # wais acl Safe_ports port 1025 65535 acl Safe_ports port 280 acl Safe_ports port 488 acl Safe_ports port 591 acl Safe_ports port 777 # unregistered ports # http mgmt # gss http # filemaker # multiling http acl redelocal src 172.16.1.0/24 acl ipsbloqueados src 172.16.1.10 acl sitesbloqueados url_regex i "/etc/squid3/etc/bloqueados.txt" acl sitesliberadosalmoco url_regex i "/etc/squid3/etc/liberadosnoalmoco.txt" acl almoco time MTWHF 20:20 20:30 http_access deny!safe_ports http_access deny ipsbloqueados http_access deny!redelocal http_access allow almoco sitesliberadosalmoco http_access deny sitesbloqueados http_access allow all # # OUTRAS CONFIGURAÇÕES Página 5 de 11
hierarchy_stoplist cgi bin? coredump_dir /var/spool/squid3 refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern i (/cgi bin/ \?) 0 0% 0 refresh_pattern. 0 20% 4320 Sigla Dia S Domingo M segunda feira T terça feira W quarta feira H quinta feira F sexta feira A sábado Toda vez que alguma alteração for feita no arquivo de configuração do Squid (/etc/init.d/squid.conf), deve-se reiniciar o serviço do Squid para que as mudanças tenha efeito: # /etc/init.d/squid3 restart No arquivo /etc/squid3/etc/bloqueados.txt digite: orkut.com twitter.com facebook.com capricho.abril.com.br No arquivo /etc/squid3/etc/liberadosnoalmoco.txt digite: orkut.com facebook.com twitter.com Para toda alteração que for feita nos arquivos que contém as blacklists ou whitelist, deve-se reiniciar o serviço, ou recarregar os arquivos: # /etc/init.d/squid3 reload No script do firewall, que já existe em /etc/init.d/firewall.sh, adicione a seguinte linha: iptables t nat A PREROUTING i eth1 p tcp dport 80 j REDIRECT to port 3128 Página 6 de 11
eth1, é a interface que liga o firewall FW-1 a rede interna. 8 SARG Instale o sarg com o seguinte comando: # apt get install sarg apache2 No arquivo /etc/sarg/sarg.conf altere as linhas abaixo para os valores: language Portuguese access_log /var/log/squid3/access.log output_dir /var/www/html/squid reports Execute o sarg com o comando: # sarg Na máquina real acesse: http://ip_externo_do_fw1/html/squid-reports/ IP_EXTERNO_DO_FW1, deve ser substitúido pelo IP externo (obtido via DHCP) do FW1. Para automatizar a geração de relatórios do sarg, edite o arquivo /etc/crontab 0 */4 * * * root sarg 0 este agendamento será executado quando os minutos forem 0. */4 este agendamento será executado a cada 4 horas. root - Este agendamento será executado pelo usuário root. sarg Este agendamento executará o comando sarg. 9 AUTENTICAÇÃO NO ACTIVE DIRECTORY O Microsoft Active Directory é um servidor de diretórios LDAP v3 e pode ser utilizado como mecanismo para autenticar usuários. O Squid suporta o LDAP v3 como um método de autenticação. Primeiramente vamos configurar o usuário/senha para autenticação do Squid: auth_param basic program /usr/lib/squid3/squid_ldap_auth R b "dc=ics2,dc=com,dc=br" D "cn=proxy User,ou=Internet,dc=ics2,dc=com,dc=br" w "proxy" f samaccountname=%s h 172.16.2.201 Página 7 de 11
auth_param basic realm Este acesso será registrado digite sua chave e senha auth_param basic children 5 auth_param basic casesensitive off auth_param basic credentialsttl 15 minutes A opção -b indica o nome distinto da base LDAP do domínio. A opção -D indica o usuário que executará as consultas (querys) LDAP. A opção -b indica o nome distinto da base LDAP do domínio. A opção -w indica a senha do usuário informado na opção -D. A opção -h indica o servidor LDAP em que irá autenticar. A opção -R indica autenticação no Active Directory do Windows. A opção -f indica a consulta LDAP que é utilizada para pesquisar o usuário. A opção %s é substituída pelo nome digitado pelo usuário. Depois que o usuário está autenticado, deve-se definir que usuários terão acesso aos recursos da rede usando as ACLs do Squid nesse caso, uma ACL externa: external_acl_type ldap_group %LOGIN /usr/lib/squid3/squid_ldap_group R b "dc=ics2,dc=com,dc=br" D "cn=proxy User,ou=Internet,dc=ics2,dc=com,dc=br" w "proxy" f "(&(objectclass=person) (samaccountname=%v)(memberof=cn=%a,ou=internet,dc=ics2,dc=com,dc=br))" h 172.16.2.201 O comando acima é muito similar ao anterior. A variável %v indica o nome do usuário. A variável %a indica o grupo dado na ACL logo a seguir. O comando abaixo cria uma ACL com nome solicitarautenticacao em que requer a autenticação do usuário. acl solicitarautenticacao proxy_auth REQUIRED O comando abaixo cria uma ACL com nome ldapacessorestrito que contém os usuários do grupo do Active Directory AcessoRestrito. acl ldapacessorestrito external ldap_group AcessoRestrito O comando abaixo faz o policiamento das ACLs: http_access deny!solicitarautenticacao http_access deny ldapacessorestrito 10 SQUID + HAVP + CLAMAV Página 8 de 11
Squid é um servidor proxy, muito utilizado pela maioria. Clamav é um anti-virus nativo pra linux com a finalidade de identificar e remover vírus para windows. E o HAVP (HTTP anti-vírus Proxy), um proxy com a finalidade de proteger contra vírus Para instalar a versão estável mais recente do Clamav (0.97) execute os seguintes comandos: # aptitude install zlib1g zlib1g dev gcc # groupadd clamav # useradd g clamav s /bin/false d /dev/null clamav # cd /usr/local/ # wget c http://downloads.sourceforge.net/clamav/clamav 0.97.tar.gz # tar xzvf clamav 0.97.tar.gz # cd clamav 0.97 #./configure # make # make install # ldconfig Edite o arquivo /usr/local/etc/clamd.conf e comente a linha: Example Ainda neste arquivo, descomente a linha User Clamav No arquivo /usr/local/etc/freshclam.conf comente a linha: Example Para atualizar a base de dados do antivírus, execute o comando abaixo: # freshclam Para instalar o HAVP, execute os comandos abaixo: # apt get install havp Descomente as seguintes linhas no arquivo /etc/havp/havp.config : USER havp GROUP havp DAEMON true Em uma estação que utilize o proxy, tente acessar a URL http://www.eicar.org/download/eicar_com.zip. Note que uma página semelhante será mostrada: Página 9 de 11
No arquivo de configuração do Squid, que é o /etc/squid3/squid.conf digite as seguintes linhas, para o Squid utilizar como parent-proxy o HAVP: cache_peer 127.0.0.1 parent 8080 0 no query no digest no netdb exchange default cache_peer_access 127.0.0.1 allow all acl scanhttp proto HTTP never_direct allow scanhttp cache_peer => Especifica outra cache em hierarquia. 127.0.0.1 => É o IP do outro proxy. parent => É o tipo de proxy. 8080 => É a porta do outro proxy. 0 => Quando a porta ICP é setada com 0 (zero), o peer não suporta ICP. no-query => Desabilita consultas ICP para este neighbor. no-digest => Desabilita requisições de cache digests 1. no-netdb-exchange => Desabilita requisições de base de dados ICMP RTT (NetDB). 1 Cache-digest é a resposta para os problemas de latência e congestionamento associados com protocolos como o ICP. Trata-se de um sumário do conteúdo do cache de um servidor que é trocado periodicamente com outros servidores pertencentes à hierarquia. Usando cache-digests, é possível determinar, com alto grau de precisão, se uma dada URL está "cacheada" em um servidor. Página 10 de 11
default => Este é o parent cache que pode ser usado como a "last-resort" This is a parent cache which can be used as se um peer não pode ser localizado. cache_peer_access => Usado para limitar os hosts que acessarão o neighbor cache. never_direct => Especifica requisições que nunca devem ser encaminhadas diretamente para o servidor de origem. 11 REFERÊNCIAS BIBLIOGRÁFICAS http://www.server-side.de http://wiki.clamav.net/main http://jaccon.com.br/2006/11/squid-clamav-havp/ Página 11 de 11