Archives de février, 2018

 

Suite à la réalisation de plusieurs audits Azure chez différents clients grand comptes (Banques, Assurances, …etc), j’ai pu constaté que la plupart de leurs DC (Domain Controllers AD) hébergés dans le Cloud Azure (sous forme de VM Azure : mode Infra-as-aService), n’ont pas été Setupés, configurés et protégés correctement.

Plusieurs « Best Practices » relatives à l’exécution des Domain Controllers sur Azure (VM) sont souvent « oubliés » et rarement pris en considération lors de la phase « Build/Implementation ».

Si vous avez décidé d’étendre votre infrastructure AD vers Azure, je vous invite à prendre connaissance des items détaillés ci-dessous avant de vous lancer dans la création/build de VMs DCs.

Note : Le terme « Étendre » ici fait référence à un nouveau site distant (Site Active Directory) qui sera simplement le VNET/Subnet Azure et non pas la synchronisation d’annuaires : AD to AAD (Azure AD).

 

Liste des « Best Practices » que vous devez connaître avant de déployer vos DCs sur Azure (VM)
  • #1 : Tout d’abord, bien lire le guide « Guidelines for Deploying Windows Server Active Directory on Azure Virtual Machines » proposé par MS. Ce document vous détaille et explique bien la différence entre le déploiement d’infrastructure AD OnPrem (Infra AD traditionnelle) et le déploiement des Contrôleurs de domaine sur Azure (sur VM, connectées à des VNET/Réseaux Virtuels Azure). Je vous invite à prendre le temps de lire et comprendre tous les items détaillés dans cet article.
  • #2 : Déployez au moins deux Contrôleurs de domaine AD (2 VMs Azure)
  • #3 : Créez un Groupe à Haute Disponibilité (Availability Set) et placez-y vos Contrôleurs de domaine (au moins 2 DCs) : consulter cet article pour en savoir plus.
  • #4 : Déployez des Contrôleurs de domaine en mode « Core » plutôt qu’en mode GUI (Graphical User Interface)
    • HK Recommendation : pensez à déployer des DCs en mode Core avec un full remote management (via RSAT depuis un Bastion Environnement). Si vous déployez encore des DC sous Windows Server 2012 ou 2012 R2, vous pouvez déployer des DCs en mode MSI (Core + Minimal Server Interface > All GUI Tools)
      • Note : je vous invite à consulter cet article pour en savoir plus sur les différents modes : GUI | MSI | Core
  • #5 : Déployez des RODC (Read-Only Domain Controller) plutôt que des WDC (Writable Domain Controller)
    • Note importante : avant de déployer des RODC, vérifiez que vous Applications (à intégrer dans l’AD) supportent bien ce type de DC. Si vos Apps ont besoin d’écrire dans la base AD, déployez plutôt des WDC. Je vous invite à consulter cet article si vous avez besoin de tester la comptabilité de vos applications avec le RODC.
  • #6 : Ensuite, (TRES, TRES IMPORTANT), configurez des @IP Statiques sur vos DCs, cela doit se faire via le Portail Azure, PowerShell ou Azure CLI (depuis les Propriétés de la NIC de la VM DC) et non pas via les propriétés TCP/IP v4 de la Guest NIC :
    • Tips : vous pouvez configurer l’adresse IP (Statique) sur vos DCs via :
      • Le Portail Azure : consulter cet article pour en savoir plus.
      • Windows PowerShell [Module PS Azure] : consulter cet article pour en savoir plus.
      • Azure CLI [commande az vm]: consulter cet article pour en savoir plus.
  • #7 : Créer/Utiliser un Compte de Stockage Azure dédié pour stocker les vDisks (VHD) des Domain Controllers
  • #8 : En plus du vDisk OS créé/attaché à la VM automatiquement lors de sa création/provisioning, il est important de créer/attacher un nouveau vDisk à la VM DC (Data Disk) pour y stocker/placer la base de données AD, Fichiers Logs,SYSVOL 
  • #9 NE JAMAIS configurer de « Host Cache Prerence », lors de l’ajout du nouveau vDisk DATA (Disque de données pour AD Database, Logs & SySVOL), choisissez « None » comme valeur.
  • #10 : Utiliser les fonctionnalités RBAC (Role-Based Access Control /Contrôle d’accès en fonction du rôle) pour limiter/contrôler QUI doit ACCEDER/GERER le compte de Stockage and les clés d’accès
  • #11 : Activer le chiffrement de disque Azure (Azure Disk Encryption) avec une clé de chiffrement (KEK : Key Encryption key) pour les disques systèmes (OS vDisk) mais aussi les disques de données (Data vDisk). Azure Key Vault sera utilisé pour stocker les clés, il doit être déployé/hébergé dans la même Région & Abonnement Azure
  • #12 : Même chose pour Le coffre Key Vault, pensez à définir/implémenter une stratégie RBAC pour limiter l’accès au Key Vault stockant vos clés.
  • #13 : A l’aide d’un NSG (Network Security Group), créez et configurer des règles pour :
    • Autoriser que le traffic « Entrant » requis (Ports requis) pour les Domain Controllers
    • Refuser tout autre traffic
  • #14 : Implémentez des règles AppLocker pour autoriser que les .EXE, scripts… requis/utilisés par les DCs
  • #15 : NE JAMAIS créer/définir une @IP public pour les VMs faisant office de Domain Controllers.
  • #16 : Et bien évidemment, ne jamais activer le RDP (Remote Desktop Protocol) sur les DCs, pour réduire la surface d’attaque, et puis, on est d’accord, ce sont des DCs et non pas des serveurs RDS ou Citrix XA :).
  • #17 : Déployer et configurer l’agent Antimalware (en suivant votre standard OnPrem)
  • #18 : Déployer et configurer l’agent de monitoring (en suivant votre standard OnPrem)
  • #19 : Si votre architecture réseau le permet, implémentez une IPSec Policy pour sécuriser les communications entre vos DCs OnPrem et ceux sur Azure.
  • #20 : Privilégiez l’utilisation de vos Images Master :  l’utilisation des Images Windows Server (2008 R2 > 2019) proposées à travers le Marketplace à Azure est à éviter. Il faut toujours recommander au client d’utiliser ses propres Images Master (DC pour le coup). Un guide complet est proposé sur le services Docs de Microsoft, expliquant commencer prépaprer et envoyer son Master (VHD file) sur Azure et déployer des VM Azure à partir de celui-ci.
  • #21 : Et enfin, veillez à bien documenter toutes les options/fonctionnalités de sécurité implémentées, ainsi que toute modification apportée, cela vous permettra d’identifier les effets de bord/impacts post-implémentation d’une ou plusieurs Security Features spécifiques. e.g : mauvaise implémentation d’IPSec peut avoir un impact sur toute la communication inter-site (deny any<>any by default).

A bientôt, Keep in touch :).

#HK | Another IT Guy

 

Certains clients disposant d’une zone démilitarisée (ou DMZ pour Demilitarized Zone) et désirant déployer une infrastructure RDS avec une ou plusieurs Passerelles RDS (RDG : Remote Desktop Gateway) et serveurs RDWA (Remote Desktop Web Access) se posent souvent la question suivante :

Quels sont les (ports) requis à ouvrir pour permettre à tous les services de rôles RDS de communiquer correctement ?

Cette communication concerne principalement les serveurs RDG et RDWA placés en DMZ avec les autres services de rôles RDS en back-end, placés généralement sur le réseau interne de l’entreprise et se trouvant derrière un ou plusieurs Firewalls, notamment les serveurs Hôtes de Session (RDSH : Remote Desktop Session Host) et serveurs Broker (RDCB : Remote Desktop Connection Broker).

Vu que le serveur de Passerelle RDS doit être membre du domaine AD (Workgroup non supporté !), les flux avec les Contrôleurs de domaine AD (DC : Domain Controllers) sont nécessaires, et ce pour authentifier les utilisateurs distants (externes) et les autoriser à accéder aux ressources RDS internes.

Dans ce type d’architecture (scénario de déploiement), plusieurs ports sont à ouvrir pour permettre à la Passerelle RDS de remplir les fonctions suivantes:

  • Authentifier les utilisateurs distants/externes RDS
  • Autoriser les utilisateurs distants/externes RDS à accéder aux ressources internes publiées
  • Résoudre les noms DNS des ressources RDS internes
  • Forwarder (au Broker) les packets RDP envoyés par les clients distants.
  • Obtenir la liste des Révocations de Certificats SSL
  • Envoyer des requêtes RADIOS (si vous déployez un serveur NPS central)

 

Pour simplifier la compréhension de la matrice de flux « global », j’ai décidé de créer deux catégories de Flux, à savoir :

Flux entre « External Network » et la Passerelle RDS placée en DMZ : config au niveau du Firewall Externe

Flux entre la « Passerelle RDS » et les ressources internes (RDSH, RDCB, DC…) : config au niveau du Firewall Interne

Le diagramme Visio ci-dessous représente une architecture RDS classique avec RDG/RDWA en DMZ et le reste des services de rôles en interne

Flux entre « External Network » et la Passerelle RDS placée en DMZ : Pare-feu Externe

Déployer une Passerelle RDS vous évite d’exposer directement vos ressources RDS à Internet et les protéger contre plusieurs types attaques informatique (e.g DoS/DDoS Attack !).

La Passerelle RDS a besoin du serveur Web IIS (Internet Information Services) pour fonctionner.

Le WebSite RDG hébergé sur IIS nécessite une liaison « HTTPS », par conséquent le port de communication (d’écoute) utilisé par la RDG est le 443.

Vous aurez compris, pour autoriser le trafic HTTPS entrant et permettre une communication entre les clients externes et la Passerelle RDS placée en DMZ (derrière un Firewall Externe/Public), la règle suivant doit être créée/configurée :

Nom de la règle : External_to_RDG (nom de règle donné à titre d’exemple)

Port : 443/TCP

Protocol : HTTPS

Source : Internet

Destination : @IP de la Passerelle RDS placée en DMZ

 

Flux entre la « Passerelle RDS » placée en DMZ et les ressources internes (RDSH,RDCB,DC…) : Pare-feu Interne

Le Pare-feu Interne doit être configuré pour autoriser plusieurs types de communications (trafics) entre le ou les serveurs RDG placés en DMZ et vos ressources internes tels que les Domain Controller (pour authentification/autorisation), Serveurs Broker (redirection aux ressources RDS), Serveurs RDSH (accès aux ressources publiées).

Trafic lié à l’authentification  & autorisation via la Passerelle RDS
#Kerberos

La règle à mettre en place pour autoriser le trafic (Kerberos) entre la Passerelle RDS placée en DMZ et le(s) Contrôleur(s) de domaine interne afin d’authentifier les utilisateurs distants est la suivante :

Nom de la règle : RDG_to_InternalDC (nom de règle donné à titre d’exemple)

Port : 88/TCP

Protocol : Kerberos

Source :@IP de la Passerelle RDS placée en DMZ

Destination : @IP du(es) DCs 

 

#Service RPC NT Directory Service (NTDS) 

Le serveur RDG a également besoin de communiquer avec le service RPC NTDS (NT Directory Services) lié à l’AD, ce dernier écoute généralement sur un numéro de port non utilisé et pris d’une plage de ports haute. Le serveur RDG n’ayant pas la capacité de connaitre ce numéro de port (dynamic port) utilisé par le service RPC NTDS, il contacte le Mappeur de point de terminaison RPC (RPC Endpoint Mapper) en utilisant le port 135, l’Endpoint Mapper indique ensuite au serveur RDG le port d’écoute pour le service demandé qu’est le RPC NTDS. Comme indiqué précédemment, ces numéros de ports sont attribués de manière dynamique (généralement compris entre 1024 et 65 535), notez qu’à l’aide d’une clé de Registre, vous pouvez configurer un port « Statique » pour le RPC NTDS si nécessaire. Je vous laisse consultez cet article pour en savoir plus.

Nom de la règle : RDG_to_RPCMapper (nom de règle donné à titre d’exemple)

Port : 135/TCP + Port d’écoute configuré pour le service RPC NTDS

Protocol :RPC Endpoint Mapper + RPC NTDS

Source :@IP de la Passerelle RDS placée en DMZ

Destination : @IP du(es) DCs 

 

#LDAP

La règle à mettre en place pour autoriser le trafic (LDAP) entre la Passerelle RDS placée en DMZ et le(s) Contrôleur(s) de domaine interne afin d’autoriser les utilisateurs distants est la suivante :

Nom de la règle : RDG_to_InternalDC (nom de règle donné à titre d’exemple)

Port : 389/TCP et 389/UDP

Protocol : LDAP

Source :@IP de la Passerelle RDS placée en DMZ

Destination : @IP du(es) DCs 

 

#DNS

La règle à mettre en place pour autoriser le trafic DNS entre la Passerelle RDS placée en DMZ et le(s) Contrôleur(s) de domaine interne et permettre la résoudre des noms DNS des ressources internes :

Nom de la règle : RDG_to_DNS (nom de règle donné à titre d’exemple)

Port : 53/TCP et 53/UDP

Protocol : DNS

Source :@IP de la Passerelle RDS placée en DMZ

Destination : @IP du(es) DCs_ou un des serveurs DNS du réseau

 

#RDP

La règle à mettre en place pour autoriser le trafic RDP entre la Passerelle RDS placée en DMZ et les serveurs RDS internes pour forwarder les packets RDP reçus par les clients distants :

Nom de la règle : RDG_to_RDSHCB (nom de règle donné à titre d’exemple)

Port : 3389/TCP

Protocol : RDP

Source :@IP de la Passerelle RDS placée en DMZ

Destination : @IP des serveurs RDSH ainsi que RDCB

 

Note importante : si le port RDP par défaut, a été personnalisé/changé sur le déploiement RDS (e.g 33381 au lieu de 3389), le port 33381 doit être spécifié dans la règle ci-dessus.

Trafic entre le serveur RD Web Access et les serveurs RDSH internes

Si vous avez décidé de placer votre ou vos serveurs RD Web Access en DMZ (chose que je vous recommande d’ailleurs :)), notez qu’un seul flux est à ouvrir :

Nom de la règle : RDWA_to_RDCB (nom de règle donné à titre d’exemple)

Port : 5504/TCP

Protocol : RPC

Source :@IP du ou des serveurs RDWA placés en DMZ

Destination : @IP du(es) serveurs RDCB

 

J’espère que cet article pourra vous être utile lors du Design de votre infra RDS et/ou rédaction de votre document d’architecture technique/DAT/TAD (RDS Network Considerations Section).

Notez que des ports supplémentaires peuvent être requis si vous disposez d’une plateforme RADIUS, ou utilisez par exemple des solutions « Third-party » pour l’authentification/autorisation (dans ce cas, referez-vous à la documentation technique fournie par l’éditeur de solution pour en savoir plus).

Keep in touch,

A bientôt

#HK