logo       

Monitorando logs do vsftpd via email: msg#02641

culture.publications.dicas

Subject: Monitorando logs do vsftpd via email

Monitorando logs do vsftpd via email
====================================

Colaboração: Migue Di Ciurcio Filho

O vsftpd é um excelente daemon para servir FTP. É estável feito uma rocha,
seguro e leve. Uma das coisas que gosto nele também é sua extrema simplicidade,
ele realmente não tem muitos recursos como quotas por usuário e limitações de
banda, porém isso nunca me fez falta.


Problema
========

Quando um usuário coloca algum arquivo no FTP, ele tem que comunicar aos
interessados de que o arquivo já está disponível, então a outra pessoa abre seu
cliente FTP e baixa o arquivo. Que tal pularmos uma das etapas e tornar o
processo mais ágil? Queremos que assim que termine o download ou upload de um
arquivo em nosso FTP as partes interessadas sejam notificadas automaticamente,
assim ninguém precisa perder tempo mandando e-mail, deixamos que o servidor
faça isso.
Não conheço nenhum daemon FTP que tenha esse recurso, dizer ao chefe que não é
possível não é uma opção.


Solução
=======

Nada melhor do que usarmos o log gerado para dispararmos os avisos. Temos que
analisar cada novo evento gravado no log e enviar ou não os avisos via e-mail.


Implementação
=============

Para implementarmos essa solução, vamos precisar fazer ajustes no vsftpd e
vamos precisar do syslog-ng. O syslog-ng é parte fundamental dessa solução,
pois com ele podemos definir diversas rotas e para nosso log, podendo enviá-lo
para um filtro que iremos desenvolver.

Temos que configurar os seguintes parametros no arquivo de configuração do
vsftpd, localizado em /etc/vsftpd.conf.


syslog_enable=YES
xferlog_enable=YES
xferlog_std_format=NO


Basicamente configuramos o vsftpd para enviar o log para o syslog de nosso
sistema. Para mais detalhes, man vsftpd.conf. Agora que o vsftpd irá enviar o
log para o syslog, temos que configurar o syslog-ng para organizar o log
enviado. Devemos definir um filtro e os destinos, tudo isso em
/etc/syslog-ng/syslog-ng.conf.


filter f_vsftpd { program(vsftpd); };
destination d_vsftpd { file("/var/log/vsftpd.log"
template("$MSGONLY\n") template-escape(no)); };
destination d_vsftpd_email { program("/root/scripts/vsftpd_monitor.sh"
template("$MSGONLY\n") template-escape(no)); };


Aqui nós definimos um filtro que irá separar todas as mensagens que vierem do
daemon de novo vsftpd, depois criamos um destino em arquivo em
/var/log/vsftpd.log e outro destino mandando o log para a stdin do shell script
vsftpd_monitor.sh, para saber mais detalhes veja man syslog-ng.conf.

Ainda no arquivo de configuração do syslog-ng, precisamos definir o log.


log {
source(s_all);
filter(f_vsftpd);
destination(d_vsftpd);
destination(d_vsftpd_email);
flags(final);
};


A partir de agora todo o log gerado pelo vsftpd será enviado para um arquivo de
log padrão, em ''/var/log/vsftpd.log'' e também para um shell script que
receberá na entrada padrão cada linha de log.

Vejamos abaixo, exemplos de log gerado pelo vsftpd.


Mon Apr 24 09:07:08 2006 [pid 16482] [vwcaminhoes]
OK DOWNLOAD: Client "200.184.93.85",
"/261_A3GM_60.pdf", 1732158 bytes, 111.44Kbyte/sec
Wed Apr 26 09:16:53 2006 [pid 20716]
CONNECT: Client "200.184.93.85"
Wed Apr 26 09:16:53 2006 [pid 20715] [vw]
OK LOGIN: Client "200.184.93.85"
Wed Apr 26 09:17:00 2006 [pid 20732] [vw]
OK MKDIR: Client "200.184.93.85", "/GOLF CANADA"
Wed Apr 26 15:45:24 2006 [pid 24386] [vwcaminhoes]
OK UPLOAD: Client "192.168.0.63",
"/Manuais_Espanhol/17210_OD_ESP.pdf", 9474814 bytes, 7976
.98Kbyte/sec
Thu Apr 27 16:55:55 2006 [pid 12923] [metrics]
OK DELETE: Client "192.168.0.42", "/bkp_metrics_sexta.part019.rar"
Fri Apr 28 11:02:27 2006 [pid 476] [vwcaminhoes]
OK RMDIR: Client "192.168.0.63", "/PDFs_Robson"


Devemos então fazer um shell script que analise esse log e mande e-mails
conforme o evento em cada log. A idéia inicial do nosso shell script foi
baseada no http://xconsulting.dnsalias.com/software/vsftpd-report.htm
(vsftpd-report)

Começamos fazendo um laço que lê a entrada padrão eternamente e procura na
linha padrões para determinar a que se refere o evento.


#!/bin/sh
while read TEXTO; do
ACAO=""
if [ $(echo $TEXTO | grep -c 'OK UPLOAD:') == "1" ]; then
ACAO="UPLOAD"
fi

if [ $(echo $TEXTO | grep -c 'OK DOWNLOAD:') == "1" ]; then
ACAO="DOWNLOAD"
fi
done

Salve o script no mesmo local apontado no syslog-ng e com mesmo nome, dê
permissão de executação nele, isso já é suficiente para que possamos reiniciar
o syslog-ng e o vsftpd.

Nosso script ainda não está fazendo nada, vamos agora usar a variável ''$ACAO''
para controlar o envio ou não de e-mail.


#!/bin/sh

while read TEXTO; do
ACAO=0
if [ $(echo $TEXTO | grep -c 'OK UPLOAD:') == "1" ]; then
ACAO=1
fi

if [ $(echo $TEXTO | grep -c 'OK DOWNLOAD:') == "1" ]; then
ACAO=1
fi

if [ $ACAO -eq 1 ]; then
echo $TEXTO | mail -s "Evento servidor FTP" user@xxxxxxxxxxxxxx
fi
done


Pronto, agora toda vez que alguém fizer upload ou download no FTP, os
destinatários ficarão sabendo. Esse pequeno shell script pode servir como
esqueleto para muitas outras ações. Baseado nessa idéia, podemos ter um
vsftpd_monitor.sh muito mais elaborado, que envia um e-mail formatado e com
mais informações.
[https://opensvn.csie.org/traccgi/unixstuff/browser/trunk/scripts/vsftpd_monitor.sh]

-----------------------------------------------------------

Edital de contratação para administrador de redes
=================================================

Colaboração: Rogerio Acquadro

A (PC)² publicou o seu edital para contratação de um administrador de
redes, período integral, a ser alocado em um de seus clientes. Maiores
informações podem ser encontradas no texto do edital, publicado no site
(http://pc2consultoria.com/modules.php?name=News&file=article&sid=144).

Currículos devem ser enviados via e-mail (<curriculum (a) pc2consultoria com>),
e os arquivos devem estar em formato TXT, PDF ou ODT.



<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise