LOGICIEL cisco-acct Recuperation et exploitation de la comptabilite des routeurs CISCO. VERSION 2.0 INTRODUCTION Il s'agit d'un ensemble de programmes pour lire et exploiter des informations de comptabilite (couples d'adresses IP et trafic) entretenues par les routeurs CISCO. Fonctionnalites : - rapport journalier comprenant : - debit moyen mesure sur la ligne - anomalies detectees sur le routeur - machines locales non declarees dans le DNS - chiffres de consommations (50 plus gros consommateurs par ex.) - courbe de trafic en ASCII - possibilite de generer des graphes (en PostScript) de consommation journaliers - conservation des tables de comptabilite pour reagir en cas de probleme de securite - possibilite de faire des scripts pour faire des stats de consommation sur une semaine, un mois, un an, etc. (scripts non ecrits a ce jour) grace a des information resumees. Problemes connus : - Le mot de passe du routeur est mis en clair dans la crontab de l'utilisateur reponsable de la comptabilite. Ce peut etre change en faisant un script d'interrogation SNMP (non ecrit par moi) du routeur. Dans ce cas, seul un programme doit changer sur l'ensemble. Mais le nom de la communaute SNMP (rw) devra tout de meme figurer en clair quelque part. - Le temps de traitement et la place occupee sont importants On n'a rien sans rien. ESTIMATIONS DE PLACE ET DE TEMPS Place occupee sur le disque (pour une liaison 2 Mb/s bien chargee) : - Le fichier de log en cours de construction, en fin de journee : 30 Mo - Chaque fichier de log, compresse et archive : 5 Mo Autrement dit, si on veut conserver n jours de logs a l'UVSQ, on aura (30 + n*5) Mo Temps de traitement pour l'analyse quotidienne sur un PII 350 sous FreeBSD : 5 minutes PREREQUIS perl (4 ou 5) pour le script de connexion sur le routeur Disponible sur toutes les bonnes archives GNU (ftp.lip6.fr:/pub/gnu) Tcl (7 ou 8) pour les scripts d'analyse de trafic Disponible sur toutes les bonnes archives Tcl (ftp.lip6.fr:/pub/tcl/distrib) gcc (sur les machines 32 bits uniquement) pour compiler les extensions a Tcl qui utilisent l'arithmetique 64 bits. Disponible sur toutes les bonnes archives GNU (ftp.lip6.fr:/pub/gnu) gnuplot (optionnel) pour generer des graphes en PostScript. Disponible sur toutes les bonnes archives GNU (ftp.lip6.fr:/pub/gnu) date Posix pour avoir les fonctionnalites de formattage de dates ("date +%Y%m%d" et "date +%H%M"). Disponible theoriquement sur tout systeme Unix moderne. DISPONIBILITE ftp://ftp.uvsq.fr/pub/cisco/acct-2.0.tar.gz Les sites mirroir sont : ftp://ftp.lip6.fr/pub/networking/cisco/acct ftp://ftp.jussieu.fr/pub/networking/cisco/acct (c'est le meme site) COPYRIGHT Vous pouvez faire ce que vous voulez avec ce package. L'utiliser, le diffuser, le vendre. Si vous utilisez ces outils que vous voulez etre sympa, envoyez-moi un petit courrier. Si vous utilisez ces outils que vous voulez etre vraiment tres sympa, la prochaine fois qu'on se rencontre, ce serait bien de m'offrir un verre. AUTEUR Pierre David (Pierre.David@prism.uvsq.fr) Script ciscot : il est extrait des "pride-tools" Ses auteurs sont : Tony Bates, RIPE Network Coordination Centre Marten Terpstra, RIPE Network Coordination Centre Voir le fichier doc/ciscot.copyright La version de ciscot fournie ici est legerement modifiee. L'original est dans ftp://ftp.ripe.net/pride/tools Fichier inet_addr.c : il est extrait de FreeBSD 2.1 Voir le fichier doc/inet_addr.copyright Je remercie Vincent Gillet (NIC) pour ses nombreux commentaires et bug-reports. DOCUMENTATION La documentation consiste essentiellement en ce fichier. Le repertoire doc/ contient quelques autres documentations : doc/EXEMPLE : contient un exemple commente doc/ciscot.copyright : copyright original de ciscot Note : la version 2.0 a été annoncé lors de JRES'99 (Montpellier, du 29/11/1999 au 03/12/1999). L'article et la présentation sont dans doc/jres99-*. Le format imposé pour les articles étant Word, j'ai joint une version PostScript imprimée tant bien que mal. FONCTIONNEMENT Les routeurs CISCO peuvent maintenir a jour une table de comptabilite (acct en langage unixien). Cette table memorise des couples d'adresses IP et la consommation (nb d'octets, nb de paquets). Personnellement, je fais tourner ces scripts sur le routeur d'abonne en terminologie RERIF, c'est a dire sur le routeur faisant l'interface avec le monde exterieur. Cela me permet d'avoir le trafic sur la ligne avec l'exterieur. Plusieurs programmes sont rediges : - ciscot (auteurs = Tony Bates et Marten Terpstra) script Perl pour simuler un dialogue telnet avec le routeur - getacct script Shell, appele periodiquement (toutes les minutes par exemple) pour lire la table d'acct et la stocker sur le disque. - daily script Shell, appele toutes les nuits pour traiter l'acct stocke sur le disque, en extraire une synthese, faire un rapport (envoye par mail), et compresser le fichier de la veille. - accsum c'est le programme le plus important, il s'agit d'un script Tcl appele par daily pour : - synthetiser la table en un nb d'octets echanges par minute - faire le rapport d'anomalies - faire le rapport de consommations Il est controle par un fichier de configuration - conf.uvsq fichier de configuration exemple pour accsum - gengraph script Tcl appele quand on le desire pour faire des jolis graphiques. Utilise "gnuplot". Deux types d'informations sont memorises : - repertoire log/* fichiers bruts (un par jour), lus et compresses chaque nuit par daily. C'est gros... Ces fichiers sont interessants a conserver en cas de probleme de securite. - repertoire synth/* fichiers (un par jour) contenant 1440 lignes (une par minute) avec le trafic correspondant a l'heure de la journee. C'est tout petit. Utilise par "gengraph", ou par des outils (non ecrits a ce jour, mais faciles a realiser) pour faire des stats sur une semaine, sur un mois, sur un an. INSTALLATION 0) vous n'avez pas besoin d'etre "root" pour executer ces programmes. 1) choisissez un endroit ou placer tout ca (programmes et logs) mkdir /usr/local/acct cet endroit contient les scripts, les sources de l'extension Tcl, les logs bruts (prend beaucoup de place) et les logs synthetises. 2) "detarrez" a cet endroit cd /usr/local/acct tar xvf 3) repertoire src/ - verifiez le fichier Makefile - tapez "make" pour generer le fichier "acctcl" ("just type make", comme c'est qu'y disent ;-) 3) script bin/getacct - modifiez HOME 4) script bin/daily - modifiez HOME - modifiez les variables Z et COMPRESS suivant votre programme de compression - modifiez QUI (adresse ou envoyer les courriers) - modifiez CONFIG (chemin du fichier de configuration de accsum) - modifiez GENGRAPH (chemin de "gengraph" ou rien) - modifiez la commande pour envoyer le courrier 5) script bin/accsum - modifiez la premiere ligne pour mettre le chemin de "acctcl" Attention : sur la plupart des systemes, cette ligne ne peut pas faire plus de 32 caracteres. 7) fichier bin/conf.exemple - editez ce fichier et changez les variables suivant votre configuration - une fois modifie ce fichier, vous pouvez demander a accsum de le verifier en faisant : accsum conf.exemple 8) script bin/gengraph - modifiez la premiere ligne pour mettre le chemin de "acctcl" (ou n'importe quel "tclsh") - modifiez la ligne : set conf(gnuplot) {/usr/local/X11R5/bin/gnuplot} - modifiez les lignes : set conf(...) selon vos gouts 9) script bin/ciscot - modifiez la premiere ligne pour mettre le chemin de perl - si vous utilisez Solaris 2.*, il faut modifier la ligne $SOCK_STREAM = 1; pour avoir : $SOCK_STREAM = 2; 10) demarrez l'accounting sur votre routeur $ telnet mon-routeur enable conf ip accounting ^Z write memory quit La table fait par defaut 512 entrees. Si les scripts font par la suite etat de saturations repetees de la table, vous pourrez augmenter le nombre d'entrees : $ telnet mon-routeur enable conf ip accounting-threshold 1024 ^Z write memory quit 11) ajoutez dans la crontab de l'utilisateur qui fait tourner l'acct # toutes les minutes * * * * * /usr/local/acct/bin/getacct # toutes les nuits, a 0h5 5 0 * * * /usr/local/acct/bin/daily ou : est l'adresse IP du routeur (preferez une adresse IP a un nom, on ne sait jamais) est le mot de passe du routeur est le mot de passe "enable" du routeur Bien entendu, faites attention a ne pas laisser cette crontab accessible a tous ! 12) surveillez que le repertoire log contient un nouveau fichier log/acct.* correspondant a la date courante. 13) allez dormir, et lisez votre courrier demain matin. UTILISATION DE GENGRAPH La syntaxe de gengraph est : gengraph ou : est le nom du fichier synthetise permet de specifier le nombre de barres dans le graphe : il y aura une barre toutes les <...> minutes. Ce nombre doit etre un diviseur de 60 (pour avoir un nombre entier de barres par heure). est la date (format aaaammjj) pour le titre. Pour avoir un graphe de l'activite du 25 novembre 1999, avec une barre toutes les 30 minutes, faire : cd /usr/local/acct/bin gengraph ../synth/synth.19991125 30 19991125 > /tmp/graph.ps