De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Migue Di Ciurcio Filho
Data de Publicação: 29 de Junho de 2006
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.
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.
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.
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
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@dominio.com.br 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]
Colaboração: Rogério 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.
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários