Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

20.5. Configurer rsyslog sur un serveur d'enregistrement

Le service rsyslog fournit une installation pour exécuter un serveur d'enregistrement et pour configurer des systèmes individuels pour qu'ils envoient leurs fichiers journaux sur le serveur d'enregistrement. Veuillez consulter Exemple 20.12, « Transférer des messages journaux sur un serveur de manière fiable » pour obtenir des informations sur la configuration rsyslog du client.
Le service rsyslog doit être installé sur le système que vous comptiez utiliser en tant que serveur d'enregistrement et sur tous les systèmes qui seront configurés pour y envoyer leurs journaux. Rsyslog est installé par défaut sur Red Hat Enterprise Linux 7. Si requis, pour vous assurer que c'est bien le cas, veuillez saisir la commande suivante en tant qu'utilisateur root :
~]# yum install rsyslog
Le protocole et le port par défaut du trafic syslog est UDP et 514, comme indiqué dans le fichier /etc/services. Cependant, rsyslog utilise par défaut TCP sur le port 514. Dans le fichier de configuration, /etc/rsyslog.conf, TCP est indiqué par @@.
D'autres ports sont parfois utilisés en exemples, mais SELinux n'est configuré que pour permettre d'envoyer ou de recevoir sur les ports par défaut suivants :
~]# semanage port -l | grep syslog
syslogd_port_t                 tcp      6514, 601
syslogd_port_t                 udp      514, 6514, 601
L'utilitaire semanage est fourni dans le cadre du paquet policycoreutils-python. Si nécessaire, installez le package comme suit :
~]# yum install policycoreutils-python
De plus, le type SELinux de rsyslog, rsyslogd_t par défaut est configuré de façon à permettre d'envoyer et de recevoir dans le port de shell distant (rsh) ayant comme type de SELinux rsh_port_t, avec par défaut TCP sur le port 514. De ce fait, vous n'avez pas besoin d'utiliser semanage pour permettre explicitement TCP sur le port 514. Ainsi, pour vérifier ce sur quoi SELinux est défini pour autoriser l'accès au port 514, saisir la commande suivante :
~]# semanage port -l | grep 514sortie omise
rsh_port_t                     tcp      514
syslogd_port_t                 tcp      6514, 601
syslogd_port_t                 udp      514, 6514, 601
Pour obtenir plus d'informations sur SELinux, voir Red Hat Enterprise Linux 7 SELinux User's and Administrator's Guide.
Effectuez les étapes décrites dans cette procédure dans le système que vous comptez utiliser comme serveur de journalisation. Toutes les étapes de cette procédure doivent être effectuées en tant qu'utilisateur root :

Procédure 20.4. Configurez SELinux pour autoriser le trafic rsyslog sur un port

Si vous avez besoin d'utiliser un nouveau port pour le trafic rsyslog, suivez cette procédure sur le serveur de journalisation et sur les clients. Ainsi, pour recevoir et envoyer le trafic TCP sur le port 10514, procédez ainsi :
  1. ~]# semanage port -a -t syslogd_port_t -p tcp 10514
  2. Vérifiez les ports SELinux en saisissant la commande suivante :
    ~]# semanage port -l | grep syslog
  3. Si le nouveau port était déjà configuré dans /etc/rsyslog.conf, redémarrez rsyslog maintenant pour que le changement puisse avoir lieu :
    ~]# service rsyslog restart
  4. Vérifiez sur quels ports rsyslog écoute :
    ~]# netstat -tnlp | grep rsyslog
    tcp        0      0 0.0.0.0:10514           0.0.0.0:*   LISTEN      2528/rsyslogd
    tcp        0      0 :::10514                :::*        LISTEN      2528/rsyslogd
Voir la page man de semanage-port(8) pour obtenir plus d'informations sur la commande semanage port.

Procédure 20.5. Configurer firewalld

Configurer firewalld pour autoriser le trafic rsyslog. Ainsi, pour autoriser le trafic TCP sur le port 10514, procédez ainsi :
  1. ~]# firewall-cmd --zone=zone --add-port=10514/tcp
    success
    Quand zone correspond à la zone d'interface à utiliser. Veuillez noter que ces changements ne persisteront pas lors d'un nouveau démarrage. Pour rendre les changements au parefeu permanents, répétez la commande an ajoutant l'option --permanent. Pour obtenir davantage d'informations sur l'ouverture et la fermeture des ports de firewalld, veuillez consulter le Guide de sécurité Red Hat Enterprise Linux 7 .
  2. Pour vérifier les paramètres ci-dessus, veuillez utiliser une commande comme suit :
    ~]# firewall-cmd --list-all
    public (default, active)
      interfaces: eth0
      sources:
      services: dhcpv6-client ssh
      ports: 10514/tcp
      masquerade: no
      forward-ports:
      icmp-blocks:
      rich rules:

Procédure 20.6. Configurer rsyslog pour Recevoir et Trier les Messages de journalisation distants

  1. Ouvrez le fichier /etc/rsyslog.conf dans un éditeur de texte puis procédez comme suit :
    1. Ajoutez ces lignes sous la section des modules mais au-dessus de la section « Provides UDP syslog reception » (Fournit la réception syslog UDP) :
      # Define templates before the rules that use them
      
      ### Per-Host Templates for Remote Systems ###
      $template TmplAuthpriv, "/var/log/remote/auth/%HOSTNAME%/%PROGRAMNAME:::secpath-replace%.log"
      $template TmplMsg, "/var/log/remote/msg/%HOSTNAME%/%PROGRAMNAME:::secpath-replace%.log"
    2. Remplacez la section par défaut « Provides TCP syslog reception » par ce qui suit :
      # Provides TCP syslog reception
      $ModLoad imtcp
      # Adding this ruleset to process remote messages
      $RuleSet remote1
      authpriv.*   ?TmplAuthpriv
      *.info;mail.none;authpriv.none;cron.none   ?TmplMsg
      $RuleSet RSYSLOG_DefaultRuleset   #End the rule set by switching back to the default rule set
      $InputTCPServerBindRuleset remote1  #Define a new input and bind it to the "remote1" rule set
      $InputTCPServerRun 10514
    Enregistrez les changements sur le fichier /etc/rsyslog.conf.
  2. Le service rsyslog doit être en cours d'exécution sur le serveur d'enregistrement et sur les systèmes tentant de s'y connecter.
    1. Veuillez utiliser la commande systemctl pour lancer le service rsyslog.
      ~]# systemctl start rsyslog
    2. Pour vous assurer que le service rsyslog démarre automatiquement dans le futur, veuillez saisir la commande suivante en tant qu'utilisateur root :
      ~]# systemctl enable rsyslog
Votre serveur d'enregistrement est désormais configuré pour recevoir et stocker des fichiers journaux en provenance des autres systèmes de votre environnement.

20.5.1. Utilisation d'une nouvelle Syntaxe pour les Files d'attente rsyslog

Rsyslog 7 possède un certain nombre de styles de modèles. Le modèle sous le format de string est celui qui ressemble le plus à l'ancien format. Voici à quoi ressemble les reproductions de modèles de l'exemple ci-dessus avec le format de string :
template(name="TmplAuthpriv" type="string"
         string="/var/log/remote/auth/%HOSTNAME%/%PROGRAMNAME:::secpath-replace%.log"
        )

template(name="TmplMsg" type="string"
         string="/var/log/remote/msg/%HOSTNAME%/%PROGRAMNAME:::secpath-replace%.log"
        )
Ces modèles peuvent également être écrits sous un format de liste comme suit :
template(name="TmplAuthpriv" type="list") {
    constant(value="/var/log/remote/auth/")
    property(name="hostname")
    constant(value="/")
    property(name="programname" SecurePath="replace")
    constant(value=".log")
    }

template(name="TmplMsg" type="list") {
    constant(value="/var/log/remote/msg/")
    property(name="hostname")
    constant(value="/")
    property(name="programname" SecurePath="replace")
    constant(value=".log")
    }
Ce modèle de format texte est sans doute plus facile à lire pour ceux qui ne sont pas très familiers avec rsyslog, et peut donc peut mieux s'adapter en cas de changement de conditions.
Pour compléter un changement à la nouvelle syntaxe, nous devons reproduire la commande de chargement de module, ajouter un ensemble de règles, puis relier l'ensemble de règles à un protocole, un port et un ruleset :
module(load="imtcp")

ruleset(name="remote1"){
     authpriv.*   action(type="omfile" DynaFile="TmplAuthpriv")
      *.info;mail.none;authpriv.none;cron.none action(type="omfile" DynaFile="TmplMsg")
}

input(type="imtcp" port="10514" ruleset="remote1")