Gestion des logs

De wikilivois
Aller à la navigationAller à la recherche
La version imprimable n’est plus prise en charge et peut comporter des erreurs de génération. Veuillez mettre à jour les signets de votre navigateur et utiliser à la place la fonction d’impression par défaut de celui-ci.


Cf aussi


Synchronisation horaire avec openntpd

http://gentoo-wiki.com/HOWTO_NTP_Using_OpenNTPD

Package openntpd

#usermod -d /var/empty ntp


<licode file=/etc/ntp.conf> servers pool.ntp.org </licode>

<licode file=/etc/conf.d/ntpd>

  1. Forces sync to within a few seconds at startup, rather than very slowly homing in.

NTPD_OPTS="-s" NTPD_HOME=/var/empty </licode>

Gérer les logs système avec syslog-ng

Les logs du firewall sont des lignes du type suivant dans le fichier /var/log/messages :

Jul 18 13:02:07 fw-pack kernel: FW:  test IN=eth0 OUT=eth1 SRC=192.168.10.12 DST=62.128.28.62 LEN=48 TOS=0x00 PREC=0x00 TTL=127 ID=12034 DF 
PROTO=TCP SPT=1246 DPT=80 WINDOW=16384 RES=0x00 SYN URGP=0


<licode file=/etc/syslog-ng/syslog-ng.conf> options {

       long_hostnames(off);
       sync(0);
       # The default action of syslog-ng 1.6.0 is to log a STATS line
       # to the file every 10 minutes.  That's pretty ugly after a while.
       # Change it to every 12 hours so you get a nice daily update of
       # how many messages syslog-ng missed (0).
       stats(43200);

};

source src { unix-stream("/dev/log"); internal(); pipe("/proc/kmsg"); };

destination messages { file("/var/log/$HOST/$YEAR/$MONTH/$DAY/messages" dir_perm(0700) create_dirs(yes)); }; destination console_all { file("/dev/tty12"); }; destination mail { file("/var/log/$HOST/$YEAR/$MONTH/$DAY/mail.log" dir_perm(0700) create_dirs(yes));}; destination cron { file("/var/log/$HOST/$YEAR/$MONTH/$DAY/cron.log" dir_perm(0700) create_dirs(yes)); }; destination lpr { file("/var/log/$HOST/$YEAR/$MONTH/$DAY/lpr.log" dir_perm(0700) create_dirs(yes)); }; destination authlog { file("/var/log/$HOST/$YEAR/$MONTH/$DAY/auth.log" dir_perm(0700) create_dirs(yes)); }; destination firewall { file("/var/log/$HOST/$YEAR/$MONTH/$DAY/firewall.log" dir_perm(0700) create_dirs(yes));}; destination snort { file("/var/log/$HOST/$YEAR/$MONTH/$DAY/snort.log" dir_perm(0700) create_dirs(yes));}; destination ldap { file("/var/log/ldap.log"); };

filter f_emergency { level(emerg); }; filter f_info { level(info); }; filter f_notice { level(notice); }; filter f_warn { level(warn); }; filter f_crit { level(crit); }; filter f_err { level(err); };

filter f_messages { level(info..warn)

       and not facility(auth, authpriv, mail, lpr, cron) and not match("IN=.*OUT=.*MAC=.*") and not match("snort: "); };

filter f_lpr { facility(lpr); }; filter f_mail { facility(mail); }; filter f_cron { facility(cron); }; filter f_authpriv { facility(auth, authpriv);}; filter f_firewall { match("IN=.*OUT=.*MAC=.*"); }; filter f_snort { match("snort: "); }; filter f_ldap { facility(local4); };

log { source(src); filter(f_authpriv); destination(authlog); }; log { source(src); filter(f_cron); destination(cron); }; log { source(src); filter(f_lpr); destination(lpr); }; log { source(src); filter(f_mail); destination(mail); }; log { source(src); filter(f_firewall); destination(firewall); }; log { source(src); filter(f_snort); destination(snort); }; log { source(src); filter(f_messages); destination(messages); }; log { source(src); destination(console_all); }; log { source(src); filter(f_ldap);destination(ldap); }; </licode>

Serveur de log distant

Les logs système de Linux sont gérés par syslog-ng. Il vaut mieux que les logs soient envoyés sur une machine distante appelé serveur de logs. Les paquets « logs » sont transférés par le protocole UDP sur le port 514 en entrée et en sortie. Il faut que le firewall permettent cette sortie dans la définition de la chaîne OUTPUT.

Remarque : pour les distributions utilisant syslog, voici la procédure à suivre :

  • reconfigurer syslog sur le firewall en ajoutant dans le fichier /etc/syslog.conf la ligne suivante :

<licode file=/etc/syslog.conf>

  • .* @ip_serveur de log

</licode>

  • reconfigurer les options de démarrage de syslog sur le serveur de log. Syslog doit redémarrer avec l'option -r.

Pour chaque reconfiguration, il faut relancer syslog : /etc/init.d/syslog restart. Les logs du firewall devraient arriver dans le fichier /var/log/messages du serveur de logs.

Logs firewall et ids avec BASE (qui remplace ACID)

http://forums.gentoo.org/viewtopic-t-399801-highlight-.html

http://gentoo-wiki.com/HOWTO_Apache2_with_BASE

Package Gentoo: adodb dev-php/PEAR-PEAR net-analyzer/base

Démasquer plusieurs packages : <licode file=/etc/portage/package.keywords> dev-php/PEAR-Image_Canvas ~x86 dev-php/PEAR-Image_Color ~x86 dev-php/PEAR-Image_Graph ~x86 dev-php/PEAR-Numbers_Roman ~x86 net-analyzer/base ~x86 </licode>

#webapp-config -I -h <host> -d base base <version>

<licode file=/etc/base/base_conf.php> </licode>

<BASE> est le répertoire d'installation de BASE.

  1. Edit <BASE>/base_conf.php and set database settings.
  2. Login on http://<BASE>/base_db_setup.php and follow the directions.

BASE est une interface qui permet de visualiser

  • les logs des firewall avec les scripts logsnorter ou logfw
  • de snort.

Créer les bases mysql (mettre à jour pour BASE)

Package mysql_acid-x.x.x.tgz

Ce package est composé:

  • d'éléments de snort
  • contrib/create_mysql
  • contrib/snortdb-extra.gz
  • de scripts d'automatisation (cf annexes)
  • acid.sh
  • create_acid
  • d’un fichier de configuration acid type
  • acid_conf.php

Editer base_conf.php

<licode file="/etc/base/base_conf.php"> $BASE_Language = "french"; $BASE_urlpath = "http://<web-BASE>"; $DBlib_path = "/usr/lib/php/adodb";

$alert_dbname = "snort_db"; $alert_host = "localhost"; $alert_port = ""; $alert_user = "acid"; $alert_password = "****";

/* Archive DB connection parameters */ $archive_exists = 0; # Set this to 1 if you have an archive DB $archive_dbname = "snort_ar"; $archive_host = "localhost"; $archive_port = ""; $archive_user = "acid"; $archive_password = "****"; </licode>

Créer les bases

1.Créer un utilisateur mysql “acid”

#mysql mysql -p
>INSERT INTO user SET Host="localhost", User="acid", Password=PASSWORD('****');
>FLUSH PRIVILEGES;
>exit

2.Créer les bases de données

Dans le répertoire où se trouve les fichiers du package,taper :

#./acid.sh fw root ****

Remarque : ce script crée 2 bases (la base de production fw_db et la base archive fw_ar) Il limite les droits d’accès de l’utilisateur mysql acid à ces bases.

Pour créer les bases pour snort, taper :

#./acid.sh snort root ****

Sécurisation

La sécurisation de l'accès à acid se fait par l'intermédiaire du serveur web. Ainsi, pour apache, on peut crypter la transmission avec SSL (cf procédure d'installation d'apache).
De plus, il est conseillé de limiter l'accès (cf sécurisation d'apache - gestion des accès/authentification) par :
  • adresse ip
  • login/mot de passe

Suivi de la sécurité avec Prelude

https://trac.prelude-ids.org

http://gentoo-wiki.com/HOWTO_IDS#About_Prelude

Package Gentoo: prelude-manager, prewikka, prelude-lml, prelude-nessus

Prelude-Manager

Créer la base de données prelude:

#mysql -p -u root
mysql> CREATE database prelude;

#mysql prelude -p < /usr/share/libpreludedb/classic/mysql.sql

Editer les paramètres de la base de données [db] : <licode file="/etc/prelude-manager/prelude-manager.conf"> [db] type = mysql host = localhost port = 3306 name = prelude user = root pass = password </licode>

#prelude-adduser add prelude-manager --uid 0 --gid 0
#prelude-manager

L'interface prewikka

Créer la base de données prewikka:

#mysql
mysql> CREATE database prewikka;
mysql prewikka -p < /usr/share/prewikka/database/mysql.sql


<licode file=/etc/prewikka/prewikka.conf> [general]

  1. heartbeat_count: 30
  2. heartbeat_error_margin: 3
  3. disable_error_traceback

external_link_new_window

[interface] software: Prewikka place: company ltd. title: Prelude management

[command] whois: /usr/bin/whois traceroute: /usr/sbin/traceroute

[idmef_database] type: mysql host: localhost user: root pass: ***** name: prelude

[database] type: mysql host: localhost user: root pass: ***** name: prewikka

[log stderr]

[auth loginpassword] expiration: 60 </licode>

Configurer apache: <licode file="/etc/apache2/httpd.conf ou fichier vhost"> <VirtualHost *:80> ... Setenv PREWIKKA_CONFIG "/etc/prewikka/prewikka.conf" ... </VirtualHost>

<Directory /usr/share/prewikka/> Order allow,deny Allow from all Options -FollowSymLinks +ExecCGI

       <IfModule mod_mime.c>
               AddHandler cgi-script .cgi
       </IfModule>

</Directory>

 Alias /prelude/prewikka /usr/share/prewikka/htdocs/
 ScriptAlias /prelude/ /usr/share/prewikka/cgi-bin/prewikka.cgi

</licode>

http://url/prelude

Fichier:Prelude-login.png

Indiquer le login/mot de passe par défaut (admin/admin)

Les capteurs (sensors)

Généralités

La syntaxe générale pour créer un capteur est du type:

prelude-adduser register <profile name> <requested permission> <manager address> --uid <uid> --gid <gid>

avec:

  • <manager address> l'adresse du serveur prelude (localhost ici)
  • <requested permission> "idmef:w admin:r" En général, un capteur doit écrire des commandes IDMEF dans le manager et lire les commandes administratives.

Il faut utiliser « prelude-adduser » a chaque enregistrement de serveur à superviser.

#prelude-adduser registration-server prelude-manager

Prelude-lml

Ouvrir le service d'enregistrement de capteur:

#prelude-adduser registration-server prelude-manager

Cette commande donne un mot de passe qu'il faudra utiliser pour l'enregistrement du capteur.

Enregistrer le capteur prelude-lml

#prelude-adduser register prelwude-lml "idmef:w admin:r" <manager address>

Configurer prelude-lml <licode file=/etc/prelude-lml/prelude-lml.conf> file = /var/log/messages file = /var/log/syslog file = /var/log/auth.log file = /var/log/mail/mail.log file = /var/log/clamav/clamd.log /etc/prelude-lml/prelude-lml.conf [format=apache] time-format = "%d/%b/%Y:%H:%M:%S"

  1. man pcrepattern to change
  2. prefix-regex = "^(?P<hostname>\S+) - - \[(?P<timestamp>.{20}) \+.{4}\] "

prefix-regex = "^(?P<hostname>\S+) - .* \[(?P<timestamp>.{20}) \+.{4}\] " file = /var/log/apache2/access_log-combined file = /var/log/apache2/error_log </licode>

Editer les règles /etc/prelude-lml/ruleset/pcre.rules

Vérifier le fonctionnement

#ssh root@<prelude-lml sensor address>
Password: [taper un mot de passe erroné ...]

Snort

Vérifier que snort est compilé avec l'option prelude:

#emerge -pv snort

Si snort n'est pas compilé avec prelude, éditer /etc/portage/package.use et recompiler snort.

<licode file="/etc/portage/package.use"> net-analyzer/snort prelude </licode>

<licode file="/etc/snort/snort.conf"> output alert_prelude </licode>

#prelude-adduser registration-server prelude-manager
#prelude-adduser register snort "idmef:w admin:r" <manager address> --uid snort --gid snort

Copyright

© 2006 Christophe de Livois

Tête de GNU Vous avez l'autorisation de copier, distribuer et/ou modifier ce document suivant les termes de la GNU Free Documentation License, Version 1.2 ou n'importe quelle version ultérieure publiée par la Free Software Foundation; sans section invariante, sans page de garde, sans entête et sans page finale. Pour plus d'informations consulter le site de l'APRIL.