2010-12-14 11 views
1

Ich arbeite ein Projekt zum Parsen verschiedener auf einem Server in CSV. Hat jemand eine gute Perl-Skript oder Gawk-Anweisung, die ein Standard-PIX/ASA-Protokoll in CSV analysieren kann ...Benötigen Sie ein Skript, um PIX/ASA-Protokoll in CSV zu formatieren

Vielen Dank.

+0

Geben Sie ein Beispiel-PIX/ASA-Protokoll ein, und jemand hier könnte Ihnen die paar Zeilen Perl schreiben, die es benötigen würde, um sie in CSV zu konvertieren. – Narveson

+0

% PIX-7-710001: TCP-Zugriff von 192.168.2.10/19067 nach extern angefordert: 192.168.2.14/ssh % PIX-7-710005: UDP-Anforderung von 192.168.1.2/137 nach innen verworfen: 192.168.1.255/netbios -ns % PIX-6-315011: SSH-Sitzung von 192.168.2.10 auf Schnittstelle außerhalb für Benutzer "roo " durch SSH-Server getrennt, Grund: "TCP-Verbindung geschlossen" (0x03) % PIX-6-604103: DHCP-Daemon Schnittstelle innen: Adresse vergeben 000c.29e4.ebc3 (12.168.1.3) – deFonza

+0

% PIX-6-605004: Login verweigert von 192.168.2.10/13269 nach außen: 192.168.2.14/ssh für Benutzer "root" % PIX-3- 305006: Erstellung der Portmap-Übersetzung für Tcp src fehlgeschlagen inside: 192.168.1.2/2893 dst outside: 192.168.2.99/3128 % PIX-3-201008: Die PIX verweigert neue Verbindungen. % PIX-3-106011: Inbound ablehnen (No xlate) udp src außerhalb: 192.168.2.1/137 dst außerhalb: 192.168.2.14/137 – deFonza

Antwort

1

Ich habe mitgeholfen, eine interne Analyse für PIX/ASA Logs zu schreiben, die ich nicht teilen kann. Wir wollten zum Beispiel Quell- und Zielinformationen für alle verkehrsbezogenen Nachrichten haben. Am Ende haben wir ein Modul erstellt, das jeden Nachrichtencode einzeln analysiert hat. Eine weitere Hürde ist, dass einige Informationen wie Protokollnamen und name Deklarationen als Alias ​​angezeigt werden, nicht Nummer oder IP in den Protokollen. Das CPAN-Modul PIX :: Walker kann helfen, diese Probleme zu lösen.

Wenn alles, was Sie wollen, ist die Schwere, Code und Nachricht, die Sie verwenden können:

#!/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"; 
} 
} 

Aber wenn das alles, was Sie möchte ich würde empfehlen, mit syslog-ng und MySQL mit einer Config wie:

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)}; 
}; 

So ist es in einer Datenbank, aus der Sie Berichte ausführen können. Sie können auch ein sehr einfaches PHP- oder Ruby on Rails-Web-Frontend erstellen.