Tout comme la commande TCPdump, la commande “fw monitor” permet une inspection des paquets traversant les firewalls Checkpoint.

2 raisons principales d’utiliser cette commande, présente sur toutes les platerformes Checkpoint, plutôt que TCPdump :

    1. Sécurité accrue : à l’instar de TCPdump, fw monitor ne travaille pas en “promiscuous mode”, ce mode étant vulnérable à des attaques distantes.
    2. Inspection détaillée : fw monitor permet l’inspection des paquets, au niveau kernel, et à différents points de la chaine de filtrage.

Je ne vais pas rentrer dans le détail complet de la commande, mais seulement quelques paramètres utiles dans le cadre de debugging.

#fw monitor -h
Usage: fw monitor [- u|s] [-i] [-d] [-T] <{-e expr}+|-f <filter-file|->> [-l len] [-m mask] [-x offset[,len]] [-o <file>] <[-pi pos] [-pI pos] [-po pos] [-pO pos] | -p all [-a ]> [-ci count] [-co count]

Voici à quoi ressemble une sortie de fw monitor :

eth-s4p1c0:i[40]: 10.73.156.159 -> 10.73.252.3 (TCP) len=40 id=27240
TCP: 4576 -> 22 ….A. seq=2faa82e3 ack=0ae66a7f
eth-s4p1c0:I[40]: 10.73.156.159 -> 10.73.252.3 (TCP) len=40 id=27240
TCP: 4576 -> 22 ….A. seq=2faa82e3 ack=0ae66a7f
eth-s4p1c0:o[1420]: 10.73.252.3 -> 10.73.156.159 (TCP) len=1420 id=4929
TCP: 22 -> 4576 ….A. seq=0ae66a7f ack=2faa82e3
eth-s4p1c0:O[1420]: 10.73.252.3 -> 10.73.156.159 (TCP) len=1420 id=4929
TCP: 22 -> 4576 ….A. seq=0ae66a7f ack=2faa82e3

On observe ici une communication SSH (22) entre les machines 10.73.156.159 et 10.73.252.3 avec un port source 4576.

Les paquets entrants et sortants transitent par l’interface eth-s4p1c0 : on observe 4 lettres devant la longueur du paquet (1420 bytes) : i, I, o, O. Ces 4 lettres indiquent la position du paquet dans la chaine de filtrage du firewall comme on le voit dans le schéma ci-dessous :

Chaine de filtrage

VM représente la machine virtuelle, c’est à dire le “moteur” du Checkpoint pour l’interface en question.

Grâce à l’option “-m”, on peut définir quels positions on souhaite observer

Ex : fw monitor -m iO

Cette fonctionnalité peut s’avérer très utilise dans le cas de translation d’adresse : on peut voir à quel moment le firewall effectue la translation, et ainsi vérifier la règle de routage appliquée.

L’option -u permet de suivre une session grâce à l’UUID assigné par le firewall pour chaque connexion.

TCP: 4576 -> 22 ….A. seq=2faa9723 ack=0aeadebf
[94010000 - 475f0194 00010000 035d2bc1 000007b6]:eth-s4p1c0:o[104]: 10.73.252.3 -> 10.73.156.159 (TCP) len=104 id=7061

Les filtres : l’option -e permet d’appliquer des filtres par expression.

#fw monitor -e ‘accept not (sport=22 or dport=22);’ je souhaite tout voir sauf le SSH.

#fw monitor -e ‘accept src=10.0.0.2;’ Je ne regarde que les paquets provenant de 10.0.0.2

Ici le système utilise des macros prédéfinis (src, dst, sport, dport), mais il est aussi possible d’établir les mêmes filtres par rapport à un offset du paquet IP.

Ex : #fw monitor -e ‘accept src=10.0.0.2;’ peut aussi s’écrire

#fw monitor -e ‘accept [12, b]=10.0.0.2;’ car l’adresse IP source est stocké à l’offset 12 du paquet IP.

Ces expressions brutes sont utiles si l’on veut effectuer un debugging poussé au niveau paquet (ça m’est arrivé pour du VRRP…)

Enfin si l’on souhaite écrire la sortie dans un fichier, utilisez l’option “-o filename.cap” : vous pourrez ensuite analyser le résultat avec l’excellent Wireshark qui possède une option spécifique pour décoder un log issu de la commande fw monitor.

Voila un petit tour d’horizon de la commande fw monitor.

Il est impossible de tout détailler ici tellement les possibilités sont énormes, mais si vous souhaitez plus de détail, n’hésitez pas à me contacter.