Metodologia de Implantação de Controle de Acesso com Servidor Proxy Fabiano Trai, Fabio Trai Especialização em Segurança de Redes e Sistemas Pontifícia Universidade Católica do Paraná Curitiba, Fevereiro de 2013 Resumo Com a Internet cada vez mais acessível nas empresas, um número imenso de pessoas está se interligando a Internet. As pessoas tendem a passar cada vez mais tempo navegando por sites não relativos ao seu trabalho, fazem downloads de arquivos que podem comprometer a rede e acessam sites que não condizem com a política da empresa, e muitas vezes atrapalha o usuário em cumprir suas funções dentro da empresa. O artigo irá descrever os resultados obtidos com a utilização da ferramenta de Proxy Squid como controle de acesso a Internet, objetivando coibir o uso inadequado. 1 - Introdução Aperfeiçoar a velocidade de acesso aos conteúdos web é uma técnica amplamente usada em ambientes corporativos, tendo como vantagem fazer cache de conteúdo, filtrar sites indesejados, controlar acessos e diminuir a utilização da banda de internet. Com o aumento dos incidentes de segurança da informação e o rápido crescimento da Internet no meio corporativo, a preocupação com a segurança da informação é cada vez maior. A política de segurança é uma peça chave quando queremos tornar um ambiente computacional mais seguro. Uma das preocupações que deve ser abordada na política de segurança diz respeito ao controle de acesso, ou seja, o que o usuário pode ou não estar fazendo. Os mecanismos para este controle não devem ser abordados pela política de segurança, mas devem ser implementados de maneira que se faça cumprir o que nela é determinado. Em se tratando de acesso a Internet existe várias formas de realizar o controle, a forma mais comum é o controle através de firewalls baseados em filtro de pacotes e sistemas de Proxy. O Proxy é um programa que fica entre a rede local e a rede pública (Internet), realizando o controle na comunicação entre os dois lados UCHÔA[1]:. O proxy trabalha como um intermediário entre cliente e o servidor, ou seja, ele recebe as requisições e repassa aos servidores. Uma solução estável e segura é o uso do Squid, que é um servidor Proxy que suporta HTTP, HTTPS, FTP, entre outros protocolos. Ele reduz a utilização da conexão e melhora os tempos de resposta, fazendo cache de requisições frequentes de páginas web em uma rede de computadores. Neste contexto, o objetivo deste trabalho foi implantar e avaliar o controle de acesso à Internet dentro da empresa da área moveleira com a utilização da ferramenta de proxy/cache Squid. Para isso, serão criadas políticas para o acesso à Internet, por meio de regras avançadas que estabelecem o acesso a determinadas URL’s (Blacklist e Whitelist), por grupos de usuários, endereço IP e Proxy. Em seguida, essas regras serão testadas simulando a navegação na Internet as quais devem ser supostamente aceitas ou bloqueadas. O administrador da rede fará um monitoramento em tempo real e terá a possibilidade de gerar relatórios completos de acesso a Internet por usuário. O artigo irá descrever os resultados obtidos com a utilização desta ferramenta e será apresentada a empresa de forma a equilibrar o uso da Internet. 2 - Empresa Moveleira A empresa onde o sistema foi implementado é uma empresa do segmento de fabricação de móveis para o mercado nacional e internacional, que exporta para mais de 20 países e atende a mais de 1500 lojas e redes no mercado nacional. A empresa possui aproximadamente 250 colaboradores e esta localizada no interior de Santa Catarina no sul do Brasil à aproximadamente 375 quilômetros de Florianópolis. A empresa possui uma arquitetura de rede com aproximadamente 45 microcomputadores interligados conforme diagrama em anexo. 3 - Controle de Acesso com Servidor Proxy Segundo Jucá [4]: Proxy é um servidor que atende a requisições repassando os dados do cliente a frente. Um usuário (cliente) conecta-se a um servidor proxy, requisitando algum serviço, como um arquivo, conexão, website, ou outro recurso disponível em outro servidor. O servidor Proxy torna seguro o serviço de acesso, não permitindo que o cliente e servidor público interajam diretamente, atuando como um servidor proxy que aceita as chamadas que chegam e verificando se ela está solicitando uma operação válida. Após receber a chamada e verificar se a solicitação é permitida, o servidor proxy envia a solicitação para o servidor real. Um exemplo de servidor proxy seria o Squid, Jucá [4]:. O controle de acesso do Squid tem recursos suficientes para definir com precisão quais tipos de serviços podem ser acessados por quais máquinas e em quais horários. As regras da lista de controle de acesso (Access Control List ou simplesmente ACLs) tem uma sintaxe bastante simples e são incluídas no arquivo squid.conf. Cada elemento de ACL deve ser relacionado com somente um nome. Um elemento ACL com determinado nome consiste em uma lista de valores. Quando forem sendo feitos os testes, os múltiplos valores utilizarão o operador lógico OR. Em outras palavras, um elemento ACL será válido, quando qualquer um de seus valores forem verdadeiros. 4 - Software Squid O Squid é um servidor proxy que suporta HTTP, HTTPS, FTP, entre outros protocolos. Ele reduz a utilização da conexão e melhora os tempos de resposta fazendo cache de requisições frequentes de páginas web numa rede de computadores. No cache são armazenados os objetos da Internet (ex. dados de páginas web) disponíveis via protocolo HTTP, FTP e etc. Os navegadores podem então usar o Squid local como um servidor Proxy HTTP, reduzindo o tempo de acesso aos objetos e reduzindo a utilização da conexão. Ele pode fornecer anonimato e segurança, pois ele é um intermediário no acesso aos objetos. No entanto a sua utilização pode gerar preocupações a respeito da privacidade, pois o Squid é capaz de armazenar registros sobre os acessos, incluindo as URLs acessadas, a data e hora exatas, e quem as acessou. Isto é frequentemente usado nas empresas para controle de acesso à Internet dos seus funcionários. Segundo Marcelo[2]: o Squid é um dos proxys para Linux mais utilizados hoje na Internet. As principais características segundo Wessels [8], que o Squid permite: • Utilizar menos largura de banda na sua conexão à Internet quando navegar na web; • Reduzir o tempo que as páginas levam para carregar; • Proteger os hosts da rede interna intermediando o seu tráfego web; • Coletar estatísticas sobre o tráfego web na rede interna; • Evitar que os usuários visitem sites inapropriados; • Garantir que apenas usuários autorizados possam navegar na Internet; • Melhorar a privacidade dos usuários através da filtragem de informações sensíveis em requisições http; • Reduzir a carga no servidor web; • Converter requisições HTTPS em HTTP. 5 - Implementação da Arquitetura O Estudo de Caso foi realizado em um ambiente de rede paralelo ao da empresa com uma máquina física e três máquinas virtuais configuradas da seguinte forma: • Uma máquina física com a plataforma XenServer para virtualização dos servidores. • Uma máquina virtual com o sistema operacional Windows Server 2003 onde foi instalado e configurado o Active Directory para gerenciamento de grupos e usuários. • Uma máquina virtual com o sistema Linux ubuntu-11.04-server-i386 onde foi instalado e configurado o SQUID, SAMBA, WINBIND e KERBEROS. • Uma máquina virtual com o sistema operacional Windows Server 2003 onde foi instalado e configurado o Terminal Server para efetuar os testes. 5.1 - Ferramentas Utilizadas Active Directory O Active Directory (AD) segundo Santana[6]: é um conjunto de ferramentas utilizado para o armazenamento e controle de informações sobre toda a rede, incluindo dispositivos e usuários. Realiza a tarefa de gerenciar a identidade e acesso de usuários definindo quem pode utilizar a rede e quais recursos (físicos e serviços) estarão disponíveis para cada usuário. O AD possibilita que o administrador defina grupos de usuários (por exemplo, Diretoria, Dpto. Fiscal, Comercial), com características e capacidades diferentes que podem ser atribuídas aos usuários existentes e criar políticas de acesso à infraestrutura disponível somente através da autenticação no AD. Kerberos Kerberos na definição de Filho[5]: é um serviço de protocolo de rede que permite a comunicação com Windows através de um processo seguro de autenticação em aplicações do tipo usuário/servidor. Samba e Winbind O Samba segundo Ferrari[3]: é um software para Linux que permite que estações Linux e Windows compartilhem recursos entre si. Assim, além de permitir que uma estação de trabalho Linux torne-se membro de um AD é possível usar o Linux como servidor de arquivos, servidor de impressão, entre outros. O Winbind segundo Ferrari[3]: faz a integração entre o Linux e o AD e toda a comunicação com o AD é realizada através do Samba. 5.2 - Instalando e Configurando o Servidor Proxy O objetivo é utilizar as credenciais dos usuários do AD para permitir que eles se autentiquem no SQUID. Desta forma o SQUID ira gerenciar os privilégios de cada grupo fornecendo o acesso ao usuário de acordo com o grupo. 5.2.1 - Preparação do Ambiente Active Directory: Windows Server 2003, Host: empresa.com.br, IP: 192.168.1.100. Servidor Proxy: Ubuntu-11.04-server-i386, Host: squid.empresa.com.br, IP: 192.168.1.50. 5.2.2 Instalando Samba/Winbind e integrando no AD com o protocolo Kerberos Configuração do Servidor Linux: Editando o arquivo /etc/hosts e colocamos o nome e o IP do Active Directory: # vi /etc/hosts 127.0.0.1 localhost 192.168.1.50 squid. empresa.com.br squid 192.168.1.100 ad. empresa.com.br ad 192.168.1.100 empresa.com.br empresa Em seguida configuramos IP fixo no arquivo de configuração da rede: # vi /etc/network/interfaces # The primary network interface auto eth0 iface eth0 inet static address 192.168.1.50 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255 gateway 192.168.1.1 dns-nameservers 192.168.1.100 Configurar DNS apontando pro AD: # vi /etc/resolv.conf nameserver 192.168.1.100 Acertar hora do linux de acordo com o servidor AD: # ntpdate 192.168.1.100 5.2.3 - Instalando o Kerberos Instalação # apt-get install krb5-config krb5-user Após a instalação é necessário alterar o arquivo krb5.conf com as informações do AD: # vi /etc/krb5.conf [logging] default = FILE10000:/var/log/krb5lib.log [libdefaults] default_tgs_enctypes = arcfour-HMAC-MD5 des-cbc-crc des-cbc-md5 default_tkt_enctypes = arcfour-HMAC-MD5 des-cbc-crc des-cbc-md5 ticket_lifetime = 24000 default_realm = EMPRESA.COM.BR krb4_config = /etc/krb.conf krb4_realms = /etc/krb.realms kdc_timesync = 1 ccache_type = 4 forwardable = true proxiable = true default_tkt_enctypes = des3-hmac-sha1 des-cbc-crc default_tgs_enctypes = des3-hmac-sha1 des-cbc-crc v4_instance_resolve = false v4_name_convert = { host = { rcmd = host ftp = ftp } plain = { something = something-else } } fcc-mit-ticketflags = true [realms] EMPRESA.COM.BR = { kdc = ad.empresa.com.br admin_server = ad. empresa.com.br default_domain = EMPRESA.COM.BR } [domain_realm] . empresa.COM.BR = EMPRESA.COM.BR empresa.COM.BR = EMPRESA.COM.BR [login] krb4_convert = true krb4_get_tickets = false Efetuando a comunicação entre o proxy e o AD. Antes de ingressar no domínio é importante sincronizar o horário do Linux com o AD: # ntpdate 192.168.1.100 # kinit [email protected] Se tudo ocorrer bem rodamos o comando klist e receberemos informações do Ticket Cache: # klist 5.2.4 - Instalação do Samba/Winbind Instalação # apt-get install winbind # apt-get install samba samba-common smbclient Após a instalação vamos editar o arquivo /etc/nsswitch.conf e acrescentar winbind as linhas passwd: compat e group: compat: # vi /etc/ nsswitch.conf # /etc/nsswitch.conf # # Example configuration of GNU Name Service Switch functionality. # If you have the `glibc-doc-reference' and `info' packages installed, try: # `info libc "Name Service Switch"' for information about this file. passwd: compat winbind group: compat winbind shadow: compat hosts: files dns wins networks: files protocols: db files services: db files ethers: db files rpc: db files netgroup: nis Em seguida vamos editar o arquivo /etc/samba/smb.conf com as configurações do AD: #vi /etc/samba/smb.conf [global] security = ads netbios name = squid realm = EMPRESA.COM.BR password server = 192.168.1.100 workgroup = EMPRESA idmap uid = 500-10000000 idmap gid = 500-10000000 winbind separator = + winbind enum users = yes winbind enum groups = yes winbind use default domain = yes client use spnego = yes domain master = no Nesta etapa vamos adicionar o servidor no domínio: # net ads join -U [email protected] Após o comando acima reiniciamos o Linux. Em seguida digitamos o comando abaixo para testar se o Linux ingressou no AD: # wbinfo –t Se retornar a mensagem abaixo é sinal que o Linux ingressou no AD: checking the trust secret for domain EMPRESA via RPC calls succeeded Comandos para listar todos os usuários e grupos cadastrados no Active Directory. # wbinfo –u # wbinfo –g 5.3 - Instalando e Configurando o SQUID Instalação # aptitude install squid Dando permissão para o diretório do squid: # chgrp proxy /var/run/samba/winbindd_privileged # chmod 750 /var/run/samba/winbindd_privileged Editando e configurando o arquivo /etc/squid/squid.conf: # vi /etc/squid/squid.conf ######### INICIO ########## http_port 3128 visible_hostname squid. empresa.com.br cache_mem 100 MB cache_dir ufs /var/spool/squid 100 16 256 cache_access_log /var/log/squid/access.log cache_log /var/log/squid/cache.log cache_store_log /var/log/squid/store.log dns_nameservers 192.168.1.100 logfile_rotate 0 error_directory /usr/share/squid/errors/Portuguese # Autenticação no Windows auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp auth_param ntlm keep_alive on # ACL para obter grupos do AD external_acl_type grupo %LOGIN /usr/lib/squid/wbinfo_group.pl # ACL que requisita autenticacao acl autenticado proxy_auth REQUIRED # ACL grupos do Active Directory acl acesso_restrito external grupo acessorestrito acl acesso_padrao external grupo acessopadrao acl acesso_total external grupo acessototal # ACL Libera Almoço acl almoco time 12:00-13:00 # ACL bloqueia downloads de extensoes acl down_arq urlpath_regex "/etc/squid/rules/down_arq" # ACL bloqueia sites especificos acl sites_bloqueados url_regex -i "/etc/squid/rules/sites_bloqueados" # Libera sites governo e outros acl sites_restritos url_regex -i "/etc/squid/rules/sites_restritos" # Sites sem autenticacao acl noauth url_regex -i "/etc/squid/rules/sites_sem_autenticacao" # ACLs acl all src 192.168.1.0/24 # Rede Local acl manager proto cache_object # Acls de segurança proteção do cache acl localhost src 127.0.0.1/255.255.255.255 # rede loopback acl SSL_ports port 443 # portas seguras acl Safe_ports port 80 # http acl Safe_ports port 81 acl Safe_ports port 82 acl Safe_ports port 85 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 ############ AÇÕES ############## # Nega downloads de arquivos http_access deny down_arq # Libera Almoço http_access allow almoco # Libera todos os sites para grupo AcessoTotal Active Directory http_access allow autenticado acesso_total # Nega sites especificos http_access deny sites_bloqueados # Libera todos os sites para grupo AcessoPadrão Active Directory http_access allow autenticado acesso_padrao # Libera somentes os sites contidos em /etc/squid/rules/sites_restritos para grupo AcessoRestrito Active Directory http_access allow autenticado acesso_restrito sites_restritos # Libera os sites sem autenticacao http_access allow all noauth # Bloquea tudo o restante http_access deny all ######### FIM ########## 5.3.1 - Criando os arquivos das ACLs em /etc/squid/rules ACL noauth: Inserir sites que todos os computadores da empresa terão acesso, como webmail e o site da empresa. # vi /etc/squid/rules/noauth ACL almoço: Informar o Horário definido para liberar e bloquear a internet no horário do almoço. # vi /etc/squid/rules/almoco ACL down_arq: Inserir extensões bloqueadas para download como: .exe, .scr, .bat, .cmd, .dll, e etc. # vi /etc/squid/rules/down_arq ACL sites_bloqueados: Inserir sites bloqueados como: facebook, Orkut, youtube, playboy e etc. # vi /etc/squid/rules/sites_bloqueados ACL sites_restritos: Inserir sites que os usuários restritos terão acesso como: bb.com.br, gov.br, correios.com.br e etc. # vi /etc/squid/rules/sites_restritos Após concluir as configurações acima vamos reiniciar o Linux e configurar o navegador das máquinas da rede com o proxy squid.empresa.com.br, porta 3128. 5.4 - Instalando e configurando o SARG Instalação # aptitude install apache2 # aptitude install sarg Após a instalação, criamos o diretório abaixo: # touch /var/www/html/squid-reports Em seguida editamos o arquivo sarg.conf aonde retiramos o #(comentário) da linha output_dir /var/www/html/squid-reports: #vi /etc/sarg/sarg.conf TAG: output_dir # The reports will be saved in that directory # sarg -o dir # output_dir /var/www/html/squid-reports #output_dir /var/lib/sarg Após editar o arquivo, executamos o sarg: # sarg Em seguida, para visualizar os relatórios de acesso a internet por usuário. Devemos acessar pelo navegador o endereço: http://192.168.1.50/squid-reports Para finalizar vamos agendar no Crontab a rotina para executar os relatórios automaticamente: # crontab –e 00 23 * * * sarg 00 08 * * * sarg 6 - Testes e Resultados Após concluída a etapa de implementação, testamos as regras aplicadas simulando a navegação da internet em um ambiente virtual. Neste capítulo são apresentadas capturas de telas e observações sobre o funcionamento de algumas regras e relatórios de monitoramento. A Figura 1 apresenta os grupos e usuários do Active Directory designados para a elaboração dos testes. Tais grupos apresentam as seguintes características: • Grupo Acesso Padrão: Tem como membro o usuário Matheus e permite o acesso a vários sites da Web exceto ao conteúdo da ACL sites bloqueados. • Grupo Acesso Restrito: Tem como membro o usuário Fabio e permite o acesso somente a sites da Web que constam na ACL sites restritos. • Grupo Acesso Total: Tem como membro o usuário Fabiano e permite o acesso total aos sites da Web exceto à downloads de arquivos com extensões bloqueadas. Os usuários que não fazem parte dos grupos citados terão acesso negado aos sites da Web com exceção ao conteúdo da ACL noauth. Figura 1: Grupos e usuários do Active Directory Na Figura 2 apresentamos o acesso a sites de vários gêneros do usuário Fabiano, membro do grupo acesso total que possui permissão para acessar qualquer conteúdo exceto download de arquivos com extensões suspeitas. Figura 2: Acessos do usuário Fabiano do grupo acesso total a internet Na Figura 3 apresentamos o acesso a sites permitidos e negados do usuário Matheus, membro do grupo acesso padrão que possui permissão para acessar qualquer conteúdo exceto sites bloqueados pela ACL “sites_bloqueados”. Figura 3: Acessos do usuário Matheus do grupo acesso padrão a internet Na Figura 4 apresentamos o acesso a sites permitidos e negados do usuário Fabio, membro do grupo acesso restrito que possui permissão para acessar somente o conteúdo da ACL “sites_restritos” como sites do governo e de interesse da empresa. Figura 4: Acessos do usuário Fabio do grupo acesso restrito a internet Já os usuários que não pertencem aos grupos de acesso a internet terão todo o conteúdo bloqueado exceto aos sites listados na ACL “noauth”. Na Figura 5 apresentamos o acesso do usuário Graziele. Figura 5: Acessos do usuário Graziele que não pertence aos grupos de acesso a internet 6.1 - Gerando Relatórios de Acessos Na definição de Cisneiros[7]: SARG (Squid Analysis Report Generator) é uma ferramenta desenvolvida por um brasileiro que permite verificar os acessos dos usuários na Internet através da análise do arquivo de log “access.log” do Squid. Ele permite verificar quais sites os usuários acessaram, horário do acesso, quantos bytes foram baixados, quantas conexões foram feitas, relatórios de sites mais acessados, usuários que mais acessam a Internet, relatório de sites negados, falha de autenticação, entre outros. Suas principais características estão na riqueza de detalhes dos relatórios e gráficos gerados, que estão à disposição de uma forma fácil e agradável via web permitindo uma navegação tranquila. Na figura 6 é apresentada a interface utilizada para navegar entre os períodos de acesso. Nesta tela podemos verificar a data de criação, quantos usuários e o total de bytes utilizados no período. Figura 6: Tela Principal do Sarg, lista do período de acesso Na figura 7 apresentamos a tela de tráfego por usuário, onde aparece a conexão utilizada, quantidade de bytes e tempo utilizado. Também são mostrados os usuários que mais geram tráfego. Figura 7: Acessos por usuários Nas figuras 8, 9 e 10 apresentamos o tráfego individual por usuário, ondem aparecem os sites acessados, a hora, quantidade de bytes, tempo utilizado e negado quando não respeitado as regras do proxy. Figura 8: Lista de acessos usuário Matheus Figura 9: Lista de acessos usuário Matheus Figura 10: Lista de acessos usuário Fabio 7 – Conclusão Em um cenário de riscos e necessidades, cabe aos gestores e aos profissionais da TI a implantação de mecanismos que levem seus colaboradores ao uso correto da internet, com segurança e estabilidade. A implantação do controle de acesso permitiu à empresa ter uma rastreabilidade em relação às ações de suas estações de trabalho ligadas à internet, este monitoramento reduziu a tentativa de ações ilícitas por seus funcionários, uma vez que os mesmos foram informados que suas ações estão sendo monitoradas e que relatórios gerados via web pela ferramenta SARG indicam o consumo da banda, trafego da rede, assim como também qual o protocolo mais requisitado na rede, tudo em uma pagina de Internet e caso o usuário seja flagrado acessando sites indevidos ou tentado burlar o Proxy, o seu acesso será bloqueado e suspenso, seguindo a política interna da empresa. Conclui-se que com a implantação de um servidor Proxy-Cache autenticado, o trabalho de gerenciamento da rede é mais bem aproveitado, pois há um ganho quanto ao desempenho da rede, o link de internet é otimizado, o administrador da rede pode saber especificamente quem acessou um site indevido no horário de trabalho e posteriormente a empresa pode tomar as medidas cabíveis caso necessário. 8 - Referências Bibliográficas [1] UCHOˆ A, J. Q.; SIMEONE, L. E.; SICA, F. C. Administração de Redes Linux. Lavras: UFLA/FAEPE, 2003. (Curso de Pós Graduação “Lato Sensu” (Especialização) a Distância em Administração em Redes Linux). [2] Marcelo, Antonio. Squid – Configurando o Proxy para Linux. Rio de Janeiro: Brasport, 2005. [3] Ferrari, Sandro Roberto. Sambando com Linux. AltaBooks, Edição 2/2009. [4] Jucá, Humberto L. “Técnicas Avançadas de Conectividade e Firewall: em GNU/Linux”. Rio de Janeiro, Brasport, 2005. [5] Filho, Marcos Muniz Calôr. – Trabalho de Redes de Computadores I - Acessado em 07/09/2012 http://www.gta.ufrj.br/grad/99_2/marcos/kerberos.htm [6] Santana, Fabiano de. Windows 2000 AD – Active Directory – Acessado em 08/09/2012 http://www.juliobattisti.com.br/fabiano/artigos/activedirectory.asp [7] Cisneiros, Hugo. Gerando Relatórios do Squid com o Sarg – Acessado em 21/09/2012 http://www.devin.com.br/sarg/ [8] Wessels, D. Squid – Tha Definetive Guide. [S.1]: O’ Reilly, 2004. Anexo Anexo I – Arquitetura da Rede