Klik hier voor informatie over de wijziging in de levering van diensten en ondersteuning.

Functioneel niveau van Samba Active Directory domein vehogen

Samba_AD_DC

Als je liever geen Microsoft Windows Active Directory Domain Controller (AD DC) gebruikt, dan is Samba als Active Directory Domain Controller een uitkomst. In mijn thuisnetwerk draait Samba uitstekend als AD DC, inclusief betrouwbare SYSVOL-replicatie via Unison.

In dit artikel laat ik zien hoe ik het functioneel niveau van mijn Samba-domein heb verhoogd van Windows 2008 R2 naar Windows 2016. Ik leg de concrete stappen uit en laat ook zien waar je tegenaan kunt lopen als je een stap overslaat. Mijn uitleg is gebaseerd op de originele documentatie.

Waarom het functioneel niveau verhogen?

Het verhogen van het domein- en forest niveau brengt moderne functionaliteiten met zich mee, zoals:

  • Betere compatibiliteit met nieuwe Windows-versies
  • Ondersteuning voor Group Managed Service Accounts (vanaf Samba 4.20 client-side)
  • Verbeteringen in de beveiliging en authenticatie (zie configuratievoorbeeld inclusief toelichting onderaan dit artikel!)
  • Mogelijkheid om verouderde protocollen uit te schakelen, zoals SMB1 en SMB2 (bijvoorbeeld met server min protocol = SMB3 in [global] van smb.conf).

Voor mij was dit vooral een stap richting toekomstbestendigheid. Ik wil profiteren van de verbeteringen in Samba 4.20 en later, en op korte termijn experimenteren met Single Sign-On (SSO) voor Microsoft 365-gebruikers.

Het verhogen van het domain- en forest-functional level naar 2016 is in mijn geval hoger dan strikt noodzakelijk, maar het biedt extra mogelijkheden, betere ondersteuning voor toekomstige uitbreidingen, en het geeft me bovendien een mooie aanleiding om de beveiliging van mijn omgeving te versterken.

Voorwaarden en gebruikte software

  • Samba versie: 4.22.1-Debian-4.22.1+dfsg-1
  • Alle Domain Controllers moeten minimaal Samba 4.20 draaien
  • SYSVOL-replicatie wordt verzorgd via Unison

Beginstatus controleren

samba-tool domain level show

Uitvoer:

Forest function level: (Windows) 2008 R2
Domain function level: (Windows) 2008 R2
Lowest function level of a DC: (Windows) 2008 R2

Als je dan probeert het niveau te verhogen:

samba-tool domain level raise --domain-level=2016

Krijg je de foutmelding:

ERROR: Domain function level can't be higher than the lowest function level of a DC!

Oplossing: pas smb.conf aan

Je moet op alle Domain Controllers het volgende toevoegen aan /etc/samba/smb.conf:

[global]
...
ad dc functional level = 2016

Na het aanpassen herstart je de services op elke DC:

systemctl restart smbd
systemctl restart nmbd
systemctl restart samba-ad-dc

Controleer opnieuw

samba-tool domain level show

Je ziet nu bijvoorbeeld:

Lowest function level of a DC: (Windows) 2016

Domain level verhogen

samba-tool domain level raise --domain-level=2016
Domain function level changed!
All changes applied successfully!

Herstart de services opnieuw

Op alle DC's:

systemctl restart samba-ad-dc

Forest level verhogen

samba-tool domain level raise --forest-level=2016
Forest function level changed!
All changes applied successfully!

Nogmaals, herstart de services:

systemctl restart samba-ad-dc

Eindresultaat

samba-tool domain level show
Forest function level: (Windows) 2016
Domain function level: (Windows) 2016
Lowest function level of a DC: (Windows) 2016

Mijn domein draait nu op het hoogste door Samba ondersteunde niveau!


Zoals je ziet is dit proces vrij eenvoudig als je de volgorde van stappen aanhoudt en op alle DC's dezelfde configuratie toepast. Op deze manier draai ik met een modern, betrouwbaar en volledig op Linux-gebaseerd AD-netwerk zonder dat daar Windows-servers aan te pas komen.


Configuratievoorbeelden

Hieronder geef ik de configuraties van mijn beide domeincontrollers weer. De originele domeinnaam heb ik aangepast naar lan.example.com, omdat ik deze niet openbaar wil delen.

File op sdc1: /etc/krb5.conf

[libdefaults]
    default_realm = LAN.EXAMPLE.COM
    dns_lookup_realm = false
    dns_lookup_kdc = true
    rdns = false
    ticket_lifetime = 3h
    renew_lifetime = 9h
   #forwardable = true
    forwardable = false

[realms]
    LAN.EXAMPLE.COM = {
        kdc = sdc01.lan.example.com
        admin_server = sdc01.lan.example.com
    }

[domain_realm]
    .lan.example.com = LAN.EXAMPLE.COM
    lan.example.com = LAN.EXAMPLE.COM
    sdc01.lan.example.com = LAN.EXAMPLE.COM

File op sdc2: /etc/krb5.conf

 [libdefaults]
    default_realm = LAN.EXAMPLE.COM
    dns_lookup_realm = false
    dns_lookup_kdc = true
    rdns = false
    ticket_lifetime = 3h
    renew_lifetime = 9h
   #forwardable = true
    forwardable = false

[realms]
    LAN.EXAMPLE.COM = {
        kdc = sdc01.lan.example.com
        admin_server = sdc01.lan.example.com
    }

[domain_realm]
    .lan.example.com = LAN.EXAMPLE.COM
    lan.example.com = LAN.EXAMPLE.COM
    sdc02.lan.example.com = LAN.EXAMPLE.COM

Toelichting krb.conf

De configuratie is vrijwel identiek op beide domeincontrollers en bepaalt het gedrag van het Kerberos-authenticatiemechanisme binnen het domein.

Beveiligings- en configuratieoverwegingen worden hieronder weergegeven.

  • ticket_lifetime = 3h
    Hiermee wordt de maximale levensduur van een Kerberos-ticket beperkt tot drie uur. Dit verkleint het risico dat een gecompromitteerd ticket langdurig toegang verschaft tot netwerkresources.
  • renew_lifetime = 9h
    Tickets kunnen maximaal 9 uur worden vernieuwd zonder dat gebruikers opnieuw moeten inloggen. Dit biedt een goede balans tussen veiligheid en gebruikersgemak.
  • forwardable = false
    Forwardable tickets maken het mogelijk om het ticket door te geven aan andere systemen, wat noodzakelijk is voor toepassingen zoals Single Sign-On (SSO) of het uitvoeren van opdrachten via ssh -K. In deze configuratie staat deze optie bewust uitgeschakeld, wat veiliger is zolang SSO niet wordt gebruikt. Zodra SSO of andere ticket-doorgeefmechanismen gewenst zijn, moet deze optie op true worden gezet.
  • dns_lookup_realm = false, dns_lookup_kdc = true
    De realm (domeinnaam in hoofdletters) wordt niet automatisch uit DNS gehaald; dit voorkomt verwarring of misconfiguraties bij niet-standaard DNS-structuren. De KDC (Key Distribution Center) mag wel via DNS worden opgezocht, zodat wijzigingen aan KDC-hostnamen automatisch worden opgepakt zonder handmatige aanpassing van deze configuratie.
  • rdns = false
    Reverse DNS-lookups worden uitgeschakeld om vertragingen of foutieve resoluties te vermijden tijdens authenticatie.
  • [realms] en [domain_realm] secties
    Deze mappen hostnamen en domeinnamen correct naar de Kerberos realm.

File op sdc01 en sdc02: /etc/samba/smb.conf

#Global parameters
[global]
    dns forwarder = 172.16.16.254
    netbios name = SDC01
    realm = LAN.EXAMPLE.COM
    server role = active directory domain controller
    workgroup = LAN
    idmap_ldb:use rfc2307 = yes
        dsdb:schema update allowed
        ad dc functional level = 2016

        ntlm auth = disabled
        lanman auth = no
        client lanman auth = no
        client ntlmv2 auth = yes

        server min protocol = SMB3
        client min protocol = SMB3
        client max protocol = SMB3

        log level = auth:2

[sysvol]
    path = /var/lib/samba/sysvol
    read only = No

[netlogon]
    path = /var/lib/samba/sysvol/lan.example.com/scripts
    read only = No

Toelichting smb.conf

Deze configuratie is identiek op beide domeincontrollers (sdc01 en sdc02) en is gericht op veiligheid, compatibiliteit met moderne clients, en het vermijden van verouderde of kwetsbare protocollen.
Belangrijke beveiligingsaspecten geef ik hieronder weer.

  • ntlm auth = disabled, lanman auth = no, client lanman auth = no
    Deze instellingen schakelen verouderde en onveilige authenticatieprotocollen zoals NTLMv1 en LANMAN uit. Alleen NTLMv2 is toegestaan voor clients die dat ondersteunen (client ntlmv2 auth = yes), al is het gebruik van Kerberos aanbevolen. Dit vermindert het risico op credential replay en brute-force aanvallen.
  • server min protocol = SMB3, client min protocol = SMB3, client max protocol = SMB3
    Hiermee wordt alle communicatie via het SMB-protocol beperkt tot versie 3. SMB1 en SMB2 zijn uitgesloten, wat bescherming biedt tegen bekende aanvallen zoals EternalBlue. SMB3 biedt ondersteuning voor encryptie en betere integriteit.
  • log level = auth:2
    Deze instelling verhoogt de logging voor authenticatie zonder het hele systeem te overspoelen met informatie. Dit maakt het makkelijker om inbraken of mislukte inlogpogingen te detecteren.
  • dsdb:schema update allowed
    Dit is nodig voor het bijwerken van het Active Directory-schema, bijvoorbeeld bij updates of bij het toevoegen van bepaalde applicaties. Gebruik dit alleen wanneer nodig en met passende toegangscontrole.
  • idmap_ldb:use rfc2307 = yes
    Maakt het mogelijk om POSIX-attributen te gebruiken in AD, wat handig en veiliger is bij integratie met Unix-achtige systemen.

Previous Post