Dead Packets

16/05/2010

Parser para log de sessões do ScreenOS

Filed under: ScreenOs,troubleshooting — drak @ 2:04 PM

Uma parte do meu trabalho é atuar no tratamento de incidentes e, para dispositivos como firewalls, a análise de sessões geralmente dá uma ótima idéia do que está ocorrendo no momento do problema. Em firewalls Netscreen o comando “get session” realiza o dump da tabela de sessões do firewall, um trecho desse tipo de log pode ser visto abaixo:

id 407322/s**,vsys 0,flag 00000040/4000/0003,policy 70,time 1, dip 0 module 03773,1Bot
 if 45(nspflag 800805):172.18.6.11/6->10.253.22.4/47959,1,00093d1447ad,sess token 21,vlan 30,tun 0,vsd 0,route 103774,1Bot
 if 9(nspflag 800804):172.18.6.11/6<-10.253.22.4/47959,1,001882fb38b2,sess token 25,vlan 11,tun 0,vsd 0,route 523775,1Bot

id 47596/s**,vsys 0,flag 14000000/0000/0001,policy 50,time 22, dip 0 module 0
 if 5(nspflag 4801):192.168.1.150/51218->97.125.239.85/47804,17,000000000000,sess token 3,vlan 0,tun 0,vsd 0,route 0
 if 0(nspflag 4800):200.200.200.16/51218<-97.125.239.85/47804,17,000000000000,sess token 4,vlan 0,tun 0,vsd 0,route 0

Como vocês podem imaginar a informação acima não é facilmente interpretada se temos algumas centenas ou milhares de sessões estabelecidas, para resolver este problema temos algumas alternativas, uma delas é gravar a saída do comando e realizar o upload do arquivo para a ferramente online da Juniper conhecida como Firewall Session Analyzer (necessário login), outra opção é realizar alguns malabarismos com um script na saída padrão do comando para tornar estes dados utilizáveis numa análise via CLI do Linux.

Abaixo segue o primeiro programa que irá ajudar na tarefa de analisar a saída do comando “get session” pela CLI, eu porcamente escrevi este programa (tenho zero de experiência em Perl) me baseando nos parsers utilizados no projeto Afterglow.

nse2csv.pl

#!/usr/bin/perl
use strict vars;

my $output=$ARGV[0] || "full";
my $DEBUG=0;
our ($sip,$sport,$dip,$dport);

while (<STDIN>) {
        chomp;
        my $input = $_;
        if ($input =~ /(.*):(\d+\.\d+\.\d+\.\d+)\/?(\d*)->(\d+\.\d+\.\d+\.\d+)\/?(\d*)/) {
                $input = "$1|$2|$3|$4|$5";
        } else {
                $DEBUG && print STDERR "ERROR: $input\n";
                next;
        }

        my @fields = split ('\|',$input);

        $sip = $fields[1];
        $sport = $fields[2];
        $dip = $fields[3];
        $dport = $fields[4];

        if ($output eq "full") {
                print "$sip,$dip,$dport\n";
        } else {
                my @tokens = split / /,$output;
                print ${shift(@tokens)};
                for my $token (@tokens) {
                        if (!defined($$token)) {
                                $DEBUG && print STDERR "$token is not a known field\n";
                                #exit;
                        } else {
                                print ','.$$token;
                        }
                }
                print "\n";
        }
}

Este programinha em perl deve ser utilizado com a seguinte sintaxe:

cat ARQUIVO_LOG_SESSOES.log > nse2cvs.pl

Como saída teremos, nesta ordem: SOURCE IP, DESTINATION IP, DESTINATION PORT.

Futuramente irei postar a segunda parte deste artigo, com outro script que efetua a análise dos dados gerados com o nse2csv.pl

Referências
Afterglow – Parsers
Learning Perl

Anúncios

1 Comentário »

  1. […] Parser para log de sessões do ScreenOS […]

    Pingback por Artigo na Stay Safe – Análise de sessões com Afterglow « Dead Packets — 21/08/2010 @ 9:16 AM | Responder


RSS feed for comments on this post. TrackBack URI

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Blog no WordPress.com.

%d blogueiros gostam disto: