Added RDS

This commit is contained in:
2025-10-31 18:33:09 +01:00
parent 498c28890d
commit be897bb63b
10 changed files with 172 additions and 69 deletions

146
README.md
View File

@@ -1,91 +1,101 @@
# TP Active Directory & Audit — EntrepriseXYZ
Ce dépôt contient des scripts PowerShell pour répondre aux exercices suivants :
1. audit_system — collecte d'informations système
2. ad_admin — création d'OU, utilisateurs, groupes et partages avec permissions NTFS
3. dns_config — configuration DNS
4. dhcp_config — configuration DHCP
## Objectif
Ce dépôt contient des scripts PowerShell permettant d'automatiser la mise en place et la gestion d'une infrastructure Active Directory minimale, la configuration DNS et DHCP, ainsi que la collecte d'informations système (audit). Les exercices proviennent des documents de cours et couvrent :
- Audit système (génération d'un rapport)
- Création d'OU, d'utilisateurs, de groupes et de partages avec permissions NTFS
- Configuration DNS (zone, enregistrement A, redirecteurs)
- Configuration DHCP (étendue, options, réservation)
## Prérequis
- Exécuter les scripts en tant qu'administrateur (PowerShell élevé).
- Pour `ad_admin.ps1` : exécuter sur un contrôleur de domaine ou sur une machine avec les outils RSAT/ActiveDirectory et connectée au domaine `entreprisexyz.local`.
- Module ActiveDirectory installé (Import-Module ActiveDirectory).
- Politique d'exécution adaptée (ex. `Set-ExecutionPolicy -Scope Process -ExecutionPolicy Unrestricted`).
## Emplacement des scripts
- scripts/audit_system.ps1
- scripts/ad_admin.ps1
- scripts/dns_config.ps1
- scripts/dhcp_config.ps1
- Système : Windows Server (contrôleur de domaine pour certains scripts) ou machine ayant les outils RSAT adéquats
- PowerShell en mode administrateur
- Modules Windows nécessaires : ActiveDirectory, DnsServer, DHCPServer.
- Politique d'exécution adaptée si nécessaire (ex. `Set-ExecutionPolicy -Scope Process -ExecutionPolicy Unrestricted`)
## Exercice 1 — Audit système (scripts/audit_system.ps1)
## Installation
But : scripts/audit_system.ps1
- Collecte d'informations système.
1. Cloner ou copier ce dépôt sur la machine cible (idéalement le contrôleur de domaine pour `ad_admin.ps1`, le serveur DNS pour `dns_config.ps1`, et le serveur DHCP pour `dhcp_config.ps1`).
2. Vérifier la présence des modules et privilèges administratifs.
Utilisation :
- Ouvrir PowerShell en mode administrateur, se placer dans le dossier du projet puis lancer :
.\scripts\audit_system.ps1
Fichiers principaux (liens relatifs) :
Sortie :
- Génère le rapport : scripts/exports/system_info.txt
- scripts/audit_system.ps1 — collecte d'information système et export dans `exports/system_info.txt`
- scripts/ad_admin.ps1 — crée OU, utilisateurs, groupes, partages (C:\Shares\...)
- scripts/dns_config.ps1 — crée la zone DNS `entreprisexyz.local`, ajoute `srv-dc1` A record et configure forwarders
- scripts/dhcp_config.ps1 — installe/active le rôle DHCP, crée l'étendue `LAN_EntrepriseXYZ` et ajoute une réservation
- scripts/rds_config.ps1 — configure les services RDS
## Exercice 2 — Active Directory & partages (scripts/ad_admin.ps1)
## Manipulation
But : scripts/ad_admin.ps1
- Crée les OU, groupes et utilisateurs de base.
- Crée des dossiers partagés et applique des permissions NTFS.
Exemples d'utilisation (ouvrir PowerShell en tant qu'administrateur) :
Utilisation :
- Ouvrir PowerShell en mode administrateur (et connecté au domaine), se placer dans le dossier du projet puis lancer :
.\scripts\ad_admin.ps1
1) Générer le rapport système :
Actions réalisées :
- Création des OU : Direction, RH, Informatique
- Création des groupes : GRP_Direction, GRP_RH, GRP_Informatique
- Création dutilisateurs par défaut et assignation aux groupes
- Création de dossiers partagés sous C:\Shares\<OU> et application des permissions NTFS
- Le script affiche en console les comptes créés et les mots de passe générés pour les nouveaux utilisateurs.
```powershell
cd \path\to\repository
.\scripts\audit_system.ps1
```
## Exercice 3 — DNS (dns_config.ps1)
Le rapport est écrit vers : `scripts/exports/system_info.txt`.
But: scripts/dns_config.ps1
- Crée la zone DNS `entreprisexyz.local` si elle n'existe pas.
- Ajoute un enregistrement A pour `srv-dc1` -> `192.168.147.10`.
- Configure des DNS resolveurs (`8.8.8.8`, `8.8.4.4`).
2) Déployer l'annuaire de base, groupes et partages :
Utilisation :
- Ouvrir PowerShell en administrateur et lancer :
.\scripts\dns_config.ps1
```powershell
cd \path\to\repository
.\scripts\ad_admin.ps1
```
Questions :
- Quelle est la différence entre un enregistrement A et un CNAME ?
- Quelle commande permet de vérifier la liste des zones DNS existantes ?
- Pourquoi utiliser un redirecteur dans un DNS dentreprise ?
Le script crée 3 OU (Direction, RH, Informatique), 3 groupes (GRP_Direction, GRP_RH, GRP_Informatique) et 3 utilisateurs de démonstration puis les ajoute aux groupes.
Reponse aux questions :
1. Un enregistrement A mappe un nom de domaine à une adresse IPv4, tandis qu'un CNAME (Canonical Name) crée un alias pour un autre nom de domaine.
2. La commande `Get-DnsServerZone` permet de vérifier la liste des zones DNS existantes.
3. Un redirecteur dans un DNS d'entreprise est utilisé pour interroger d'autres serveurs DNS pour des zones qui ne sont pas gérées localement, ce qui permet de résoudre des noms de domaine externes.
1) Configurer le DNS :
## Exercice 4 — DHCP (dhcp_config.ps1)
```powershell
cd \path\to\repository
.\scripts\dns_config.ps1
```
But: scripts/dhcp_config.ps1
- Installe le rôle DHCP si nécessaire.
- Crée l'étendue `LAN_EntrepriseXYZ` (192.168.147.200 - 192.168.147.220).
- Configure les options : DNS `192.168.147.10`, passerelle `192.168.147.1`, domaine `entreprisexyz.local`.
- Ajoute une réservation pour le poste administratif.
Le script crée la zone `entreprisexyz.local`, ajoute un enregistrement A pour `srv-dc1` -> `192.168.147.10` et configure les forwarders `8.8.8.8, 8.8.4.4`.
Utilisation :
- Ouvrir PowerShell en administrateur et lancer :
.\scripts\dhcp_config.ps1
4) Configurer le DHCP :
Questions :
- Quelle est la différence entre une adresse IP dynamique et une réservation DHCP ?
- Que se passe-t-il si deux serveurs DHCP répondent sur le même réseau ?
- Quelle commande PowerShell permet de visualiser les baux DHCP actifs ?
```powershell
cd \path\to\repository
.\scripts\dhcp_config.ps1
```
Le script installe le rôle DHCP (si nécessaire), crée l'étendue `LAN_EntrepriseXYZ` (192.168.147.200-192.168.147.220), configure les options (DNS, passerelle, domaine) et ajoute une réservation pour le poste administratif.
5) Configurer les services RDS :
```powershell
cd \path\to\repository
.\scripts\rds_config.ps1
```
Le script installe et configure les services RDS (Hôte de session, Broker, Web Access).
## Résultats
Les scripts produisent les sorties et rapports suivants :
- `scripts/exports/system_info.txt` — rapport système (exemple inclus dans le dépôt)
- Partages créés sous C:\Shares\Direction, C:\Shares\RH, C:\Shares\Informatique (créés par `ad_admin.ps1`)
- Zone DNS `entreprisexyz.local` et enregistrement A `srv-dc1` -> `192.168.147.10` (créés par `dns_config.ps1`)
- Étendue DHCP `LAN_EntrepriseXYZ` avec plage 192.168.147.200-220 et réservation administrative (créés par `dhcp_config.ps1`)
Captures d'écran
Placez les captures d'écran PNG dans `docs/screenshots/` puis ajoutez-les ici si vous souhaitez détailler les étapes. Exemples de captures incluses dans le rendu original (voir images fournies dans l'archive) :
- docs/screenshots/audit_system.png — exécution de `audit_system.ps1`
- docs/screenshots/ad_admin.png — sortie création partages et erreurs corrigées
- docs/screenshots/dhcp_config.png — création étendue DHCP et réservation
- docs/screenshots/dns_config.png — création zone DNS et enregistrement A
- docs/screenshots/rds_config.png — configuration services RDS
## Analyse
Reponse aux questions :
1. Une adresse IP dynamique est attribuée automatiquement par le serveur DHCP à un client, tandis qu'une réservation DHCP garantit qu'un client spécifique reçoit toujours la même adresse IP.
2. Si deux serveurs DHCP répondent sur le même réseau, cela peut entraîner des conflits d'adresses IP et des problèmes de connectivité pour les clients.
3. La commande `Get-DhcpServerv4Lease` permet de visualiser les baux DHCP actifs.

View File

Before

Width:  |  Height:  |  Size: 222 KiB

After

Width:  |  Height:  |  Size: 222 KiB

View File

Before

Width:  |  Height:  |  Size: 170 KiB

After

Width:  |  Height:  |  Size: 170 KiB

View File

Before

Width:  |  Height:  |  Size: 231 KiB

After

Width:  |  Height:  |  Size: 231 KiB

View File

Before

Width:  |  Height:  |  Size: 174 KiB

After

Width:  |  Height:  |  Size: 174 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 KiB

BIN
docs/screenshots/webrd.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 510 KiB

View File

@@ -15,7 +15,7 @@ $ResName = 'Admin-PC'
$ResIP = '192.168.147.201'
$ResMac = '00-11-22-33-44-55'
# Install DHCP Role if not present
$dhcpFeature = Get-WindowsFeature -Name 'DHCP'
if (-not $dhcpFeature.Installed) {
Write-Host "Installation du rôle DHCP..."

93
scripts/rds_config.ps1 Normal file
View File

@@ -0,0 +1,93 @@
if (-not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
Write-Error "Exécutez ce script en tant qu'administrateur."
exit 1
}
# Exercice 1 : Installation des rôles RDS
Write-Output "Installation des rôles RDS..."
$features = @('RDS-RD-Server', 'RDS-Web-Access', 'RDS-Connection-Broker')
foreach ($f in $features) {
Write-Output "Installation Feature: $f"
try {
Install-WindowsFeature -Name $f -IncludeManagementTools -ErrorAction Stop | Out-Null
Write-Output "Feature $f installée."
}
catch {
Write-Warning "Impossible d'installer $f : $_"
}
}
$BrokerFQDN = "srv2.chromatic.moe"
$WebFQDN = "srv2.chromatic.moe"
$SessionHostFQDN = "srv2.chromatic.moe"
$CollectionName = "Collection_Bureau"
$UserGroup = "CHROMATIC\Domain Users"
$CertDnsName = $WebFQDN
$RemoteApps = @(
@{Alias = 'notepad'; DisplayName = 'Bloc-notes'; FilePath = 'C:\Windows\System32\notepad.exe' },
@{Alias = 'calc'; DisplayName = 'Calculatrice'; FilePath = 'C:\Windows\System32\calc.exe' }
)
Import-Module RemoteDesktop
# Exercice 2 : Création du déploiement RDS
try {
Write-Output "Création du déploiement RDS via New-RDSessionDeployment..."
New-RDSessionDeployment -ConnectionBroker $BrokerFQDN -WebAccessServer $WebFQDN -SessionHost $SessionHostFQDN -Verbose -ErrorAction Stop
Add-RDServer -Role RDS-RD-SERVER -Server $SessionHostFQDN -ConnectionBroker $BrokerFQDN -ErrorAction Stop
Write-Output "Déploiement RDS créé."
}
catch {
Write-Warning "New-RDSessionDeployment a échoué ou a été déjà exécuté : $_"
}
# Exercice 3 : Création de la collection de sessions
try {
Write-Output "Création de la collection '$CollectionName'..."
New-RDSessionCollection -CollectionName $CollectionName -SessionHost @($SessionHostFQDN) -ConnectionBroker $BrokerFQDN -CollectionDescription "Collection pour les bureaux utilisateurs" -ErrorAction Stop
Write-Output "Collection '$CollectionName' créée."
Set-RDSessionCollectionConfiguration -CollectionName $CollectionName -UserGroup $UserGroup -ConnectionBroker $BrokerFQDN -ErrorAction Stop
Write-Output "Groupe d'utilisateurs '$UserGroup' assigné à la collection '$CollectionName'."
}
catch {
Write-Warning "New-RDSessionCollection a échoué (peut-être déjà existante) : $_"
}
# Exercice 4 : Publication des RemoteApps
Write-Output "Publication des RemoteApps dans la collection '$CollectionName'..."
foreach ($app in $RemoteApps) {
try {
Write-Output "Publication RemoteApp: $($app.DisplayName) ($($app.FilePath))"
New-RDRemoteApp -CollectionName $CollectionName -DisplayName $app.DisplayName -FilePath $app.FilePath -Alias $app.Alias -ConnectionBroker $BrokerFQDN -ErrorAction Stop
Write-Output "RemoteApp '$($app.DisplayName)' publiée."
}
catch {
Write-Warning "Impossible de publier '$($app.DisplayName)' : $_"
}
}
# Exercice 5 : Création et association d'un certificat SSL auto-signé
try {
Write-Output "Création certificat auto-signé pour $CertDnsName..."
$cert = New-SelfSignedCertificate -DnsName $CertDnsName -CertStoreLocation Cert:\LocalMachine\My -NotAfter (Get-Date).AddYears(5)
Write-Output "Certificat créé : Thumbprint = $($cert.Thumbprint)"
Write-Output "Application du certificat aux rôles RDS (RDWeb, RDGateway si présent)..."
try {
Set-RDCertificate -Role RDWebAccess -Thumbprint $cert.Thumbprint -Force -ErrorAction Stop
Set-RDCertificate -Role RDGateway -Thumbprint $cert.Thumbprint -Force -ErrorAction Stop
Write-Output "Certificat appliqué au rôle RDWebAccess."
}
catch {
Write-Warning "Set-RDCertificate - RDWebAccess a échoué : $_"
}
}
catch {
Write-Warning "Erreur lors de la création/association du certificat : $_"
}
# Exercice 6 : Résumé des éléments déployés
Write-Output "`nRésumé des éléments déployés :"
try { Get-RDSessionCollection -ConnectionBroker $BrokerFQDN | Select-Object CollectionName, Description | Format-Table -AutoSize } catch {}
try { Get-RDRemoteApp -CollectionName $CollectionName -ConnectionBroker $BrokerFQDN | Select-Object Alias, DisplayName, FilePath | Format-Table -AutoSize } catch {}
try { Get-ChildItem Cert:\LocalMachine\My | Where-Object { $_.Subject -like "*$CertDnsName*" } | Select-Object Thumbprint, Subject, NotAfter | Format-Table -AutoSize } catch {}