Rsyslog

Intro

Rsyslog et la version amélioré du daemon syslog
Il permet d'ecrire des logs de facons normalisé localemetn ou sur un port donnée
Le protocole utilise le port UDP 514
redhat6 redhat7

Configuration file are
/etc/rsyslog.conf
$IncludeConfig /etc/rsyslog.d/*.conf (vide a l'instal)

/etc/logrotate.conf
/etc/logrotate.d/

log are on
/var/log

Server conf

Firewall redhat7 Selinux

Lister la zone active et ajouté le port udp qui va bien (sur la conf active et sur le permanent)
Lister le resultat
firewall-cmd --get-active-zones
firewall-cmd --zone=public --add-port=514/tcp
firewall-cmd --zone=public --add-port=514/tcp --permanent
firewall-cmd --zone=public --list-ports

Activer le mode serveur rsyslog.conf

doc ref

Activer le module udp

/etc/rsyslog.conf
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514

Filtre redefinisans la zone d'ecriture des logues

exemple1 /etc/rsyslog (parti filtre)

Placer en fin de fichier (ici on aplique la modif a tous les logues)
$template affichage,"%msg%\n"
$template TmplAuth, "/logs/%HOSTNAME%/%fromhost-ip%/%PROGRAMNAME%.log"
*.* ?TmplAuth;affichage
!!Les logs distant sons donc sous /logs et non /var/logs
Le template affichage evite le template par defautl qui rajoute des infos avant le messges d'origine
Cela perturbe les outils de decodate de audit

On peut aussi redefinir le filtre par default

exemple2 /etc/rsyslog

$template affichage,"%msg%\n"
$template TmplAuth, "/logs/%HOSTNAME%/%fromhost-ip%/%programname%-%$YEAR%%$MONTH%%$DAY%.log"
$template TmplAuth2, "/logs/%HOSTNAME%/%fromhost-ip%/switch-%$YEAR%%$MONTH%%$DAY%.log"
if not ( $hostname contains 'swh' ) then ?TmplAuth;affichage
& stop
if $hostname contains 'swh' then ?TmplAuth2;affichage
& stop

redefinition du template par default

# Use default timestamp format
#$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

#Redefinition du template par default
$template CustomFormat,"%msg%\n"
$ActionFileDefaultTemplate CustomFormat

Tester le fichier de conf

rsyslogd -N1

Relancer le service
systemctl restart rsyslog
!! Sa c'est la théorie les restarts ne marche pas rsyslog reste en carafe une fois sur 2 REBOOT et la ceul methode fiable

compression / gestion

par crontab rajouter un fichier
vi /etc/cron.daily/syslog-bzip2

find /logs -type f -mtime +1 -name "*.log" -exec bzip2 '{}' \;
find /logs -type f -mtime +500 -name "*.log.bz2" -print0 | xargs -0 rm
-type f : type de fichier standard
-mtime x*24h : que les fichier modifier dans les n*24h
-name "regex": dont le nom correpond a
on execute bzip2 pour compresser
on les suprime au bout de 500 jours

Vérifier que le serveur rsyslog est ok

vérif local
yum install net-tools
netstat -tapn
netstat -tapn | grep 514
tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN 627/rsyslogd
tcp 0 0 xxx.xxx.xxx.xxx:514 xxx.xxx.xxx.xxx:46751 ESTABLISHED 627/rsyslogd
tcp 0 0 xxx.xxx.xxx.xxx:514 xxx.xxx.xxx.xxx:37236 ESTABLISHED 627/rsyslogd
tcp6 0 0 :::514 :::* LISTEN 627/rsyslogd

Vérif extern
sudo nmap -sV -p 514 logs.xxx.fr
Starting Nmap 6.45 ( http://nmap.org ) at 2014-11-07 13:04 CET
Nmap scan report for logs (129.88.240.71)
Host is up (0.00069s latency).
PORT STATE SERVICE
rDNS record for 129.88.240.71: ensi-logs.imag.fr
514/tcp open shell
Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds

Debugage rsyslog

Vérfier que rsyslog ne bug pas
cat /var/log/messages | grep rsyslog
Nov 21 11:51:50 logs rsyslogd-3000: Could not open dynamic file '/logs/centos/xxx.xxx.xxx.xxx/sshd.log' [state -3000] - discarding message

Probleme de droit donc
ls -Zd /var/log/
drwxr-xr-x. root root system_u:object_r:etc_runtime_t:s0 /logs/

on copie les droits de l'emplacement par default
chcon --reference /var/log /logs
ls -Zd /var/log/
drwxr-xr-x. root root system_u:object_r:var_log_t:s0 /logs/
remarquer etc_runtime_t -> var_log_t

Maintnenant
ls -Zd /logs/
drwxr-xr-x. root root system_u:object_r:var_log_t:s0 /var/log/

Details


all properties

Les facilité c'est des types(catégory) dans lequelle sons regroupé les messages (si desus mail,authpriv...)
auth: évènements type sécurité ou l’authentification exemple(SSH)
authpriv: évènements type contrôle d’accès
daemon: évènements type processus systèmes et d’application
kern: évènements type kernel mail: évènements type mail
user: default -> quand celui qui ecrit na pas préciser dans qu'elle facilité il veu loguer
local7: boot
*: tous
none: rien

La gravité
Emerg: système inutilisable
Alert,Crit,Err,Warning,Notice,Info,Debug
reference filtrage

Client conf

Les modif sont à effectué pret de
#*.* @@remote-host:514

Reglage de la qualité de service

/etc/rsyslog.conf
#@=udp @@=tcp
$ActionQueueFileName fwdRule1
$WorkDirectory /var/lib/rsyslog
$ActionResumeInterval 10
$ActionQueueSize 100000
$ActionQueueDiscardMark 97500
$ActionQueueHighWaterMark 80000
$ActionQueueType LinkedList
$ActionQueueCheckpointInterval 100
$ActionQueueMaxDiskSpace 2g
$ActionResumeRetryCount -1
$ActionQueueSaveOnShutdown on
$ActionQueueTimeoutEnqueue 10
$ActionQueueDiscardSeverity 0
Toutes c'est option sons facultative mais permetre de reagir au coupure reseau et au pick de charge

Exemple de conf possible pour les logues a envoyer

Rajouter sous *.* @@remote-host:514 (ligne comenté par #)
Inspiré vous des exemples si dessou pour envoyer qu'elle que chose au server
# Envoie tous les logs sur le server
#*.* @@logs.xxx.fr:514

# Envoie tous les logs contenant dans le message audit sur audit.log
#:msg, contains, "audit" /var/log/audit/audit.log
#& ~

# Envoie tous les logs de la machine nomé centos sur le serveur
#if $hostname == 'centos' then @@logs.xxx.fr:514
#& ~

# Envoie tous les logues envoyer par audit sur le serveur
#if $programname == 'audispd' then @@logs.xxx.fr:514
#& ~

# Envoie tosu les logs ....
#if $hostname == 'centos' and $programname startswith 'au' then @@logs.xxx.fr:514
#& ~

# Envoie les logues de audit+sshd+pam(logue sur x)
$MainMsgQueueType Direct $ActionQueueType Direct if $programname == 'audispd' or $programname == 'sshd' or $programname =='pam' then @@logs.xxx.fr:514
& ~
le "& ~" signifie on balance tous le resttes
doc pour les if http://www.rsyslog.com/storing-messages-from-a-remote-system-into-a-specific-file/ Doc pour les queue mainsmsgqueue queues

Iptables

iptables -A OUTPUT -j LOG -m state --state NEW --log-uid --log-prefix "iptables" --log-level 4
service iptables start
Ne perturbe pas les regles suivantes

Auditd

yum install audit
service auditd start
chkconfig auditd on

Auditd est un logiciel qui permet de surveillier les apelles systeme (syscall)
ref
debug

syscall

ref
10 : mprotect
102: guid
103: syslog

Auditctl

Install

yum install audit
service auditd start
chkconfig auditd on

Regles temporaire

Status de audit

auditctl -s

Liste des regles

auditctl -l

Enable puis diseable

auditctl -e 1
auditctl -e 0

Exemples

-a pour ajouter(add) une comande
-d pour enlever(delete) une comande
Pour surveillier l'appelle connect
auditctl -a exit,always -F arch=b64 -S connect
Pour delete
auditctl -d exit,always -F arch=b64 -S connect

Autre exemple possible
auditctl -a always,exit -F arch=x86_64 -S socket -F a0=0x2 -F a1=0x1 -F key=con_out
auditctl -a always,exit -F arch=x86_64 -S socket -F a0=0x2 -F a1=0x1 -F key=con_in

Pour loguer tous les fichier ouvert par l'utilisateur avec le uid 80
auditctl -a exit,always -F arch=x86_64 -S open -F auid=80
-F arch=x86_64 en 32 ou 64 bits
-S open on choisie le syscall Open
-F auid=80 L'utilisateur ayant l'id 80

Pour surveillier un fichier spécifique
auditctl -a exit,always -F path=/etc/passwd -F perm=wa -K etcpasswdrule
logue tous ecriture ou tous changement d'atribut sur /etc/passwd

Pour surveillier des commande
auditctl -a entry,always -S mkdir -S rmdir3

Syntax

-a ajouter (add)
-d enelever(delete)
-S systeme
-F filtre
-F arch= : precise qu'elle est l'architecture des appeles syscall
-F auid= : filtre sur l'auid d'un utilisateure precis
-F path= : path du fichier que l'on veut surveillier
-F perm= : permissions sur les quelle on veut loguer (lecture ou ecriture)
&nbps;&nbps;&nbps;&nbps;R =read , w=write , x= execute , a = atribute change
-k LOG_audit : rajoute du text sur la ligen poru la regle donnée poru l'identifier

ausearch -k LOG_audit
liste des apelle systéme

Regles permanent audit.rules

vi /etc/audit/audit.rules
Pour avoir la regles en dur à rajouter:
-a always,exit -F arch=b64 -S connect
Attention le volume de donnée est importants et l'on ne peut pas filtrer par parg palge d'ip sortante

Configuration rsyslog de audit

Pour que audictl pass par rsyslog placer active a yes
vi /etc/audisp/plugins.d/syslog.conf
active = yes
direction = out
path = builtin_syslog
type = builtin
args = LOG_INFO
format = string
La sortie se fais sur la facilité (categorie) user
Le log est ecrit dans message
Malheuresement ce n'est pas réglable sur le plugin

Analyse de log /var/log/audit/audit.log

ref Exemple de lecture apres un wget
cat /var/log/audit/audit.log
type=SYSCALL msg=audit(1416494249.018:1050): arch=c000003e syscall=42 success=yes exit=0 a0=3 a1=7fff3a691100 a2=10 a3=327c72662e656572 items=0 ppid=7320 pid=7429 auid=0 uid=15133 gid=10501 euid=15133 suid=15133 fsuid=15133 egid=10501 sgid=10501 fsgid=10501 tty=pts0 ses=54 comm="wget" exe="/usr/bin/wget" key=(null) type=SOCKADDR msg=audit(1416494249.018:1050): saddr=02000050D41B3F810000000000000000 Le audit est un id unique

Outils de recherche

Researche par une ip (ici mon site free)
ausearch -i -ts today | grep 212.27.63.129
-i:decodage -ts: time stamp -c: instruction type=SOCKADDR msg=audit(20/11/2014 15:37:29.018:1050) : saddr=inet host:212.27.63.129 serv:80
Puis recherche de l'utilisateur par l'id unique audit
type=SOCKADDR msg=audit(20/11/2014 15:37:29.018:1050) : saddr=inet host:212.27.63.129 serv:80
type=SYSCALL msg=audit(20/11/2014 15:37:29.018:1050) : arch=x86_64 syscall=connect success=yes exit=0 a0=0x3 a1=0x7fff3a691100 a2=0x10 a3=0x327c72662e656572 items=0 ppid=7320 pid=7429 auid=root uid=toto gid=tata euid=toto suid=toto fsuid=toto egid=tata sgid=tata fsgid=tata tty=pts0 ses=54 comm=wget exe=/usr/bin/wget key=(null)

autre exemple :
ausearch -c wget -i
ausearch -i -ts today -if audispd-20150109.log

Windows

FirewallConf

Pour faire loguer les requettes http passer par le firewall Configurer le firewall pour loguer les requettes (click droite -> propriété)
Faire loguer pour le cas A B et C







Syslog Agent

Le but de l'agent est de forwarder les logs a un serveure de type syslog
L'agent est gratuit est open source le serveur payant

Install

A prendre sur syslogserver de preference
syslogagent_v2.3_x32.zip
syslogagent_v2.3_x64.zip

Pour suprimer ou modifier le chemin du service passer par Regedit
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services
Lancer le logiciel de conf en admin

conf


Placer l'ip du server syslog
Puis Cocher dans event logs (Enable ....) sinon aucun log n'est forwarder pas meme ceux du dessous
Puis clicquer sur Configure Event log et decocher tous les case pour tous les type de logue sauf Systeme et Power shell
Si systéme log n'est pas logué alors les logue aditionnel ne sont pas rapatrié







Authoriser les aplications logs et configurer deux logs suplémentaire

Firewall
Application name : Firewall
Level : Information Prosess name:Firewall (le logue se nomera Firewall-yyyymmdd.log)
Spécifique file: c:\Windows\Systeme32\LogFiles\Firewall\pfirewall.log
Facilité: Application (local7)

Pgina
(pgina est une aplication permettant de ce loguer sur un ldap linux)
Pgina Application name : Pgina Spécifique file: c:\Program Files\pGina\log\pGina.Service.ServiceHost_log.txt
Level : Information Prosess name:Pgina (le logue se nomera Pgina-yyyymmdd.log)
Facilité: Application (local7)