Functioneel niveau van Samba Active Directory domein vehogen
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]
vansmb.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.