Bonjour à tous, allez je dépile mon backlog. Aujourd’hui je vous partage une configuration de dynamic file name rsyslog. Elle m’a bien servis y’a 1 an et demi pour diminuer le volume de log dans mon SIEM et configurer une plateforme de relais syslogs devant ce dernier. En effet, pour ceux qui auront écouté mon podcast No Limit Sécu sur les dix commandements du SIEM se rappelerons que le 1er commandements est de mettre en place une infrastructure de relais syslog .Celle ci permet le retraitement des logs, la diffusion et la conservation d’un buffer local.
En gros si on parle Splunk, le schéma retenu pour l’arrivée des logs n’est pas d’utiliser l’universal forwarder en reception « directe » des syslog. Mais bien de configurer un serveur RSYSLOG (ou Syslog-ng) intermédiaire qui écrit les logs dans des fichiers sur le serveur et l’universal forwarder surveille alors ces dossiers. Cette pratique présente de nombreux avantage :
- Les serveurs de collecte syslog « frontaux » avec les clients sont indépendant de la technologie de SIEM utilisé derrière. En cas de changement de SIEM, ces serveurs peuvent être maintenu.
- L’utilisation de fichier permet de conserver un cache local sur le serveur qui permet d’avoir un tampon de quelques jours en cas de panne sur le SIEM.
- L’universal forwarder discute avec l’indexeur et conserve un pointeur sur les données indexées par ce dernier. Cela évite toute perte de données à l’indexation en cas de saturation des ressources.
Ce serveur doit être sous le contrôle de l’organisation, si vous déléguer sa gestion à un intégrateur ou à l’éditeur ca ne sert strictement à rien.
RSYSLOG
Rsyslog est installé en standard sur les serveurs, vous pouvez contrôler sa présence avec :
rsyslogd -v rsyslogd 8.24.0-41.el7_7.2, compiled with PLATFORM (lsb_release -d): FEATURE_REGEXP: Yes GSSAPI Kerberos 5 support: Yes FEATURE_DEBUG (debug build, slow code): No 32bit Atomic operations supported: Yes 64bit Atomic operations supported: Yes memory allocator: system default Runtime Instrumentation (slow code): No uuid support: Yes Number of Bits in RainerScript integers: 64
Pour configurer rsyslog, rendez vous dans le fichier rsyslog.conf
Vim /etc/rsyslog.conf
Et ajouter les lignes suivantes en fonction de la reception voulue. ici pour une écoute sur le tcp/514 en syslog « classique » :
# Provides UDP syslog receptio #$ModLoad imudp #$UDPServerRun 514 # Provides TCP syslog reception $ModLoad imtcp $InputTCPServerRun 514 # rsyslog Input Modules input(type="imtcp port="514") […]
A partir de là je souhaite créer une abrorescence de fichier (1 par heure) en fonction des produits et source qui envoie les logs. ON commence donc par définir un format de fichier dynamique :
template (name="DynFileXXXX" type="list"){ constant(value="/var/log/<PRODUIT>/") property(name="hostname") constant(value="/") property(name="timestamp" dateFormat="year" date.inUTC="on") constant(value="-") property(name="timestamp" dateFormat="month" date.inUTC="on") constant(value="-") property(name="timestamp" dateFormat="day" date.inUTC="on") constant(value="T") property(name="timestamp" dateFormat="hour" date.inUTC="on") constant(value="+") property(name="timestamp" dateFormat="tzoffshour") constant(value="-<CUSTOM_MSG>.log") }
Enfin, définir les actions associé à l’arrivé de vos logs, avec la partie action sur la réception des logs, par exemple ici via la source IP :
if ($fromhost-ip == '10.0.0.1' or $fromhost-ip == '10.0.0.2') then { # reforward to SIEM1 action(type="omfwd" Target="10.0.0.3" Port="514" Protocol="tcp") # reforward to SIEM2 action(type="omfwd" Target="10.0.0.4" Port="514" Protocol="tcp") # écriture dans l’arbo local action(type="omfile" dynaFile="DynFileXXXX" # template dynaFileCacheSize="100" #nombre de descipteurs ouvert en simultanés closeTimeout="10" #on ferme le fichier si 10 minutes sans rien flushInterval="1" # flush du cache dans le fichier tout les x seconds ioBufferSize="64k" # cache mémoire disponible ) }
Les dernières lignes de configuration créé par exemple les fichiers selon l’arborescence suivante:
/var/log/PROXY/server1/2021-06-25T10+02-proxy.log /var/log/PROXY/server2/2021-06-25T11+02-proxy.log /var/log/PROXY/server2/2021-06-25T12+02-proxy.log
Et voilà, vous avez une jolie configuration « Dynamic file name rsyslog » qui vous permet de splitter vos logs dans des fichiers séparés par heure et par source . Je vous garde la partie modification de format pour plus tard dans la mesure ou elle n’est pas bien compliqué à mettre en place. That’s all folks, geekez bien !