Log

Log

Afin de contrôler les logs du service de mails de fournis par INFRA01, l’utilisation de l’outil rsyslog, déjà présent sur la machine Debian 11. Cet outil permet une convergence des logs grâce à des règles et des “facilities”. Une facility est semblable à un namespace dans lequel les logs vont tomber. Une facility peut utiliser du globbing si elle a pour ambition de faire converger tout les logs, qu’importe le niveau de criticité de ceux-ci. La facility local5.* récupérera alors tous les logs envoyé à local5.inf, local5.err, local5.warn, etc…

Ouvrez le fichier rsyslog.conf: Log

Commentez ou supprimez les facility de mail (1)
Ajoutez deux nouvelles facilities (2): Log

Les nouvelles facilities redirigent donc les logs dans le fichier /var/log/webmail/webmail.log
Créez le fichier /var/log/webmail/webmail.log: Log Log

Assignez les permissions 764 rwxrw-r– à l’utilisateur root et au groupe root afin qu’un utilisateur non-root ne puisse pas modifier le fichier de logs: Log

Redémarrez le service syslog: Log

Il faut à présent configurer chacun des services.

Postfix

Postfix envoie ses logs par défaut dans la facility mail, il n’y a donc pas de redirection à faire dans la configuration du service.

Dovecot

Ouvrez le fichier de configuration du service dovecot: Log

Commentez les lignes faisant référence à un fichier de logs (1)
Ajoutez un facility (2): Log

Il est possible de redémarrer le service maintenant avec la commande: sudo systemctl restart dovecot Mais on peut également le faire à la fin avec un script qui redémarre tous les services d’un seul coup.

Roundcube

Ouvrez le fichier de configuration du service roundcube: Log

Importez la section “LOGGING/DEBUGGING” du fichier defaults.inc.php de la configuration de roundcube dans le fichier config.inc.php (1)
Choisissez un niveau de log dans [1,4] pour le paramètre debug_level (2)
Choisissez syslog comme log_driver (3)
Conservez le log_date_format par défaut (4)
Choisissez roundcube comme syslog_id (5)
Choisissez LOG_MAIL comme syslog_facility (6)
Choisissez true pour tous les services possibles à journaliser (7)
Commentez le reste de la section
Log

Il est possible de redémarrer le service maintenant avec la commande: sudo systemctl restart roundcube Mais on peut également le faire à la fin avec un script qui redémarre tous les services d’un seul coup.

Nginx

Ouvrir le fichier de configuration du service nginx: Log

Remplacer les lignes access_log et error_log par les lignes suivantes (1): Log

Il est possible de redémarrer le service maintenant avec la commande: sudo systemctl restart nginx Mais on peut également le faire à la fin avec un script qui redémarre tous les services d’un seul coup.

Apache2

Ouvrez le fichier de configuration du service apache2: Log

Changez la ligne ErrorLog (1)
Sélectionnez le niveau de log au niveau info (2):
Log

Il faut à présent définir la politique de conservation des logs.

Il est possible de redémarrer le service maintenant avec la commande: sudo systemctl restart apache2 Mais on peut également le faire à la fin avec un script qui redémarre tous les services d’un seul coup.

Logrotate

Logrotate est l’orchestrateur qui va permettre de réaliser le rotation des fichiers de logs avec un granularité plus ou moins fine (ici le jour).

Installez logrotate: Log

Si logrotate est déjà installé, le fichier rsyslog devrait déjà être présent. Ca constitue une bonne base de départ pour notre configuration. Sinon, pas de panique, le fichier final webmail est donné en intégralité dans les illustrations suivantes. Log

Ouvrez le fichier de configuration webmail du service logrotate précédemment créé: Log

La journalisation du fichier /var/log/webmail/webmail/log va n’être conservée que 6 mois.
rotate 180: les seuls 180 derniers fichiers de logs seront conservés, les numéros 180+ sont donc supprimés
daily: la rotation à lieu tous les jours à 00:00, ainsi le précédent ficher webmail.log est archivé, et un nouveau est créé
missingok: si un journal est manquant lors de la rotation, logrotate ne s’interrompt pas
compress: compress les anciens fichier de logs
delaycompress: reporte la compression du fichier de log courant à la prochaine rotation de façon à ce qu’il puisse être directement lisible une journée de plus
create 764 root root: le nouveau fichier webmail.log généré le sera avec les permissions 764 et possédé par l’utilisateur root
postrotate: commande exécutée à l’issue de la rotation. Il s’agit ici d’un simple redémarage du service de log. C’est l’intérêt majeur de l’utilisation d’un service de log (rsyslog), nous permettant de changer le file descriptor du fichier de log (webmail.log) sans avoir à redémarrer les services essentiels au webmail (apache2, nginx, dovecot, …) et ainsi garantir une continuité de services.
Log

Redémarrez le service logrotate: Log

On peut alors lancer script.sh pour redémarrer l’ensemble de composants du webmail:

Log

avec pour script:

Log

Démonstration

Connectez-vous à un utilisateur de l’Active Directory: Log

Cliquez sur rédiger (1) pour solliciter le service SMTP (Postfix): Log

Écrivez un mail à destination d’un utilisateur valide (1) (de l’Active Directory) Cliquer sur “Envoyer” (2): Log

Ouvrez le fichier de logs webmail.log: Log

Voici un extrait des log généré par les actions tout juste effectuées: Log

Voici le dossier de log actuel: Log

On peut forcer la rotation de logrotate via le flag -f et le fichier de config visé dans logrotate: Log

On remarque un nouveau fichier nommer webmail.log.1 qui correspond au ficher de log qu’on a rempli: Log

Consultez le contenu du nouveau fichier webmail.log créé par le déclenchement de logrotate: Log

Démonstration complète incluant la sécurisation

  • INFRA01
    • Connexion sur le compte hugo
    • Envoi d’un premier mail avec une charge “malveillante” (fichier: eicar_av_test.txt)
    • Envoi d’un second mail avec un fichier .txt sans charge (fichier: simple.txt)
  • PC01
    • Connexion sur le compte sbombal
    • Ouverture d’un précédent mail
    • Ouverture du dernier mail de hugo contenant simple.txt et téléchargement de la pièce jointe

On remarque alors que le mail avec la charge “malveillante” a bien été stoppée par l’antivirus ClamAV

webmail.log