2010-12-14 33 views
1

Je travaille sur un projet pour analyser divers sur un serveur en CSV. Quelqu'un at-il un bon script perl ou une instruction gawk qui peut analyser un journal PIX/ASA standard en CSV ...Besoin d'un script pour formater le journal PIX/ASA dans CSV

Merci.

+0

Publiez un exemple de journal PIX/ASA, et quelqu'un ici pourrait bien vous écrire les quelques lignes de Perl qu'il faudrait pour le convertir en CSV. – Narveson

+0

% PIX-7-710001: accès TCP demandé de 192.168.2.10/19067 à l'extérieur: 192.168.2.14/ssh % PIX-7-710005: demande UDP rejetée de 192.168.1.2/137 à l'intérieur: 192.168.1.255/netbios -ns % PIX-6-315011: session SSH à partir de 192.168.2.10 sur l'interface à l'extérieur pour l'utilisateur "roo " déconnecté par le serveur SSH, raison: "connexion TCP fermée" (0x03) % PIX-6-604103: démon DHCP interface à l'intérieur: adresse attribuée 000c.29e4.ebc3 (12.168.1.3) – deFonza

+0

% PIX-6-605004: Login refusé de 192.168.2.10/13269 à l'extérieur: 192.168.2.14/ssh pour l'utilisateur "root" % PIX-3- 305006: la création de traduction de portmap a échoué pour tcp src à l'intérieur: 192.168.1.2/2893 dst outside: 192.168.2.99/3128 % PIX-3-201008: Le PIX n'autorise pas les nouvelles connexions. % PIX-3-106011: Refuser l'entrée (No xlate) udp src à l'extérieur: 192.168.2.1/137 dst à l'extérieur: 192.168.2.14/137 – deFonza

Répondre

1

J'ai aidé à écrire une analyse interne pour les journaux PIX/ASA que je ne peux pas partager. Nous voulions avoir des informations sur la source et la destination de tous les messages liés au trafic, par exemple. Nous avons fini par créer un module analysant chaque code de message individuellement. Un autre obstacle est que certaines informations telles que les noms de protocole et les déclarations name s'affichent sous la forme d'alias, et non de numéro ou d'adresse IP dans les journaux. Le module CPAN PIX :: Walker peut aider à résoudre ces problèmes.

Si tout ce que vous voulez est la gravité, le code et le message que vous pouvez utiliser:

#!/usr/bin/perl 

use strict; 

if (-e $ARGV[0]) { 
open(INFILE,$ARGV[0]); 
} else { 
die "Cannot open logfile $ARGV[0]\n"; 
} 

foreach my $line (<INFILE>) { 
chomp $line; 
if (/^%(ASA|PIX)-(\d{1})-(\d{6}): (.*)/) { 
    print "\"" . $1 . "\",\"" . $2 . "\",\"" . $3 . "\"\n"; 
} 
} 

Mais si c'est tout ce que vous voulez que je vous recommande d'utiliser syslog-ng et MySQL avec une config comme:

options { 
     long_hostnames(off); 
     sync(100); 
     stats(43200); 
     use_fqdn(no); 
     keep_hostname(yes); 
     owner (nglog); 
}; 

source udpsource { udp(ip(0.0.0.0) port(514));}; 

parser asa { 
csv-parser(colunms("ASA_SEV", "ASA_CODE", "ASA_TXT") 
flags(escape-none) 
delimiters("-:") 
); 
}; 

destination d_sql { 
    sql(type(mysql) 
    host("logserver") username("syslog-ng") password("password") 
    database("logs") 
    table("ASAlogs") 
    columns("datetime", "host", "severity", "code", "message") 
    values("$R_DATE", "$HOST", "$ASA_SEV", "$ASA_CODE", "$ASA_TXT") 
    indexes("datetime", "host", "severity", "code")); 
}; 

log { source{udpsource}; 
    log {parser(asa); destination(d_sql)}; 
}; 

De cette façon, c'est dans une base de données que vous pouvez exécuter des rapports. Vous pouvez également créer une interface web PHP ou Ruby on Rails très simple.