Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
technique:adminsys:secu:auditd:centralize [2021/01/25 23:26] – qduchemi | technique:old:auditd:centralize [2021/11/24 23:42] (Version actuelle) – ↷ Page déplacée de technique:adminsys:old:auditd:centralize à technique:old:auditd:centralize qduchemi | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | {{indexmenu_n> | ||
+ | # Centraliser les journaux | ||
+ | |||
+ | Dans le cadre de la TX Sécurité P19, nous avons mis en place un mécanisme de centralisation des logs produits par le démon d' | ||
+ | |||
+ | ## Objectif et approche utilisée | ||
+ | |||
+ | Il est très important que les journaux soient centralisés car ils seront | ||
+ | principalement utilisés pour des analyses post-mortem. Or, on n'a pas de | ||
+ | garantie d' | ||
+ | conserver sur un hôte plus sûr (`monitoring`). | ||
+ | |||
+ | auditd permet d' | ||
+ | lourde, compliquée à mettre en place et à maintenir. Nous avons plutôt décidé | ||
+ | d' | ||
+ | centraliser d' | ||
+ | solution mature et très capable, permettant notamment de discriminer les | ||
+ | journaux en fonction de leur hôte d' | ||
+ | |||
+ | La mise en place de ce système se fait en plusieurs étapes : il faut rediriger | ||
+ | les journaux d' | ||
+ | journaux sur `monitoring` et configurer `monitoring` pour qu'il gère | ||
+ | correctement ces journaux et les tourne de façon appropriée. | ||
+ | |||
+ | **A terme, l' | ||
+ | en place de celle-ci peut être trouvée [ici](https:// | ||
+ | |||
+ | ## Configuration | ||
+ | ### Machines clientes | ||
+ | #### Dispatcher d' | ||
+ | On commence par appliquer la configuration suivante à | ||
+ | `/ | ||
+ | |||
+ | ``` | ||
+ | active = yes | ||
+ | direction = out | ||
+ | path = builtin_syslog | ||
+ | type = builtin | ||
+ | args = LOG_INFO | ||
+ | format = string | ||
+ | ``` | ||
+ | Cela active le plugin `audisp` passant les journaux d' | ||
+ | chaque client. | ||
+ | |||
+ | #### rsyslog sur les clients : | ||
+ | On configure ensuite rsyslog dans `/ | ||
+ | pour qu'il envoie ses journaux à `monitoring` : | ||
+ | |||
+ | |||
+ | ``` | ||
+ | ########################################### | ||
+ | # Log centralization client configuration # | ||
+ | ########################################### | ||
+ | module(load=" | ||
+ | |||
+ | # Forward auditd and audispd logs to a distant host | ||
+ | if ($programname == " | ||
+ | action(type=" | ||
+ | target=" | ||
+ | port=" | ||
+ | tls=" | ||
+ | # For tls authentication | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | ) | ||
+ | } | ||
+ | ``` | ||
+ | |||
+ | On remarquera que l' | ||
+ | nous attendions encore les certificats nécessaires. | ||
+ | |||
+ | ### Serveur de centralisation | ||
+ | |||
+ | On configure enfin `monitoring` pour qu'il gère correctement les journaux lui | ||
+ | étant envoyés. | ||
+ | #### rsyslog sur le serveur : | ||
+ | On commence par rajouter la configuration suivante à | ||
+ | `/ | ||
+ | fonction de l' | ||
+ | |||
+ | ``` | ||
+ | module(load=" | ||
+ | # and bind it to ruleset relp (see below) | ||
+ | input(type=" | ||
+ | tls=" | ||
+ | # For tls authentication: | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | ) | ||
+ | |||
+ | # Places the right log in the right file | ||
+ | ruleset (name=" | ||
+ | if $source == " | ||
+ | action(type=" | ||
+ | file="/ | ||
+ | stop | ||
+ | } | ||
+ | if $source == " | ||
+ | action(type=" | ||
+ | file="/ | ||
+ | stop | ||
+ | } | ||
+ | if $source == " | ||
+ | action(type=" | ||
+ | file="/ | ||
+ | stop | ||
+ | } | ||
+ | stop | ||
+ | } | ||
+ | ``` | ||
+ | |||
+ | #### logrotate sur le serveur : | ||
+ | Puis on rajoute la configuration suivant à `/ | ||
+ | le comportement des rotations : | ||
+ | |||
+ | ``` | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | { | ||
+ | # keep log files for 30 days | ||
+ | maxage 30 | ||
+ | # Rotate them when they are larger than 10M | ||
+ | size 10M | ||
+ | missingok | ||
+ | notifempty | ||
+ | compress | ||
+ | delaycompress | ||
+ | sharedscripts | ||
+ | postrotate | ||
+ | invoke-rc.d rsyslog rotate > /dev/null | ||
+ | endscript | ||
+ | } | ||
+ | ``` | ||
+ | |||
+ | Cette configuration supprime les journaux plus vieux qu'un mois, car on suppose | ||
+ | qu'un problème nécessitant une enquête sera découvert avant cela. Par ailleurs, | ||
+ | ne pas supprimer les journaux lorsqu' | ||
+ | permet d' | ||
+ | `execve` depuis un shell. | ||
+ | Nous avons ajouté cette portion directement dans le fichier `logrotate.conf` car | ||
+ | c'est la méthode indiquée comme privilégiée dans la documentation de cet outil. | ||
+ | |||
+ | ## Extension à d' | ||
+ | Grâce à son approche modulaire, il est relativement facile d' | ||
+ | pour centraliser des logs produits par une grande diversité de services. | ||
+ | |||
+ | < | ||
+ | Il semble que les personnes travaillant sur ce sujet avaient fait face à des | ||
+ | difficultés pour discriminer les logs en fonction du conteneur docker les ayant | ||
+ | produit. Il serait intéressant de reprendre leurs recherche pour avoir à | ||
+ | disposition une solution de centralisation globale. | ||
+ | </ |