[OpenBSD]

[Précédent : Balisage de Paquets] [Index] [Suivant : Performances]

PF: Journal des Evénements


Table des Matières


Introduction

L'enregistrement des Evénements dans PF est effectué par pflogd(8) qui écoute sur l'interface pflog0 et écrit les paquets dans un fichier d'événements (normalement /var/log/pflog) au format binaire tcpdump(8). Les flux correspondant aux règles de filtrage qui contiennent les mots-clés log ou log-all sont enregistrés de cette manière.

Lire un Fichier d'Evénements

Le fichier d'événements écrit par pflogd est dans un format binaire que seul tcpdump(8) ou tout outil connaissant le format binaire tcpdump peut lire.

Pour lire le fichier d'événements :

# tcpdump -n -e -ttt -r /var/log/pflog

Il est à noter que l'utilisation de tcpdump(8) pour lire le fichier pflog ne donne pas un affichage en temps réel. Cependant, il est possible d'obtenir un tel affichage en utilisant l'interface pflog0 :

# tcpdump -n -e -ttt -i pflog0

REMARQUE : Lorsque vous examinez les événements, une attention particulière doit être prise par rapport au décodage verbeux des protocoles effectué par tcpdump (décodage activé par l'option -v). Les décodeurs protocolaires de tcpdump ne possèdent pas un historique sécurité parfait. En théorie du moins, une attaque retardée peut être possible à travers les charges utiles partielles enregistrées par le périphérique d'enregistrement d'événements. Il est recommandé de déplacer les fichiers d'événements du pare-feu avant de procéder à leur examen de cette manière.

Des précautions supplémentaires doivent êtres prises pour sécuriser l'accès aux événements. Par défaut, pflogd enregistrera 96 octets du paquet dans le fichier d'événements. L'accès aux fichiers d'événements pourrait fournir un accès partiel à des charges utiles de paquets sensibles (tels que les noms d'utilisateurs et les mots de passe telnet(1) ou ftp(1)).

Filtrer les Evénements en Sortie

Etant donné que pflogd enregistre les événements au format binaire tcpdump, la totalité des fonctionnalités tcpdump peut être utilisée pour analyser les événements. Par exemple, pour voir uniquement les paquets qui correspondent à un certain port :
# tcpdump -n -e -ttt -r /var/log/pflog port 80

Ceci peut être encore affiné en limitant l'affichage des paquets à une certaine combinaison de hôte et de port :

# tcpdump -n -e -ttt -r /var/log/pflog port 80 and host 192.168.1.3

La même idée peut être appliquée quand on lit les événéments directement à partir de l'interface pflog0 :

# tcpdump -n -e -ttt -i pflog0 host 192.168.4.2

Il est à noter que ces manipulations n'ont aucun impact sur les paquets enregistrés dans le fichier d'événements pflogd; les commandes ci-dessus ne feront qu'afficher les paquets au fur et à mesure qu'ils sont enregistrés.

En plus de l'utilisation des règles de filtrage standard tcpdump(8), le langage de filtrage du tcpdump fourni avec OpenBSD a été étendu pour lire la sortie de pflogd :

Exemple :

# tcpdump -n -e -ttt -i pflog0 inbound and action block and on wi0

Cette commande affichera l'événement en temps réel crée par des paquets entrants bloqués sur l'interface wi0.

Enregistrement des Evénements à Travers Syslog

Dans plusieurs situations, il est souhaitable de disposer des événements enregistrés par le pare-feu sous format ASCII ou de les envoyer à un serveur d'événements central distant. Tout ceci peut être effectué par deux petits scripts shell, quelques modifications mineures aux fichiers de configuration OpenBSD, et syslogd(8), le service qui permet d'enregistrer les événements. Syslogd enregistre les événements sous format ASCII et il est aussi capable de les envoyer à un serveur d'événements distant.

Il faut d'abord créer un utilisateur, pflogger, avec un shell /sbin/nologin. La façon la plus simple de créer cet utilisateur consiste à utiliser la commande adduser(8).

Après avoir crée l'utilisateur pflogger, créez les deux scripts suivants :

/etc/pflogrotate

        FILE=/home/pflogger/pflog5min.$(date "+%Y%m%d%H%M")
        kill -ALRM $(cat /var/run/pflogd.pid)
        if [ $(ls -l /var/log/pflog | cut -d " " -f 8) -gt 24 ]; then
           mv /var/log/pflog $FILE
           chown pflogger $FILE
           kill -HUP $(cat /var/run/pflogd.pid)
        fi

/home/pflogger/pfl2sysl

        for logfile in /home/pflogger/pflog5min* ; do
           tcpdump -n -e -ttt -r $logfile | logger -t pf -p local0.info
           rm $logfile
        done

Editez la liste des tâches cron du super-utilisateur root :

# crontab -u root -e

Ajoutez-y les deux lignes suivantes :

# effectuer une rotation du fichier d'événements
# toutes les 5 minutes
0-59/5 * * * * /bin/sh /etc/pflogrotate

Créer une liste de tâches cron pour l'utilisateur pflogger :

# crontab -u pflogger -e

Ajoutez-y les deux lignes suivantes :

# alimenter le(s) fichier(s) pflog après rotation à
# syslog
0-59/5 * * * * /bin/sh /home/pflogger/pfl2sysl

Ajoutez la ligne suivante au fichier /etc/syslog.conf :

local0.info     /var/log/pflog.txt

Si vous voulez les envoyer aussi à un serveur d'événements distant, ajoutez la ligne suivante

local0.info     @syslogger

Assurez vous que le hôte syslogger a bien été défini dans le fichier hosts(5).

Créez le fichier /var/log/pflog.txt afin de permettre à syslog d'enregistrer les événements dans ce fichier.

# touch /var/log/pflog.txt

Relancez syslogd pour que les modifications soient prises en compte :

# kill -HUP $(cat /var/run/syslog.pid)

Tous les événements enregistrés sont maintenant envoyés vers /var/log/pflog.txt. Si la seconde ligne a été ajoutée, les événements sont aussi envoyés au serveur d'événements distant syslogger.

Le script /etc/pflogrotate traite désormais /var/log/pflog et le supprime à la fin du traitement. La rotation de ce fichier par newsyslog(8) n'est plus nécessaire désormais et devrait être désactivée. Cependant /var/log/pflog.txt remplace /var/log/pflog et sa rotation devrait être activée. Modifiez /etc/newsyslog.conf comme suit :

    #/var/log/pflog       600    3    250    *    ZB /var/run/pflogd.pid
    /var/log/pflog.txt    600    7    *      24

PF, à l'aide du mécanisme précité, générera des événements qui seront enregistrés dans le fichier /var/log/pflog.txt. Ces événements pourront aussi être envoyés à un serveur d'événements distant. La conversion en ASCII n'est pas immédiate. Elle prend jusqu'à 5-6 minutes (l'intervalle d'exécution de la tâche cron) avant que les événements enregistrés apparaissent dans le fichier.

[Précédent : Balisage de Paquets] [Index] [Suivant : Performances]


[back] www@openbsd.org
Originally [OpenBSD: logging.html,v 1.13 ]
$Translation: logging.html,v 1.3 2004/02/19 20:31:29 saad Exp $
$OpenBSD: logging.html,v 1.3 2004/02/20 06:33:11 jufi Exp $