Vous êtes sur la page 1sur 42

FACULDADE SANTA MARIA PS-GRADUAO EM SEGURANA DE REDES E SISTEMAS

TRABALHO FINAL DA DISCIPLINA Centralizao de Logs

ALUNOS: DANIEL PEREIRA DE MELO EDUARDO KROPNICZKI AZEVEDO FBIO IRAKTAN GLEUDSON PINHEIRO VAREJO JUNIOR KLEBER ALVES LEAL DATA: 26/08/2010 DISCIPLINA: ARQUITETURA DE REDES E FERRAMENTAS DE AUDITORIA PROFESSOR: JOO PAULO CAMPELLO

ndice
1 INTRODUO.....................................................................................................................................3 2 RESUMO EXECUTIVO.......................................................................................................................4 3 IMPLEMENTAO TCNICA...........................................................................................................6 3.1 Instalando e Configurando o Firewall............................................................................................6 3.1.1 Configurao da Rede.............................................................................................................6 3.1.2 Poltica do Firewall.................................................................................................................8 3.2 Servios da DMZ..........................................................................................................................13 3.2.1 Proxy Reverso.......................................................................................................................13 3.2.2 SQUID..................................................................................................................................17 3.2.3 Servidor de VPN...................................................................................................................23 3.3 Servios de Produo...................................................................................................................32 3.3.1 Aplicao WEB vulnervel...................................................................................................32 3.3.2 Configurando Log4J para enviar logs para o Syslog............................................................34 3.4 Log Host.......................................................................................................................................36 3.5 Log Clients...................................................................................................................................37 3.6 Rotacionamento de Logs..............................................................................................................38 4 TERMINOLOGIA...............................................................................................................................40 5 CONCLUSES...................................................................................................................................41 6 REFERNCIAS...................................................................................................................................42

1 INTRODUO

Este documento tem como objetivo documentar uma soluo de centralizao de logs gerados pelos diversos servios em uma rede de computadores. Para demonstrar a soluo tomamos como exemplo configurao de alguns servios frequentemente utilizados em redes corporativas, como firewall, servidores de aplicaes java e um proxy.

O pblico alvo deste documento so administradores de rede que pretendem montar uma soluo de armazenamento de logs centralizado, facilitando a autidoria e evitando que invasores apaguem os rastros deixados em suas aes. Para a execuo do contedo aqui descrito necessrio que o leitor tenha conhecimento sobre administrao do sistema operacional Linux, conhecimento bsico sobre tomcat, rede e firewall.

2 RESUMO EXECUTIVO
Virtualmente todos os servios computacionais geram informaes de auditoria chamadas Logs. Vrios desafios podem ser apontados para os administradores de sistemas para executar a tarefa principal, que extrair informaes relevantes da massa de dados gerada: a) Descentralizao: Normalmente os servios esto distribudos pelo parque tecnolgico,

em mquinas fisicamente separadas e com arquiteturas heterogneas. b) Formato: Os sistemas geram os seus prprios logs em formatos diferentes, o que

dificulta bastante a tarefa de consolidao e extrao de informao. c) Limiar (Threshold) dos Logs: Configurar os diversos servios de modo que a

quantidade de dados gerado atinja dois objetivos: Evitar o armazenamento de contedo desnecessrio; e , por outro lado, garantir que nenhum dado importante para a extrao de informao seja gerado. Este trabalho objetiva enderear o primeiro, e, em menor grau, o segundo desafio. A proposta criar um ambiente de Centralizao de Logs, composto por um segmento de rede isolado dos demais e de um Servidor de Logs, chamado de Log Host. Este ambiente de rede isolado abrigar o software Syslog-ng, que atuar fazendo o recebimento dos logs dos diversos hospedeiros situados na rede corporativa, que se conectaro a ele atravs de uma Virtual Private Network. Os servios que sero includos no processo de centralizao dos logs foram escolhidos por serem essenciais ao funcionamento do negcio. Eles incluem: Servidor Proxy Squid, Servidor de Aplicaes Java Apache Tomcat e Servidor Web Apache em modo Proxy Reverso. As dificuldades encontradas concentraram-se na forma de comunicao dos servios computacionais com o Log Host, j que, dada sua heterogeneidade, foi necessrio um esforo de pesquisa e implementao considervel. A execuo deste trabalho trouxe como resultado o fornecimento de uma ferramenta de extrao de informao bastante til aos administradores, uma vez que estes podem agora recorrer a um nico servidor que ir centralizar todos os logs. Algumas possibilidades se abrem com esse cenrio. Uma delas a facilidade de implementao de uma ferramenta automao do processo de anlise dos logs.

Por outro lado, no se descuidou da questo da segurana da informao, j que o ambiente de centralizao est praticamente isolado dos demais. A figura abaixo detalha o cenrio da soluo proposta:

3 IMPLEMENTAO TCNICA 3.1 Instalando e Configurando o Firewall


Nesta sesso trataremos da instalao e configurao do Firewall, que ser empregado para aplicar uma poltica de segurana nos diversos segmentos da rede, seguindo a descrio da topologia concebida no inicio desse documento, realizando tambm a regulao do trafego de dados entre os segmentos e impedindo a transmisso e, ou, recepo de acessos maliciosos e no autorizados de uma rede para outra. Para implementao deste servio, utilizaremos o Firewall Iptables. A escolha do Iptables se deve ao fato dele ser Software Livre, por ser nativo na maioria das atuais distribuies Linux, bem como pela grande escala de utilizao no mercado, fazendo com que o mesmo possua uma constante atualizao das falhas e mantenha um suporte efetivo atravs da vasta documentao disponvel. Com havamos mencionado, o Iptables uma ferramenta nativa do Kernel Linux e est disponvel na maioria das atuais distribuies Linux. No nosso caso em especificado, implementaremos o Firewall sob a distribuio Ubuntu Server 9.10 que derivada do GNU/Debian. Como premissa bsica, consideramos que o sistema operacional est completamente instalado, necessitando ento da configurao das redes para os seus respectivos segmentos, da configurao de regras para o acesso a internet e das regras para a implantao da poltica de segurana definida durante o planejamento

3.1.1

Configurao da Rede
O Firewall deve possuir 05(quatro) interfaces de rede, conforme mostrado na topologia da rede.

Para realizar a configurao das interfaces devemos editar e modificar o arquivo interfaces encontrado, para esta distribuio, no diretrio /etc/network/. Para tanto, vamos rodar em um terminal os respectivos comandos:

#cd/etc/network/ #viminterfaces

Agora devemos adicionar as seguintes linhas no arquivo: interfaces. Elas daro conta da configurao de cada interface de rede para cada segmento da nossa topologia:

# #Autor:GleudsonJunior #Data:11/09/2010 # # #CONFIGURAODAREDEEXTERNA(INTERNET) # autoeth0 ifaceeth0inetdhcp # #CONFIGURAODAREDEDMZ # autoeth1 ifaceeth1inetstatic address192.168.1.1 network192.168.1.0 netmask255.255.255.0 broadcast192.168.1.255 # #CONFIGURAODAREDEDELOG # autoeth2 ifaceeth2inetstatic address192.168.2.1 network192.168.2.0 netmask255.255.255.0 broadcast192.168.2.255 # #CONFIGURAODAREDEDEPRODUO # autoeth3 ifaceeth3inetstatic address192.168.3.1 network192.168.3.0 netmask255.255.255.0 broadcast192.168.3.255 # #CONFIGURAODAREDECORPORATIVA # autoeth4 ifaceeth4inetstatic address192.168.4.1 network192.168.4.0 netmask255.255.255.0 broadcast192.168.4.255

#SALVAEFECHAR :x

Vamos reiniciar a configurao da rede para que as interfaces recebam as devidas alteraes. Rode ento o comando abaixo:

#/etc/init.d/networkingrestart

3.1.2

Poltica do Firewall

Chegou o momento de configurarmos as regras para a poltica de segurana estabelecida para rede, bem como a liberao do acesso a internet para os segmentos. Para realizar a configurao das regras precisamos primeiro entender o conceito bsico sobre o Firewall Iptables, descrevendo a funo especifica que cada tabela exerce e como estas so aplicadas.

Seguem abaixo alguns desses conceitos:

As regras do Iptables so como filtros aplicados para que o mesmo implemente o que chamamos de filtro de pacote de acordo com o endereo IP/porta de origem/destino, interface de origem/destino, etc. As regras so armazenadas dentro dos chamados chains e processadas na ordem que so inseridas. Estas mesmas regras so armazenadas no kernel do Linux, o que significa que quando o sistema reinicializado as mesmas so perdidas.

A sintaxe bsica de uma regra a seguinte:

#iptablescomandoparmetrosextenses

Comandos principais

Basicamente o Iptables tem as seguintes regras:

DROP: nega pacotes sem envio de um flag Reset - R ACCEPT: aceita pacotes. REJECT: nega pacotes mas envia um flag Reset - R

O envio de um flag reset pode facilitar a deteco por um scanner de uma porta aberta em um sistema, por isso utilizamos normalmente a poltica DROP.

Tabelas (tables)

As tabelas so reas na memria usadas para armazenar as regras (chains). Elas podem utilizar a seguinte sintaxe:

#iptablesopesttabela

Existem 03 tabelas disponveis no Iptables. So elas: a) Tabela filter: considerada a tabela padro. Contm 03 chains bsicas:

INPUT: utilizada para pacotes que chegam prpria mquina; OUTPUT: utilizada a para pacotes que saem da prpria mquina; FORWARD: utilizada para pacotes que so redirecionados para outra interface de rede. tambm utilizada para mascaramento de pacotes.

b) Tabela Nat: usada para passagem de pacotes que podem gerar outra conexo. Um exemplo clssico o mascaramento (MASQUERADE), nat, port forwarding e proxy transparente so alguns. Contem 03 chains bsicas:

PREROUTING: utilizada quando os pacotes precisam ser redirecionados logo que chegam; OUTPUT: utilizada quando os pacotes gerados localmente precisam ser redirecionados antes de serem roteados;

POSTROUTING: utilizada quando os pacotes precisam ser modificados aps o tratamento de roteamento.

c) Tabela mangle: utilizada para alteraes especiais de pacotes como, por exemplo, modificar o tipo de servio (TOS) de um pacote. Ideal para produzir informaes falsas para scanners Possui 02 chains padres:

PREROUTING: utilizada quando os pacotes precisam ser redirecionados logo que chegam; OUTPUT: utilizada quando os pacotes gerados localmente precisam ser redirecionados antes de serem roteados.

Bem, agora chega a hora de configurar o Iptables de verdade. Antes devemos criar um arquivo que alocar todas as regras do Firewall, vamos cham-lo de meu_firewall, ele dever ficar no diretrio /etc/network/if-up.d/, isso far com que o sistema leia todas as regras sempre que for levantando. Para tanto, vamos rodar os respectivos comandos em um terminal:

#cd/etc/network/ifup.d #vimmeu_firewall

Agora devemos adicionar as seguintes linhas no arquivo: meu_firewall. Elas daro conta da configurao das regras definidas para cada segmento da topologia:
!#/Bin/sh # #Autor:GleudsonJunior #Data:11/09/2010 #

# #CARREGANDOMDULOS # modprobeip_conntrack_ftp modprobeip_nat_ftp # #ATIVANDOOREDIRECIONAMENTODEPACOTES # echo1>/proc/sys/net/ipv4/ip_forward # #REMOVENDOREGRASDASTABELAS # iptablesF iptablestnatF iptablestmangleF # #APAGANDOCHAINSDASTABELAS # iptablesX iptablestnatX iptablestmangleX # #ZERANDOCONTADORESDASTABELAS # iptablesZ iptablestnatZ iptablestmangleZ # #POLITICAPADRO(FECHANDOOFIREWALL) # iptablesPINPUTDROP iptablesPOUTPUTDROP iptablesPFORWARDDROP # #LIBERANDOAINTERFACEDELOOPBACK # iptablesAINPUTilojACCEPT # #MANTENDOOESTADODASCONEXES # iptablesAINPUTmstatestateESTABLISHED,RELATEDjACCEPT iptablesAOUTPUTmstatestateESTABLISHED,RELATEDjACCEPT iptablesAFORWARDmstatestateESTABLISHED,RELATEDjACCEPT # #ATIVANDOOMASCARAMENTOLIBERANDOACESSOEXTERNOAOSSEGMENTOS # iptablestnatAPOSTROUTINGs192.168.1.0/24oeth0jMASQUERADE iptablestnatAPOSTROUTINGs192.168.2.0/24oeth0jMASQUERADE iptablestnatAPOSTROUTINGs192.168.3.0/24oeth0jMASQUERADE iptablestnatAPOSTROUTINGs192.168.4.0/24oeth0jMASQUERADE

# #LIBERANDOAPORTAPARACONEXONOSERVIDORDEVPN # iptablesAFORWARDd192.168.1.11pudpdport1194jACCEPT # #PROTEOCONTRAATAQUESCONHECIDOS # iptablesAINPUTmstatestateINVALIDjDROP #SYN iptablesAFORWARDptcpsynmlimitlimit1/sjACCEPT #SCANS iptablesAFORWARDptcptcpflagsSYN,ACK,FIN,RSTRSTmlimitlimit1/sj ACCEPT #PINGDAMORTE iptablesAFORWARDpicmpicmptypeechoreplymlimitlimit1/sjRETURN #SALVAEFECHAR :x

Devemos tambm atentar para determinar a permisso correta no arquivo meu_firewall, nesse caso ser a permisso de execuo. Vamos d essa permisso com o comando abaixo:
#chmod+xmeu_firewall

Aps realizar todas as configuraes hora de rodar o script e iniciar o Firewall. Para tanto utilize o comando abaixo:
#./meu_firewall

Pronto, aps realizar todos os passos conforme descritos nesse documento, tero o Firewall Iptables em produo, executando as devidas regras para a poltica de segurana planejada para a rede. Falta apenas testar se realmente as configuraes foram vlidas e funcionam, para isso, levante uma maquina cliente com as configuraes de rede do segmento que ela pertence.

3.2
3.2.1

Servios da DMZ
Proxy Reverso
Nesta sesso trataremos da instalao e configurao do Proxy Reverso, que ser instalado nas

imediaes dos servidores da DMZ, ou seja, ele ser colocado como o primeiro servidor que a internet enxergar, ficar incumbido de efetuar o repasse do trafego de rede recebido para o conjunto de servidores da DMZ. Para implementao deste servidor de Proxy Reverso utilizaremos o Apache. A escolha se deve ao fato do Apache ser Software Livre, por estar presente nos repositrios oficiais das principais distribuies Linux e tambm por possuir uma grande fatia do mercado em servidores Web, fazendo com que o mesmo possua uma constante atualizao das falhas e mantenha um suporte efetivo atravs da vasta documentao disponvel. Outro ponto importante na escolha no Apache, foi a facilidade na sua implementao. Nos estudos realizados tnhamos tambm o Squid e o Varnish como opes, porem os resultados no foram to satisfatrios quanto no Apache. O Apache est disponvel para instalao em uma grande variedade de sistemas operacionais, incluindo Linux e Windows. Neste documento trataremos da instalao sob o sistema operacional Linux, mais especificamente na distribuio CentOS 5.4 que derivado do Red Hat. Como premissa bsica, consideramos que o sistema operacional est completamente instalado, com a rede configurada de acordo com as faixas de IP definidas no Firewall e tambm que o servidor possui acesso Internet para realizar o acesso aos repositrios de pacotes. Instalao e Configurao do Apache

Primeiro vamos instalar o Apache 2.2.3 atravs do comando abaixo:


#yuminstallhttpdhttpddevel

Com o Apache devidamente instalado, vamos partir para sua configurao. Como nosso intuito disponibilizar um servidor de Proxy Reverso, vamos tratar apenas da configurao dos mdulos especficos do servidor Apache.

Agora precisamos especificar nosso cenrio, o que facilitar no entendimento ao decorrer da implementao. Ento: Teremos a pagina principal da empresa: www.posdeseguranca.com Teremos uma aplicao denominada alunos da empresa: sca.posdeseguranca.com

A inteno tornar todos os servios da empresa acessveis somente pela pagina principal: www.posdeseguranca.com. Por tanto, aps efetuar a configurao e iniciar o servio, teremos: Aplicao sca (Sistema de Controle de Alunos) em: www.posdeseguranca.com/sca

Vamos partir para configurao dos mdulos do Proxy Reverso no Apache, acessando o arquivo: /etc/httpd/conf/httpd.conf. Devemos verificar se as seguintes linhas esto comentadas no arquivo. necessrio tirar os comentrios (#). Nota: preferencial fazer um backup do arquivo original httpd.conf antes de qualquer modificao, assim se ocorrer algum problema durante a implementao poderemos recuperar a configurao inicial do Apache. Vamos rodar os seguintes comandos em um terminal:
#cd/etc/httpd/conf #cphttpd.confhttpd.conf.ORIG #vimhttpd.conf LoadModulerewrite_modulemodules/mod_rewrite.so LoadModuleproxy_modulemodules/mod_proxy.so LoadModuleproxy_http_modulemodules/mod_proxy_http.so LoadModuledisk_cache_modulemodules/mod_disk_cache.so LoadModuledeflate_modulemodules/mod_deflate.so LoadModuleheaders_modulemodules/mod_headers.so

Agora vamos adicionar e salvar as seguintes linhas no final do arquivo: /etc/httpd/conf/httpd.conf


<VirtualHost*:80> ServerNamewww.posdeseguranca.com ProxyPreserveHoston ProxyPass/scahttp://sca.posdeseguranca.com/sca ProxyPassReverse/scahttp://www.podeseguranca.com/sca <Location/sca> Orderdeny,allow </Location>

#SALVAEFECHA :x

Configurao dos Hosts

Chegou o momento de configurar o arquivo: /etc/hosts, para que o mesmo processe a traduo dos ips para os nomes escolhidos (cenrio). Para tanto, devemos rodar os comandos:
#cd/etc #vimhosts

Agora vamos inserir e salvar as seguintes linhas no arquivo: hosts:


192.168.1.10www.posdeseguranca.com 192.168.1.10sca.posdeseguranca.com #SALVAEFECHAR :x

Hora de mudar o nome do servidor para o nome que escolhemos e especificamos no cenrio da implementao: www.posdeseguranca.com. Vamos editar e salvar o arquivo abaixo:
#vim/etc/sysconfig/network

Altere o valor, conforme descrito abaixo:


HOSTNAME=www.posdeseguranca.com #SALVAEFECHAR :x

Aps a execuo de todos os passos mencionados acima, o servidor de Proxy Reverso est configurado e pronto para entrar em produo. Para inici-lo execute o comando abaixo:
#servicehttpdstart

Se todas as configuraes foram realizadas com sucesso dever ser exibida a seguinte mensagem:
*Startingwebserverapache2[OK]

Configurao do apache para enviar os logs para o LogHost

Primeiramente vamos configurar o arquivo httpd.conf, que fica localizado no diretrio /etc/http/conf/httpd.conf, fazendo com que o mesmo envie os logs do servidor httpd para o syslog. Abra um terminal e digite os seguintes comandos:

#cd/etc/http/conf/ #vimhttpd.conf

Dentro do arquivo vamos localizar as seguintes linhas: ErrorLog e CustomLog. Vamos precisar comentar algumas regras pr-definidas e criar novas logo abaixo. Obs.: para localizar essas linhas usando o vim, por exemplo, basta digitar / e a descrio da sua busca: Vamos comentar as regras:

ErrorLoglogs/error_log CustomLoglogs/access_logcombined

Agora vamos acrescentar as seguintes regras, bem abaixo da sua respectiva linha:

ErrorLogsyslog:local1 CustomLogsyslog:local1combined

Aps a execuo de todos os passos, devemos restartar o Proxy Reverso:


#servicehttpdrestart

Agora vamos configurar o arquivo syslog.conf, que fica localizado no diretrio /etc/, fazendo com que o mesmo envie os logs do servidor para o Servidor de LogHost. Abra um terminal digite os seguintes comandos:

#cd/etc/ #vimsyslog.conf

No final do arquivo vamos acrescentar as seguintes linhas:


# #RECEBEOSLOGSDOAPACHE # local1.* /var/log/apache.log # #ENVIAOSLOGSDOAPACHEPARAOLOGHOST # local1.* @10.8.0.90

Aps a execuo de todos os passos, devemos reiniciar o syslog:


#servicesyslogrestart

3.2.2

SQUID

O servidor Squid Web Proxy Cache gratuito e funciona em cdigo aberto para Unix e Linux. Ele permite que os administradores implementem um servio de proxy caching para Web, acrescentem controles de acesso (regras), e armazenem at mesmo consultas de DNS. O Squid originou-se de um programa desenvolvido pelo projeto Harvest chamado cached (Cache Daemon). A National Science Foundation (NSF) financia o desenvolvimento do Squid atravs do National Laboratory of Network Research (NLANR). O Squid um Web proxy cache que atende especificao HTTP 1.1. utilizado somente por clientes proxy, tais como navegadores Web que acessem Internet utilizando HTTP, Gopher e FTP. Alm disso, ele no trabalha com a maioria dos protocolos Internet. Isto significa que ele no pode ser utilizado com protocolos que suportem aplicativos como vdeo-conferncia, newsgroups, RealAudio, ou videogames como o Quake ou Counter Strike. O principal motivo destas limitaes que o Squid no compatvel com programas que utilizem UDP. O Squid usa o UDP somente para comunicao intercache. Qualquer protocolo de cliente suportado pelo Squid deve ser enviado como um pedido de proxy no formato HTTP. A maioria dos navegadores suporta esta funo, portanto, os protocolos FTP, HTTP,

SSL (Secure Socket Layer), WAIS (Wide Area Information Server) so suportados na maioria das redes que utilizam o Squid. Os protocolos funcionaro se voc os solicitar utilizando o seu navegador e se ele estiver configurado como um cliente proxy para o servidor Web proxy cache. O Squid tambm suporta protocolos internos e de administrao. Tais protocolos so usados entre os caches que puderem existir em outros no mesmo ou em outros servidores de proxy-caching, ou para a administrao de um proxy cache.

Requisitos de Sistema Especficos para o Proxy Caching

O Squid utiliza mais recursos de sistema do que outros aplicativos. Os dois principais subsistemas de hardware que o Squid utiliza e deve ter um bom desempenho o tempo de busca aleatria e a quantidade de memria no sistema. Tempo de busca aleatria em disco Para um proxy cache, o tempo de busca aleatria deve ser o mais baixo possvel. O problema que os sistemas operacionais procuram aumentar a velocidade de acesso em disco utilizando vrios mtodos que geralmente reduzem o desempenho do sistema; Quantidade de memria do sistema A memria RAM extremamente importante para a utilizao de um proxy cache. O Squid mantm uma tabela na memria RAM sobre os seus objetos. Se uma parte dessa tabela tiver que sofrer swapping, o desempenho do Squid ser bastante degradado. O Squid um processo, ento qualquer swapping tornar o programa mais lento. Por exemplo, se voc tiver 16 GB armazenados no cache, precisar de 96 MB (aproximadamente) de RAM para o indce de objetos. Outros requisitos do sistema, como velocidade de CPU, no so to importantes assim. A velocidade do processador somente ser notado durante o incio do sistema (durante a criao do indce de objetos). Um sistema multiprocessado no constuma fazer diferena no desempenho do proxy cache, pois o Squid contm uma pequena poro de cdigo encadeado.

Instalando o Squid Podemos fazer uso dos repositrios para isto. Como root, digite os seguintes comandos:

#aptitudeupdate #aptitudeupgrade #aptitudeinstallsquid

Configurao do Squid

O arquivo de configurao padro do squid est em /etc/squid/squid.conf. vamos configurar o Squid. Este arquivo define as configuraes, tais como o nmero da porta HTTP em que o Squid ouvir os pedidos HTTP, pedidos de entrada e sada, informaes de timeout e dados de acesso ao firewall. O arquivo foi criado durante a instalao do Squid. O arquivo squid.conf definido com as configuraes padro do Squid e pode ser utilizado aps vrias modificaes. necessrio realizar as alteraes, pois por padro, o squid.conf nega o acesso a todos os navegadores. O Squid ser completamente intil at que voc faa as alteraes no arquivo. Cada opo de configurao no squid.conf identificada como uma tag. Cada tag uma configurao do Squid. Por exemplo, a definio de porta de pedido de cliente HTTP identificada pela tag http_port. O arquivo squid.conf estar localizado no diretrio /usr/local/squid/etc (no meu exemplo), se voc instalar atravs de um pacote binrio o arquivo pode estar no diretrio /etc ou /etc/squid. O arquivo de configurao do squid auto-documentvel, ou seja, todas as tags possuem uma explicao sobre a configurao. Veja o exemplo:
#TAG:http_port #Usage:port #hostname:port #1.2.3.4:port # #ThesocketaddresseswhereSquidwilllistenforHTTPclient #requests.Youmayspecifymultiplesocketaddresses. #Therearethreeforms:portalone,hostnamewithport,and #IPaddresswithport.IfyouspecifyahostnameorIP #address,thenSquidbindsthesockettothatspecific #address.Thisreplacestheold'tcp_incoming_address' #option.Mostlikely,youdonotneedtobindtoaspecific #address,soyoucanusetheportnumberalone. # #Thedefaultportnumberis3128. # #IfyouarerunningSquidinacceleratormode,thenyou #probablywanttolistenonport80also,orinstead. # #Theacommandlineoptionwilloverridethe*first*port

#numberlistedhere.ThatoptionwillNOToverrideanIP #address,however. # #Youmayspecifymultiplesocketaddressesonmultiplelines. # #IfyourunSquidonadualhomedmachinewithaninternal #andanexternalinterfacethenwerecommendyoutospecifythe #internaladdress:portinhttp_port.ThiswaySquidwillonlybe #visibleontheinternaladdress. # #Default: #http_port3128

Por padro, todas as linhas do Squid esto desabilitadas. Para habilitar, devemos retirar o caracter # que aparece antes da tag. Se voc no modificar o arquivo de configurao, o Squid rodar com as configuraes padres.

Tag HTTP_PORT

Esta tag configura a porta HTTP onde o Squid ouve os clientes proxy. A porta padro a 3128. A porta 8080 tambm costuma ser utilizada. possvel configurar as duas portas para o Squid aceitar as requisies. Abra o arquivo squid.conf procure a tag para realizar a configurao.

#internaladdress:portinhttp_port.ThiswaySquidwillonlybe #visibleontheinternaladdress. # #Default: #http_port3128

Mude para:

http_port31288080

Tag CACHE_DIR

Esta tag define onde os dados do cache sero armazenados. Voc poder definir outros diretrios, bastando para tal, incluir novas tags cache_dir. O padro :

#oneswithnomaxsizespecificationlast. # #Default: #cache_dirufs/usr/local/squid/var/cache10016256

Caso no seja necessrio mexer nesta configurao, no necessrio habilitar a linha

Valor da Tag cache_dir ufs

/usr/local/squid/var/cache 100

16

256

Descrio Define os valores do diretrio de cache utilizado pelo Squid. O Squid assume a utilizao de um sistema de arquivos Unix (ufs) para o sistema de armazenamento do cache. O diretrio de todos os objetos armazenados no cache ser neste diretrio. Quantidade de dados armazenados que o Squid colocar no diretrio de cache. O tamanho padro do cache de 100 MB. Define o nmero de subdiretrios a serem criados no cache. O Squid divide os objetos armazenados no cache entre esses subdiretrios para agilizar o acesso aos dados. Por exemplo, o Squid encontrar um objeto muito mais rapidamente buscando em diversos diretrios no cache, em vez de buscar em um nico diretrio com centenas de milhares de objetos. Define o nmero de subdiretrios secundrios a serem criados no cache. Se o seu cache for extremamente grande, voc dever aumentar estes valores. Para a maioria das implementaes, estes valores de subdiretrio so suficientes.

Tag LOG_ACCESS

O diretorio onde se encontram os arquivos gerados esto em: /var/log/squid O registro de toda atividade como URLS acessadas, e falhas na autenticao esto em: /var/log/squid/access.log O registro das informaes do cache esto em: /var/log/squid/cache.log

O registro de atividade dos objetos gravados e retirados do cache: /var/log/store.log Se desejarmos enviar os logs para um servidor remoto preciso alterar o caminho do access_log dentro do arquivo de configurao /etc/squid/squid.conf e enviar para o syslog. access_log syslog:LOG_LOCAL:4 squid

Tag ACL

Esta tag permite a definio de uma lista de acesso. A lista de acesso pode conter endereos de IP de clientes, uma faixa de endereos, o endereo de um servidor de URL, endereo de uma mquina local ou domnios. Qualquer lista de acesso que voc definir utilizando esta tag poder ser utilizada mais tarde para permitir ou negar pedidos ao servidor de cache. Para permitir o acesso da rede local inclua:
aclredelocalsrc192.168.4.0/24

* onde 192.168.4.0/24 o IP da rede local.

Tag HTTP_ACCESS

Esta tag permite ou nega o acesso ao Squid. Voc pode permitir ou negar todos os pedidos. Tambm possvel permitir ou negar pedidos baseados em uma lista de acesso pr-definida. Se for removido todas as entradas http_access, todos os pedidos sero permitidos por padro. Os clientes proxy no sero capazes de usar o servidor Squid proxy-caching at que voc modifique as tags http_acess. Observe que recomenda-se algum nvel de controle de acesso, por isso no remova todas as tags http_access. necessrio permitir o acesso da rede local. Inclua a seguinte linha:

http_accessallowredelocal

Carregando e Testando o Squid

Para saber se est funcionando, voc dever iniciar o servio Squid e depois usar o programa cliente do

Squid no servidor local para verificar se os dados da pgina Web esto sendo gravados no cache. O cliente do Squid apresenta dados medida que so gravados no cache, e extremamente til no teste do funcionamento do cache proxy e na soluo de problemas. Inicie o proxy cache Squid com o seguinte comando:

#/etc/init.d/squidstart

Se aparecer alguma mensagem de erro, verifique os arquivos de logs. Configurado o squid, agora necessrio configurar o syslog-ng para enviar os logs para o servidor. Para isso edite o arquivo /etc/syslog-ng.conf conforme abaixo:
destinationdf_user{file(/var/log/user.log);}; destinationdf_uucp{file(/var/log/uucp.log);}; destinationdf_loghost{udp(10.8.0.90);};

log{ source(s_all); filter(f_syslog); destination(df_loghost); };

Reinicie o syslog-ng para efetivar as configuraes.

3.2.3

Servidor de VPN

Esta seo trata da instalao e configurao de um servidor de VPN, que ser utilizado para o estabelecimento de uma comunicao segura contra sniffing, arp spoofing e outros tipos de ataques, entre os servidores que iro fornecer cada servio descrito na topologia e o loghost. Para a implementao deste servidor de VPN utilizaremos o OpenVPN 1. A escolha do OpenVPN ocorreu por este ser software livre, por estar presente nos repositrios oficiais das principais distribuies de Linux da atualidade e tambm por possuir uma grande fatia do mercado em servidores de VPN. O OpenVPN est disponvel para instalao em uma grande variedade de sistemas operacionais, incluindo Linux e Windows. Neste documento trataremos da instalao sob o sistema operacional
1 Site do OpenVPN em http://www.openvpn.net

Linux, mais especificamente nas distribuies Debian ou Ubuntu Server. Como premissa consideramos que o sistema operacional est completamente instalado, com a rede configurada e tambm que o servidor possui acesso Internet para realizar o acesso aos repositrios de pacotes. Antes de iniciar a instalao do OpenVPN nas distribuies Debian ou Ubuntu Server necessrio sincronizar os metadados com informaes sobre quais pacotes e verses esto disponveis nos repositrios, para isso executamos o comando aptitude conforme mostrado abaixo:

#aptitudeupdate

Com a listas de pacotes atualizada inciamos o procedimento de instalao do OpenVPN conforme comando mostrado abaixo:
#aptitudeinstallopenvpn

Aguarde enquanto o sistema baixa os pacotes necessrios e realiza a instalao de cada um deles. O tempo necessrio para esta atividade pode variar de acordo com a banda de download disponvel ou a carga nos servidores de repositrio da distribuio.

O Servidor

Concluda a instalao necessrio configurar o OpenVPN. Para isso colocamos um arquivo, com extenso .conf, no diretrio /etc/openvpn. Neste documento criaremos um arquivo com o nome server.conf. Para a construo do referido arquivo utilizaremos como base o arquivo disposto no diretrio de exemplos (examples), existente no diretrio de documentao, no caminho /usr/share/doc/openvpn. Para a configurao do OpenVPN tambm ser necessria a utilizao de uma Autoridade Certificadora para assinatura dos Certificados Digitais do servidor e tambm de cada cliente da VPN. Uma Autoridade Certificadora de exemplo tambm est disponvel no diretrio de documentao do OpenVPN, no subdiretrio examples/easy-rsa/2.0.

Vamos agora criar a nossa Autoridade Certificadora a partir do exemplo citado acima. Para isso copie o diretrio /usr/share/doc/openvpn/examples/easy-rsa/2.0 para o diretrio /opt. Em seguida renomeie o diretrio copiado para AC.

#cpr/usr/share/doc/openvpn/examples/easyrsa/2.0/opt #cd/opt;mv2.0AC

Uma vez copiada a Autoridade Certificadora precisamos definir as configuraes como: Pas, Estado, Cidade, Organizao e E-mail. Estas informaes ficaro armazenadas em cada certificado digital emitido pela Autoridade Certificadora. Para isto devemos editar o arquivo vars encontrado no diretrio /opt/AC definindo os valores das variveis localizadas no final do arquivo, conforme mostrado abaixo:

exportKEY_COUNTRY=BR exportKEY_PROVINCE=Pernambuco exportKEY_CITY=Recife exportKEY_ORG=SuaOrganizacao exportKEY_EMAIL=admin@seudominio.com.br

necessrio tambm inicializar a Autoridade Certificadora, para isso execute os comandos abaixo:
#cd/opt/AC #sourcevars #./cleanall #./buildca

Confirme as informaes solicitadas durante a execuo do comando ./build-ca. Como as variveis j foram configurados editando-se o arquivos vars, os valores padro j refletiro ao seu ambiente, sendo necessrio somente informar o campo Name com o valor Autoridade Certificadora VPN. Tambm ser necessrio gerar a chave Diffie-Hellman, que ser utilizada para realizar a troca segura de chaves de criptografia em um canal no confivel, e gerar o certificado digital do servidor de VPN. Durante a criao do certificado digital do servidor, confirme todas os valores pressionando <Enter> e ao final confirme a assinatura do certificado digital pela Autoridade Certificadora criada anteriormente.

#./builddh #./buildkeyservervpn.seudominio.com.br

Aps a execuo dos passos at este ponto, teremos no diretrio keys os certificados digitais e chaves privadas da Autoridade Certificadora e tambm do servidor de VPN. Com estes certificados criados, precisamos agora configurar o OpenVPN. Para isso vamos iniciar o procedimento descrito nas linhas que seguem. Tenha um cuidado especial com as chaves privadas, pois elas devero ser mantidas em total sigilo, mantendo sempre o usurio root como proprietrio e as permisses de leitura apenas para o usurio proprietrio. Vamos agora copiar o arquivo de configurao de exemplo encontrado no diretrio de documentao do OpenVPN para o diretrio /etc/openvpn. Como o arquivo de configurao copiado est compactado, ser necessrio decompact-lo com o aplicativo gunzip.

#cd/etc/openvpn #cp/usr/share/doc/openvpn/examples/sampleconfigfiles/server.conf.gz. #gunzipserver.conf.gz

Conforme configurado no arquivo server.conf, o certificado digital da autoridade certificadora dever estar localizado no diretrio /etc/openvpn. O certificado digital do servidor e a chave privada correspondente, criado anteriormente, esto armazenados nos arquivos vpn.seudominio.com.br.crt e vpn.seudominio.com.br.key tambm devero ser copiados para o diretrio /etc/openvpn.

#cd/etc/openvpn #cp/opt/AC/keys/ca.crt. #cp/opt/AC/keys/vpn.seudominio.com.br.{crt,key}. #cp/opt/AC/keys/dh1024.pem.

Com o arquivo de configurao do servidor no devido diretrio, ser necessrio ajustar as configuraes para refletir as configuraes desejadas. Ento, utilizando o seu editor preferido, edite o arquivo server.conf localizado no diretrio /etc/openvpn e faa as alteraes conforme mostrado abaixo:

certvpn.seudominio.com.br.crt keyvpn.seudominio.com.br.key clientconfigdirccd clienttoclient

O servidor de VPN, no nosso caso, dever fornecer sempre os mesmos endereos para os clientes, possibilitando a aplicao de regras de firewall de forma individual e tambm permitir o roteamento entre clientes. Para isso faz-se necessrio descomentar a linha client-config-dir e client-to-client,

localizadas no arquivo server.conf. Realizado o procedimento, ser necessrio criar o diretrio ccd, dentro do diretrio /etc/openvpn. Para criar o diretrio ccd execute o comando abaixo:

#mkdir/etc/openvpn/ccd

A fixao do endereo IP de cada host realizada criando-se um arquivo com o nome igual ao Common Name (CN) do seu certificado digital no diretrio ccd do servidor. Outras configuraes tambm podem de forma seletiva serem enviados aos clientes da VPN utilizando-se o mesmo arquivo. Maiores detalhes sobre a utilizao destes arquivos sero vistos na seo sobre os clientes da VPN. Para evitar ataques do tipo DoS2 e UDP3 port flooding ser necessrio descomentar a linha tls-auth ta.key 0 no arquivo server.conf e tambm criar esta chave executando o comando abaixo:

#openvpngenkeysecretta.key

Da mesma forma que foi mencionado para guardar as chaves privadas da autoridade certificadora e do servidor de VPN, guarde esta chave com permisses de leitura mais restritas. Para ilustrar como dever estar o diretrio /etc/openvpn foi includa uma listagem de diretrio.

#lsl/etc/openvpn total40 rwrr1rootroot14762010090617:58ca.crt drwxrxrx1rootroot40962010090617:58ccd rwrr1rootroot2452010090618:04dh1024.pem rwrr1rootroot103182010090618:35server.conf rw1rootroot6362010090618:24ta.key rwxrxrx1rootroot13522010090610:45updateresolvconf rwrr1rootroot42312010090617:58vpn.seudominio.com.br.crt rw1rootroot8872010090617:58vpn.seudominio.com.br.key

Observe com ateno as permisses dos arquivos ta.key e vpn.seudominio.com.br.key. Eles possuem acesso de leitura somente para o usurio proprietrio. O comprometimento dos arquivos de chaves do servidor ou de algum cliente da VPN poder comprometer servios disponibilizados atravs da VPN ou toda a VPN. Aps a execuo de todos os passos descritos acima o servidor de VPN est configurado e pronto para
2 DoS na Wikipedia em http://en.wikipedia.org/wiki/Denial-of-service_attack 3 UDP flood attack na Wikipedia em http://en.wikipedia.org/wiki/UDP_flood_attack

entrar em operao. Para inici-lo execute o comando abaixo:

#/etc/init.d/openvpnstart

Se todas as configuraes foram realizadas com sucesso dever ser exibida a mensagem:
*Startingvirtualprivatenetworkdaemon(s)... *AutostartingVPN'server'

[OK]

Aps o incio do servio possvel verificar se o servio est ouvindo a porta 1194 atravs do comando netstat conforme mostrado abaixo:

#netstatupan

Tambm possvel observar uma nova interface de rede no servidor com o nome tun0. Para isto, utilize o comando ifconfig.

#ifconfig

Uma vez configurado o servidor ser necessrio configurar agora os clientes da VPN. Para isto leia a seo abaixo.

Os Clientes

A instalao do OpenVPN nos clientes Linux segue o mesmo procedimento da instalao do servidor, mudando-se apenas o procedimento de configurao. Havendo a necessidade da instalao do cliente de VPN em algum servidor Windows, acesse o site do OpenVPN e baixe o instalador disponibilizado na seo Community Software/Downloads do site4. A configurao no ambiente Windows igual ao procedimento de configurao no ambiente Linux, mudando-se apenas o caminho do arquivo de configurao, que neste sistema est localizado no diretrio C:\Program Files\OpenVPN\config. Durante o procedimento de configurao ser necessrio criar os certificados digitais de cada cliente,
4 http://www.openvpn.net

este procedimento dever ser realizado no servidor, utilizando a Autoridade Certificadora criada durante a configurao do servidor. Iniciando agora a configurao devemos, da mesma forma que foi feito para o servidor, copiar o arquivo de configurao de exemplo localizado no diretrio /usr/share/doc/openvpn/examples para o diretrio /etc/openvpn.

#cd/etc/openvpn #cp/usr/share/doc/openvpn/examples/sampleconfigfiles/client.conf.

Copiado o arquivo, precisamos ajustar as configuraes para refletir ao nosso ambiente. Para configurar o cliente, edite o arquivo client.conf copiado no passo anterior utilizando o editor de textos de sua preferncia. A primeira diretiva a ser configurada a remote, que define o endereo IP ou hostname do servidor de VPN. Para o nosso ambiente considere que o endereo IP do servidor de VPN 192.168.1.2.

remote192.168.10.21194

Nas prximas linhas do arquivo de configurao so definidos os arquivos onde esto armazenados os certificados digitais da Autoridade Certificadora e do cliente, bem como a chave privada do cliente e a chave TLS. A linha referente chave TLS necessrio apenas descomentar a linha j existente no arquivo.

caca.crt certclient1.crt keyclient1.key tlsauthta.key1

Estes arquivos devero estar localizados no diretrio /etc/openvpn dos servidores Linux ou no diretrio C:\Program Files\OpenVPN\config em servidores Windows. O arquivo ca.crt o mesmo localizado no diretrio /etc/openvpn do servidor, mas os arquivos client1.crt e client1.key ainda no existem e devem ser criados no servidor. Para criar o certificado digital e a chave privada correspondente para o cliente devemos acessar o diretrio /opt/AC no servidor e executar o seguinte procedimento:

#cd/opt/AC #sourcevars #./buildkeyclient1

Confirme todas as perguntas realizadas pelo script de criao do certificado (build-key). Aps a concluso deste procedimento os arquivos estaro localizados no diretrio /opt/AC/keys. Para facilitar o transporte dos arquivos, sugiro que seja criado um pacote .zip contendo todos os arquivos que sero copiados do servidor para o cliente. Ento para isso execute a sequncia de comandos abaixo:

#cp/etc/openvpn/ta.key/opt/AC/keys #cd/opt/AC/keys #zipclient1.zipca.crtclient1.crtclient1.keydh1024.pemta.key

Certifique-se de que o utilitrio zip esteja instalado. Caso no esteja, faa a instalao utilizando o comando aptitude, da mesma forma que foi utilizado para instalar o pacote openvpn. Copie o arquivo client1.zip do servidor para o cliente utilizando a forma que desejar. Com o arquivo client1.zip no cliente, faa a descompactao deste no diretrio /etc/openvpn, ou C:\Program Files\OpenVPN\config caso seja Windows. Para ilustrar como dever estar o diretrio /etc/openvpn do cliente foi includa uma listagem de diretrio.

#lsl/etc/openvpn total28 rwrr1rootroot14762010090617:58ca.crt rwrr1rootroot40792010090710:35client1.crt rw1rootroot8872010090710:35client1.key rwrr1rootroot34272010090710:35client.conf rwrr1rootroot2452010090618:04dh1024.pem rw1rootroot6362010090618:24ta.key rwxrxrx1rootroot13522010090610:45updateresolvconf

Observe com ateno as permisses dos arquivos ta.key e client1.key. Eles possuem acesso de leitura somente para o usurio proprietrio. Terminada a execuo dos passos citados acima precisamos iniciar o servio openvpn para que as configuraes sejam carregadas. Assim, execute o comando abaixo:

#/etc/init.d/openvpnstart

Se todas as configuraes foram realizadas com sucesso dever ser exibida a mensagem:
*Startingvirtualprivatenetworkdaemon(s)... *AutostartingVPN'client'[OK]

Aps o incio do servio dever ser possvel executar um ping para o endereo IP do servidor de VPN, que no nosso ambiente 10.8.0.1. Iremos criar configuraes especficas para um determinado cliente, assim ser possvel definir o endereo IP de cada cliente da VPN de forma manual, possibilitando a configurao de regras de firewall mais seletivas. Para definir um endereo IP fixo para um dado cliente, crie um arquivo no diretrio /etc/openvpn/ccd com o nome igual ao campo CN do certificado digital do cliente e insira a configurao de endereo IP do cliente, conforme exemplificado abaixo:

Nomedoarquivo:client1 Contedodoarquivo: ifconfigpush10.8.0.9010.8.0.89

A escolha de endereos no deve ser aleatria. Para a configurao padro do OpenVPN so criadas diversas redes com mscara 255.255.255.252, e devemos escolher para o cliente o primeiro endereo vlido de cada rede e para o IP remoto o endereo IP seguinte. Com a configurao mostrada acima o cliente, cujo certificado digital possui o campo CN com o valor client1 receber sempre o endereo 10.8.0.90. Concludos os passos at este ponto, conclumos a configurao do cliente de VPN.

3.3

Servios de Produo

3.3.1

Aplicao WEB vulnervel

Esta seo detalha uma aplicao Web Java suscetvel a SQL Injection, e como essa vulnerabilidade poder ser corrigida atravs do uso de um Web Application Firewall como o Mod-Security5 A aplicao Web Java utiliza o servidor de aplicaes Apache Tomcat6, e Banco de Dados PostgreSQL7. Trata-se de um Sistema de Controle de Alunos utilizado em uma Universidade fictcia, e o seu formulrio de login est afetado por vulnerabilidade a ataques do tipo SQL Injection. Ataques de SQL Injection consistem em aproveitar falhas em aplicaes que interagem com Bancos de Dados Relacionais atravs da entrada de valores invlidos em campos de formulrios. Um atacante pode utilizar-se de instrues SQL maliciosas passadas em campos cujo contedo no filtrado pela aplicao antes de concaten-lo com a operao a ser efetuada. Abaixo segue a pgina de login do Sistema de Controle de Alunos.

Tambm abaixo est o cdigo Java utilizado para a operao de login, destacando o trecho de cdigo mal-utilizado, que causou a vulnerabilidade em questo:

5 Site do Mod-Security em http://www.modsecurity.org/ 6 Site do Apache Tomcat em http://tomcat.apache.org/ 7 Site do PostgreSQL em http://www.postgresql.org/

PreparedStatementpstmt=conn .prepareStatement("SELECTcount(*)FROMusuarioWHERElogin='" +login+"'ANDsenha='"+senha+"'");

As variveis login e senha so concatenadas String da consulta SQL sem passar por nenhum tipo de filtragem de contedo. Os valores que vem na requisio HTTP so integralmente utilizados. Um usurio mal-intencionado pode anexar comandos maliciosos, que podem, dependendo das permisses do usurio da conexo JDBC, executar at mesmo comandos DDL, como apagar tabelas inteiras. Em muitos cenrios do mundo real, por diversos motivos, pode no ser possvel efetuar a correo desta vulnerabilidade atravs de alterao de cdigo. O cdigo-fonte pode no ser de propriedade da empresa, ou mesmo que seja, pode no ser possvel aguardar esta correo pela equipe de desenvolvimento. Neste cenrio, pode-se utilizar um Web Application Firewall, que efetuaria a filtragem dos parmetros HTTP, aplicando padres e expresses regulares para detectar tentativas de ataques de SQL Injection. O Mod-Security um Web Application Firewall Open-Source distribudo pela empresa Breach Security8, que funciona em modo Embedded (em conjunto com o servidor Web/servidor de aplicaes), ou em modo Standalone (como um proxy reverso). Neste ltimo modo, caso a empresa j possua um proxy reverso (como o cenrio proposto neste trabalho), o uso do Mod-Security no ir requerer nenhuma mudana na topologia da rede. Um engine de regras padro, mas configurvel e extensvel (Mod-Security Core Rules Set), e uma linguagem especfica para escrita dessas regras (Mod-Security Rules Language) formam a base de funcionamento do Mod-Security, que atua em diversas fases de processamento durante a filtragem de trfego HTTP/HTTPS, como est descrito na figura a seguir:

8 http://www.breach.com/

3.3.2

Configurando Log4J para enviar logs para o Syslog

O Sistema de Controle de Alunos usa um framework de logging bastante difundido no mundo Java, Log4J9. Para auxiliar no processo de centralizao e padroninzao dos logs corporativos, adequado o uso do padro de logs da IETF chamado Syslog. O Log4J j disponibiliza um Appender(terminologia dada s diversas formas de escrever logs, como Console, Arquivos, etc) que envia os logs diretamente a um servidor de Syslog. Segue abaixo um trecho do arquivo log4j.properties, que explicita a configurao do envio para Syslog:

log4j.rootLogger=WARN,file,SYSLOG log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.append=true log4j.appender.file.File=/var/logs/apache/tomcat.log log4j.appender.file.MaxFileSize=5MB log4j.appender.file.maxBackupIndex=10 log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{DATE}[%t]%C{1}.%M(%L)%p: %m%n log4j.appender.SYSLOG=org.apache.log4j.net.SyslogAppender log4j.appender.SYSLOG.SyslogHost=10.8.0.90 9 Site do Log4J em http://logging.apache.org/log4j/

log4j.appender.SYSLOG.Facility=LOCAL0 log4j.appender.SYSLOG.layout=org.apache.log4j.PatternLayout log4j.appender.SYSLOG.layout.ConversionPattern=%4r%5p%c{2}%M.%L%x%m\n log4j.appender.SYSLOG.threshold=DEBUG

3.4

Log Host

Esta seo trata da instalao e configurao de um servidor de Logs, que ser utilizado para o o recebimento e armazenamento de logs de todos os servidores da rede. Para a implementao deste servidor utilizaremos o Syslog-ng10, que est presente na maior parte das maiores distribuies de Linux da atualidade. Como premissa consideramos que o sistema operacional est completamente instalado, com a rede configurada, que o firewall est bloqueando todas as conexes de entrada e tambm que o servidor possui acesso Internet para realizar o acesso aos repositrios de pacotes. Antes de iniciar a instalao do Syslog-ng nas distribuies Debian ou Ubuntu Server necessrio sincronizar os metadados com informaes sobre quais pacotes e verses esto disponveis nos repositrios, para isso executamos o comando aptitude conforme mostrado abaixo:

#aptitudeupdate

Com a listas de pacotes atualizada inciamos o procedimento de instalao do Syslog-ng conforme comando mostrado abaixo:

#aptitudeinstallsyslogng

Aguarde enquanto o sistema baixa os pacotes necessrios e realiza a instalao de cada um deles. O tempo necessrio para esta atividade pode variar de acordo com a banda de download disponvel ou a carga nos servidores de repositrio da distribuio. Por padro o servidor Syslog-ng no aceita logs de outras mquinas. Para ativar esta funcionalidade necessrio ativ-la no arquivo de configurao /etc/syslog-ng/syslog-ng.conf. Editando-se o arquivo referido com o editor de textos de sua preferncia, descomente a linha udp(); localizada na seo source s_all. Note que no syslogd esta funo era ativada especificando a opo -R durante a chamada o servio. Aps a execuo deste passo necessrio reiniciar o servio. Para isto, execute o comando abaixo:
10 Site do Syslog-ng em http://www.balabit.com/network-security/syslog-ng/

#/etc/init.d/syslogngrestart

Aps o reincio do servio voc poder verificar se so aceitos logs advindos de servidores remotos utilizando o comando netstat e confirmando se a porta UDP 514 est ativa.

#netstatuna Proto RecvQSendQLocalAddress udp 000.0.0.0:514

ForeignAddress 0.0.0.0:*

State

necessrio ajustar as regras de firewall do loghost para permitir somente pacotes destinados ao loghost sejam permitidos somente aqueles que chegarem atravs da VPN.

#iptablesAINPUTitun0pudpitun0dport514jACCEPT

3.5

Log Clients

Com o servidor de logs configurado precisamos configurar os clientes para enviarem seus logs para o servidor. Para configurar o cliente tambm necessrio que seja instalado o Syslog-ng em cada cliente. Para instal-lo em um cliente Debian ou Ubuntu Server utilize o mesmo procedimento utilizado para instalar o servidor. A configurao do cliente realizada atravs da edio do arquivo /etc/syslog-ng/syslog-ng.conf utilizando o editor de textos de sua preferncia. No cliente o nosso objetivo de configurar o arquivo syslog-ng.conf configur-lo para que as mensagens de log sejam enviadas para o nosso loghost configurado no servidor de endereo IP 10.8.0.90. Antes de iniciar a configurao vamos construir uma viso superficial sobre a configurao do arquivo syslog-ng.conf para permitir o entendimento das configuraes que sero mostradas nas linhas seguintes. O arquivo possui cinco diretivas, que atravs de sua utilizao iremos definir toda a configurao do Syslog-ng. Comeamos com a diretiva [1] options, que faz definies gerais do servio. Em seguida temos a diretiva [2] sources, que define possveis origens dos logs. Depois temos a diretiva [3]

destination, que define para onde os logs sero enviados, como arquivos em disco ou servidores remotos. A diretiva [4] filters, que define filtros para melhor classificar os logs por fim a diretiva [5] log, que faz o relacionamento entre as diretivas anteriores, indicando de acordo com a origem e filtro aplicado, onde mas mensagens de log sero armazenadas. Para configurarmos o nosso cliente para enviar os logs para o loghost 10.8.0.90 precisamos primeiramente definir um destino, atravs da diretiva destination, conforme exemplo mostrado abaixo:
destinationdf_user{file(/var/log/user.log);}; destinationdf_uucp{file(/var/log/uucp.log);}; destinationdf_loghost{udp(10.8.0.90);};

Definido o destino para onde as mensagens podem ser enviadas, precisamos configurar a diretiva log para utiliz-lo. Para isso, mais uma vez editamos o arquivo syslog-ng.conf e na diretiva log devemos alterar opo destination informando o destino desejado. No exemplo abaixo estamos encaminhando para o nosso loghost todas as mensagens que antes eram enviadas para o arquivo /var/log/messages atravs da opo destination(df_loghost);.
log{ source(s_all); filter(f_messages); #destination(df_messages); destination(df_loghost); };

3.6

Rotacionamento de Logs

O rotacionamento de logs necessrio para evitar o esgotamento do espao em disco atravs da gerao excessiva de logs. Atravs do logrotate11 podemos definir a frequncia na qual os logs sero rotacionados, quantos arquivos j rotacionados devero ser preservados no servidor, se ser utilizada compresso destes arquivos, procedimentos executado antes ou depois do rotacionamento e algumas outras opes. No nosso laboratrio iremos configurar o rotacionamento dos logs para ser executado semanalmente e guard-los por 52 semanas, ou seja, um ano. Tambm utilizaremos compresso para uma melhor utilizao do espao em disco, uma vez que esperada uma grande quantidade de logs recebidos de todos os servios em execuo em toda a rede. O logrotate configurado atravs de arquivos localizados no diretrio /etc/logrotate.d. Em cada
11 Site do logrotate em https://fedorahosted.org/logrotate/

arquivo so definidas regras de rotacionamento de cada servio ou grupo de servios. O Syslog-ng das distribuies Debian e Ubuntu j possuem uma configurao bsica do rotacionamento de logs, que podem ser utilizadas como base para criao de suas prprias polticas de rotacionamento de logs.
/var/log/auth.log{ rotate4 missingok notifempty weekly compress }

No exemplo mostrado acima rotate 4 indica que sero rotacionadas 4 verses do arquivo auth.log. A opo missingok que no haver erro na execuo do rotacionamento se o referido arquivo no for econtrado. A opo notifempty indica que o arquivo no ser rotacionado caso esteja vazio. A opo weekly indica que o rotacionamentos ser semanal e compress que ser utilizada compresso do arquivo com o aplicativo gzip. Para ajustarmos para manter os arquivos rotacionados por um ano precisamos apenas fazer a alterao na opo rotate indicando o valor 52, conforme apresentado no exemplo abaixo:

/var/log/auth.log{ rotate52 missingok notifempty weekly compress }

Aps os ajustes necessrio no necessrio reiniciar qualquer servio para que as configuraes entre em vigor, bastando para isso que o arquivo de configurao esteja salvo. Voc poder testar o rotacionamento dos logs manualmente, atravs da execuo do comando logrotate conforme mostrado abaixo:
#logrotatef/etc/logrotate.d/syslogng

Executado

comando

acima,

os

arquivos

especificados

no

arquivo

de

configurao

/etc/logrotate.d/syslog-ng devero possuir novas verses com a presena do um nmero e a extenso .gz. Este nmero indica a posio do log dentro do intervalo de rotacionamento. O primeiro log do histrico possui o maior nmero e ser excludo aps ultrapassar a posio 52 e o ltimo log rotacionado possui o nmero 1.

4 TERMINOLOGIA
Termo
Syslog-ng Tomcat Log4j JDBC API VPN ACL

Descrio
Servio de gerenciamento de logs presente na maioria das distribuies de Linux Servidor de aplicaes web java Biblioteca para Logging para aplicaes escritas em Java Java Data Base Connectivity Application Programing Interface Virtual Private Network - Rede Virtual Privada Access Control List Lista de Controle de Acesso

5 CONCLUSES
A centralizao de logs em um grande parque computacional essencial para conhecer o comportamento de aplicaes e servios. Atravs dela possvel a utilizao de ferramentas de auditoria que montem relatrios consolidados que podem ser utilizados para tomada de decises e tambm para fazer correlacionamento de ocorrncias de falhas ou tentativas de invaso. Melhorias no assunto aqui abordado seria a implementao de mecanismos de anlise de logs continuo que pudessem gerar alertas em consoles para que problemas de mau funcionamento ou incidentes de segurana da informao fossem rapidamente identificados e permitissem aes proativas ou reativas.

6 REFERNCIAS
Servidor Web Apache: http://httpd.apache.org Squid: http://www.squid-cache.org Tomcat: http://tomcat.apache.org Iptables: http://www.netfilter.org Postgresql: http://www.postgresql.org Syslog-ng: http://www.balabit.com/network-security/syslog-ng/ OpenVPN: http://www.openvpn.net

Vous aimerez peut-être aussi