shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Monitorar logs


From: Daniel Fernando Coimbra
Subject: Monitorar logs
Date: Fri, 03 Jul 2009 16:59:16 -0300
User-agent: Thunderbird 2.0.0.18 (X11/20081105)

Olá pessoal, estou fazendo um pequeno script para monitorar as entradas
de log feitas pelo iptables. Quando executo o script para testar nos
logs já existentes (removendo o "tail" e complementando o "grep" com o
caminho do arquivo) a execução é perfeita e me dá as informações como
esperado. No entanto, ao executá-lo como segue abaixo, para que a
monitoração seja em "tempo real" não há qualquer saída, embora os logs
estejam sendo modificados.

Não há qualquer aviso de erros na execução e não faço idéia do que pode
estar errado! Os logs estão sendo gerados e contém as strings "Firewall
- ${INFO}:", suspeito que o meu uso do "tail -f" esteja errado mas não
consegui descobrir qual seria a correção...

Agradeço muito se puderem me auxiliar.


(o arquivo color-definitions.sh contém apenas definição de variáveis com
strings de cores e por isso não o inclui)

---- monitor.sh ----

source color-definitions.sh
U='\e[4m'

sudo echo "Iniciando Monitor... `date`" || exit 1

sudo tail -n 0 --follow=name /var/log/syslog | grep Firewall | while
read Mon Day Time Host lixo lixo lixo LOGNAME DEV_IN DEV_OUT MAC SRC DST
LEN TOS PREC TTL ID LINELOG
do
    TIMELINE=" @$Time-$Day/$Mon"
    PROTO=`echo $LINELOG | cut -d= -f2 | cut -d' ' -f1`
    S=`echo $SRC | cut -d= -f2`
    SP=`echo $LINELOG | cut -d= -f3 | cut -d' ' -f1`
    D=`echo $DST | cut -d= -f2 | cut -d' ' -f1`
    DP=`echo $LINELOG | cut -d= -f4 | cut -d' ' -f1`
    LINE=$(echo $LINELOG | cut -d= -f6- | cut -d' ' -f2 | tr -d ' ')
    case $LOGNAME in
        'PING:')
            if [ "$S" == "192.168.0.1" ]
            then
                C=$LGREEN
            else
                C=$YELLOW
            fi
            echo -e "${RED}PING${NORM} from ${C}${S}${NORM}$TIMELINE"
            ;;
        'SPOOFING:')
            echo -e "${YELLOW}${U}SPOOFING${NORM} $S:$SP:$DP:D ${LINE}$TIMELINE"
            ;;
        'INPUT:')
            if [ "`echo $D | cut -d. -f4`" == "255" ]
            then
                if [ "$S" == "0.0.0.0" ]
                then
                    S=`echo $MAC | cut -d: -f7-`
                fi
                MSG="${BROWN}BROADCAST${NORM} from ${U}${S}"
            else
                MSG="${BLUE}INPUT${NORM} from ${U}${S}"
            fi
            echo -e "${MSG}${NORM} ${PROTO}
${YELLOW}${SP}${NORM}:${YELLOW}${DP}${NORM} ${LINE}$TIMELINE"
            ;;
        *)
        echo INVALID ENTRY $LINE $TIMELINE
    esac
done &

sudo tail -n 0 --follow=name /var/log/messages | grep Firewall | grep -v
sudo | while read Mon Day Time Host lixo lixo lixo LOGNAME DEV_IN
DEV_OUT MAC SRC DST LEN TOS PREC TTL ID LINELOG
do
    PROTO=`echo $LINELOG | cut -d= -f2 | cut -d' ' -f1`
    S=`echo $SRC | cut -d= -f2`
    SP=`echo $LINELOG | cut -d= -f3 | cut -d' ' -f1`
    D=`echo $DST | cut -d= -f2`
    DP=`echo $LINELOG | cut -d= -f4 | cut -d' ' -f1`
    TIMELINE=" @$Time-$Day/$Mon"
    LINE=$(echo $LINELOG | cut -d= -f6- | cut -d' ' -f2 | tr -d ' ')

    if [ "`echo $D | cut -d. -f4`" == "255" ]
    then
        MSG="${BROWN}BROADCAST${NORM}"
        if [ "$S" == "0.0.0.0" ]
        then
            S=`echo $MAC | cut -d: -f7-`
        fi
        MSG="${MSG} from ${U}${S}"
    else
        case $LOGNAME in
            'LOCALINPUT:')
                MSG="LOCAL from ${U}${S}"
                ;;
            'SERVICES:')
                MSG="${LGREEN}SERVICES${NORM} from ${U}${S}"
                ;;
            *)
        esac
    fi

    echo -e "${MSG}${NORM} ${PROTO}
${YELLOW}${SP}${NORM}:${YELLOW}${DP}${NORM} ${LINE}$TIMELINE"
done &

while :
do
    sleep 6h
    echo ---- `date` ----
done

---- monitor.sh ----



reply via email to

[Prev in Thread] Current Thread [Next in Thread]