Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
elearning:workbooks:centos:8:avance:l114 [2024/10/02 15:56] adminelearning:workbooks:centos:8:avance:l114 [2024/10/18 07:58] (Version actuelle) admin
Ligne 9: Ligne 9:
 =====Contenu du Module===== =====Contenu du Module=====
  
-  * **LCF606 - Gestion de Netfilter et de Firewalld**+  * **LCF606 - Gestion de la Sécurité**
     * Contenu du Module     * Contenu du Module
     * Le Pare-feu Netfilter/iptables     * Le Pare-feu Netfilter/iptables
Ligne 1095: Ligne 1095:
  
 <WRAP center round important 50%> <WRAP center round important 50%>
-**Important** - Attention ! La règle ajoutée avec l'option --permanent n'est pas prise en compte imédiatement mais uniquement au prochain redémmarge. Pour qu'une règle soit appliquée immédiatement **et** être écrite sur disque, il faut saisir la commande deux fois dont une avec l'option --permanent et l'autre sans l'option --permanent.+**Important** - Attention ! La règle ajoutée avec l'option --permanent n'est pas prise en compte immédiatement mais uniquement au prochain redémarrage. Pour qu'une règle soit appliquée immédiatement **et** être écrite sur disque, il faut saisir la commande deux fois dont une avec l'option --permanent et l'autre sans l'option --permanent.
 </WRAP> </WRAP>
  
Ligne 1394: Ligne 1394:
 ====Les fichiers .rhosts==== ====Les fichiers .rhosts====
  
-Le systeme rhosts presente une faille de securite importante pour un serveur Linux. Pour cette raison, il convient de supprimer les fichiers **.rhosts** des utilisateurs. Utilisez la commande suivante:+Le système rhosts présente une faille de sécurité importante pour un serveur Linux. Pour cette raison, il convient de supprimer les fichiers **.rhosts** des utilisateurs. Utilisez la commande suivante:
  
   # find / -name "\.rhosts" -exec rm -f \{\} \; [Entree]   # find / -name "\.rhosts" -exec rm -f \{\} \; [Entree]
Ligne 1400: Ligne 1400:
 ====Les fichiers et les repertoires sans proprietaire==== ====Les fichiers et les repertoires sans proprietaire====
  
-Afin de dresser la liste des fichiers et des groupes sans proprietaires sur le serveur, il convient d'utiliser les deux commandes suivantes:+Afin de dresser la liste des fichiers et des groupes sans propriétaires sur le serveur, il convient d'utiliser les deux commandes suivantes:
  
   # find / -nouser -exec ls -l \{\} \; 2> sans_pro.txt [Entree]   # find / -nouser -exec ls -l \{\} \; 2> sans_pro.txt [Entree]
Ligne 1416: Ligne 1416:
 ====Limiter le delai d'inactivite d'une session shell==== ====Limiter le delai d'inactivite d'une session shell====
  
-Une session de shell laissee ouverte inutilement et d'une maniere sans surveillance est un risque de securiteVerifiez donc le contenu du fichier **/etc/profile** :+Une session de shell laissée ouverte inutilement et d'une manière sans surveillance est un risque de sécuritéVérifiez donc le contenu du fichier **/etc/profile** :
  
 <code> <code>
Ligne 1507: Ligne 1507:
 </code> </code>
  
-A ce fichier doivent etre ajoutées les deux lignes suivantes:+A ce fichier doivent être ajoutées les deux lignes suivantes:
  
 <file> <file>
Ligne 3437: Ligne 3437:
  
 ====LAB #4 - Mise en place du Système de Prévention d'Intrusion Fail2Ban==== ====LAB #4 - Mise en place du Système de Prévention d'Intrusion Fail2Ban====
 +
 +<WRAP center round important 50%>
 +**Important** - Pour continuer, il faut travailler sur un CentOS 8 Stream. 
 +</WRAP>
  
 Fail2Ban est un **S**ystème de **P**révention d'**I**ntrusion. Fail2Ban lit les logs de divers services (SSH, Apache, FTP…) à la recherche d’erreurs d'authentification répétées et ajoute une règle à iptables pour bannir l'adresse IP de la source. Fail2Ban est un **S**ystème de **P**révention d'**I**ntrusion. Fail2Ban lit les logs de divers services (SSH, Apache, FTP…) à la recherche d’erreurs d'authentification répétées et ajoute une règle à iptables pour bannir l'adresse IP de la source.
Ligne 3543: Ligne 3547:
 | action | Spécifie l'action à entreprendre lors d'une corréspondance du **filter**. Le nom dans ce champs, sans l'extention .conf, fait référence à un fichier dans le répertoire **/etc/fail2ban/action.d/**. Par exemple la valeur **iptables** fait reférence au fichier **/etc/fail2ban/action.d/iptables.conf**. | | action | Spécifie l'action à entreprendre lors d'une corréspondance du **filter**. Le nom dans ce champs, sans l'extention .conf, fait référence à un fichier dans le répertoire **/etc/fail2ban/action.d/**. Par exemple la valeur **iptables** fait reférence au fichier **/etc/fail2ban/action.d/iptables.conf**. |
  
-Il n'est pas recommendé de modifier ce fichier afin de ne pas voir ses modifications ecrasées lors de la prochaine mise-à-jour de Fail2Ban. Fail2Ban nous donne la possibilité de créer le fichier **/etc/fail2ban/jail.local** pour contenir nos modifications. Créez donc ce fichier avec le contenu ci-dessous :+Il n'est pas recommandé de modifier ce fichier afin de ne pas voir ses modifications écrasées lors de la prochaine mise-à-jour de Fail2Ban. Fail2Ban nous donne la possibilité de créer le fichier **/etc/fail2ban/jail.local** pour contenir nos modifications. Créez donc ce fichier avec le contenu ci-dessous :
  
 <code> <code>
Ligne 5116: Ligne 5120:
 </code> </code>
  
 +=====Système de Fichiers=====
 +
 +==== LAB #7 - Mise en place du File Integrity Checker Afick ====
 +
 +===Présentation===
 +
 +**[[http://afick.sourceforge.net/index.fr.html|Afick]]** ( Another File Intergrity Checker ) est un programme "controleur d'integrité des fichiers" :
 +un logiciel dédié à la sécurité informatique, analogue au très connu **tripwire**. Il permet de suivre les modifications des systèmes de fichiers, et en particulier de détecter les intrusions. Il fonctionne en créant une base de données stockant des informations concernant le système de fichiers d'un serveur puis en vérifiant périodiquement le système de fichiers contre cette base afin de vous prévenir de toute modification éventuelle. Pour cette raison, il convient d'installer afick sur le serveur au plus tôt.
 +
 +===Installation===
 +
 +Téléchargez la dernière version d'Afick :
 +
 +<code>
 +[root@centos8 ~]# wget https://sourceforge.net/projects/afick/files/afick/3.8.1/afick-3.8.1-1.noarch.rpm
 +</code>
 +
 +Pour installer **Afick**, utilisez la commande suivante :
 +
 +<code>
 +[root@centos8 ~]# dnf localinstall afick-3.8.1-1.noarch.rpm --nogpgcheck
 +</code>
 +
 +===Configuration===
 +
 +La configuration d'Afick est contenu dans le fichier **/etc/afick.conf**.
 +
 +Dans ce fichier, plusieurs sections nous intéressent :
 +
 +==La Section Directives==
 +
 +<file>
 +####################
 +# directives section
 +####################
 +# binary values can be : yes/1/true or no/0/false
 +# database : name with full path to database file
 +database:=/var/lib/afick/afick
 +# history : full path to history file
 +history := /var/lib/afick/history
 +# archive : full path to directory for archived results
 +archive := /var/lib/afick/archive
 +# report_url : where to send the result : stdout/stderr/null
 +report_url := stdout
 +# report_syslog : send output to syslog ?
 +report_syslog := no
 +# mask_sysupdate : report packages update
 +mask_sysupdate := no
 +# verbose : (obsolete) boolean value for debugging messages
 +# use debug parameter below
 +verbose := no
 +# debug : set a level of debugging messages, from 0 (none) to 4 (full)
 +debug := 0
 +# warn_dead_symlinks : boolean : if set, warn about dead symlinks
 +warn_dead_symlinks := no
 +# follow_symlinks : boolean : if set, do checksum on target file (else on target file name)
 +follow_symlinks := no
 +# allow_overload : boolean : if set, allow to overload rules (the last rule wins), else put a warning
 +allow_overload := yes
 +# report_context : boolean : if set, display all changed attributes, not just those selected by rules
 +report_context := no
 +# report_full_newdel : boolean : if set, report all changes, if not set, report only a summary on top directories
 +report_full_newdel := no
 +# report_summary : boolean ; if set, report the summary section
 +report_summary := yes
 +# warn_missing_file  : boolean : is set, warn about selected files (in this config), which does not exist
 +warn_missing_file := no
 +# running_files : boolean : if set, warn about files changed during a program run
 +running_files := yes
 +# timing : boolean : if set, print timing statistics about the job
 +timing := yes
 +# ignore_case : boolean : if set, ignore case on file name
 +ignore_case := no
 +# max_checksum_size : numeric : only compute checksum on first max_checksum_size bytes ( 0 means unlimited)
 +max_checksum_size := 10000000
 +# allow_relativepath : boolean : if set, afick files, config and databases are stored as relative path
 +allow_relativepath := 0
 +# utc_time : boolean; if set display date in utc time, else in local time
 +utc_time := 0
 +
 +# only_suffix : list of suffix to scan (and just this ones) : is empty (disabled) by default
 +# not very usefull on unix, but is ok on windows
 +# this will speed up the scan, but with a lesser security
 +# only_suffix :=
 +
 +# the 3 next directives : exclude_suffix exclude_prefix exclude_re
 +# can be written on several lines
 +# exclude_suffix : list of suffixes to ignore
 +# text files
 +exclude_suffix := log LOG html htm HTM txt TXT xml
 +# help files
 +exclude_suffix := hlp pod chm
 +# old files
 +exclude_suffix := tmp old bak
 +# fonts
 +exclude_suffix := fon ttf TTF
 +# images
 +exclude_suffix := bmp BMP jpg JPG gif png ico
 +# audio
 +exclude_suffix := wav WAV mp3 avi
 +# python
 +exclude_suffix := pyc
 +
 +# exclude_prefix : list of prefixes to ignore
 +exclude_prefix := __pycache__
 +
 +# exclude_re : a file pattern (using regex syntax) to ignore (apply on full path)
 +# one pattern by line
 +#exclude_re :=
 +</file>
 +
 +Cette section définit les directives globales et notamment :
 +
 +  * l'emplacement de la base de données
 +
 +<file>
 +database:=/var/lib/afick/afick
 +</file>
 +
 +<WRAP center round important 50%>
 +**Important** - Veuillez à sauvegarder régulièrement votre base de données. En effet, dans le cas où votre système est compromis, sans sauvegarde de votre base, vous ne serez plus certain de l'exactitude de cette dernière.
 +</WRAP>
 +
 +  * l'exclusion de certaines extensions de la vérification
 +
 +<file>
 +exclude_suffix := log LOG html htm HTM txt TXT xml
 +</file>
 +
 +==La Section Alias==
 +
 +<file>
 +###############
 +# alias section
 +###############
 +# action : a list of item to check :
 +# md5 : md5 checksum
 +# sha1 : sha-1 checksum
 +# sha256 : sha-256 checksum
 +# sha512 : sha-512 checksum
 +# d : device
 +# i : inode
 +# p : permissions
 +# n : number of links
 +# u : user
 +# g : group
 +# s : size
 +# b : number of blocks
 +# m : mtime
 +# c : ctime
 +# a : atime
 +# acl : acl
 +
 +#all:    p+d+i+n+u+g+s+b+m+c+md5+acl
 +#R:      p+d+i+n+u+g+s+m+c+md5
 +#L:      p+d+i+n+u+g
 +#P:      p+n+u+g+s+md5
 +#E:      ''
 +
 +# action alias may be configured with
 +# your_alias = another_alias|item[+item][-item]
 +# all is a pre-defined alias for all items except "a"
 +DIR = p+i+n+u+g
 +ETC = p+d+u+g+s+md5
 +Logs = p+n+u+g
 +MyRule = p+d+n+u+g+s+b+md5
 +</file>
 +
 +Cette partie du fichier de configuration détaille les combinaisons de vérifications de fichiers à réaliser :
 +
 +<file>
 +DIR=p+i+n+u+g
 +ETC = p+d+i+u+g+s+md5
 +Logs = p+n+u+g
 +MyRule = p+d+n+u+g+s+b+md5
 +</file>
 +
 +Les options détaillées sont :
 +
 +^ Option ^ Description ^
 +|  md5  | Vérifie la somme de contrôle md5 du contenu du fichier |
 +|  sha1  | Vérifie la somme de contrôle sha1 du contenu du fichier |
 +|  d  | Vérifie pour un périphérique son "major number" et son "minor number" |
 +|  i  | Vérifie le numéro d'inode |
 +|  p  | Vérifie les droits d'accès au fichier |
 +|  n  | Vérifie le nombre de liens |
 +|  u  | Vérifie l'utilisateur propriétaire du fichier |
 +|  g  | Vérifie le groupe propriétaire du fichier |
 +|  s  | Vérifie la taille du fichier |
 +|  b  | Vérifie le nombre de blocs alloués au fichier |
 +|  m  | Vérifie la date de la dernière modification du contenu du fichier |
 +|  c  | Vérifie la date de la dernière modification de l'inode |
 +|  a  | Vérifie la date du dernier accès |
 +
 +==La Section File==
 +
 +<file>
 +##############
 +# file section
 +##############
 +# 3 syntaxe are available :
 +# file action
 +#     to scan a file/directory with "action" parameters
 +# ! file
 +#     to remove file from scan
 +# = directory action
 +#       to scan the directory but not sub-directories
 +# file with blank character have to be quoted
 +#
 +# action is the list of attribute used to detect a change
 +
 += /  DIR
 +
 +/bin    MyRule
 +
 +/boot   MyRule
 +# ! /boot/map
 +# ! /boot/System.map
 +
 +/dev p+n
 +# ! /dev/.udev/db
 +# ! /dev/.udev/failed
 +# ! /dev/.udev/names
 +# ! /dev/.udev/watch
 +! /dev/bsg
 +! /dev/bus
 +! /dev/pts
 +! /dev/shm
 +# to avoid problems with pending usb
 +# = /dev/scsi p+n
 +
 +/etc    ETC
 +/etc/mtab ETC - md5 - s
 +/etc/adjtime ETC - md5 -s
 +# /etc/aliases.db ETC - md5 -s
 +# /etc/mail/statistics ETC - md5 -s
 +/etc/motd ETC
 +# /etc/ntp/drift ETC - md5 -s
 +# /etc/urpmi/urpmi.cfg Logs
 +# /etc/urpmi/proxy.cfg Logs
 +# /etc/prelink.cache ETC - md5 - s
 +! /etc/cups
 +# ! /etc/map
 +# ! /etc/postfix/prng_exch
 +# ! /etc/samba/secrets.tdb
 +# ! /etc/webmin/sysstats/modules/
 +# ! /etc/webmin/package-updates/
 +# ! /etc/webmin/system-status/
 +
 +/lib    MyRule
 +/lib64  MyRule
 +/lib/modules MyRule
 +# /lib/dev-state MyRule -u
 +
 +/root MyRule
 +! /root/.viminfo
 +! /root/.bash_history
 +# ! /root/.mc
 +# ! /root/tmp
 +! /root/.cache
 +
 +/sbin   MyRule
 +
 +/usr/bin        MyRule
 +/usr/sbin       MyRule
 +/usr/lib        MyRule
 +! /usr/lib/.build-id/
 +! /usr/lib/fontconfig/cache/
 +/usr/lib64      MyRule
 +/usr/local/bin  MyRule
 +/usr/local/sbin MyRule
 +/usr/local/lib  MyRule
 +
 +/var/ftp MyRule
 +/var/log Logs
 +# ! /var/log/journal
 += /var/log/afick Logs
 +# ! /var/log/ksymoops
 +/var/www MyRule
 +# ! /var/www/html/snortsnarf
 +</file>
 +
 +Cette partie du fichier de configuration détaille les vérifications de fichiers à réaliser, en voici un extrait :
 +
 +<file>
 +...
 +/etc ETC
 +/etc/mtab ETC - md5 - s
 +/etc/adjtime ETC - md5
 +...
 +</file>
 +
 +Cet extrait indique que :
 +
 +  * le répertoire /etc sera vérifié selon l'alias **ETC**,
 +  * le fichier /etc/mtab sera vérifié selon l'alias **ETC** à l'exception des règles **md5** et **s**,
 +  * le fichier /etc/adjtime sera vérifié selon l'alias **ETC** à l'exception de la règle **md5**.
 +
 +===Utilisation===
 +
 +Commencez par créer la base de données d'afick :
 +
 +<code>
 +[root@centos8 ~]# afick -i
 +# Afick (3.8.1) init at 2024/10/03 11:16:16 with options (/etc/afick.conf):
 +# archive:=/var/lib/afick/archive
 +# database:=/var/lib/afick/afick
 +# exclude_prefix:=__pycache__
 +# exclude_suffix:=log LOG html htm HTM txt TXT xml hlp pod chm tmp old bak fon ttf TTF bmp BMP jpg JPG gif png ico wav WAV mp3 avi pyc
 +# history:=/var/lib/afick/history
 +# max_checksum_size:=10000000
 +# running_files:=1
 +# timing:=1
 +# dbm:=Storable
 +# #################################################################
 +# MD5 hash of /var/lib/afick/afick => iYqXZ6neFdA/2qBYQPPDcg
 +
 +# Hash database created successfully. 46551 files entered.
 +# user time : 18.88; system time : 6.49; real time : 117
 +</code>
 +
 +Au moment où vous souhaitez vérifier l'intégrité de votre système de fichiers, utilisez la commende suivante :
 +
 +  * **afick -k**
 +
 +En cas de modifications, celles-ci vous seront clairement indiquées.
 +
 +Il est aussi nécessaire de mettre à jour votre base de données chaque fois que vous installez un nouveau paquet ou que vous mettez à jour un paquet déjà installé. Dans ce cas, utilisez la commande suivante :
 +
 +  * **afick -u**
 +
 +===Automatiser Afick===
 +
 +Lors de l'installation d'afick, le fichier **afick_cron** a été copié dans le répertoire /etc/cron.daily :
 +
 +<code>
 +[root@centos8 ~]# cat /etc/cron.daily/afick_cron
 +#!/usr/bin/env sh
 +###############################################################################
 +#   afick_cron
 +#      it's a part of the afick project
 +#
 +#    Copyright (C) 2002, 2003 by Eric Gerbier
 +#    Bug reports to: eric.gerbier@tutanota.com
 +#    $Id$
 +#
 +#    This program is free software; you can redistribute it and/or modify
 +#    it under the terms of the GNU General Public License as published by
 +#    the Free Software Foundation; either version 2 of the License, or
 +#    (at your option) any later version.
 +#
 +#    This program is distributed in the hope that it will be useful,
 +#    but WITHOUT ANY WARRANTY; without even the implied warranty of
 +#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 +#    GNU General Public License for more details.
 +#
 +###############################################################################
 +# script for cron job
 +# this script use the "macro" lines of afick configuration file
 +# the goals are :
 +# - set the nice priority
 +# - truncate too long reports to avoid big mails
 +# - avoid mails if no changes detected
 +# - sent report to the specicified email adress
 +# - write reports to /var/log/afick
 +# - archive retention management
 +
 +AFICK="/usr/bin/afick.pl"
 +PATH="/bin:/usr/bin"
 +LOGDIR="/var/log/afick"
 +LOGFILE="$LOGDIR/afick.log"
 +ERRORLOG="$LOGDIR/error.log"
 +CONFFILE="/etc/afick.conf"
 +
 +# the default action is "update" (-u), you can also use "compare" (-k)
 +ACTION="-u"
 +
 +###############################################################################
 +treat_log() {
 +        if [ -n "$VERBOSE_AFICK" ]
 +        then
 +                echo "# This is an automated report generated by Another File Integrity Checker on $FQDN $DATE."
 +        fi
 +
 +        # "normal" afick output : changes result
 +        if [ -s $LOGFILE ]; then
 +                loglines=`wc -l $LOGFILE | awk '{ print $1 }'`
 +                if [ ${loglines:=0} -gt $LINES ]; then
 +                        echo "# TRUNCATED (!) output of the daily afick run:"
 +                        echo "# Output is $loglines lines, truncated to $LINES."
 +                        head -$LINES $LOGFILE
 +                        echo "# The full output can be found in $LOGFILE."
 +                else
 +                        echo "# Output of the daily afick run:"
 +                        cat $LOGFILE
 +                fi
 +        elif [ -n "$VERBOSE_AFICK" ]
 +        then
 +                echo "# afick detected no changes."
 +        fi
 +
 +        # afick errors
 +        if [ -s $ERRORLOG ]; then
 +                errorlines=`wc -l $ERRORLOG | awk '{ print $1 }'`
 +                if [ ${errorlines:=0} -gt $LINES ]; then
 +                        echo "# TRUNCATED (!) output of errors produced:"
 +                        echo "# Error output is $errorlines lines, truncated to $LINES."
 +                        head -$LINES $ERRORLOG
 +                        echo "# The full output can be found in $ERRORLOG."
 +                else
 +                        echo "# Errors produced:"
 +                        cat $ERRORLOG
 +                fi
 +        elif [ -n "$VERBOSE_AFICK" ]
 +        then
 +                echo "# afick produced no errors."
 +        fi
 +
 +        # check end of report (summary)
 +        if [ -s $LOGFILE ]; then
 +                summary=` grep "MD5 hash of" $LOGFILE `
 +                if [ -z "$summary" ]
 +                then
 +                        echo "WARNING: truncated report (no summary)"
 +                fi
 +        fi
 +
 +}
 +###############################################################################
 +# extract macro value from config file
 +macro () {
 +        key=$1
 +        grep -m 1 "^@@define $key" $CONFFILE |  sed -e "s/^@@define $key *//"
 +}
 +###############################################################################
 +send_mail() {
 +        echo "$OUTPUT" | mail -s "[AFICK] Daily report for $FQDN" $MAILTO
 +}
 +###############################################################################
 +send_nagios() {
 +        NAGIOS_STATUS=3 # UNKNOWN initial status
 +        if [ -s $LOGFILE ]
 +        then
 +                NAGIOS_MSG=`tail -4 $LOGFILE | head -1 | sed -e "s/^[^0-9]*\(.*changed\) (.*$/\1/ "`
 +                NUM_CHANGES=`echo $NAGIOS_MSG | cut -d " " -f 4`
 +                if [ $NUM_CHANGES -gt 0 ]
 +                then
 +                        if [ $NUM_CHANGES -ge $NAGIOS_CRITICAL_CHANGES ]
 +                        then
 +                                NAGIOS_STATUS=2 # CRITICAL
 +                        else
 +                                NAGIOS_STATUS=1 # WARNING
 +                        fi
 +                else
 +                        NAGIOS_STATUS=0 # OK
 +                fi
 +        fi
 +        HOST=`hostname`
 +        echo "${HOST}\t${NAGIOS_CHECK_NAME}\t${NAGIOS_STATUS}\t${NAGIOS_MSG}\n" | $NAGIOS_NSCA -H $NAGIOS_SERVER -c $NAGIOS_CONFIG >/dev/null
 +}
 +###############################################################################
 +# MAIN
 +###############################################################################
 +
 +[ -x $AFICK ] || exit 0
 +
 +# hostname -f only exists on GNU systems, 
 +# on others (HPUX, AIX, Solaris, Tru64), it return an error on stderr 
 +# and a usage message on stdout
 +FQDN=`( hostname -f  || hostname ) 2>/dev/null |tail -1`
 +DATE=`date +"at %X on %x"`
 +MAILTO=`macro MAILTO`
 +LINES=`macro LINES`
 +VERBOSE=`macro VERBOSE`
 +REPORT=`macro REPORT`
 +NICE=`macro NICE`
 +BATCH=`macro BATCH`
 +MOUNT=`macro MOUNT`
 +NAGIOS=`macro NAGIOS`
 +NAGIOS_SERVER=`macro NAGIOS_SERVER`
 +NAGIOS_CONFIG=`macro NAGIOS_CONFIG`
 +NAGIOS_CHECK_NAME=`macro NAGIOS_CHECK_NAME`
 +NAGIOS_CRITICAL_CHANGES=`macro NAGIOS_CRITICAL_CHANGES`
 +NAGIOS_NSCA=`macro NAGIOS_NSCA`
 +ARCHIVE_RETENTION=`macro ARCHIVE_RETENTION`
 +
 +# default values
 +[ -z "$FQDN" ] && FQDN=`hostname`
 +[ -z "$MAILTO" ] && MAILTO="root"
 +[ -z "$LINES" ] && LINES="1000"
 +[ -z "$VERBOSE" ] && VERBOSE=0
 +[ -z "$REPORT" ] && REPORT=1
 +[ -z "$NICE" ] && NICE=15
 +[ -z "$BATCH" ] && BATCH=1
 +[ -z "$NAGIOS" ] && NAGIOS=0
 +[ -z "$NAGIOS_SERVER" ] && NAGIOS="localhost"
 +[ -z "$NAGIOS_CONFIG" ] && NAGIOS_CONFIG="/etc/send_nsca.cfg"
 +[ -z "$NAGIOS_CHECK_NAME" ] && NAGIOS_CHECK_NAME="Another File Integrity Checker"
 +[ -z "$NAGIOS_CRITICAL_CHANGES" ] && NAGIOS_CRITICAL_CHANGES=2
 +[ -z "$NAGIOS_NCSA" ] && NAGIOS_NCSA="/usr/sbin/send_nsca"
 +[ -z "$ARCHIVE_RETENTION" ] && ARCHIVE_RETENTION=0
 +
 +#echo "MAILTO=$MAILTO LINES=$LINES VERBOSE=$VERBOSE NICE=$NICE BATCH=$BATCH"
 +
 +if [ "$BATCH" = "0" ]
 +then
 +        exit 0
 +fi
 +
 +if [ "$VERBOSE" = "1" ]
 +then
 +        # verbose mail
 +        export VERBOSE_AFICK=1
 +fi
 +
 +# the mount point must be already defined in /etc/fstab
 +if [ -n "$MOUNT" ]
 +then
 +        mount $MOUNT
 +fi
 +
 +# launch command
 +nice -n $NICE $AFICK -c $CONFFILE $ACTION > $LOGFILE 2> $ERRORLOG
 +
 +# archive retention
 +if [ "$ARCHIVE_RETENTION" != "0" ]
 +then
 +        echo "###############" >> $LOGFILE
 +        echo "# afick_archive" >> $LOGFILE
 +        /usr/bin/afick_archive.pl -c $CONFFILE -H -k $ARCHIVE_RETENTION >> $LOGFILE 2>> $ERRORLOG
 +fi
 +
 +if [ -n "$MOUNT" ]
 +then
 +        umount $MOUNT
 +fi
 +
 +# nagios ?
 +if [ "$NAGIOS" = "1" ]
 +then
 +        send_nagios
 +fi
 +
 +if [ "$REPORT" = "0" ]
 +then
 +        # no report
 +        exit
 +fi
 +
 +# filter output to send by mail
 +OUTPUT=`treat_log`
 +if [ "$VERBOSE" = "1" ]
 +then
 +        send_mail
 +else
 +        # skip comments and empty lines
 +        OUTPUT_FILTRE=`echo "$OUTPUT" | grep -v "^#" | grep -v "^$"`
 +        if [ -n "$OUTPUT_FILTRE" ]
 +        then
 +                send_mail
 +        fi
 +fi
 +</code>
 +
 +Ce fichier permet d'intégrer Afick dans les tâches gérées par **cron**. Entre autre, il envoie un résumé par email à **root**.
 +
 +L'adresse email à utiliser peut être modifiée dans la section **macros section** du fichier **/etc/afick.conf** :
 +
 +<file>
 +#################
 +# macros section
 +#################
 +# used by cron job (afick_cron)
 +# define the mail adress to send cron job result
 +@@define MAILTO root@localhost
 +# truncate the result sended by mail to the number of lines (avoid too long mails)
 +@@define LINES 1000
 +# REPORT = 1 to enable mail reports, =0 to disable report
 +@@define REPORT 1
 +# VERBOSE = 1 to have one mail by run, =0 to have a mail only if changes are detected
 +@@define VERBOSE 0
 +# define the nice value : from 0 to 19 (priority of the job)
 +@@define NICE 18
 +# = 1 to allow cron job, = 0 to suppress cron job
 +@@define BATCH 1
 +# (optionnal, for unix) specify a file system to mount before the scan
 +# it must be defined in /etc/fstab
 +#@@define MOUNT /mnt/dist
 +# if set to 0, keep all archives, else define the number of days to keep
 +# with the syntaxe nS , n for a number, S for the scale
 +# (d for day, w for week, m for month, y for year)
 +# ex : for 5 months : 5m
 +@@define ARCHIVE_RETENTION 0
 +
 +# send nagios messages by NSCA (= 1 to allow, = 0 to block)
 +@@define NAGIOS 0
 +# address of the nagios server to send messages to
 +@@define NAGIOS_SERVER my.nagios.server.org
 +# NSCA configuration file
 +# @@define NAGIOS_CONFIG /etc/send_nsca.cfg
 +# name used for nagios passive check on the nagios server side
 +@@define NAGIOS_CHECK_NAME Another File Integrity Checker
 +# number c of the changes that are considered critical => nagios state CRITICAL
 +# (0 changes => nagios state OK; 0> and <c changes => nagios state WARNING)
 +@@define NAGIOS_CRITICAL_CHANGES 2
 +# path to nsca binary
 +# @@define NAGIOS_NSCA /usr/sbin/send_nsca
 +</file>
 +
 +====Root Kits====
 +
 +Un **rootkit** est un paquet logiciel qui permet à un utilisateur non-autorisé d'obtenir les droits de **root**. 
 +
 +Les rootkits sont essentiellement de deux types, voire un mélange des deux :
 +
 +  * des modules du noyau,
 +  * des paquets logiciels d'un utilisateur qui prennent la place de binaires système.
 +
 +Les rootkits de type modules du noyau insèrent des modules qui remplacent des appels systèmes et cachent des informations concernant certains processus spécifiques.
 +
 +Les rootkits de type paquets logiciels remplacement en règle générale des binaires système tels **ps**, **login** etc. Les binaires de remplacement cachent des processus et des répertoires de l'attaquant.
 +
 +===LAB #8 - Mise en place de rkhunter===
 +
 +**rkhunter** est un logiciel utilisé pour détecter les rootkits présents sur votre machine.
 +
 +==Installation==
 +
 +L'installation de rkhunter se fait simplement en utilisant yum :
 +
 +<code>
 +[root@centos8 ~]# dnf install rkhunter
 +</code>
 +
 +==Les options de la commande==
 +
 +Les options de cette commande sont :
 +
 +<code>
 +[root@centos8 ~]# rkhunter --help
 +
 +Usage: rkhunter {--check | --unlock | --update | --versioncheck |
 +                 --propupd [{filename | directory | package name},...] |
 +                 --list [{tests | {lang | languages} | rootkits | perl | propfiles}] |
 +                 --config-check | --version | --help} [options]
 +
 +Current options are:
 +         --append-log                  Append to the logfile, do not overwrite
 +         --bindir <directory>...       Use the specified command directories
 +     -c, --check                       Check the local system
 +     -C, --config-check                Check the configuration file(s), then exit
 +  --cs2, --color-set2                  Use the second color set for output
 +         --configfile <file>           Use the specified configuration file
 +         --cronjob                     Run as a cron job
 +                                       (implies -c, --sk and --nocolors options)
 +         --dbdir <directory>           Use the specified database directory
 +         --debug                       Debug mode
 +                                       (Do not use unless asked to do so)
 +         --disable <test>[,<test>...]  Disable specific tests
 +                                       (Default is to disable no tests)
 +         --display-logfile             Display the logfile at the end
 +         --enable  <test>[,<test>...]  Enable specific tests
 +                                       (Default is to enable all tests)
 +         --hash {MD5 | SHA1 | SHA224 | SHA256 | SHA384 | SHA512 |
 +                 NONE | <command>    Use the specified file hash function
 +                                       (Default is SHA256)
 +     -h, --help                        Display this help menu, then exit
 + --lang, --language <language>         Specify the language to use
 +                                       (Default is English)
 +         --list [tests | languages |   List the available test names, languages,
 +                 rootkits | perl |     rootkit names, perl module status
 +                 propfiles]            or file properties database, then exit
 +     -l, --logfile [file]              Write to a logfile
 +                                       (Default is /var/log/rkhunter.log)
 +         --noappend-log                Do not append to the logfile, overwrite it
 +         --nocf                        Do not use the configuration file entries
 +                                       for disabled tests (only valid with --disable)
 +         --nocolors                    Use black and white output
 +         --nolog                       Do not write to a logfile
 +--nomow, --no-mail-on-warning          Do not send a message if warnings occur
 +   --ns, --nosummary                   Do not show the summary of check results
 + --novl, --no-verbose-logging          No verbose logging
 +         --pkgmgr {RPM | DPKG | BSD |  Use the specified package manager to obtain
 +                   BSDng | SOLARIS |   or verify file property values.
 +                   NONE}               (Default is NONE)
 +         --propupd [file | directory | Update the entire file properties database,
 +                    package]...        or just for the specified entries
 +     -q, --quiet                       Quiet mode (no output at all)
 +  --rwo, --report-warnings-only        Show only warning messages
 +   --sk, --skip-keypress               Don't wait for a keypress after each test
 +         --summary                     Show the summary of system check results
 +                                       (This is the default)
 +         --syslog [facility.priority]  Log the check start and finish times to syslog
 +                                       (Default level is authpriv.notice)
 +         --tmpdir <directory>          Use the specified temporary directory
 +         --unlock                      Unlock (remove) the lock file
 +         --update                      Check for updates to database files
 +   --vl, --verbose-logging             Use verbose logging (on by default)
 +     -V, --version                     Display the version number, then exit
 +         --versioncheck                Check for latest version of program
 +     -x, --autox                       Automatically detect if X is in use
 +     -X, --no-autox                    Do not automatically detect if X is in use
 +</code>
 +
 +==Utilisation==
 +
 +Lancez **rkhunter** simplement en appelant son exécutable. A l'issu de son exécution, vous observerez un résumé :
 +
 +<code>
 +[root@centos7 ~]# rkhunter -c
 +...
 +System checks summary
 +=====================
 +
 +File properties checks...
 +    Required commands check failed
 +    Files checked: 137
 +    Suspect files: 4
 +
 +Rootkit checks...
 +    Rootkits checked : 498
 +    Possible rootkits: 0
 +
 +Applications checks...
 +    All checks skipped
 +
 +The system checks took: 2 minutes and 10 seconds
 +
 +All results have been written to the log file: /var/log/rkhunter/rkhunter.log
 +
 +One or more warnings have been found while checking the system.
 +Please check the log file (/var/log/rkhunter/rkhunter.log)
 +</code>
 +
 +==Configuration==
 +
 +**rkhunter** peut être configuré soit par des options sur la ligne de commande soit par l'édition de son fichier de configuration **/etc/rkhunter.conf**.
  
 ----- -----
 Copyright © 2024 Hugh Norris. Copyright © 2024 Hugh Norris.
Menu