Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[tool] pysholog: shorewall log parser (update 0.8.1)
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) Risorse italiane (documentazione e tools)
View previous topic :: View next topic  
Author Message
teknux
Guru
Guru


Joined: 19 Feb 2003
Posts: 517
Location: Rome, IT

PostPosted: Mon Jul 04, 2005 8:52 pm    Post subject: [tool] pysholog: shorewall log parser (update 0.8.1) Reply with quote

salve a tutti,

se può interessarvi ho fatto un piccolo script in python che legge i log di Shorewall, formata l’output 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 :P), 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 :P

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 :P

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
View user's profile Send private message
mrfree
Veteran
Veteran


Joined: 15 Mar 2003
Posts: 1303
Location: Europe.Italy.Sulmona

PostPosted: Tue Jul 05, 2005 8:15 am    Post subject: Reply with quote

Interessante... lo proverò appena possibile ;)
_________________
Please EU, pimp my country!

ICE: /etc/init.d/iptables panic
Back to top
View user's profile Send private message
teknux
Guru
Guru


Joined: 19 Feb 2003
Posts: 517
Location: Rome, IT

PostPosted: Tue Jul 05, 2005 1:03 pm    Post subject: Reply with quote

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
View user's profile Send private message
teknux
Guru
Guru


Joined: 19 Feb 2003
Posts: 517
Location: Rome, IT

PostPosted: Fri Jul 08, 2005 12:21 am    Post subject: Reply with quote

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
View user's profile Send private message
xchris
Advocate
Advocate


Joined: 10 Jul 2003
Posts: 2824
Location: 45.488291,9.186094

PostPosted: Fri Jul 08, 2005 7:05 am    Post subject: Reply with quote

è 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 :D 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 :lol: (scherzo ovviamente....)

Ciao
_________________
while True:Gentoo()
Back to top
View user's profile Send private message
teknux
Guru
Guru


Joined: 19 Feb 2003
Posts: 517
Location: Rome, IT

PostPosted: Fri Jul 08, 2005 10:07 am    Post subject: Reply with quote

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 :D perche' mi sarebbe veramente comodo!


accomodati pure se vuoi ;) se ho tempo provo a smanazzarci oggi :P

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
View user's profile Send private message
teknux
Guru
Guru


Joined: 19 Feb 2003
Posts: 517
Location: Rome, IT

PostPosted: Fri Jul 08, 2005 3:53 pm    Post subject: Reply with quote

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 :P

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 :P
Back to top
View user's profile Send private message
xchris
Advocate
Advocate


Joined: 10 Jul 2003
Posts: 2824
Location: 45.488291,9.186094

PostPosted: Fri Jul 08, 2005 4:04 pm    Post subject: Reply with quote

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
View user's profile Send private message
teknux
Guru
Guru


Joined: 19 Feb 2003
Posts: 517
Location: Rome, IT

PostPosted: Fri Jul 08, 2005 4:08 pm    Post subject: Reply with quote

8O 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 :P

saluti,
tek
Back to top
View user's profile Send private message
xchris
Advocate
Advocate


Joined: 10 Jul 2003
Posts: 2824
Location: 45.488291,9.186094

PostPosted: Fri Jul 08, 2005 4:14 pm    Post subject: Reply with quote

a me pare che manchi proprio tutto un pezzo....
il parser... ecc

che hai fatto? :)
_________________
while True:Gentoo()
Back to top
View user's profile Send private message
teknux
Guru
Guru


Joined: 19 Feb 2003
Posts: 517
Location: Rome, IT

PostPosted: Fri Jul 08, 2005 4:24 pm    Post subject: Reply with quote

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
View user's profile Send private message
xchris
Advocate
Advocate


Joined: 10 Jul 2003
Posts: 2824
Location: 45.488291,9.186094

PostPosted: Fri Jul 08, 2005 4:29 pm    Post subject: Reply with quote

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
View user's profile Send private message
teknux
Guru
Guru


Joined: 19 Feb 2003
Posts: 517
Location: Rome, IT

PostPosted: Fri Jul 08, 2005 9:12 pm    Post subject: Reply with quote

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 :P

grazie davvero, ora sono più sollevato :P

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 :P

scusate l'eventuale sconclusionatezza del post, qualcuno che ha apprezzato il mio programma ha rispettato la licenza ;)

saluti,
tek
Back to top
View user's profile Send private message
xchris
Advocate
Advocate


Joined: 10 Jul 2003
Posts: 2824
Location: 45.488291,9.186094

PostPosted: Fri Jul 08, 2005 9:42 pm    Post subject: Reply with quote

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
View user's profile Send private message
teknux
Guru
Guru


Joined: 19 Feb 2003
Posts: 517
Location: Rome, IT

PostPosted: Sat Jul 09, 2005 2:38 pm    Post subject: Reply with quote

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 :P così ho rimandato la questione arrangiandomi con una funzioncina al volo ;)

vado a fare un po' di modifiche, saluti,
tek
Back to top
View user's profile Send private message
teknux
Guru
Guru


Joined: 19 Feb 2003
Posts: 517
Location: Rome, IT

PostPosted: Mon Jul 11, 2005 1:18 am    Post subject: Reply with quote

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 :P

- 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
View user's profile Send private message
teknux
Guru
Guru


Joined: 19 Feb 2003
Posts: 517
Location: Rome, IT

PostPosted: Wed Jul 13, 2005 4:37 pm    Post subject: Reply with quote

ecco la 0.8 con un bel po' di cambiamenti (sembrano pochi, ma ci ho messo tanto :P):

- 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) :P

enjoy,
tek
Back to top
View user's profile Send private message
xchris
Advocate
Advocate


Joined: 10 Jul 2003
Posts: 2824
Location: 45.488291,9.186094

PostPosted: Wed Jul 13, 2005 4:57 pm    Post subject: Reply with quote

appena riesco provo :)
ciauz
_________________
while True:Gentoo()
Back to top
View user's profile Send private message
teknux
Guru
Guru


Joined: 19 Feb 2003
Posts: 517
Location: Rome, IT

PostPosted: Thu Jul 21, 2005 4:45 pm    Post subject: Reply with quote

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 :P (è 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
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) Risorse italiane (documentazione e tools) All times are GMT
Page 1 of 1

 
Jump to:  
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