Réguler la consommation de RAM sur un serveur WSUS

Il arrive que WSUS et IIS qui fonctionnent de pair puissent déclencher fréquemment des alertes de sur-consommation de mémoire vive. Bien que cela n’impacte pas forcément les performances dudit serveur, il peut être nécessaire de forcer une « purge » du processus IIS exécutant le pool applicatif de WSUS afin que la consommation en RAM redescende.

Par exemple, ce matin :

Dans IIS, on peut « forcer » le pool applicatif de WSUS simplement nommé WsusPool à faire un recyclage des ressources systèmes qu’il occupe. Il suffit de sélectionner ce pool et de cliquer sur les options de recyclage (et non l’action de recyclage elle-même avec son icône de flèches vertes). Une fenêtre s’ouvre alors, proposant diverses options :

La fenêtre des options de recyclage permet de choisir une échéance de temps, de nombre de requêtes ou de consommation de mémoire vive, ou plusieurs à la fois.

On choisit donc les options qui nous conviennent : dans mon cas, en plus de l’intervalle de temps entre deux recyclages, j’ai défini un maximum de mémoire vive (à adapter en fonction de la charge souhaitée sur le serveur, il est évident que si l’on décide de n’y allouer que 500 Mo, les performances vont en pâtir), mais c’est optionnel. Une fois ce choix validé, nous pouvons lancer à la main un recyclage :

IIS va donc recycler le pool : cela signifie qu’il va créer un autre processus exécutant ce pool, puis transférer la charge mémoire du premier vers le nouveau, en faisant le « ménage » parmi ce dont il n’a plus besoin.

Le recyclage est en cours, le premier processus se vide en faveur du deuxième avant de disparaître.

Ainsi, la consommation en RAM a bien chuté et ne pourra dépasser 4 Go. Bien évidemment, cette limite n’est pas obligatoire ; en cas de surcharge ponctuelle du serveur, on peut toujours déclencher un recyclage manuel qui aura le même effet.

Erreur 530 lors de la connexion sur un FTP géré par IIS

J’ai installé récemment sous IIS un site FTP de backup qui est une réplication exacte du premier pour un client externe. Avant de procéder à la livraison de celui-ci, je voulais faire un test de connexion avec un utilisateur lambda pour m’assurer que tout était bien configuré proprement. Dans cet exemple, le serveur FTP se base sur ActiveDirectory pour obtenir la liste des comptes habilités ou non à lire ou écrire.

Et voilà que sur FileZilla, je me heurte à une erreur 530.

Un petit tour dans l’ActiveDirectory pour voir si il ne s’agit pas d’une variable mal configurée :

Aucun répertoire de profil n’est configuré, mais pas plus sur tous les autres comptes qui fonctionnent sur le premier environnement. Je décide donc de tester ce compte sur ce dit premier environnement et pas mieux, je me heurte à la même erreur.

Avec accord du client, je duplique donc un compte qui fonctionne et fais le test : pas mieux.

Je vérifie donc ma configuration IIS, et tous les paramètres sont strictement identiques. S’agissant visiblement d’un problème de répertoire, je vais sur la page des paramètres d’isolement des utilisateurs et le désactive (ce qui fait que chaque utilisateur n’est plus cantonné à son propre répertoire) :

Sur cette capture d’écran, le réglage bloque l’utilisateur dans un répertoire donné afin qu’il ne puisse pas browser l’intégralité du serveur FTP.

Une fois l’option Do not isolate users cochée, tout fonctionne avec les deux comptes, le dupliqué et mon compte de test. Le problème provient donc bien d’un répertoire non accessible qui est indiqué quelque part dans les comptes utilisateurs. Je fais un test avec l’original du compte dupliqué, et ça fonctionne !

Je décide donc de regarder au niveau des attributs des comptes. Sur les comptes qui fonctionnent, je vois ceci :

Deux attributs msIIS-FTPDir et msIIS-FTPRoot qui contiennent les informations permettant au serveur FTP d’isoler l’utilisateur. Sans ces attributs, pas de connexion possible. En analysant les attributs du compte dupliqué et de mon compte de test, je ne vois pas ces attributs, rendant alors la connexion impossible :

L’erreur n’a donc côté client jamais existé puisque les comptes utilisés avaient bien ces attributs de renseignés, ce qui n’était pas le cas pour mon compte de test.

Désactivation des ciphers AES 128, AES 256 et 3DES 168 sous Windows Server

Il y a peu, j’ai dû désactiver sur une plateforme TLS 1.0 et 1.1. Aujourd’hui, rebelote, mais avec les ciphers Triple DES, ainsi qu’AES 128 et 256.

J’ai placé un extract de ces clefs de registre dans une archive disponible sur mon miroir de téléchargement.

En ouvrant regedit, on va se placer dans le chemin suivant :
HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers

Puis, il suffira de créer une clef par cipher que l’on souhaite désactiver. Dans notre cas, nous allons créer 3 clefs ayant les noms suivants :

  • Triple DES 168
  • AES 128
  • AES 256

Dans chacune de ces clefs, il faudra créer une valeur DWORD appelée Enabled et ayant pour valeur 0.

On obtient donc quelque chose de similaire à ceci :

Un redémarrage est nécessaire pour appliquer les modifications car la DLL schannel ne lit les paramètres du registre qu’au démarrage du système. Si jamais il y a besoin d’annuler les modifications réalisées, il suffit de supprimer les clefs tout juste créées. A noter que si il y a désactivation d’un cipher utilisé pour encrypter les pages web utilisées par le serveur IIS, ces pages ne seront plus accessbiles, il convient donc de faire un test au préalable et de désactiver avec parcimonie les ciphers.

Si l’on désactive le cipher AES 256 via le registre, cette page ne sera plus accessible

Plus d’informations concernant les ciphers désactivables sous Windows sont disponibles à ce lien.

Désactivation de TLS 1.0, TLS 1.1 et activation de TLS 1.2 sur Windows Server 2008 R2 et +

Il a été décidé par les responsables d’une plateforme sur laquelle je suis intervenu ce jour de la désactivation de TLS 1.0 et 1.1 au profit de 1.2 sur un serveur Windows 2008 R2 utilisant IIS 7. Je vais donc décrire dans cet article les modifications qui sont à réaliser en base de registre – je pense réaliser par la suite un script permettant l’automatisation de la création et peuplement de ces clefs.

En préalable, il est important de vérifier que le KB 3080079 soit installé sur le serveur si 2008 R2, sans quoi une fois la désactivation de TLS 1.0 effective il ne sera plus possible d’accéder en Remote Desktop sur le serveur. Je renvoie à cette page pour plus d’informations.

J’ai réalisé une archive ZIP des clefs de registre évoquées dans ce billet sur mon miroir de téléchargement.

Dans la base de registre, on ira jusqu’à la clef suivante :
HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols

Une fois dans cette clef, il suffira de créer une clef supplémentaire par protocole. On créé donc 3 clefs : TLS 1.0, TLS 1.1 et TLS 1.2. A noter qu’il est fort probable que soient déjà présentes d’autres clefs pour SSL, comme sur cette capture d’écran.

Dans chacune des clefs TLS, il faudra créer 2 sous-clefs : Client et Server. L’arborescence ressemble donc à cela :

Dans chacune des 6 clefs qui ont été crées, il faudra ajouter 2 valeurs DWORD en hexadécimal :

  • DisabledByDefault, qui aura toujours la valeur 0
  • Enabled, qui aura la valeur 0 pour TLS 1.0 et TLS 1.1 et la valeur 1 pour TLS 1.2.

Ce qui donne, pour TLS 1.0\Client, TLS 1.0\Server, TLS 1.1\Client et TLS 1.1\Server :

Pour TLS 1.2\Client et TLS 1.2\Server :

Ensuite, un redémarrage du serveur suffit pour que les modifications soient prises en compte. Les protocoles TLS 1.0 et 1.1 ne sont plus actifs. A noter que ces clefs de registre peuvent également être appliquées sur Windows Server 2012 et R2.

Si jamais le Remote Desktop ne fonctionne plus une fois TLS 1.0 désactivé et que le patch est bien installé sur le serveur (si antérieur à 2012), il faut forcer le Terminal Server à utiliser son encryption et non celle de TLS 1.0. Pour ce faire, on ouvrira tsconfig.msc, puis les propriétés du serveur. Cette fenêtre s’ouvre :

Il est important que le Security Layer soit basculé sur RDP Security Layer et non TLS 1.0, faute de quoi la connexion sera impossible.