Gestion des logs

De wikilivois
Sauter à la navigation Sauter à la recherche


Cf aussi


Synchronisation horaire avec openntpd

http://gentoo-wiki.com/HOWTO_NTP_Using_OpenNTPD

Package openntpd

#usermod -d /var/empty ntp


  /etc/ntp.conf
servers pool.ntp.org


  /etc/conf.d/ntpd
# Forces sync to within a few seconds at startup, rather than very slowly homing in.
NTPD_OPTS="-s"
NTPD_HOME=/var/empty


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


  /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); };


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 :
  /etc/syslog.conf
*.* @ip_serveur de log


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

  /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


#webapp-config -I -h <host> -d base base <version>
  /etc/base/base_conf.php


<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

  /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 = "****";


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

  /etc/prelude-manager/prelude-manager.conf
[db]
type = mysql
host = localhost
port = 3306
name = prelude
user = root
pass = password


#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


  /etc/prewikka/prewikka.conf
[general]
#heartbeat_count: 30
#heartbeat_error_margin: 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


Configurer apache:

  /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


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

  /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"
#man pcrepattern to change
#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


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.

  /etc/portage/package.use
net-analyzer/snort        prelude


  /etc/snort/snort.conf
output alert_prelude


#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.