« Gestion des logs » : différence entre les versions
Aucun résumé des modifications |
m (1 version) |
(Aucune différence)
|
Version actuelle datée du 28 mai 2012 à 20:31
Cf aussi
- pour le web: Apache2_-_Configuration#Gestion_des_logs et Administration_des_Services_Web#Gestion_des_logs
- pour le mail: Administration#Gestion_des_logs
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>
- 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.
- Edit <BASE>/base_conf.php and set database settings.
- 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
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]
- 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 </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>
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"
- 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 </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
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. |