[Précédent : Balisage de Paquets] [Index] [Suivant : Performances]
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)).
# 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.
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]