Serveur NPS (Radius) : configurer et analyser les logs

I. Présentation

Sur un serveur NPS, sous Windows Server donc, il est indispensable de bien configurer les logs afin qu'il soit facile de les récupérer. Nous avons la possibilité d'avoir des logs dans un fichier, mais aussi via l'Observateur d'événements de Windows.

Personnellement, pour le fichier, j'aime bien utilisé le format "IAS" car on se retrouve avec un fichier texte avec les traces à l'intérieur, séparée par des virgules, ce qui le rend facilement exploitable : dans Excel, par exemple. Le problème avec le NPS, c'est que s'il est fortement sollicité il va créer des fichiers de logs très conséquent, et ça peut devenir la galère pour les ouvrir... C'est pour cette raison que j'ai tendance à le configurer afin qu'il génère un fichier de log par jour.

II. Configurer les logs NPS

Pour configurer le format des logs générés par NPS, il faut accéder à la console "Serveur NPS (Network Policy Server)" puis à la section "Gestion". On retrouve alors un bouton "Modifier les propriétés du fichier journal" sous "Propriétés du fichier journal".

Une fenêtre s'ouvre... Accédez à l'onglet "Fichier journal", et à ce moment-là, je vous invite à définir un répertoire pour stocker les logs (vous pouvez conserver celui par défaut). Choisissez également le format "IAS (hérité)" et juste en dessous cochez "Chaque jour" si vous souhaitez qu'il y ait un fichier de log par jour.

Lorsque c'est fait, validez. Il ne reste plus qu'à redémarrer le service NPS pour être sur que ce soit bien pris en charge. Pour cela, ouvrez une console PowerShell et saisissez la commande suivante :

Restart-Service IAS

J'en profite pour vous indiquer que dans l'Observateur d'événements de votre serveur NPS, vous pouvez retrouver également des journaux liés à ce rôle. En fait, on les retrouve à l'emplacement suivant : Affichages personnalisés, Rôles de serveurs, Services de stratégie et d'accès réseau.

III. Comprendre les logs NPS

Avoir des logs c'est bien, mais être capable de les interpréter c'est mieux. Le fichier texte généré par défaut sur un serveur NPS, bien qu'exploitable facilement, n'est pas pour autant facile à interpréter car il n'y a pas le nom des colonnes.

La bonne nouvelle, c'est qu'il existe un script PowerShell sur le Technet afin de parser et de mettre en forme ce fameux fichier de log au format IAS. Il s'agit du script "NAP_Logs_Interpreter.ps1" que l'on peut récupérer à cette adresse : Interpreter logs NPS

Note : il existe une alternative, directement en ligne, où il suffit de coller les lignes de logs à analyser et elles seront mises en forme automatiquement. Le site est : iso.csusb.edu/tools/nps-log-interpreter

Nous allons maintenant utiliser le script PS1, mais il faut savoir que pour qu'il fonctionne il faut configurer les logs d'une façon spécifique : format IAS et un log par jour. Cela tombe bien, c'est ce que l'on a fait ?

Ce qui est intéressant avec ce script, au-delà du fait qu'il y ait le nom des colonnes, c'est que les codes d'état indiqué dans le fichier de log sont directement traduits en texte, ce qui est sans aucun doute plus facile à comprendre.

Par exemple, si type de paquet (Packet-Type) est à "1" dans le fichier de log, le script va directement indiquer "Packet-Type : Access-Request". Si le code est à "2" alors le texte sera "Packet-Type : Access-Accept", etc. Le script peut servir de documentation en même temps puisqu'il y a des tables de correspondances entre les codes et le texte associé, par exemple :

Pour exécuter le script, on peut :

  • Configurer la variable $logs en modifiant le script, il suffit de lui spécifier le chemin UNC vers le dossier qui contient les logs du serveur NPS. On en profitera pour mettre à jour la variable $Servers pour indiquer le nom du serveur NPS.
  • Exécuter le script en spécifiant directement un fichier de log

Par exemple, cela donne :

.\NAP_Logs_Interpreter.ps1 -filename .\IN200305.log

Ce qui retournera, au format liste, un objet par ligne :

SwitchIP : 192.168.1.120
Username : host/PC-01.it-connect.local
Date-Time : 21:01:34 03/05/2020
RADIUS-Server : SRV-NPS
Packet-Type : Access-Challenge
Fully-Qualified-User-Name : it-connect.local/Ordinateurs/PC-01
Acct-Session-ID : 5E61049B-859BEE04
Session-Timeout : 60
Filter-ID : 4142
NAS-Port : 4108
Switch-IP-Address : 192.168.1.120
Connection-Request-Policy : Utiliser l'authentification Windows pour tous les utilisateurs
NPS-Policy-Name : AUTORISER-PC-ACTIVE-DIRECTORY
NAS-Manufacturer : 0
SAM-Account-Name : IT-CONNECT\PC-01$
Not_Documented : 1
Class : 311 1 192.168.0.100 03/05/2020 20:02:38 1
Reason-Code : IAS_SUCCESS
Switch-Friendly-Name : AP-WIFI-01
Authentication-Type : EAP

On peut visualiser assez facilement différentes informations :

  • Le nom du PC qui a tenté de se connecter (valeurs : Username / Fully-Qualified-User-Name / SAM-Account-Name) - On peut aussi ajouter la propriété Workstation-Mac pour voir l'adresse MAC
  • Le nom du serveur NPS interrogé (valeur : RADIUS-Server)
  • L'adresse IP du client Radius qui a relayé la requête auprès du serveur NPS, ce qui peut-être un switch, une borne Wi-Fi, etc. (valeurs : SwitchIP / Switch-IP-Address) et son nom (valeur : Switch-Friendly-Name)
  • Le nom de la politique d'accès NPS associée à la demande de connexion (valeur : NPS-Policy-Name)
  • Le type de paquet pour suivre l'échange entre l'appareil qui souhaite se connecter et le serveur NPS, ce qui sera très pratique pour le debug (valeur : Packet-Type)

On remarque généralement la suite de requête suivante : Access-Request -> Access-Challenge -> Access-Request -> Access-Accept 

Pour que le script affiche seulement les infos de base, avec notamment la date/heure, le nom du PC/utilisateur, l'hôte Radius, le nom de la politique NPS, le type de paquet et l'état de la demande, on peut spécifier le paramètre -BaseInfo à la fin de la commande. Ce qui donnera :

.\NAP_Logs_Interpreter.ps1 -filename .\IN200305.log -BaseInfo

Avec un retour sous forme de tableau épuré, ligne par ligne :

Date-Time Username Workstation-MAC SwitchIP SwitchInterface NPS-Policy-Name Packet-Type Reason-Code
--------- -------- --------------- -------- --------------- --------------- ----------- -----------
21:01:34 03/05/2020 host/PC-01.it-connect.local 192.168.1.120 AUTORISER-PC-ACTIVE-DIRECTORY Access-Accept IAS_SUCCESS

Voici, en complément, quelques exemples pour utiliser ce script.

  • Rechercher des données dans le fichier de log

Par exemple, cela peut servir à retrouver les logs d'un PC spécifique ou les requêtes d'un type spécifique, etc.

.\NAP_Logs_Interpreter.ps1 -filename .\IN200305.log -SearchData "PC-01"
  • Afficher les logs des 3 derniers jours
.\NAP_Logs_Interpreter.ps1 -filename .\IN200305.log -SearchDays 3
  • Afficher les logs condensé dans un seul tableau
.\NAP_Logs_Interpreter.ps1 -filename .\IN200305.log -NotStreaming

Cette vue est vraiment très pratique ! Testez vous verrez ?

Bien sûr, les différentes paramètres que l'on vient de voir dans les exemples précédents sont cumulables, ce qui permet d'optimiser votre recherche dans les logs.

Avec des journaux correctement configurés et un script bien pratique pour rechercher à l'intérieur et interpréter plus facilement les logs, vous voilà bien équipé pour faire du troubleshooting sur votre serveur NPS ?

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Florian BURNEL

Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.

Nombre de posts de cet auteur : 5503.Voir tous les posts

9 thoughts on “Serveur NPS (Radius) : configurer et analyser les logs

  • Dommage, le contenu du site est bon, mais les pubs… de pire en pire sérieux. Avec des publicité plus que douteuse. On se croirait maintenant sur un site de warez…

    Dommage.

    Répondre
    • Bonjour Alex,

      Tu ne devrais pas en avoir autant et en tout cas pas des pubs douteuses, ce n’est pas notre souhait et il n’y a pas eu de modifications sur l’emplacement des pubs depuis près d’un an. Si tu as une copie d’écran… Tu peux me l’envoyer par e-mail stp.

      Merci
      Florian

      Répondre
  • Bonjour,

    merci pour ton travail et ces explications bien claires!

    A bientôt

    Répondre
  • Peut on avoir le script complet on ne le trouve plus sur la page Microsoft…? Merci

    Répondre
  • Bonjour Et merci pour cet article.
    Comme Malicia, je souhaiterai savoir ou trouver le script powershell car il n’est plus sur le site de microsoft et sans lui ….
    Bine à vous

    Répondre
  • Bonjour, super cet article !
    Mais comme les posts précédents, je ne trouve plus le script sur le technet…
    Où pourrais-je le trouver ?
    Merci

    Répondre
    • Bonjour Samuel,
      Je viens de déposer le script sur mon GitHub car je ne trouve pas de nouveau lien. 🙂
      Bonne journée
      Florian

      Répondre
  • Salut,

    Le script ne fonctionne plus en l’état (j’utilise Powershell v5)
    Voici la correction :
    if([string]::IsNullOrEmpty($SearchData)){
    $content = Get-Content (Get-Childitem $Logpaths -Filter *.log | ?{($_.Name.Length -lt ’13’ -and $_.Name -ge $after -and $_.Name -le $before)}).FullName
    }else{
    $content = Get-Content (Get-Childitem $Logpaths -Filter *.log | ?{($_.Name.Length -lt ’13’ -and $_.Name -ge $after -and $_.Name -le $before)}).FullName | Select-String -Pattern $SearchData
    }

    Et parce que je suis fainéant, voici les commandes pour configurer les journaux comme il se doit :
    netsh nps set filelog format=IAS
    netsh nps set filelog frequency=DAILY
    Restart-Service IAS

    Répondre
  • Bonjour Messieurs

    Comment définir le VLAN en fonction du compte utilisateur de l’Active Directory.
    Un PC peut avoir plusieurs utilisateur et des accès a des ressource différente de l’invite, a l’admin, en passant au développeur comment les mètres dans des Vlan différant?

    cordialement
    Jean-Philippe

    Répondre

Répondre à adam Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.