Skip to content

Active Directory PowerShell

Administration Active Directory via PowerShell.

AD Replication Topology


Prรฉrequis

# Importer le module AD
Import-Module ActiveDirectory

# Vรฉrifier la connexion au domaine
Get-ADDomain

# Si RSAT non installรฉ (Windows 10/11)
Add-WindowsCapability -Online -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0

Gestion des Utilisateurs (CRUD)

Crรฉer un Utilisateur

# Crรฉation basique
New-ADUser -Name "Jean Dupont" -SamAccountName "jdupont" -Enabled $true

# Crรฉation complรจte et sรฉcurisรฉe
$password = Read-Host -AsSecureString "Enter password"
New-ADUser `
    -Name "Jean Dupont" `
    -GivenName "Jean" `
    -Surname "Dupont" `
    -SamAccountName "jdupont" `
    -UserPrincipalName "jdupont@corp.local" `
    -Path "OU=Users,OU=Paris,DC=corp,DC=local" `
    -AccountPassword $password `
    -Enabled $true `
    -ChangePasswordAtLogon $true `
    -Department "IT" `
    -Title "SysAdmin"

# Crรฉation en masse depuis CSV
Import-Csv users.csv | ForEach-Object {
    New-ADUser `
        -Name "$($_.Prenom) $($_.Nom)" `
        -SamAccountName $_.Login `
        -UserPrincipalName "$($_.Login)@corp.local" `
        -Path "OU=Users,DC=corp,DC=local" `
        -AccountPassword (ConvertTo-SecureString $_.Password -AsPlainText -Force) `
        -Enabled $true
}

Modifier un Utilisateur

# Modifier des attributs
Set-ADUser -Identity jdupont -Department "Security" -Title "Security Engineer"

# Modifier plusieurs attributs
Set-ADUser -Identity jdupont -Replace @{
    telephoneNumber = "+33 1 23 45 67 89"
    physicalDeliveryOfficeName = "Paris - Floor 3"
}

# Dรฉsactiver un compte
Disable-ADAccount -Identity jdupont

# Activer un compte
Enable-ADAccount -Identity jdupont

# Rรฉinitialiser le mot de passe
Set-ADAccountPassword -Identity jdupont -Reset -NewPassword (Read-Host -AsSecureString "New password")

# Forcer le changement de mot de passe ร  la prochaine connexion
Set-ADUser -Identity jdupont -ChangePasswordAtLogon $true

Rechercher des Utilisateurs

# Tous les utilisateurs (ATTENTION : performance !)
Get-ADUser -Filter *

# Filtrer cรดtรฉ serveur (RECOMMANDร‰)
Get-ADUser -Filter 'Department -eq "IT"'
Get-ADUser -Filter 'Name -like "Jean*"'
Get-ADUser -Filter 'Enabled -eq $false'

# Avec propriรฉtรฉs supplรฉmentaires
Get-ADUser -Identity jdupont -Properties *
Get-ADUser -Filter * -Properties Department, Title, LastLogonDate |
    Select-Object Name, Department, Title, LastLogonDate

# Recherche dans une OU spรฉcifique
Get-ADUser -Filter * -SearchBase "OU=Paris,DC=corp,DC=local"

# Utilisateurs crรฉรฉs cette semaine
$date = (Get-Date).AddDays(-7)
Get-ADUser -Filter 'Created -gt $date' -Properties Created |
    Select-Object Name, Created

Performance : Filtrer cรดtรฉ serveur

# MAUVAIS (charge tous les users puis filtre)
Get-ADUser -Filter * | Where-Object { $_.Department -eq "IT" }

# BON (filtre cรดtรฉ AD)
Get-ADUser -Filter 'Department -eq "IT"'

Dรฉbloquer un Compte

# Dรฉbloquer
Unlock-ADAccount -Identity jdupont

# Vรฉrifier si verrouillรฉ
Get-ADUser -Identity jdupont -Properties LockedOut | Select-Object Name, LockedOut

# Trouver tous les comptes verrouillรฉs
Search-ADAccount -LockedOut | Select-Object Name, SamAccountName

Gestion des Groupes

Crรฉer et Gรฉrer des Groupes

# Crรฉer un groupe
New-ADGroup -Name "IT-Admins" -GroupScope Global -GroupCategory Security `
    -Path "OU=Groups,DC=corp,DC=local"

# Types de groupes
# -GroupScope : DomainLocal, Global, Universal
# -GroupCategory : Security, Distribution

Ajouter / Retirer des Membres

# Ajouter un membre
Add-ADGroupMember -Identity "IT-Admins" -Members jdupont

# Ajouter plusieurs membres
Add-ADGroupMember -Identity "IT-Admins" -Members jdupont, mmartin, pdurand

# Retirer un membre
Remove-ADGroupMember -Identity "IT-Admins" -Members jdupont -Confirm:$false

Lister les Membres

# Membres directs
Get-ADGroupMember -Identity "IT-Admins"

# Membres rรฉcursifs (inclut les groupes imbriquรฉs)
Get-ADGroupMember -Identity "IT-Admins" -Recursive |
    Select-Object Name, SamAccountName, objectClass

# Compter les membres
(Get-ADGroupMember -Identity "IT-Admins" -Recursive).Count

Groupes d'un Utilisateur

# Groupes directs d'un utilisateur
Get-ADPrincipalGroupMembership -Identity jdupont |
    Select-Object Name

# Avec le DN complet
Get-ADUser -Identity jdupont -Properties MemberOf |
    Select-Object -ExpandProperty MemberOf

Audit & Sรฉcuritรฉ AD

Comptes Inactifs (Stale Accounts)

# Comptes non connectรฉs depuis 90 jours
$90days = (Get-Date).AddDays(-90)
Get-ADUser -Filter 'LastLogonDate -lt $90days' -Properties LastLogonDate |
    Select-Object Name, SamAccountName, LastLogonDate, Enabled |
    Sort-Object LastLogonDate

# Utiliser Search-ADAccount (plus prรฉcis)
Search-ADAccount -AccountInactive -TimeSpan 90.00:00:00 -UsersOnly |
    Select-Object Name, SamAccountName, LastLogonDate

# Comptes jamais connectรฉs
Search-ADAccount -AccountInactive -UsersOnly |
    Where-Object { $_.LastLogonDate -eq $null } |
    Select-Object Name, SamAccountName, Created

Mots de Passe Expirรฉs / Problรจmes

# Comptes avec mot de passe expirรฉ
Search-ADAccount -PasswordExpired |
    Select-Object Name, SamAccountName, PasswordExpired

# Comptes avec mot de passe qui n'expire jamais (RISQUE)
Get-ADUser -Filter 'PasswordNeverExpires -eq $true' -Properties PasswordNeverExpires |
    Select-Object Name, SamAccountName

# Comptes sans mot de passe requis (CRITIQUE)
Get-ADUser -Filter 'PasswordNotRequired -eq $true' -Properties PasswordNotRequired |
    Select-Object Name, SamAccountName

Audit des Privilรจges (Domain Admins)

# Membres du groupe Domain Admins
Get-ADGroupMember -Identity "Domain Admins" -Recursive |
    Select-Object Name, SamAccountName, objectClass

# Membres du groupe Enterprise Admins
Get-ADGroupMember -Identity "Enterprise Admins" -Recursive |
    Select-Object Name, SamAccountName

# Membres du groupe Administrators
Get-ADGroupMember -Identity "Administrators" -Recursive |
    Select-Object Name, SamAccountName

# Audit complet des groupes privilรฉgiรฉs
$privilegedGroups = @("Domain Admins", "Enterprise Admins", "Schema Admins", "Administrators")
foreach ($group in $privilegedGroups) {
    Write-Host "=== $group ===" -ForegroundColor Yellow
    Get-ADGroupMember -Identity $group -Recursive |
        Select-Object Name, SamAccountName
}

Rapport d'Audit Complet

# Export des comptes ร  risque
$report = @()

# Comptes inactifs
$report += Search-ADAccount -AccountInactive -TimeSpan 90.00:00:00 -UsersOnly |
    Select-Object Name, SamAccountName, @{N='Issue';E={'Inactive 90+ days'}}

# Mots de passe expirรฉs
$report += Search-ADAccount -PasswordExpired |
    Select-Object Name, SamAccountName, @{N='Issue';E={'Password Expired'}}

# Password Never Expires
$report += Get-ADUser -Filter 'PasswordNeverExpires -eq $true' |
    Select-Object Name, SamAccountName, @{N='Issue';E={'Password Never Expires'}}

# Export CSV
$report | Export-Csv -Path "AD_Audit_Report.csv" -NoTypeInformation

FSMO & Santรฉ Domaine

Rรดles FSMO

# Voir tous les rรดles FSMO du domaine
Get-ADDomain | Select-Object InfrastructureMaster, RIDMaster, PDCEmulator

# Voir les rรดles FSMO de la forรชt
Get-ADForest | Select-Object DomainNamingMaster, SchemaMaster

# Commande complรจte
netdom query fsmo
Rรดle Portรฉe Description
Schema Master Forรชt Modifications du schรฉma AD
Domain Naming Master Forรชt Ajout/suppression de domaines
RID Master Domaine Attribution des RID (SID)
PDC Emulator Domaine Auth, GPO, temps
Infrastructure Master Domaine Rรฉfรฉrences inter-domaines

Vรฉrifier la Rรฉplication

# ร‰tat de la rรฉplication
Get-ADReplicationPartnerMetadata -Target "dc01.corp.local" |
    Select-Object Partner, LastReplicationSuccess, LastReplicationResult

# Tous les DCs
Get-ADDomainController -Filter * |
    ForEach-Object {
        Get-ADReplicationPartnerMetadata -Target $_.HostName
    } | Select-Object Server, Partner, LastReplicationSuccess

# ร‰checs de rรฉplication
Get-ADReplicationFailure -Target "dc01.corp.local"

# Outil classique (CMD)
repadmin /replsummary
repadmin /showrepl

Santรฉ des Domain Controllers

# Lister les DCs
Get-ADDomainController -Filter * |
    Select-Object Name, IPv4Address, Site, IsGlobalCatalog, OperatingSystem

# Vรฉrifier les services AD
Get-Service -ComputerName dc01 -Name NTDS, DNS, Netlogon, W32Time |
    Select-Object Name, Status

# Test de connectivitรฉ DC
Test-ComputerSecureChannel -Server dc01.corp.local

Architecture d'Entreprise Sรฉcurisรฉe (Tiering Model)

Concept : Sรฉparation des Domaines Administration vs Utilisateurs

Modรจle de sรฉparation en deux domaines pour respecter le principe de moindre privilรจge :

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                  ARCHITECTURE CLASSIQUE (RISQUร‰E)            โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                              โ”‚
โ”‚  Un seul domaine : corp.internal                            โ”‚
โ”‚                                                              โ”‚
โ”‚  โœ— Admins et utilisateurs dans le mรชme domaine              โ”‚
โ”‚  โœ— Un utilisateur compromis peut voir les admins            โ”‚
โ”‚  โœ— Pass-the-Hash peut cibler les comptes admin              โ”‚
โ”‚  โœ— GPO peuvent รชtre modifiรฉes par des comptes non-admin     โ”‚
โ”‚                                                              โ”‚
โ”‚  Risque : ร‰lรฉvation de privilรจges triviale                  โ”‚
โ”‚                                                              โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                  ARCHITECTURE Sร‰CURISร‰E (TIERING)            โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                              โ”‚
โ”‚  Deux domaines sรฉparรฉs :                                    โ”‚
โ”‚                                                              โ”‚
โ”‚  1. admin.corp.internal  (Domaine d'Administration)         โ”‚
โ”‚     - Comptes privilรฉgiรฉs uniquement                        โ”‚
โ”‚     - PAW (Privileged Access Workstation) uniquement        โ”‚
โ”‚     - Isolation rรฉseau stricte (VLAN dรฉdiรฉ)                 โ”‚
โ”‚                                                              โ”‚
โ”‚  2. users.corp.internal  (Domaine Utilisateurs)             โ”‚
โ”‚     - Comptes utilisateurs standards                        โ”‚
โ”‚     - Postes de travail standards                           โ”‚
โ”‚     - Serveurs d'application                                โ”‚
โ”‚                                                              โ”‚
โ”‚  Trust Unidirectionnel : admin โ†’ users                      โ”‚
โ”‚  (Admin peut gรฉrer User, User ne voit pas Admin)            โ”‚
โ”‚                                                              โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Bรฉnรฉfices : - โœ… Isolation des privilรจges : Un compte utilisateur compromis ne peut pas voir les comptes admin - โœ… Limitation du Pass-the-Hash : Les hash des comptes admin ne sont pas prรฉsents sur les postes utilisateurs - โœ… Segmentation rรฉseau : VLAN sรฉparรฉs pour admin et users - โœ… Conformitรฉ SecNumCloud : Sรฉparation des environnements d'administration

Trust Unidirectionnel (Admin Trust User)

Configuration du Trust :

# Sur le domaine ADMIN (admin.corp.internal)

# Crรฉer le trust unidirectionnel
# admin.corp.internal fait confiance ร  users.corp.internal (incoming trust)
# users.corp.internal NE fait PAS confiance ร  admin.corp.internal

# Crรฉer le trust (exรฉcutรฉ depuis admin.corp.internal)
New-ADTrust -Name users.corp.internal `
    -Type Forest `
    -Direction OneWay `
    -RemoteDomainName users.corp.internal `
    -TrustPassword (Read-Host -AsSecureString "Enter trust password")

# Vรฉrifier le trust
Get-ADTrust -Filter * | Select-Object Name, Direction, TrustType

# Output attendu :
# Name                  Direction    TrustType
# ----                  ---------    ---------
# users.corp.internal   OneWay       Forest

Commandes netdom (alternative) :

REM Sur le domaine ADMIN (srv-dc-admin-01.admin.corp.internal)

REM Crรฉer le trust unidirectionnel
netdom trust admin.corp.internal /domain:users.corp.internal /add /oneway:trustING

REM Explication :
REM - admin.corp.internal = Domaine qui REร‡OIT la confiance (trusting domain)
REM - users.corp.internal = Domaine qui ACCORDE la confiance (trusted domain)
REM - /oneway:trustING = admin fait confiance ร  users (unidirectionnel)

REM Vรฉrifier le trust
netdom trust admin.corp.internal /domain:users.corp.internal /verify

REM Output attendu :
REM The trust relationship between admin.corp.internal and users.corp.internal was successfully verified.

Tester le Trust :

# Depuis admin.corp.internal, rechercher un utilisateur de users.corp.internal
Get-ADUser -Identity "jdupont" -Server "users.corp.internal"

# Ajouter un utilisateur de users.corp.internal ร  un groupe de admin.corp.internal
Add-ADGroupMember -Identity "MyCorp-Admins" `
    -Members "USERS\jdupont" `
    -Server "admin.corp.internal"

# โœ“ Fonctionne : admin peut gรฉrer users

# ========================================

# Depuis users.corp.internal, rechercher un utilisateur de admin.corp.internal
Get-ADUser -Identity "admin_jdupont" -Server "admin.corp.internal"

# โœ— ร‰CHOUE : users ne peut PAS voir admin (trust unidirectionnel)
# Output : Get-ADUser : Cannot find an object with identity: 'admin_jdupont'

Matrice de Confiance :

Action admin.corp.internal โ†’ users.corp.internal users.corp.internal โ†’ admin.corp.internal
Voir les utilisateurs โœ… Oui โŒ Non (trust unidirectionnel)
Authentifier les utilisateurs โœ… Oui โŒ Non
Appliquer des GPO โœ… Oui (cross-domain) โŒ Non
Dรฉlรฉguer des permissions โœ… Oui โŒ Non

Flux Rรฉseau Requis pour Active Directory

Matrix des Flux (Anonymisรฉe) :

Source Destination Port Protocole Service Description
Client DC 53 TCP/UDP DNS Rรฉsolution de noms
Client DC 88 TCP/UDP Kerberos Authentification
Client DC 135 TCP RPC Endpoint Mapper Communication RPC
Client DC 137 UDP NetBIOS Name Service Rรฉsolution NetBIOS (legacy)
Client DC 138 UDP NetBIOS Datagram Communication NetBIOS (legacy)
Client DC 139 TCP NetBIOS Session Session NetBIOS (legacy)
Client DC 389 TCP/UDP LDAP Requรชtes AD
Client DC 445 TCP SMB/CIFS Partages rรฉseau, SYSVOL, NETLOGON
Client DC 636 TCP LDAPS LDAP sรฉcurisรฉ (SSL/TLS)
Client DC 3268 TCP Global Catalog Recherche AD inter-domaines
Client DC 3269 TCP Global Catalog SSL GC sรฉcurisรฉ (SSL/TLS)
Client DC 49152-65535 TCP RPC Dynamic Ports รฉphรฉmรจres RPC
DC DC 53 TCP/UDP DNS Rรฉplication zones DNS
DC DC 135 TCP RPC Rรฉplication AD
DC DC 389 TCP LDAP Rรฉplication AD
DC DC 445 TCP SMB Rรฉplication SYSVOL (DFS-R)
DC DC 3268 TCP Global Catalog Rรฉplication GC

Flux Simplifiรฉs (Production) :

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                  VLAN ADMIN (10.10.1.0/24)                   โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                              โ”‚
โ”‚  srv-dc-admin-01 (10.10.1.10)  โ†โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                  โ”‚
โ”‚  srv-dc-admin-02 (10.10.1.11)            โ”‚                  โ”‚
โ”‚                                           โ”‚                  โ”‚
โ”‚  paw-admin-01 (10.10.1.100)  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                 โ”‚
โ”‚                                                              โ”‚
โ”‚  Flux autorisรฉs :                                           โ”‚
โ”‚  - PAW โ†’ DC : 53, 88, 135, 389, 445, 636, 3268             โ”‚
โ”‚  - DC โ†” DC : 53, 135, 389, 445, 3268 (rรฉplication)         โ”‚
โ”‚                                                              โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

                         โ†“ Trust Unidirectionnel
                         โ†“ (admin โ†’ users)

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                  VLAN USERS (10.20.1.0/24)                   โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                              โ”‚
โ”‚  srv-dc-users-01 (10.20.1.10)                               โ”‚
โ”‚  srv-dc-users-02 (10.20.1.11)                               โ”‚
โ”‚                                                              โ”‚
โ”‚  pc-user-01 (10.20.1.100)                                   โ”‚
โ”‚  pc-user-02 (10.20.1.101)                                   โ”‚
โ”‚                                                              โ”‚
โ”‚  Flux autorisรฉs :                                           โ”‚
โ”‚  - PC โ†’ DC : 53, 88, 389, 445, 636                         โ”‚
โ”‚  - DC โ†” DC : 53, 135, 389, 445, 3268 (rรฉplication)         โ”‚
โ”‚  - DC โ†’ DC Admin : 88, 389, 636, 3268 (trust)              โ”‚
โ”‚                                                              โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Rรจgles Firewall (Windows Defender Firewall) :

# Sur les DCs du domaine ADMIN

# Autoriser les flux depuis les PAW uniquement (VLAN Admin)
New-NetFirewallRule -DisplayName "AD-LDAP-PAW" `
    -Direction Inbound `
    -Protocol TCP `
    -LocalPort 389, 636, 3268, 3269 `
    -RemoteAddress 10.10.1.0/24 `
    -Action Allow

New-NetFirewallRule -DisplayName "AD-Kerberos-PAW" `
    -Direction Inbound `
    -Protocol TCP, UDP `
    -LocalPort 88 `
    -RemoteAddress 10.10.1.0/24 `
    -Action Allow

New-NetFirewallRule -DisplayName "AD-DNS-PAW" `
    -Direction Inbound `
    -Protocol TCP, UDP `
    -LocalPort 53 `
    -RemoteAddress 10.10.1.0/24 `
    -Action Allow

# Autoriser les flux de rรฉplication entre DCs Admin
New-NetFirewallRule -DisplayName "AD-Replication-DCs" `
    -Direction Inbound `
    -Protocol TCP `
    -LocalPort 135, 389, 445, 3268 `
    -RemoteAddress 10.10.1.10, 10.10.1.11 `
    -Action Allow

# Bloquer tout le reste
New-NetFirewallRule -DisplayName "AD-Block-Default" `
    -Direction Inbound `
    -Protocol Any `
    -Action Block `
    -Priority 1000

Ports ร‰phรฉmรจres RPC (49152-65535)

Ne PAS ouvrir toute la plage 49152-65535 sur le firewall !

Solution : Fixer les ports RPC dynamiques ร  une plage restreinte (ex: 50000-50100).

# Fixer la plage RPC (sur les DCs)
netsh int ipv4 set dynamicport tcp start=50000 num=100
netsh int ipv4 set dynamicport udp start=50000 num=100

# Puis ouvrir uniquement 50000-50100 sur le firewall
New-NetFirewallRule -DisplayName "AD-RPC-Dynamic" `
    -Direction Inbound `
    -Protocol TCP `
    -LocalPort 50000-50100 `
    -RemoteAddress 10.10.1.0/24 `
    -Action Allow

GPO Cross-Domain (Appliquer des GPO depuis Admin vers Users)

Scรฉnario : Appliquer une GPO de sรฉcuritรฉ depuis le domaine admin.corp.internal vers les utilisateurs de users.corp.internal.

Prรฉrequis : - Trust unidirectionnel configurรฉ (admin โ†’ users) - Permissions dรฉlรฉguรฉes sur l'OU cible dans users.corp.internal

ร‰tape 1 : Crรฉer la GPO dans le domaine Admin

# Connexion au domaine ADMIN
$adminDomain = "admin.corp.internal"

# Crรฉer la GPO dans le domaine Admin
New-GPO -Name "Security-Baseline-CrossDomain" -Domain $adminDomain

# Configurer la GPO (exemple : dรฉsactiver SMBv1)
Set-GPRegistryValue -Name "Security-Baseline-CrossDomain" `
    -Domain $adminDomain `
    -Key "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" `
    -ValueName "SMB1" `
    -Type DWord `
    -Value 0

# Configurer l'audit des processus (Event ID 4688)
Set-GPRegistryValue -Name "Security-Baseline-CrossDomain" `
    -Domain $adminDomain `
    -Key "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\Audit" `
    -ValueName "ProcessCreationIncludeCmdLine_Enabled" `
    -Type DWord `
    -Value 1

ร‰tape 2 : Lier la GPO ร  une OU du domaine Users

# Connexion au domaine USERS
$usersDomain = "users.corp.internal"
$targetOU = "OU=Workstations,DC=users,DC=corp,DC=internal"

# Lier la GPO (cross-domain)
New-GPLink -Name "Security-Baseline-CrossDomain" `
    -Domain $adminDomain `
    -Target $targetOU `
    -LinkEnabled Yes `
    -Enforced Yes

# Vรฉrifier le lien
Get-GPInheritance -Target $targetOU | Select-Object -ExpandProperty GpoLinks

# Output attendu :
# DisplayName                        Enabled  Enforced  Order
# -----------                        -------  --------  -----
# Security-Baseline-CrossDomain      Yes      Yes       1

ร‰tape 3 : Dรฉlรฉguer les Permissions (si nรฉcessaire)

Si la liaison รฉchoue avec "Access Denied", dรฉlรฉguer les permissions sur l'OU cible :

# Sur le domaine USERS (srv-dc-users-01)

# Importer le module
Import-Module ActiveDirectory

# Dรฉlรฉguer "Apply Group Policy" au groupe admin du domaine Admin
$targetOU = "OU=Workstations,DC=users,DC=corp,DC=internal"
$adminGroup = "ADMIN\MyCorp-GPO-Admins"

# Obtenir l'ACL actuelle
$acl = Get-Acl -Path "AD:\$targetOU"

# Crรฉer la rรจgle ACE (Apply Group Policy)
$identity = New-Object System.Security.Principal.NTAccount($adminGroup)
$inheritanceType = [System.DirectoryServices.ActiveDirectorySecurityInheritance]::All
$accessRule = New-Object System.DirectoryServices.ActiveDirectoryAccessRule(
    $identity,
    [System.DirectoryServices.ActiveDirectoryRights]::GenericRead,
    [System.Security.AccessControl.AccessControlType]::Allow,
    $inheritanceType
)

# Appliquer la rรจgle
$acl.AddAccessRule($accessRule)
Set-Acl -Path "AD:\$targetOU" -AclObject $acl

ร‰tape 4 : Forcer l'Application de la GPO

# Sur un poste du domaine USERS (pc-user-01.users.corp.internal)

# Forcer la mise ร  jour GPO
gpupdate /force

# Vรฉrifier les GPO appliquรฉes
gpresult /r /scope:computer

# Output attendu :
# Applied Group Policy Objects
# -----------------------------
#     Security-Baseline-CrossDomain
#     Default Domain Policy

Vรฉrification avec RSOP (Resultant Set of Policy) :

# Gรฉnรฉrer un rapport HTML des GPO appliquรฉes
gpresult /h C:\Temp\gporesult.html

# Ouvrir le rapport et vรฉrifier que "Security-Baseline-CrossDomain" apparaรฎt
# dans la section "Computer Configuration"

Schรฉma de l'Architecture Cross-Domain GPO :

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚          DOMAINE ADMIN (admin.corp.internal)                 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                              โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”            โ”‚
โ”‚  โ”‚ GPO: Security-Baseline-CrossDomain          โ”‚            โ”‚
โ”‚  โ”‚ - Dรฉsactiver SMBv1                          โ”‚            โ”‚
โ”‚  โ”‚ - Audit Process Creation (4688)             โ”‚            โ”‚
โ”‚  โ”‚ - Forcer AES-256 Kerberos                   โ”‚            โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜            โ”‚
โ”‚                         โ”‚                                    โ”‚
โ”‚                         โ”‚ Link (GPO Link)                    โ”‚
โ”‚                         โ†“                                    โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                          โ”‚
                          โ”‚ Trust Unidirectionnel
                          โ”‚ (admin โ†’ users)
                          โ†“
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚          DOMAINE USERS (users.corp.internal)                 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                         โ†“                                    โ”‚
โ”‚  OU=Workstations  โ† GPO appliquรฉe ici                       โ”‚
โ”‚     โ”œโ”€โ”€ pc-user-01                                           โ”‚
โ”‚     โ”œโ”€โ”€ pc-user-02                                           โ”‚
โ”‚     โ””โ”€โ”€ pc-user-03                                           โ”‚
โ”‚                                                              โ”‚
โ”‚  Rรฉsultat : Les postes reรงoivent la GPO du domaine Admin    โ”‚
โ”‚             (politique de sรฉcuritรฉ centralisรฉe)              โ”‚
โ”‚                                                              โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Cas d'Usage Production :

GPO Domaine Source Domaine Cible Objectif
Security-Baseline admin.corp.internal users.corp.internal Hardening (SMBv1, TLS, Audit)
Password-Policy admin.corp.internal users.corp.internal Complexitรฉ mots de passe
Firewall-Rules admin.corp.internal users.corp.internal Rรจgles Windows Defender
Antivirus-Config admin.corp.internal users.corp.internal Configuration Defender ATP

Surveillance des GPO Cross-Domain :

# Lister toutes les GPO liรฉes ร  une OU (incluant cross-domain)
Get-GPInheritance -Target "OU=Workstations,DC=users,DC=corp,DC=internal" |
    Select-Object -ExpandProperty GpoLinks |
    Select-Object DisplayName, Enabled, Enforced, @{N='Domain';E={
        (Get-GPO -Name $_.DisplayName).DomainName
    }}

# Output :
# DisplayName                        Enabled  Enforced  Domain
# -----------                        -------  --------  ------
# Security-Baseline-CrossDomain      True     True      admin.corp.internal
# Default Domain Policy              True     False     users.corp.internal

Rรฉfรฉrence Rapide

# === MODULE ===
Import-Module ActiveDirectory

# === USERS ===
Get-ADUser -Identity jdupont -Properties *
Get-ADUser -Filter 'Department -eq "IT"'
New-ADUser -Name "User" -SamAccountName "user" -Enabled $true
Set-ADUser -Identity jdupont -Department "Security"
Unlock-ADAccount -Identity jdupont

# === GROUPS ===
Get-ADGroupMember -Identity "IT-Admins" -Recursive
Add-ADGroupMember -Identity "IT-Admins" -Members jdupont
Get-ADPrincipalGroupMembership -Identity jdupont

# === AUDIT ===
Search-ADAccount -AccountInactive -TimeSpan 90.00:00:00
Search-ADAccount -PasswordExpired
Search-ADAccount -LockedOut
Get-ADGroupMember -Identity "Domain Admins" -Recursive

# === FSMO & REPLICATION ===
Get-ADDomain | Select-Object PDCEmulator, RIDMaster, InfrastructureMaster
Get-ADReplicationPartnerMetadata -Target dc01
repadmin /replsummary

Voir aussi