Gestion des logs

De Analyse Développement Hacking
Sauter à la navigation Sauter à la recherche
Naviguer dans ce wiki : Accueil du wiki - Objectifs - Administrateur - Développeur - Intégrateur - Jeux - Marketing - Multimédia - Objets numériques - We make Hack
Consulter le site : Accueil du site - Annuaire - Blog - Forum - Outils - Utilisateur     Consulter le Redmine : Accueil du Redmine

Sommaire

Gestion des logs

Adiscon

Rsyslog et Loganalyzer.png.
Exemple d'installation de Rsyslog et de LogAnalyzer depuis une machine virtuelle GNU/Linux Mint Tara.
Adiscon Rsyslog.
Adiscon LogAnalyzer.

Botify

Site officiel : https://www.botify.com

CCZE

Lire les logs du système en couleur.
CCZE.

Consulter les logs du journal

Consulter le journal avec la commande :
journalctl -xn
Chercher des expressions spécifiques :
journalctl -xe | grep ssh
journalctl -xe | grep sshd |grep "Invalid user"
journalctl -xe | grep postfix |grep "connect from unknown"
journalctl -xe | grep sshd |grep "Invalid user" | awk '{print $10}'
journalctl -xe | grep postfix |grep "lost connection after AUTH from" |awk '{print $11}' |sort -u
Commandes complémentaires :
https://www.linuxtricks.fr/wiki/wiki.php?title=utiliser-journalctl-les-logs-de-systemd
https://www.binsp.net/?post/journald-la-gestion-des-journaux

dmesg

Dmesg : dmesg.fr
Lancer la commande dmesg pour obtenir des informations complémentaires sur d'éventuelles erreurs.
Plus d'informations : https://manpages.debian.org/jessie/manpages-fr-extra/dmesg.1.fr.html

Logwatch

Envoyer ses logs par mail avec Logwatch.
sudo apt-get install logwatch
Source : https://www.informatiweb-pro.net/admin-systeme/linux/12--debian-ubuntu-detecter-les-attaques-effectuees-contre-votre-serveur-grace-a-logwatch.html
Vérifier que le programme fonctionne :
logwatch
Éditer le fichier /etc/cron.daily/000logwatch pour configurer l'envoie automatique des informations obtenues par la commande logwatch, comme ci-dessus, par email.
sudo nano /etc/cron.daily/00logwatch
Remplacer la ligne :
/usr/sbin/logwatch --output mail
Par :
/usr/sbin/logwatch --mailto mon@adresse.mail --detail high
Pour pouvoir envoyer les mails, un serveur mail doit être configuré.
Si vous n’avez pas installé de serveur email, autre que celui installé par défaut sur Debian, installer le paquet mailutils, permettra d’envoyer des emails.
Envoyer un mail à l'aide du paquet mailutils.

Oncrawl

Payant de 10 à 250 euros mensuellement.
Site officiel : https://fr.oncrawl.com

OSSEC

Site officiel : http://www.ossec.net

Picviz

Picviz est un applicatif qui utilise les fichiers log générés par diverses sources telles Apache, Netfilter, ..., va concevoir des graphiques au format png permettant une vue plus synthétique et plus compréhensible des données contenues dans ces fichiers log, erreurs, anomalies...
Source : https://doc.ubuntu-fr.org/picviz

Screaming frog log analysis

Site officiel : https://www.screamingfrog.co.uk/log-file-analyser/

Syslog-ng

Centraliser les logs avec syslog-ng.
Source : https://doc.ubuntu-fr.org/syslog-ng
Pour se tenir informé de ce qui se passe sur votre serveur et système tout entier, installer syslog-ng.
apt install syslog-ng

Syslog-ng - Configuration de quelques programmes

Fail2ban
# Éditer le fichier /etc/fail2ban/fail2ban.conf :
logtarget = SYSLOG
Apache 2
# Éditer le fichier /etc/apache2/apache2.conf :
ErrorLog syslog:local7
PHP
# Éditer le fichier /etc/php5/apache2/php.ini :
log_errors = On
error_log = syslog

Watussi box

Site officiel : https://box.watussi.fr

Fichiers de logs

Les fichiers de logs suivants se trouvent dans le dossier /var/log/ depuis un système GNU/Linux Debian.

alternatives.log

.

apache2

Un dossier contenant les logs de Apache2.

access.log

Les accès qui génèrent des requêtes vers le serveur Apache2.

error.log

Les erreurs rencontrées par Apache2.

other_vhosts_access.log

Les logs complémentaires pour les différents VirtualHosts.

Exemples d'erreurs rencontrées

Internal dummy connection
L'erreur suivante est souvent répétée dans les logs du fichier other_vhosts_access.log :
"OPTIONS * HTTP/1.0" 200 126 "-" "Apache/2.4.35 (Debian) Phusion_Passenger/5.0.30 OpenSSL/1.1.1 (internal dummy connection)"
Lorsque le serveur HTTP Apache gère ses processus enfants, il doit trouver un moyen de réactiver les processus en attente de nouvelles connexions. Pour ce faire, il s'envoie une simple requête HTTP à lui-même.
Cette demande apparaîtra dans le fichier access_log avec l'adresse distante définie sur l'interface de bouclage (Généralement 127.0.0.1 ou ::1 si IPv6 est configuré).
Si vous enregistrez la chaîne User-Agent tout comme dans le format de journal combiné, vous verrez la signature du serveur suivie de "Internal dummy connection" sur les serveurs non SSL.
Ces demandes sont parfaitement normales et vous n'avez généralement pas à vous en soucier. Elles peuvent simplement être ignorées.
La documentation d’Apache suggère d’omettre les lignes des journaux en ajoutant les éléments suivants à la configuration d’Apache :
Ajouter env=!loopback à la ligne de CustomLog garantit que les données ne seront pas affichées dans les journaux d’accès.

# Remplacer :
CustomLog logs/access_log combined

# Par :
SetEnvIf Remote_Addr "::1" loopback
SetEnvIf Remote_Addr "127\.0\.0\.1" loopback
CustomLog logs/access_log combined env=!loopback
Une autre règle permet de se débarrasser rapidement de ces requêtes avec un minimum de montée en charge pour Apache2.
Étant donné que vous ne pouvez pas empêcher Apache2 d’envoyer toutes ces demandes à lui-même, le mieux est de répondre à celles-ci de manière à nécessiter le moins de ressources possible.
Les demandes adressées à l'hôte local doivent recevoir immédiatement une requête 403 :
RewriteCond %{HTTP_USER_AGENT} ^.*internal\ dummy\ connection.*$ [NC]
RewriteRule .* - [F,L]
Supprimer la journalisation ne serait pas la meilleure solution technique puisque elle permet de diagnostiquer un problème ou une attaque.
Une autre solution consiste à définir une section VirtualHost au début du fichier de configuration pour intercepter toutes les demandes sur l'interface de bouclage.
Envoyer alors les informations dans un fichier journal différent :
<VirtualHost 127.0.0.1:80 [::1]:80>
 # Catch requêtes locales
 ErrorLog ${APACHE_LOG_DIR}/error_local.log
 Loglevel warn
 CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Exemple en production.

apt

Un dossier contenant les logs de apt.

auth.log

Le fichier auth.log est le journal des authentifications.
Les droits par défaut semble être chmod 640 et chown root:adm
Si aucune ligne n'est écrite, vérifier dans le fichier /etc/rsyslog.conf que les règles suivantes soient décommentées :
auth,authpriv.*                 /var/log/auth.log
*.*;auth,authpriv.none          -/var/log/syslog
Relancer le service rsyslog et le fichier auth.log sera renseigné.
systemctl restart rsyslog.service
Complément d'informations pour configurer Rsyslog : Adiscon Rsyslog

Exemples d'erreurs rencontrées

Normal Shutdown, Thank you for playing [preauth]

Ce message est un effet secondaire d'une attaque par Brute force du mot de passe SSH.
Lorsque le client SSH procède à un arrêt de connexion "normal", il envoie un paquet contenant un message.
Lorsque le service SSH reçoit un tel paquet quand il ne l'attend pas, avant que l'utilisateur n'ait réussi à s'authentifier, il enregistre le message.
Même si tout est correctement configuré pour interdire les mots de passe, il est bon de disposer d'une deuxième couche de défense, avec fail2ban ou sshguard.

btmp

Le journal btmp garde la trace des tentatives de connexion infructueuses.
Le contenu du fichier btmp n'est pas intelligible à l'écran, on utilise last afin d'interpréter et d'afficher correctement son contenu.
last -f /var/log/btmp
Lastb est identique à last, sauf que par défaut, il affiche un journal du fichier /var/log/btmp, qui contient toutes les tentatives de connexion incorrectes. 
Afficher les 10 principales adresses IP avec des erreurs de connexion :
sudo lastb | awk '{print $3}' | sort | uniq -c | sort -rn | head -10
Afficher les 10 principaux noms d'utilisateur avec des erreurs de connexion :
sudo lastb | awk '{print $1}' | sort | uniq -c | sort -rn | head -10

cloud-init.log

.

cloud-init-output.log

.

cron-dropbox.log

Un fichier de log personnalisé créé par l'administrateur du serveur, qui va conserver les messages suites aux sauvegardes externes effectuées par une tâche cron vers le cloud DropBox.
Erreur rencontrée depuis syslog (Il me semble.) :
/bin/sh: 1: cannot create /var/log/cron-dropbox.log: Permission denied
Le propriétaire et le groupe du fichier cron-dropbox.log ont été changés pour l'utilisateur de debian.
L'écriture des logs dans le fichier fonctionne alors correctement.
Erreur rencontrée depuis cron-dropbox.log :
/bin/sh: 1: /usr/local/bin/Automatisation-sauvegarde-cron.sh: Permission denied
/bin/sh: 1: /usr/local/bin/Automatisation-sauvegarde-serveur-cron.sh: Permission denied
Les fichiers ne sont pas exécutables, rendre les fichiers exécutables avec la commande suivante :
sudo chmod +x /usr/local/bin/Automatisation-sauvegarde-cron.sh
sudo chmod +x /usr/local/bin/Automatisation-sauvegarde-serveur-cron.sh

daemon.log

Un daemon, appelé service en français, est un programme qui s'exécute en arrière-plan et qui effectue certaines opérations importantes pour le bon fonctionnement du système.

Exemples d'erreurs rencontrées

Deprecated option RSAAuthentication

/etc/ssh/sshd_config Deprecated option RSAAuthentication
L'option RSAAuthentication est dépréciée pour la connexion au serveur SSH.
# Modifier le fichier de configuration du serveur SSH :
sudo nano /etc/ssh/sshd_config
# Commenter l'option RSAAuthentication :
# RSAAuthentication yes
Source : Autoriser la connexion SSH par clé RSA.

denyhosts.service: PID file /run/denyhosts.pid not readable

denyhosts.service: PID file /run/denyhosts.pid not readable (yet?) after start: No such file or directory
Vous devez exécuter Denyhosts en tant que root pour pouvoir lire les fichiers de journalisation dans le dossier /var/log/ et pour pouvoir mettre à jour le fichier /etc/hosts.deny.
Je redémarre Denyhosts avec sudo, pour voir si cela est suffisant : sudo /etc/init.d/denyhosts restart

warning: unable to include '/etc/proftpd/tls.conf

warning: unable to include '/etc/proftpd/tls.conf
Dans cet exemple, il m'était impossible de charger la configuration TLS.
J'avais alors commenté l'option depuis le fichier de configuration de ProFTPd.

dbconfig-common

Un dossier contenant les logs de dbconfig-common.

debug

.

denyhosts

.

dpkg.log

Derniers paquets installés.

exim4

Un dossier contenant les logs de exim4.
Droits du dossier :
drwxr-s---  2 Debian-exim adm        4096 mars  19 19:22 exim4

Droits des fichiers :

-rw-r-----  1 Debian-exim adm     5 mars  19 19:22 mainlog

faillog

Ne se lit pas directement. Affiche les dernières erreurs de connexion.
faillog -a
Ok-ko.png Manuel : https://linux.die.net/man/8/faillog

installer

Un dossier contenant les logs de installer.

kern.log

.

lastlog

.

letsencrypt

Un dossier contenant les logs de letsencrypt.
letsencrypt/letsencrypt.log
Droits actuels du dossier letsencrypt :
drwx------  2 UTILISATEUR_LOCAL      UTILISATEUR_LOCAL
Droits actuels des deux fichiers 
-rw-r--r--  1 UTILISATEUR_LOCAL   UTILISATEUR_LOCAL     5136 mars  18 16:41 letsencrypt.log
-rw-r--r--  1 UTILISATEUR_LOCAL   UTILISATEUR_LOCAL        0 mars  17 00:00 letsencrypt-renew.log
# Si la commande sudo n'est pas utilisée, et, que le fichier de log a le droit en écriture avec 664, un message système propose de donner le droit en écriture aux éléments suivants :
Saving debug log to /var/log/letsencrypt/letsencrypt.log
The following error was encountered:
[Errno 13] Permission denied: '/etc/letsencrypt/.certbot.lock'
Either run as root, or set --config-dir, --work-dir, and --logs-dir to writeable paths.
# J'ai remis les droits en 644.
# J'opte pour l'utilisation de la commande sudo pour lancer le renouvellement des certificats depuis crontab.
# Pour permettre à la tâche cron qui lance certbot renew d'écrire dans les logs, ajouter sudo devant la commande de la tâche cron.
01 01 * * * sudo /usr/bin/certbot renew >> /var/log/letsencrypt/letsencrypt-renew.log

proftpd

Un dossier contenant les logs de proftpd.

mail

.

messages

.

mysql

Un dossier contenant les logs de mysql.
Par défaut, le fichier de logs ne semble pas se remplir.

php7.2-fpm.log

Exemples d'erreurs rencontrées

NOTICE: php7.2-fpm : error log file re-opened

Cette NOTICE apparaît à chaque fois qu'il y a une rotation des logs.
# Éditer le fichier de configuration de logrotate de php7.2-fpm :
/etc/logrotate.d/php7.2-fpm
# Je n'ai pas encore déterminé d'où provient cette erreur, mais, pour la contourner, j'ai remplacé les trois lignes suivantes :
postrotate
/usr/lib/php/php7.2-fpm-reopenlogs
endscript
# Par celle-ci :
postrotate \
if [ -w /run/php/php7.2-fpm.pid ]; then \
systemctl reload php7.2-fpm.service; \
fi; \
endscript

NOTICE: Not enabling PHP 7.2 FPM by default

NOTICE: To enable PHP 7.2 FPM in Apache2 do:
NOTICE: a2enmod proxy_fcgi setenvif
NOTICE: a2enconf php7.2-fpm
Cette NOTICE apparaît car il est nécessaire d'activer le paquet php7.2-fpm pour l'utiliser.
Activer PHP-FPM.

private

Un dossier contenant les logs de private.

redmine

Le dossier contenant les logs de Redmine.

default

Le dossier contenant les logs de Redmine par défaut.

production.log

Le fichier contenant les logs de Redmine.
Exemples d'erreurs rencontrées
rsyslogd was HUPed
Le message rencontré dans le fichier production.log :
liblogging-stdlog:  [origin software="rsyslogd" swVersion="8.24.0" x-pid="938" x-info="http://www.rsyslog.com"] rsyslogd was HUPed
Il est causé par logrotate et peut être ignoré.
Voir "postrotate" dans /etc/logrotate.d/rsyslog
Rsyslogd cesse d'écrire dans les anciens fichiers journaux de logs qui sont alors renommés.
Unable to access log file
Rails Error: Unable to access log file. Please ensure that /usr/share/redmine/instances/default/log/production.log exists and is writable
make it writable for user and group: 
chmod 0664 /usr/share/redmine/instances/default/log/production.log
The log level has been raised to WARN and the output directed to STDERR until the problem is fixed.
Il suffit de vérifier si le fichier de log est inscriptible en écriture, depuis l'administration de Redmine, dans l'onglet information.
Si il ne l'est pas, ce qui est sûrement le cas puisque l'erreur a été retournée dans les logs du système, donner le droit en écriture.
Ce n'est pas le fichier de log Redmine qui renseigne cette erreur. Peut être un log de Apache2 qui indique le droit manquant (?).
Vérifier les droits des dossiers et des fichiers de Redmine.

syslog

Consulter les messages de syslog avec un programme comme Adiscon Rsyslog couplé avec Adiscon LogAnalyzer.
CCZE peut aussi être utilisé pour consulter les messages de syslog, en couleurs.

tallylog

Fichier de journalisation du nombre d'échecs de connexion.
/var/log/tallylog
Par défaut, le module pam_tally2 est déjà installé sur la plupart des distributions Linux et est contrôlé par le paquet PAM lui-même.
Notes sur pam_tally2 :
Ce module conserve un nombre de tentatives d'accès, peut réinitialiser le nombre de tentatives, peut refuser l'accès si trop de tentatives échouent.
Fichier de configuration : https://www.systutorials.com/docs/linux/man/5-pam.conf/
Exemple :
Ajouter la ligne suivante à /etc/pam.d/login pour verrouiller le compte après 4 connexions échouées.
Le compte root sera également verrouillé. Les comptes seront automatiquement déverrouillés après 20 minutes. 
Le module n’a pas besoin d’être appelé lors de la phase de compte car le login appelle correctement pam_setcred.
auth  required    pam_securetty.so
auth  required    pam_tally2.so deny=4 even_deny_root unlock_time=1200
auth  required    pam_env.so
auth  required    pam_unix.so
auth  required    pam_nologin.so
account  required    pam_unix.so
password required    pam_unix.so
session  required    pam_limits.so
session  required    pam_unix.so
session  required    pam_lastlog.so nowtmp
session  optional    pam_mail.so standard
Le paquet pam_tally2 a été écrit par Tim Baverstock et Tomas Mraz.
Ko.png Linux Password Enforcement with PAM : http://deer-run.com/~hal/linux_passwords_pam.html
Ko.png Comment verrouiller et déverrouiller les comptes SSH après un certain nombre de tentatives de connexion échouées : https://www.tecmint.com/use-pam_tally2-to-lock-and-unlock-ssh-failed-login-attempts/

user.log

.

utmp

Le fichier utmp enregistre toutes les connexions actives.
Le contenu du fichier utmp n'est pas intelligible à l'écran, on utilise last afin d'interpréter et d'afficher correctement son contenu.
last -f /var/run/utmp

wtmp

Le fichier wtmp enregistre toutes les connexions et déconnexions.
Le contenu du fichier wtmp n'est pas intelligible à l'écran, on utilise last afin d'interpréter et d'afficher correctement son contenu.
last -f /var/log/wtmp

Informations complémentaires pour gérer ses logs

Vérifier les logs du boot

Dernier boot :
journalctl -b
Les logs kernel depuis le dernier boot :
journalctl -b -k
Seulement les erreurs depuis le dernier boot :
journalctl -b -p err
ou
journalctl -b -p 3
On peut changer la priorité recherchée (-p) comme suit :
0: emerg
1: alert
2: crit
3: err
4: warning
5: notice
6: info
7: debug

Signer ses logs

Signer ses logs : http://linux-attitude.fr/post/signer-ses-logs

Utiliser pastebin pour partager les logs de votre machine

Utiliser pastebin pour partager les logs de votre machine avec d'autres administrateurs système.
inxi -Fxxxzc0 |pastebin
sudo rfkill list all |pastebin
dmesg |pastebin

Utiliser pastebin pour partager les logs de vos noyaux avec d'autres administrateurs système.
dpkg -l linux-image* | pastebin

Sous Debian Stretch, le message suivant est affiché :
/usr/bin/pastebinit:42: DeprecationWarning: dist() and linux_distribution() functions are deprecated in Python 3.5
 release = platform.linux_distribution()[0].lower()
/usr/bin/pastebinit:413: DeprecationWarning: pasteURLopener style of invoking requests is deprecated. Use newer urlopen functions/methods
 url_opener = pasteURLopener()

Le lien vers le fichier en ligne partagé sur pastebin sera tout de même affiché :
http://paste.debian.net/1068315/
# Installer pastebinit comme solution alternative.
sudo apt-get install pastebinit
# Générer un lien vers pastebin pour exporter le contenu d'un fichier.
pastebinit fichier.txt

Partager un rendu visuel de ses logs sur son site

AWStats

AWStats : Installation, Configuration and Reporting : https://awstats.sourceforge.io/docs/awstats_setup.html

Bibliographie

Aller plus loin avec les logs

Belaïd MOUNSI de la liste Debian user french propose une solution pas forcément évidente à mettre en oeuvre mais efficace une fois mise en place : Le triplet "Elasticsearch, Logstach et Kibana".
Par contre, c'est très gourmand en ressources, pour une machine personnelle ça ne semble pas nécessaire : https://www.elastic.co/guide/en/elasticsearch/guide/current/hardware.html
Autres façons de rechercher des logs spécifiques dans votre système GNU/Linux : https://wiki.debian-fr.xyz/Consulter_les_logs_:_quoi,_o%C3%B9_et_comment_chercher_%3F
Des logs, des logs, oui mais des logs amis : http://linux-attitude.fr/post/des-logs-des-logs-oui-mais-des-logs-amis
Lire et modifier l’historique d’accès : http://linux-attitude.fr/post/lire-et-modifier-l-historique-d-acces
Logs locaux et distants : http://linux-attitude.fr/post/logs-locaux-et-distants
Log de l’historique : http://linux-attitude.fr/post/log-de-lhistorique

NAVIGATION

PARTICIPER ET PARTAGER

Vous êtes sur le wiki de Vision du Web.
Les pages présentées sur le wiki évoluent tous les jours.
Certaines recherches sont peu abouties et incluent des erreurs.
Pour participer sur le wiki, créer un compte utilisateur en haut à droite.
La recherche interne du wiki permet de trouver le contenu qui vous intéresse.
Identifiez-vous pour poser vos questions sur la page de discussion de VisionDuWeb.
Améliorer le contenu des pages en faisant des propositions depuis l'onglet discussion.
Télécharger le sommaire au format PDF pour le consulter en étant déconnecté du réseau.
Les informations du wiki ne doivent pas servir à nuire à autrui ou à un système informatique.
De nombreux outils gratuits sont listés et disponibles dans la boîte à outils de Vision du web.
D'autres pages du wiki peuvent correspondre à vos attentes. La liste de toutes les pages du wiki.

VALORISER LE WIKI

Valoriser le contenu partagé sur le wiki avec un don en monnaie numérique :
AEON - Bitcoins - Bitcoins Cash - Bitcoins Gold - Bitcore - Blackcoins - Basic Attention Token - Bytecoins - Clams - Dash - Monero - Dogecoins - Ethereum - Ethereum Classique - Litecoins - Potcoins - Solarcoins - Zcash

OBTENIR DE LA MONNAIE NUMERIQUE

Obtenir gratuitement de la monnaie numérique :
Gagner des Altcoins - Miner des Altcoins.
Miroir PlanetHoster du 11 Mars 2019.