03/06/2020: Dumper vos règles firewall en place sur chaque interface de vos VM.

Cela fait quelques mois que je poste régulièrement des billets sur mes découvertes et mon apprentissage de la production sur “NSX-T”. Durant tout ce temps, je me suis construit petit à petit une liste de tips & tricks pour pouvoir être plus efficace et aller plus vite à l’essentiel dans différentes circonstances. Après le billet “du parfait plombier des snapshots vSphere” et le billet “du parfait plombier VSAN”, il est temps d’inaugurer le manuel “du parfait plombier NSX-T” !

Trace ethernet en ligne de commande sur un ESXi

Ce n’est pas spécialement lié à NSX-T et cette fonction est parfaitement utilisable sur un ESXi quel qu’il soit, mais elle est très utile quand on veut pister un flux problématique depuis ou vers une VM donnée. ESXi met à votre disposition des outils très puissants, vous allez voir. Le seul pré-requis : ça ne marche qu’avec des VM connectées via des DVswitchs, mais je pense que ça ne dérangera personne en 2019 ^^.

Tout d’abord, récupérez le numéro du port virtuel que vous souhaitez tracer : pour se faire, sous cli utilisez cette commande :

Vous obtenez ici la liste exhaustive ports dvSwitch que l’ESXi exploite actuellement : ceux des VM s’exécutant actuellement sur la machine. Sur des grosses productions cela peut représenter des dizianes, voire des centaines de ports. Un petit “grep le_nom_de_ma_vm” derrière la commande vous permettra d’aller droit au but.

Ensuite, pour le port cible, utilisez cette ligne de commande :

C’est une combinaison de pktcap-uw, qui permet tout simplement de dumper le contenu du flux ethernet du port ciblé. Ce flux est ensuite envoyé à la commande, beaucoup plus classique, tcpdump-uw, un clone du bon vieux tcpdump. L’option “–dir 2” dans la commande pktcap-uw indique qu’on souhaite les flux in et out. Je vous laisse découvrir ces deux commande, les possibilités sont énormes pour analyser en temps réel l’activité d’une VM sans la perturber le moins du monde, ni a forcieri, d’installer un traceur à la wireshark dessus !

Trace en ligne de commande d’un port de logical router sur vos edges nodes

Une fois connecté en admin sur la edge cible (si vous êtes en actif/actif, vous devez faire des traces combinées sur les deux edge nodes), récupérez d’abord la liste de vos routeurs (DR, SR) :

Une fois récupéré l’UUID du routeur, vous devez lister et récupérer l’UUID de l’interface du routeur que vous voulez tracer :

Pour notre exemple, on va prendre la dernière du SR-tier0, en fait l’uplink vers l’exterieur du monde joyeux de NSX-T. Pour tracer l’activité de l’interface en question :

Vous noterez l’expression qui permet ici le dump à un host en particulier, tout comme tcpdump. Les possibilités sont presques infinies, aussi je vous recommande de piocher à loisir dans la doc “NSX-T Command line Reference”, à consulter ici pour la 2.5.

Tracer l’activité du distributed firewall NSX-T sur ESXi

Vous le savez sans doute, pour chaque règle de micro-segmentation, vous pouvez cocher l’option de “logging”. Cette option permet d’activer la trace de chaque activité de la règle en question sur chacun des transport nodes (ESXi) de votre plateforme. Une fois fait, dès que la règle est matchée sur un VM donnée, la décision du DFW est logguée dans le fichier /var/log/dfwpktlogs.log de l’ESXi où la VM s’exécute. Il vous suffit donc de consulter ce fichier pour voir ce qui s’est passé. Voici un petit exemple :

Le numéro après le INET/INET6 match [decision] correspond au numéro de la règle (à retrouver dans l’interface web). Vous avez aussi des indications du type TERM (fermeture de la session statefull) voir RDR qui indique une “redirection”, SNAT ou DNAT. Bref, une mine d’or pour vérifier que les règles implantés sont bonne. Bon, honnêtement, si vous avec beaucoup de machine, je vous conseille fortement au moins un aggrégateur de log pour vos machines (et les appliances NSX-T au passage), voire un VMware Log Insight, si vous avez des licences adaptées.

Visualiser la liste des règles firewall NSX appliquée sur une vmnic d’une machine virtuelle

Toujours très utile pour voir si par hasard, la nouvelle règle que vous venez d’implanter sur NSX-T est bien en place au bon endroit et fait le job correctement, il existe un groupe de deux commandes vous permettant de lister l’ensemble des règles appliquées à une vmnic donnée.

D’abord identifiez l’identifiant de la vmnic à regarder. Pour cela, placez vous sur l’ESXi où tourne la VM cible, comme toujours puis utilisez la commande summarize-dvfilter :

Si la VM dispose de plusieurs interfaces, évidemment, vous aurez plusieurs réponses. Repérez à chaque fois l’identifant suivant le champ “name:”. Ici dans notre exemple, on va utiliser l’ID “nic-2141337-eth0-vmware-sfw.2” dans la deuxième commande, vsipioctl :

La commande est très intéressante car elle vous renvoie des tonnes d’informations, comme la date de génération des règles (pour voir justement si votre nouvelle implantation a impacté ce ruleset. Ensuite, vous avez l’ensemble des règles L2 (Ethernet) et L3 (IP). Enfin vous y retrouvez, comme pour les logs firewall, les numéro de règles mais aussi leur portée et leur effet exact. Accessoirement, depuis NSX-T 3.0 vous avez aussi les fameuses règles IDS/IPS.

Je vous laisse découvrir tout ce qu’on peut récupérer à l’aide de cette commande magique vsipioctl. Essayez, par exemple vsipioctl getfwconfig, vsipioctl getspoofguard ou encore vsipioctl getfilterstat …

A suivre … :)