OBSD4* : wiki

Version de traduction basée sur la 6.4 officielle (v1.72 : 29/10/2018)


PF - Journalisation

Introduction

Quand un paquet est enregistré par PF, une copie de l'entête de paquet est envoyé vers une interface pflog(4) avec quelques données additionnelles telles que l'interface par laquelle le paquet a transité, l'action qu'a prise PF (pass ou block), etc… L'interface pflog(4) permet aux applications en espace utilisateur de recevoir les données de journalisation de PF depuis le noyau. Si PF est activé au démarrage du système, le service pflogd(8) est démarré. Par défaut, pflogd(8) écoute l'interface pflog0 et écrit toutes les données journalisées vers le fichier /var/log/pflog.

Journalisation des paquets

Afin d'enregistrer les paquets passants au-travers de PF, le mot-clé log doit être utilisé. Le mot-clé log oblige que tous les paquets qui correspondent à la règle soient journalisés. Dans le cas où la règle créé l'état, seul le premier paquet vu (le seul qui oblige que l'état soit créé) sera journalisé.

Les options qui peuvent être données au mot-clé log sont :

all
Oblige que tous les paquets correspondants, pas juste le paquet initial, soient journalisés. Utile pour les règles qui créent l'état.

to pflogN
Oblige que tous les paquets correspondants soient journalisés vers l'interface pflog(4) spécifiée. Par exemple, lors de l'utilisation de spamlogd(8), tout le trafic SMTP peut être journalisé vers une interface pflog(4) dédiée par PF. Le service spamlogd(8) peut alors être invité à écouter sur cette interface. Cela garde le principal fichier journal de PF propre du trafic SMTP qui autrement n'aurait pas besoin d'être journalisé. Utilisez ifconfig(8) pour créer les interfaces pflog(4). L'interface par défaut de journal pflog0 est créée automatiquement.

user
Oblige à ce que l'id utilisateur et l'id groupe à qui appartient la socket dont le paquet provient ou est à destination (bien que la socket soit locale) soient journalisés avec les informations standards de journal.

Les options sont données entre parenthèses après le mot-clé log ; les options multiples peuvent être séparées par une virgule ou un espace.

  pass in log (all, to pflog1) on egress inet proto tcp to egress port 22

Lire un fichier journal

Un fichier journal écrit par pflogd est au format binaire et ne peut être lu en utilisant un éditeur texte. tcpdump(8) doit être utilisé à la place.

Pour voir le fichier journal :

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

Notez que l'usage de tcpdump(8) pour surveiller le fichier pflog ne donne pas un affichage temps réel. Un affichage temps réel des paquets journalisés est réalisé en utilisant l'interface pflog0 :

  # tcpdump -n -e -ttt -i pflog0

NOTE : Lors de l'examen des journaux, un soin spécial doit être pris lors du décodage verbeux du protocole de tcpdump (activé via l'option -v en ligne de commande). Les décodeurs du protocole de tcpdump n'ont pas une histoire de sécurité parfaite. Au moins en théorie, une attaque retardée pourrait être possible via l'enregistrement des charges utiles de paquet partiel par le dispositif de journalisation. Il est recommandé de déplacer les fichiers journaux en-dehors du pare-feu avant l'examen de ceux-ci, de cette manière.

Une attention supplémentaire pourrait être aussi prise pour sécuriser l'accès aux journaux. Par défaut, pflogd enregistrera 160 octets du paquet dans le fichier journal. L'accès aux journaux pourrait fournir un accès partiel aux charges utiles des paquets sensibles.

Sortie du protocole de filtrage

Parce que pflogd journalise dans le format binaire de tcpdump, la gamme complète des fonctionnalités de tcpdump peut être utilisée lors de la consultation des journaux. Par exemple, pour voir seulement les paquets qui correspondent à un certain port :

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

Ceci peut être affiné en limitant l'affichage de paquets à une certaine combinaison d'un hôte et d'un 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 lors de la lecture depuis l'interface pflog0 :

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

Notez que cela n'a pas d'impact sur les paquets qui sont journalisés dans le fichier journal pflogd ; les commandes ci-dessus affichent seulement les paquets tels qu'ils sont journalisés.

En plus d'utiliser les règles de filtrage standard tcpdump(8), le langage de filtrage tcpdump a été étendu pour lire la sortie de pflogd :

  • ip - famille d'adresses IPv4.
  • ip6 - famille d'adresses IPv6.
  • on int - paquet passant au-travers de l'interface int.
  • ifname int - même chose que on int.
  • ruleset name - le jeu de règles d'ancre auquel correspond le paquet entrant.
  • rulenum num - la règle de filtrage dont le paquet correspondant était la règle numéro num.
  • action act - l'action prise sur le paquet. Les actions possibles sont pass et block.
  • reason res - la raison pour laquelle l' action a été prise. Les raisons possibles sont match, bad-offset, fragment, short, normalize, memory, bad-timestamp, congestion, ip-option, proto-cksum, state-mismatch, state-insert, state-limit, src-limit et synproxy.
  • inbound - paquet qui était entrant.
  • outbound - paquet qui était sortant.

Exemple :

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

Ceci affiche le journal, en temps réel, des paquets entrants qui ont été bloqués sur l'interface wi0.


Cette page est la traduction officieuse de la page “Logging de la FAQ officielle d'OpenBSD.
En cas de doute, merci de vous y référer !

Si vous voulez participer à l'effort de traduction, merci de lire ce topic.