View previous topic :: View next topic |
Author |
Message |
teknux Guru
Joined: 19 Feb 2003 Posts: 517 Location: Rome, IT
|
Posted: Mon Jul 04, 2005 8:52 pm Post subject: [tool] pysholog: shorewall log parser (update 0.8.1) |
|
|
salve a tutti,
se può interessarvi ho fatto un piccolo script in python che legge i log di Shorewall, formata loutput e lo colora. E ispirato a un altro script in perl che ho trovato qui dalla quale ho ripreso le regex, alla quale avevo aggiunto i colori e la lettura da STDIN, molto comodo per chi redirige i log del firewall su un terminale virtuale e vuole leggere in modo più chiaro il traffico.
EDIT:
lo "scriptino", grazie anche ai consigli di xchris e dei colleghi al lavoro, è diventato un po' più serio, ora è in grado di ricevere diverse opzioni per filtrare l'output ed evidenziare solo i dati richiesti. Ecco le opzioni:
Code: |
./pysholog8.py -h
usage: pysholog8.py [options] (use -h or --help for a list of options)
options:
--version show program's version number and exit
-h, --help show this help message and exit
-D, --debug colors only the match entries (for fw debug)
-v, --verbose more detailed output
-fFILE, --file=FILE specify an input file (default stdin)
-dDATE, --date=DATE print logs of specified date
-aIP, --address=IP print logs with a specified address
-iIFACE, --iface=IFACE
print logs with a specified interface
-pPORT, --port=PORT print logs with a specified port
-PPOLICY, --policy=POLICY
print logs with a specified policy
--from filter source fields (must be followed at least by -a or -p)
--to filter dest fields (must be followed at least by -a or -p)
|
questa vi allego una parte di output, giusto per mostrare la funzionalità dei meta-filtri. In questo specifico esempio voglio conoscere tutte le connessioni alla porta 53 effettuate da uno specifico IP (gli ip qui riportati sono inventati, i risultati no), il caso ha voluto che l'ip relativo alla porta di destinazione è sempre lo stesso (anche perchè sono query DNS ), l'importante è dare l'idea:
Code: |
./pysholog8.py < /var/log/shorewall/current --from -a 1.2.3.4 --to -p 53
Jun 27 15:46:08 fw2intra:eth0 ACCEPT UDP 1.2.3.4:1030 -> 5.6.7.8:53
Jun 27 15:50:59 fw2intra:eth0 ACCEPT UDP 1.2.3.4:1030 -> 5.6.7.8:53
....
Jun 30 16:46:33 fw2intra:eth0 ACCEPT UDP 1.2.3.4:1032 -> 5.6.7.8:53
Jun 30 17:04:15 fw2intra:eth0 ACCEPT UDP 1.2.3.4:1032 -> 5.6.7.8:53
Jun 30 17:05:03 fw2intra:eth0 ACCEPT UDP 1.2.3.4:1032 -> 5.6.7.8:53
|
l'ultima versione disponibile potete scaricarla da questo link, non lo posto per evitare problemi di indentazioni varie ed oltretutto comincia a diventare un po' lungo
per le prossime versioni spero di aggiungere il supporto a più protocolli (ho pensato ad una strada promettente, devo ancora lavorarci), l'indipendenza dai log generati da shorewall, e, forse, aggiungerò la possibilità di stampare le statistiche sulle frequenze di apparizione dei dati richiesti. mi è stato anche chiesta un'interfaccia grafica, vedrò cosa posso fare, visto che credo sia conveniente convertire il tutto da procedurale a oggetti e soprattutto non ho mai creato GUI
Commenti e consigli sono ben accetti
saluti,
tek
Last edited by teknux on Thu Jul 21, 2005 4:38 pm; edited 4 times in total |
|
Back to top |
|
|
mrfree Veteran
Joined: 15 Mar 2003 Posts: 1303 Location: Europe.Italy.Sulmona
|
Posted: Tue Jul 05, 2005 8:15 am Post subject: |
|
|
Interessante... lo proverò appena possibile _________________ Please EU, pimp my country!
ICE: /etc/init.d/iptables panic |
|
Back to top |
|
|
teknux Guru
Joined: 19 Feb 2003 Posts: 517 Location: Rome, IT
|
Posted: Tue Jul 05, 2005 1:03 pm Post subject: |
|
|
grazie per l'interessamento mrfree
sto ultimando/perfezionando la 0.2 che avrà i seguenti miglioramenti:
- controllo sui cambiamenti di status di Shorewall (start,stop,restart,clear) per tenere d'occhio eventuali cambiamenti non previsti (utile qui a lavoro)
- ora viene visualizzata anche l'interfaccia sulla quale passano i dati
- possibilità di stampare solo i log relativi a una determinata data/ora (es: 'Jul 5' stampa solo i log del 5 luglio)
- piccole ottimizzazioni del codice (tuttavia è ancora pietoso, c'è molto da lavorare)
ho pensato che un piccolo screenshot potrebbe essere gradito (purtroppo non posso mostrarvi qui i colori...):
Code: |
XXXX python # ./pysholog2.py < /var/log/shorewall/current
Jun 30 18:29:26 fw2net:eth0 ACCEPT TCP xxx.yyy.zzz.qqq:37636 -> 66.35.250.209:80
Jun 30 18:29:30 net2all:eth0 DROP UDP 222.189.38.18:57329 -> xxx.yyy.zzz.qqq:1027
Jun 30 18:29:40 fw2net:eth0 ACCEPT TCP xxx.yyy.zzz.qqq:37638 -> 66.35.250.209:80
...
Jul 1 13:32:08 net2all:eth0 DROP UDP 61.152.158.152:32875 -> xxx.yyy.zzz.qqq:1026
Jul 1 13:40:51 all2all:eth1 REJECT ICMP 192.168.0.2 -> 192.168.0.1
Jul 1 13:41:41 Shorewall Restarted
...
Jul 5 14:47:43 fw2net:eth0 ACCEPT TCP xxx.yyy.zzz.qqq:39663 -> 207.126.111.216:80
Jul 5 14:52:04 net2all:eth0 DROP UDP 70.85.177.74:40080 -> xxx.yyy.zzz.qqq:1026
|
appena sarà disponibile questa nuova versione editerò il post originario
saluti,
tek |
|
Back to top |
|
|
teknux Guru
Joined: 19 Feb 2003 Posts: 517 Location: Rome, IT
|
Posted: Fri Jul 08, 2005 12:21 am Post subject: |
|
|
Per chi volesse provare l'ultima versione (beta, ma da perfezionare), eccovi il link
Sono state apportate le seguenti migliorie:
- possibilità di leggere da file o da stdin
- filtro su IP
- filtro sulla data
- pulizia del codice (ancora non completata)
saluti,
tek |
|
Back to top |
|
|
xchris Advocate
Joined: 10 Jul 2003 Posts: 2824
|
Posted: Fri Jul 08, 2005 7:05 am Post subject: |
|
|
è carino da vedere
io normalmente uso fwlogwatch perche' mi organizza i report in diversi modi...cmq mi sembra carino.
Ma credo che tu non volessi fare un tool per report...
Posso rompere le palle suggerendo qc?
Ho dato uno sguardo velocissimo al codice (e quindi potrei dire strunzet).
Mi pare che tu dia per scontanto che il traffico del log sia di tipo ICMP,UDP,TCP e quindi colori o meno la porta.
Dovresti intercettare anche altri tipi di traffico tipo GRE,ESP....
Un suggerimento di opzione.
Sarebbe comodissimo a mio avviso mettere un opzione di ricerca su IP e/o porta e/o trasporto ecc ecc. e colorare solo le righe matchate,
Sarebbe veramente molto comodo in fase di debugging del firewall!
Se non lo implementi tu lo implemento io perche' mi sarebbe veramente comodo!
Domanda...perche' solo Shorewall? il formato e' quello standard...
Se metti una var in check_chain e' possibile usarlo con qualunque fire
Complimenti e mi raccomando.... implementa la mia opzione (scherzo ovviamente....)
Ciao _________________ while True:Gentoo() |
|
Back to top |
|
|
teknux Guru
Joined: 19 Feb 2003 Posts: 517 Location: Rome, IT
|
Posted: Fri Jul 08, 2005 10:07 am Post subject: |
|
|
innanzi tutto grazie per l'apprezzamento crecherò di rispondere per ordine:
- per i protocolli hai perfettamente ragione, è qualcosa che ho in testa e che dovrei/vorrei implementare al più presto, anche perchè qui al lavoro lavoriamo molto con vpn e altro. stavo pensando di creare due liste contenenti rispettivamente i protocolli con porta e senza-porta. i nquesto modo dovrebbe essere ababstanza semplice aggiungere ciò che serve al volo. per ora è l'unica soluzione che mi è venuta in mente, considerando l'implementazione della get_protodata()
Quote: |
Sarebbe comodissimo a mio avviso mettere un opzione di ricerca su IP e/o porta e/o trasporto ecc ecc. e colorare solo le righe matchate,
Sarebbe veramente molto comodo in fase di debugging del firewall!
|
mmm, non male! qualche ideuzza sulla ricerca del trasporto mi stava frullando, ma l'idea colorare solo le righe matchate non l'avevo considerata. eventualemnte potrei metterla come opzione a parte (che so: --color-match o giù di lì)
Quote: |
Se non lo implementi tu lo implemento io perche' mi sarebbe veramente comodo!
|
accomodati pure se vuoi se ho tempo provo a smanazzarci oggi
Quote: |
Domanda...perche' solo Shorewall? il formato e' quello standard...
Se metti una var in check_chain e' possibile usarlo con qualunque fire
|
ehehehe veramente l'idea era partita da uno scriptino in perl (che ho linkato nel primo post) scritto esplicitamente per Shorewall. su questo punto ci stavo riflettendo, devo solo capire cosa "greppare" al posto di "Shorewall.*" , l'idea della variabile come argomento potrebbe essere la strada giusta, mi attrezzerò
saluti,
tek |
|
Back to top |
|
|
teknux Guru
Joined: 19 Feb 2003 Posts: 517 Location: Rome, IT
|
Posted: Fri Jul 08, 2005 3:53 pm Post subject: |
|
|
Quote: | Sarebbe comodissimo a mio avviso mettere un opzione di ricerca su IP e/o porta e/o trasporto ecc ecc. e colorare solo le righe matchate,
Sarebbe veramente molto comodo in fase di debugging del firewall!
|
accontentato ho aggiunto l'opzione -D (o --debug) che stampa tutto, ma colora solo ciò che gli hai chiesto di filtrare (per ora solo la data e l'ip).
ho fatto un po' di prove e funziona egregiamente, ma non sono ancora soddisfatto, voglio vedere se posso organizzare il codice in modo migliore. per ora è ancora beta quindi
per quanto riguarda i protocolli credo mi occorra un bel po' più di tempo per stabilire come gestirli.
ero partito dal farmi un giochino in python per riprendere la mano e colorare i log sparati su vc9, poi ho pensato al tool di report, ora cerco di fargli fare ciò che potrebbe essere ritenuto utile, poco male |
|
Back to top |
|
|
xchris Advocate
Joined: 10 Jul 2003 Posts: 2824
|
Posted: Fri Jul 08, 2005 4:04 pm Post subject: |
|
|
o e' un bug o sbaglio qc..
comando:
Code: |
./pysholog.py -a31.0.224.57 -D < /var/log/messages
|
e mi sputa fuori tutto colorato (ho solo qualche entry di ICMP e una TCP del host specificato)
ciao
EDIT:c'e' un motivo particolare per cui non usi
Code: |
from output import xtermTitle,xtermTitleReset,yellow,bold,green,darkgreen,red,blue,darkred,darkblue,darkyellow,turquoise,nocolor
|
esempio preso dallo zio (pino) _________________ while True:Gentoo()
Last edited by xchris on Fri Jul 08, 2005 4:09 pm; edited 1 time in total |
|
Back to top |
|
|
teknux Guru
Joined: 19 Feb 2003 Posts: 517 Location: Rome, IT
|
Posted: Fri Jul 08, 2005 4:08 pm Post subject: |
|
|
sai il bello? che prima di upparlo l'ho testato e funziava a meraviglia, ora leggo il tuo post, rifaccio la prova e mi sputa tutto colorato anche a me!
terribile... comunque credo di avere qualche subbio nella main() dove c'è il check del debug...
ora ricontrollo
saluti,
tek |
|
Back to top |
|
|
xchris Advocate
Joined: 10 Jul 2003 Posts: 2824
|
Posted: Fri Jul 08, 2005 4:14 pm Post subject: |
|
|
a me pare che manchi proprio tutto un pezzo....
il parser... ecc
che hai fatto? _________________ while True:Gentoo() |
|
Back to top |
|
|
teknux Guru
Joined: 19 Feb 2003 Posts: 517 Location: Rome, IT
|
Posted: Fri Jul 08, 2005 4:24 pm Post subject: |
|
|
ok tutto a posto a quanto pare avevo modificato un "and" in "or" nella main durante l'assegnazione del valore alla variabile dbg per stabilire se la stringa doveva essere colorata o meno. purtroppo avevo uppato distrattamente la versione con 'or'. ora dovrebbe andare
saluti,
tek |
|
Back to top |
|
|
xchris Advocate
Joined: 10 Jul 2003 Posts: 2824
|
Posted: Fri Jul 08, 2005 4:29 pm Post subject: |
|
|
boh... io avevo una versione tagliata...
cmq ora funziona!
aspettiamo la versione con diversi filtri.
Happy coding & compliments....
leggi qualche post su (che ho editato) in cui ti chiedevo perche' usi i colori in quel modo.
ciauzz _________________ while True:Gentoo() |
|
Back to top |
|
|
teknux Guru
Joined: 19 Feb 2003 Posts: 517 Location: Rome, IT
|
Posted: Fri Jul 08, 2005 9:12 pm Post subject: |
|
|
xchris wrote: |
EDIT:c'e' un motivo particolare per cui non usi
Code: |
from output import xtermTitle,xtermTitleReset,yellow,bold,green,darkgreen,red,blue,darkred,darkblue,darkyellow,turquoise,nocolor
|
esempio preso dallo zio (pino) |
diamine! avevo cercato nella documentazione e non trovavo, incredulamente, qualche libreria per stampare i colori. c'è di peggio, perchè noto che usi il modulo output che avevo visto in giro e non trovavo la doc. Infine avevo provato a dare un'occhiata allo zio pino e non ho visto quell'import e come l'hai usato. mi sono pure scervellato a trovare gli escape! un disastro insomma
grazie davvero, ora sono più sollevato
corro a fare i cambiamenti. ah ho notato che non sempre l'opzione -D da i risultati richiesti in alcune condizioni di opzioni. devo giocare meglio con le espressioni booleane e i valori di ritorno... aggiungerò anche qualche filtro e proverò a migliorare il codice perchè ho come l'impressione che sia pietoso
scusate l'eventuale sconclusionatezza del post, qualcuno che ha apprezzato il mio programma ha rispettato la licenza
saluti,
tek |
|
Back to top |
|
|
xchris Advocate
Joined: 10 Jul 2003 Posts: 2824
|
Posted: Fri Jul 08, 2005 9:42 pm Post subject: |
|
|
spero che tu prenda questi consigli nel modo corretto...
non e' da me fare il saccente (anche perche' di python c'e' chi ne mastica sicuramente + di me).
Sono solo osservazioni per semplificarti la vita
ciao _________________ while True:Gentoo() |
|
Back to top |
|
|
teknux Guru
Joined: 19 Feb 2003 Posts: 517 Location: Rome, IT
|
Posted: Sat Jul 09, 2005 2:38 pm Post subject: |
|
|
xchris wrote: |
Sono solo osservazioni per semplificarti la vita
|
non scherzavo, cercavo veramente di semplificarmi la vita e non riscrivere qualcosa che è già pronto e certamente più funzionante di quello che potrei rifare, il problema è che non l'avevo trovato così ho rimandato la questione arrangiandomi con una funzioncina al volo
vado a fare un po' di modifiche, saluti,
tek |
|
Back to top |
|
|
teknux Guru
Joined: 19 Feb 2003 Posts: 517 Location: Rome, IT
|
Posted: Mon Jul 11, 2005 1:18 am Post subject: |
|
|
Ho appena reso disponibile la nuova versione 7.1:
rispetto alla precedente ho apportato i seguenti cambiamenti:
- riscritta la funzione per generare output colorato (grazie xchris), ora viene usato il modulo output + uno pseudo-hack per ottenere colori che non ho trovato nel modulo
- filtro sulle interfacce
- filtro sulle porte
- ora la funzionalità "debug" funzia perfettamente con tutti i filtri
resta da risolvere la gestione dei protocolli (seguono a ruota i relativi filtri), il filtro sulle policy e la possibilità di dargli in pasto anche logs non specifici di Shorewall
saluti,
tek |
|
Back to top |
|
|
teknux Guru
Joined: 19 Feb 2003 Posts: 517 Location: Rome, IT
|
Posted: Wed Jul 13, 2005 4:37 pm Post subject: |
|
|
ecco la 0.8 con un bel po' di cambiamenti (sembrano pochi, ma ci ho messo tanto ):
- aggiunto filtro sulle policy
- aggiunti due meta-filtri '--from' e '--to', che a loro volta possono accettare ciascuno i filtri '-a' e '-p' (cioè ip e porta). molto utile per trovare ad esempio "tutti i log relativi a pacchetti partiti dall'host A con porta x e/o destinati all'host B porta Y", beh le combinazioni possibili sono parecchie al momento ci sono alcune limitazioni: con --from e/o --too attivati le opzioni -a e -p attivate precedentemente perdono valore (è normale, se gli hai chiesto di essere specifico, non ha bisogno di altre flags), l'opzione -D (debug) per ora non funziona, anzi, torna errore. dovrei correggerlo al più presto anche se non è una grave mancanza, basta non usare --from e/o --too
- pulizia del codice, anche se purtroppo ho sporcato da altre parti con l'aggiunta di quei meta-filtri...
per la gestione dei protocolli non riesco a trovare dei logs che presentino informazioni che posso filtrare, quindi se qualcuno avesse qualche stringa da darmi sarebbe gran cosa, per ora non ho trovato nulla :/
presto arriverà anche "l'indipendenza" dai log di Shorewall, ho preferito concentrarmi sulle funzionalità che mi sembravano più impellenti o utili, ora sono a buon punto (eslcudendo pulizia del codice e gestione protocolli)
enjoy,
tek |
|
Back to top |
|
|
xchris Advocate
Joined: 10 Jul 2003 Posts: 2824
|
Posted: Wed Jul 13, 2005 4:57 pm Post subject: |
|
|
appena riesco provo
ciauz _________________ while True:Gentoo() |
|
Back to top |
|
|
teknux Guru
Joined: 19 Feb 2003 Posts: 517 Location: Rome, IT
|
Posted: Thu Jul 21, 2005 4:45 pm Post subject: |
|
|
dopo un bel po' di giorni ho uppato una versione che risolve il problema dell'opzione di debug (-D), ora funziona perfettamente (o almeno dovrebbe) come prima. ho cambiato anche licenza da marijuana-ware ad una semplice BSD license, visto che qui a lavoro non credo accetterebbero mai una cosa del genere (è da tempo che medito di trasferirmi in Olanda...).
forse ho trovato un'idea decente per gestire i protocolli in maniera flessibile senza l'uso di dizionari o liste che limiterebbero l'uso, se riesco vorrei anche aggiungere un controllo sul nome dei log generati, in questo modo dovrei rendere il programmino indipendente dai log generati da shorewall e dovrebbe aprirsi ad una base di utenti decisamente più vasta.
come al solito, commenti e correzioni sono sempre ben accetti
saluti,
tek |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|