[projet libre] logiciel d'analyse de firewall

logiciel d'analyse de firewall [projet libre] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 27-02-2006 à 21:04:09    

Salut a tous,
 
Dans le cadre de mon boulot, j'avais developpé une application permettant, à partir des messages de logs d'un firewall, d'obtenir dans une interface web l'historique des connexions, et si elles étaient rejettées ou acceptées.
Le problème, c'est que j'avais codé ca comme un bon gros goret que je suis, et que c'était absolument pas modulaire, extensible, et distribuable.
Donc récemment, je me suis motivé, et je suis reparti d'une feuille blanche, en pensant dès le debut au coté modulaire de la chose.
Mais comme je ne suis pas un développeur, il se peut que plein de choses demeurent crades, et c'est la que ce post intervient:
j'ai placé mon logiciel sous le coup de la GPLv2, et je vous propose d'essayer de l'installer sur votre machine, et de me dire ce que vous en pensez, de me donner un feedback, et pourquoi pas, de m'envoyer des modifications que je pourrai faire au code.
 
Présentation du logiciel:
Tout d'abord, la partie la plus visible. Comme vous pouvez le onstater, c'est une bete interface web, sans aucun soucis de design, mais qui permet rapidement de repérer les connexions bloquées ou acceptées, et de faire des tris sur ces dernieres.
http://fwmonitor.free.fr/screen/fw.png
 
Architecture:
Le logiciel est developpé en perl, avec une base de données MySQL, et un frontend web en PHP.
Le démon codé en perl, fait un tail_moins_F sur le fichier /var/log/syslog, et se met a l'ecoute des messages du firewall. Lorsqu'il en a un, il le parse, et entre le resultat dans la base de donnees.
L'installe est relativement simple, un fichier install.sh execute en root installant les bons fichiers aux bons endroits.
Il faut ensuite creer la base de donnees avec le schema qui est fourni.
Puis, aller dans les differents scripts (interface web et demon perl) pour preciser les parametres necessaires au bon fonctionnement de la chose.
Le dernier petit detail qui a plus que son important, c'est qu'il faut configurer IPTables pour qu'il affiche des messages dans les logs a chaque connexion, avec comme prefix
--log-prefix "drop "
--log-prefix "accept "
 
Apres, pour les interessés, je vous propose de laisser un message sur le forum pour voir les points qui ne sont pas forcément clairs.
 
Les points que je souhaiterai encore améliorer dans le logiciel:
Rapidité du parseur: sur mon serveur en prod je suis a plus de 50 messages seconde, et quand j'ai essayé de mettre la version modulaire dessus, les perfs se sont crachées .. comme quoi, coder comme un goret, ca paie ;) Voir du coté des regexp, et du traitement comment améliorer.
Interface web: la rendre plus jolie, plus de fonctionnalites, voire de statistiques. Mettre en place un fichier de config commun pour l'interface web et le parseur.
 
Bref, j'ai encore du boulot, mais j'aimerai assez des avis exterieurs, voire des coups de mains.
Merci à ceux qui se donneront la peine d'essayer ...
 
Les sources:  
http://fwmonitor.free.fr/sources/f [...] 0a.tar.bz2


Message édité par trictrac le 27-02-2006 à 21:05:23
Reply

Marsh Posté le 27-02-2006 à 21:04:09   

Reply

Marsh Posté le 28-02-2006 à 09:48:30    

Salut,
 
Ton soft pourrait m'intérréssé seulement avant de l installer j aurais quelque question à te poser  ;)  
 
     - il ne fait que la lecture de fichier log pas d action sur iptables ?
     - la bdd peut-on en specifier une sur un hote distant ?
     - est ce que ca bouffe bcp de RAM ?
 
 
Car dans ma configuration en entre de mon réseau j ai un shorewall d'installé et j ai pas trop le droit a l erreur sur cette machine sinon c est le drame :o


---------------
Never f**k with your systems administrator. Why? Because they know what you do with all that free time! |?? | SAVE Jericho !
Reply

Marsh Posté le 28-02-2006 à 10:37:18    

Il ne fait que lire le fichier /var/log/syslog. Il ne s'execute meme pas en tant que root, donc ne peut rien modifier.
La bdd peut etre sur un hote distant, les parametres peuvent etre definis dans le script (et un eventuel futur fichier de config). L'interface web egalement peut tourner ailleur.
pour la conso en ram, ca depend du nombre de messages dans le fichier /var/log/syslog
Mais la premiere installe, fait la qd meme sur une machine de 'test' avec une config a peu pres equivalente ...
Merci si tu peux tester ...

Reply

Marsh Posté le 28-02-2006 à 10:42:26    

Donc reprenons,  sur le FW juste le daemon pearl puis sur d autre host l interface web et la bdd.
Par contre c est qui le user qui va lire le syslog ?
 
Edit : ok le user est ds le grp adm j ai rien dit  :)


Message édité par Le_Tolier le 28-02-2006 à 10:48:46

---------------
Never f**k with your systems administrator. Why? Because they know what you do with all that free time! |?? | SAVE Jericho !
Reply

Marsh Posté le 28-02-2006 à 10:46:48    

dans mon install.sh, je crée un user system et un group fwmonitor, que je place dans le groupe adm (groupe qui a le droit en lecture sur /var/log/syslog dans debian)
 
Et sur le FW il n'y a effectivement que le demon perl (3 fichiers en tout)
/etc/init.d/fwmonitor pour lancer le demon
/usr/share/perl5/Fwmonitor/netfilter.pm  le module pour analyser un log de netfilter
/usr/local/sbin/fwmonitor_dispatcher qui lit le log, appelle le parser en fonction du type de fw, et met à jour la BDD.
 
edit: tu peux te monter une station externe qui recoit tous les logs de ton fw, et c'est sur cette derniere que tu mets le demon, comme ca si le demon surcharge ou fait planter le serveur, c'est pas le FW, juste le syslog


Message édité par trictrac le 28-02-2006 à 10:48:24
Reply

Marsh Posté le 28-02-2006 à 10:50:24    

ouais c est une bonne idee mais au nivo syslog je sais pas comment faire pour balance le syslog a une autre station je sais que c est faisable mais je sais pas comment


---------------
Never f**k with your systems administrator. Why? Because they know what you do with all that free time! |?? | SAVE Jericho !
Reply

Marsh Posté le 28-02-2006 à 11:15:19    

alors installe le demon direct sur la machine
tout depend le nombre d'entrée générées par seconde ...

Reply

Marsh Posté le 28-02-2006 à 11:21:29    

La solution de deporté le syslog me plait bien.
Aujourd'hui j'ai pas trop le temps mais je m'en occuperais surment demain ou en fin de semaine, car ca me branche pas mal de pouvoir voir les connexions ...  ;)


---------------
Never f**k with your systems administrator. Why? Because they know what you do with all that free time! |?? | SAVE Jericho !
Reply

Marsh Posté le 28-02-2006 à 22:02:41    

petit up du soir, au cas ou d'autre personnes seraient intéressée ..

Reply

Marsh Posté le 28-02-2006 à 23:02:17    

drapal :)

Reply

Marsh Posté le 28-02-2006 à 23:02:17   

Reply

Marsh Posté le 01-03-2006 à 00:35:41    

d ailleur tomate tu sais c est quoi le nom de la appli qui permet de balance le syslog a travers le reseau  :??:  j ai un trou de memoire  :whistle:

Reply

Marsh Posté le 01-03-2006 à 01:32:04    

Question à trictrac (et aux autres) qui n'a pas de rapport direct avec son appli:
J'aimerais aussi me lancer dans un petit projet de logiciel libre mais je ne sais pas trop comment ça marche en fait... Quand on veut faire un LL, il faut contacter la FSF ou il suffit juste de mettre "GPL" dans les sources et basta ? Il n'y a pas un petit protocole au moins pour la forme, une déclaration, un descriptif du projet, rien ?
 
Question subsidiaire: trictrac évoque la question de la qualité de son code. Existe-t-il, à votre connaissance, un recueil de conventions pour écrire des "beaux" logiciels libres bien "propres" ? (exemples: format des commentaires, conventions de nommage, anticipation de l'internationalisation, etc.)
 
Merci d'avance pour vos réponses...

Reply

Marsh Posté le 01-03-2006 à 08:01:52    

Le_Tolier a écrit :

d ailleur tomate tu sais c est quoi le nom de la appli qui permet de balance le syslog a travers le reseau  :??:  j ai un trou de memoire  :whistle:


 
c'est plutot un remplacement de syslog, syslog-ng, bien plus flexible

Reply

Marsh Posté le 01-03-2006 à 09:00:56    

ah oui ce nom me dit quelque chose merci beaucoup  :jap:


---------------
Never f**k with your systems administrator. Why? Because they know what you do with all that free time! |?? | SAVE Jericho !
Reply

Marsh Posté le 01-03-2006 à 09:20:45    

tu mets une référence à la GPL dans tes sources, et c'est bon ...
Pour le code, libre à toi ..

Reply

Marsh Posté le 01-03-2006 à 09:54:10    

sinon, le perl c'est un peu lourd non ?
en C ça blasterait :)


---------------
:: Light is Right ::
Reply

Marsh Posté le 01-03-2006 à 10:18:47    

Tomate a écrit :

sinon, le perl c'est un peu lourd non ?
en C ça blasterait :)


 
Le C caÿ le mal  :o


---------------
Never f**k with your systems administrator. Why? Because they know what you do with all that free time! |?? | SAVE Jericho !
Reply

Marsh Posté le 01-03-2006 à 10:19:29    

c'est parce que tu connais pas que tu dis ça :o


---------------
:: Light is Right ::
Reply

Marsh Posté le 01-03-2006 à 10:25:47    

je connais que trop bien  :pt1cable:  j avais réalise un peu le même programme que celui de ce topic en C mais basé sur le flux netflow.
Il etais bien sauf qu au bout de 3 jours il avait bouffé toute la RAM du pc  :fou: .
Les malloc et les free je les haient  :o


---------------
Never f**k with your systems administrator. Why? Because they know what you do with all that free time! |?? | SAVE Jericho !
Reply

Marsh Posté le 01-03-2006 à 10:27:43    

Le_Tolier a écrit :

je connais que trop bien  :pt1cable:  j avais réalise un peu le même programme que celui de ce topic en C mais basé sur le flux netflow.
Il etais bien sauf qu au bout de 3 jours il avait bouffé toute la RAM du pc  :fou: .
Les malloc et les free je les haient  :o


c'est pas la faute du C mais la tienne hein :heink:  
 
et je persiste : en C ça irait bcp plus vite :p


---------------
:: Light is Right ::
Reply

Marsh Posté le 01-03-2006 à 10:39:34    

oui, mais beaucoup plus lourd à écrire, debugguer, et j'aime bien perl :p
en plus, perl c'est tout a fait adapté au regexp ...

Reply

Marsh Posté le 01-03-2006 à 10:49:43    

Tomate a écrit :

c'est pas la faute du C mais la tienne hein :heink:  
 
et je persiste : en C ça irait bcp plus vite :p


 
Oui je sais mais bon j ai jamais aimé le C na  :o


---------------
Never f**k with your systems administrator. Why? Because they know what you do with all that free time! |?? | SAVE Jericho !
Reply

Marsh Posté le 01-03-2006 à 10:54:26    

[:mmmfff]


---------------
:: Light is Right ::
Reply

Marsh Posté le 01-03-2006 à 11:16:25    

roh boude pas  :o dès que j ai fini mon parseur je vais regarder ca de plus près


---------------
Never f**k with your systems administrator. Why? Because they know what you do with all that free time! |?? | SAVE Jericho !
Reply

Marsh Posté le 01-03-2006 à 20:37:53    

Alors, toujours pas essayé ?? au lieu de critiquer perl :p

Reply

Marsh Posté le 01-03-2006 à 21:07:25    

hum, je me permets de donner mon avis.
 
Il existe déjà un produit (cisco mars : http://www.cisco.com/en/US/products/ps6241/index.html) qui fait ça. Etant donné que pour être efficace, le soft doit être capable de récupérer et interpreter les formats de multiples modèles de firewall, et donc autant de formats syslog différents et des bases de signatures importantes et mises à jour régulièrement, les gens interessés se tourneront plutot vers un produit payant avec du support, surtout que le MARS n'est pas très cher.

Reply

Marsh Posté le 01-03-2006 à 21:21:26    

et en plus proposé par cisco, donc pourkoi chercher ailleur ..
d'autant plus que mars ne propose pas du tout ce que je propose, désolé ..
c'est d'ailleur parce que cisco n'a rien dans son catalogue qui permet de faire ca que j'avais développé mon soft ..
alors donne toi la peine de te renseigner un peu avant de proposer du cisco a tout va, sans réfléchir .. entre ca et un miucrosoftien lambda, aucun diff ...
pour le fait que mars ne soit pas cher, laisse moi rire, mais je vois personne mettre mars chez soi, une dans une PME .. alors que suivre les conns d'un firewall c'est qd meme super utile pour debugguer ...
pour le fait d'etre compatible avec de nombreux formats de syslog, mon soft a été revu pour justement etre composé de modules, en fonction du type de FW a traiter, et donc permet d'etre adapter ..
a toi de créer de nouveau modules si certains te manquent ...
Et pour l'interface d'un FW, regarde un checkpoint, tu verras que cisco est loin, tres loin derriere avec le PIX, meme avec la version 7.
Ils sont tellement a la ramase que les developpeurs officiels du PIX ont l'interface du checkpoint installée pour voir ce qui y est fait, et ce qui pourrait etre repris.
Maintenant, la question que je te pose:  
en quoi ton post fait avancer quoi que ce soit, hormis proner encore une fois le dieu cisco ??? pour un produit hors scope qui plus est ??

Reply

Marsh Posté le 01-03-2006 à 22:19:48    

sinon, pour recentrer, ce que j'aimerai savoir dans un premier temps, c'est si c'est 'facile' à installer, par la j'entend a la portée du premier admin venu .
Et comme la réponse sera non: qu'est-ce que je peux fair epour améliorer ca ..

Reply

Marsh Posté le 02-03-2006 à 01:38:51    

Peux-tu poster une image en 1600x1200 ? J'ai du mal a voir les details.

Reply

Marsh Posté le 02-03-2006 à 08:38:53    

si tu me dis comment faire un preview, pas de prob ...

Reply

Marsh Posté le 02-03-2006 à 20:37:18    

personne pour essayer ?

Reply

Marsh Posté le 03-03-2006 à 09:09:59    

Sisi mais surment la semaine prochaine en fait ;)


---------------
Never f**k with your systems administrator. Why? Because they know what you do with all that free time! |?? | SAVE Jericho !
Reply

Marsh Posté le 08-03-2006 à 09:38:13    

Bon alors j ai mis place syslog-ng, donc je vais tester tes scritps dans la journée je pense.
J'ai un peu regardé déjà comme c'est strcuturé au niveau bdd, et j'ai pensé un à truc, plutôt que de travailler toujours sur la même, table pourquoi ne pas faire une table pour les connexions journalières une pour les hebdomadaire ......
De plus j ai pas vu d'index pour les tables et d'après ce que j'avais fait il y a quelques annèes sans les index ca risque de mettre du temps à s'afficher en particulier sinon on fait une recherche sur des critères précis ( tel IP, port ..).


---------------
Never f**k with your systems administrator. Why? Because they know what you do with all that free time! |?? | SAVE Jericho !
Reply

Marsh Posté le 08-03-2006 à 11:16:11    

bon alors je voulu tester et ca fonctionne ne pas  :whistle:  
pas de message d erreur au lancement, le fichier pid est bien rempli avec un numéro de processus cependant aucun process ne correspont a ce numéro.
je vais creuser pour essayer de voir d'où vient le problème mais bon j'y connais rien en perl  :o
 
Edit :  en lançant  /usr/local/sbin/fwmonitor_dispatcher à la main j'ai ça comme erreur :  

Citation :


monitoring:/var/log# /usr/local/sbin/fwmonitor_dispatcher
Can't locate File/Tail.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.8.4 /usr/local/share/perl/5.8.4 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.8 /usr/share/perl/5.8 /usr/local/lib/site_perl .) at /usr/local/sbin/fwmonitor_dispatcher line 8.
BEGIN failed--compilation aborted at /usr/local/sbin/fwmonitor_dispatcher line 8.


 
Edit 2 : en fait il manque le fichier Tail
 
Edit 3: c'est reglé c'etait une lib perl en fait  :D


Message édité par Le_Tolier le 08-03-2006 à 12:12:20

---------------
Never f**k with your systems administrator. Why? Because they know what you do with all that free time! |?? | SAVE Jericho !
Reply

Marsh Posté le 08-03-2006 à 12:21:13    

bon now ca fonctionne du moins on dirait mais il ne met rien dans la base.
Je pense que ca viens du fait que le log ressemble a ça :  

Code :
  1. Mar  8 12:16:05 1*.*.* kernel: Shorewall:GREEN2RED:ACCEPT:IN=eth0 OUT=eth1 SRC=1.*.*.*
  2. DST=148.129.75.16 LEN=48 TOS=0x00 PREC=0x00 TTL=127 ID=34031 DF PROTO=TCP SPT=1526
  3. DPT=80 WINDOW=64240 RES=0x00 SYN URGP=0


 
donc je vais voir pour modifier les mot clef du parser pour qu'il check  :ACCEPT:


Message édité par Le_Tolier le 08-03-2006 à 12:21:44

---------------
Never f**k with your systems administrator. Why? Because they know what you do with all that free time! |?? | SAVE Jericho !
Reply

Marsh Posté le 08-03-2006 à 15:32:02    

euh .. tu peux pas modifier ta config iptable ?
en tout cas, ta ligne syslog est assez bizarre.
Je suis pas chez moi, mais ce soir je post une ligne syslog "standard" pour un message iptables.
en tout cas, merci d'avoir essayé .;
 
PS: effectivement, il faut que je pense a mettre les dépendances en terme de modules perl

Reply

Marsh Posté le 08-03-2006 à 15:58:39    

alors :  
     - non je peux pas modifier la syntaxe du log car j utilise pas directement iptable mais Shorewall donc je peux juste régler les niveau de log ( debug, notice ..... )
 
     - je me suis un peu plongé dans ton code ( -> je me suis mis au perl du coup  :D )  
           j ai remplace ça :  
         

Code :
  1. my %fw = ("192.168.0.1" => "netfilter",
  2.           "autre" => "other_module" );


         donc je pense qu'il faut modifier l'expression reguliere pour essayer de matcher l'ip  
       

Code :
  1. $_ =~ m/(\w{3})\s+(\d{1,2}) (\d{2}:\d{2}:\d{2}) ([^ ]*)  (.*)/))


         à ce niveau là ([^ ]*)
 
         j'ai aussi remplace le Netfilter.pm les accept et drop par ACCEPT et DROP au cour ça serait case sensitive.
         


---------------
Never f**k with your systems administrator. Why? Because they know what you do with all that free time! |?? | SAVE Jericho !
Reply

Marsh Posté le 08-03-2006 à 16:15:50    

tiens si tu pouvais aussi m'expliquer cette ligne :

Code :
  1. if ((my $strmonth, my $day, my $hour, my $host, my $msg) = ( $_ =~ m/(\w{3})\s+(\d{1,2}) (\d{2}:\d{2}:\d{2}) ([^ ]*) (.*)/))


 
j'ai bien compris que ca ~m/.... c'est l'expression régulière mais je sais pas trop ce que représente la variable $_ .
De plus je sais pas trop à quoi correspond ce qu'il y a dans la 1er partie du if  :pt1cable:


---------------
Never f**k with your systems administrator. Why? Because they know what you do with all that free time! |?? | SAVE Jericho !
Reply

Marsh Posté le 08-03-2006 à 17:34:16    

$_ est une expression idiomatique de perl, c'est un peu tout en fonction des cas ...
Dans le cas la, c'est le message que le firewall envoie au syslog (la partie apres le hostname, de mémoire)
Les variable de la partie du if sont des affectations: c'est pour récupérer les strings de la regexp en une étape ..

Reply

Marsh Posté le 08-03-2006 à 17:38:24    

ok c'est ce que je pensais donc :  
$strmonth = \w{3}
$day = \d{1,2}
$hour = \d{2}:\d{2}:\d{2}
$host = ([^ ]*)
$msg = (.*)
 
donc je vais modifier ([^ ]*) de sorte a chopper mon adress ip  ;) pour entrer dans les if qui suivent


---------------
Never f**k with your systems administrator. Why? Because they know what you do with all that free time! |?? | SAVE Jericho !
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed