26. juni 2026 9 min lesetid

Totemomail-lisensgrense nådd: Rydd opp i foreldreløse brukere via LDAP

Deaktiverte AD-kontoer blir værende i totemomail og opptar fortsatt lisenser. Med verifisert LDAPS-tilgang og Cleanup Agent blir Active Directory den autoritative kilden.

Meldingen «The licensed user limit has been reached» betyr ikke at e-postflyten stopper umiddelbart. Den indikerer underlisensiering. I miljøer som har vært i drift lenge, skyldes dette som regel ikke plutselig vekst, men tidligere ansatte: AD-kontoen ble deaktivert, den interne brukeren i totemomail ble værende og opptar fortsatt en lisens.

Den varige løsningen er regelmessig LDAP-synkronisering med Active Directory. De følgende trinnene setter opp tilkoblingen og Cleanup Agent og kontrollerer hele kjeden før første kjøring i produksjon. Vertsnavn, DN-er og tjenestekontoer med example.com er plassholdere og må tilpasses eget miljø.

Hvilke brukere opptar en lisens

Totemomail skiller mellom to brukerklasser. Bare interne brukere teller mot lisensgrensen.

BrukertypeBeskrivelseLisensrelevant
Internal UsersBrukere i egen organisasjon som sender og mottar kryptertJa
External UsersEksterne kommunikasjonspartnere (WebMail, PDF, S/MIME, PGP)Nei

En intern bruker opprettes så snart vedkommende kommuniserer via gatewayen for første gang. Dette skjer automatisk. Fjerning skjer derimot ikke automatisk: Når en medarbeider forlater organisasjonen, deaktiverer dere vanligvis AD-kontoen. Totemomail-oppføringen blir imidlertid værende. Over tid samler det seg dermed opp foreldreløse kontoer som fortsatt opptar lisenser.

Statusvisning

Du finner gjeldende status under Settings → Overview → User Information.

Available Users er *-17*. De 4017 interne brukerne har færre lisensierte plasser tilgjengelig enn dette.

De viktige linjene:

  • Internal users (4017): opprettede interne brukere

  • Internal blocked users (14): blokkerte, men fortsatt lisensrelevante

  • Available Users (-17): tilgjengelige lisenser; en negativ verdi betyr underlisensiering

Så snart Available Users faller under null, vises advarselen ved bjellen:

«The licensed user limit has been reached.» E-postflyten fortsetter, men meldingen forblir synlig permanent.

Viktig: Underlisensieringen blokkerer ikke e-postflyten. Dette er en lisensmessig tilstand, ikke en teknisk. Du har derfor tid til å finne en ryddig løsning, men bør ikke ignorere tilstanden permanent.

Fra umiddelbart tiltak til varig løsning

Manuell sletting

Du kan søke etter og slette interne brukere enkeltvis under Internal Users. Dette løser den akutte situasjonen, men problemet kommer tilbake etter noen måneder. Med flere tusen kontoer er dette ikke praktisk.

LDAP-tilkobling med Cleanup Agent

Den bærekraftige løsningen er å koble til Active Directory via LDAP. En agent sammenligner interne brukere regelmessig med katalogen og fjerner eller deaktiverer kontoer som ikke lenger finnes i AD. Dermed blir AD den autoritative kilden, og offboarding-prosessen i AD tar samtidig hånd om lisenshygienen.

Grunnleggende om LDAP

BegrepBetydning
DN (Distinguished Name)Entydig sti til et objekt, f.eks. CN=John Doe,OU=Users,DC=corp,DC=example,DC=com
Base DN / Search BaseSøkerot, f.eks. DC=corp,DC=example,DC=com
Bind DNKontoen totemomail bruker for å autentisere seg mot AD
FilterLDAP-søkeuttrykk, f.eks. (&(objectClass=user)(sAMAccountName=jdoe))

Porter

PortProtokollBruk
389LDAPukryptert / STARTTLS
636LDAPSLDAP over TLS
3268Global Catalogsøk i hele forestet, ukryptert
3269Global Catalog SSLsøk i hele forestet over TLS

I et miljø med ett domene holder det med port 636 mot en Domain Controller. Kjører du et forest med flere domener, er det bare Global Catalog (port 3269) som gir resultater for hele forestet. En DC på port 636 kjenner bare objektene i sitt eget domene og svarer på søk utenfor sin partisjon med en referral (en detalj som ofte overses i miljøer med flere domener).

userAccountControl

Om en AD-konto er deaktivert, står i bitfeltet userAccountControl. Flagget ACCOUNTDISABLE har verdien 2. Med LDAP-matching-regelen 1.2.840.113556.1.4.803 (LDAP_MATCHING_RULE_BIT_AND) evaluerer du enkeltbiter:

# Aktive Benutzer
(&(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))

# Deaktivierte Benutzer
(&(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=2))

Trinn 1: Tjenestekonto i AD

Opprett en dedikert konto med kun lesetilgang for tilkoblingen. Ikke bruk en administratorkonto til dette. Bind-brukeren trenger bare å kunne lese AD.

New-ADUser -Name "svc-totemomail-ldap" `
  -SamAccountName "svc-totemomail-ldap" `
  -UserPrincipalName "svc-totemomail-ldap@corp.example.com" `
  -Path "OU=Service Accounts,DC=corp,DC=example,DC=com" `
  -AccountPassword (Read-Host -AsSecureString "Passwort") `
  -PasswordNeverExpires $true `
  -Enabled $true
Forklaring av alternativer
AlternativVirkning
-NameVisningsnavn og CN for den nye kontoen
-SamAccountNamePåloggingsnavn (påloggingsnavn før Windows 2000)
-UserPrincipalNameUPN i formatet benutzer@domäne
-PathMål-OU som Distinguished Name
-AccountPasswordPassord som SecureString; Read-Host -AsSecureString ber om det skjult i konsollen
-PasswordNeverExpires $truePassordet utløper ikke
-Enabled $trueOppretter kontoen direkte aktivert (standard er deaktivert)

En vanlig domenebruker kan allerede lese AD, så kontoen trenger ingen ekstra rettigheter. For passordet anbefales en lang, tilfeldig verdi som lagres i passordhvelvet ditt.

Hvis sikkerhetspolicyen din legger opp til det, kan du også bruke en gMSA (Group Managed Service Account). Totemomail forventer imidlertid Bind DN og passord, så i praksis brukes oftest en klassisk tjenestekonto med PasswordNeverExpires.

Trinn 2: Kontroller LDAP-tilkoblingen på kommandolinjen

Før du konfigurerer noe i totemomail, bør du verifisere LDAP-tilkoblingen på kommandolinjen. Dette er trinnet de fleste hopper over. Fungerer ldapsearch, fungerer også tilkoblingen i totemomail. Mislykkes testen, vet du i det minste hvor det feiler, i stedet for å gjette i totemomail-GUI-et.

2.1 Portkontroll

Under Linux, for eksempel fra totemomail-appliancen:

nc -vz dc01.corp.example.com 636
nmap -p 389,636,3268,3269 dc01.corp.example.com
Forklaring av alternativer
AlternativVirkning
nc -vDetaljert utdata: melder om tilkoblingsforsøket lykkes eller mislykkes
nc -zKontroller bare tilkoblingsopprettelsen, uten å sende data
dc01.corp.example.com 636Målvert og målport for kontrollen
nmap -p 389,636,3268,3269Liste over TCP-porter som skal kontrolleres
dc01.corp.example.comMålvert for portskanningen

Under Windows med PowerShell:

Test-NetConnection -ComputerName dc01.corp.example.com -Port 636
Forklaring av alternativer
AlternativVirkning
-ComputerNameMålvert for tilkoblingskontrollen
-PortTCP-porten som skal kontrolleres, her 636 for LDAPS

Hvis det ikke opprettes noen forbindelse her, har du et brannmur- eller rutingproblem, ikke et LDAP-problem.

2.2 Kontroller TLS-sertifikatet

I praksis feiler LDAPS oftest på sertifikatet. Se derfor på hva DC-en leverer:

openssl s_client -connect dc01.corp.example.com:636 -showcerts </dev/null
Forklaring av alternativer
AlternativVirkning
s_clientTLS-testklient fra OpenSSL: oppretter tilkoblingen og viser handshake-detaljer
-connect dc01.corp.example.com:636Målvert og port for TLS-handshake
-showcertsViser hele sertifikatkjeden levert av serveren, ikke bare serversertifikatet
</dev/nullLukker standard inndata slik at s_client avsluttes etter handshake i stedet for å vente på inndata

Vær oppmerksom på to ting:

  • **subject=** / **issuer=**: Vertsnavnet i sertifikatet (CN eller SAN) må samsvare med vertsnavnet du kobler deg til via. Kobler du til via IP-adressen, vil kontrollen feile dersom sertifikatet bare inneholder FQDN-en.

  • **Verify return code: 0 (ok)**: Den utstedende CA-en må være kjent for totemomail. Ved en intern Enterprise CA må du importere dens rot- eller utstedersertifikat i totemomail-truststore.

2.3 Bind og søk med ldapsearch

ldapsearch hører til ldap-utils (Debian/Ubuntu) eller openldap-clients (RHEL):

ldapsearch -x \
  -H ldaps://dc01.corp.example.com:636 \
  -D "CN=svc-totemomail-ldap,OU=Service Accounts,DC=corp,DC=example,DC=com" \
  -W \
  -b "DC=corp,DC=example,DC=com" \
  "(&(objectClass=user)(sAMAccountName=jdoe))" \
  dn sAMAccountName mail userAccountControl
Forklaring av alternativer
FlaggBetydning
-xEnkel autentisering (Bind DN og passord)
-HLDAP-URI inkludert skjema (ldaps://) og port
-DBind DN
-WBe om passord interaktivt
-bSearch Base
deretterFilter, etterfulgt av attributtene som skal returneres

Hvis spørringen returnerer objektet med attributtene, er tilkoblingen på plass. Du kan finne ut hvor mange kontoer i AD som er deaktivert, med bitfilteret:

ldapsearch -x -H ldaps://dc01.corp.example.com:636 \
  -D "CN=svc-totemomail-ldap,OU=Service Accounts,DC=corp,DC=example,DC=com" -W \
  -b "DC=corp,DC=example,DC=com" \
  "(&(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=2))" \
  sAMAccountName | grep -c sAMAccountName
Forklaring av alternativer
AlternativVirkning
-x, -H, -D, -W, -bsom i spørringen ovenfor: enkel bind via LDAPS med Search Base
sAMAccountNameeneste etterspurte attributt; begrenser utdata til én attributtlinje per treff
grep -c sAMAccountNameteller linjene med dette attributtet og dermed de funne kontoene

2.4 Verktøy under Windows

**ldp.exe** er Microsofts grafiske LDAP-verktøy, tilgjengelig på alle DC-er og som del av RSAT. Du kobler til via Connection → Connect (vert, port 636, aktiver SSL), autentiserer deg med Connection → Bind og navigerer gjennom katalogtreet via View → Tree med Base DN.

Uten RSAT kan du bruke ADSI-Searcher i PowerShell:

$searcher = [adsisearcher]"(&(objectClass=user)(sAMAccountName=jdoe))"
$searcher.SearchRoot = [adsi]"LDAP://dc01.corp.example.com/DC=corp,DC=example,DC=com"
$searcher.FindOne().Properties
Forklaring av alternativer
AlternativVirkning
[adsisearcher]"(…)"oppretter en DirectorySearcher med det angitte LDAP-filteret
SearchRootStartpunkt for søket som ADSI-sti: server pluss Base DN
FindOne()returnerer første treff; .Properties viser attributtene

Med RSAT og AD-modulen går det kortere:

Get-ADUser -Server dc01.corp.example.com `
  -SearchBase "DC=corp,DC=example,DC=com" `
  -Filter "Enabled -eq '$true'" |
  Measure-Object
Forklaring av alternativer
AlternativVirkning
-ServerDomain Controller som spørringen kjøres mot
-SearchBaseSøkerot som Distinguished Name
-FilterFilter i PowerShell-syntaks; her bare aktiverte kontoer
Measure-Objectteller de returnerte objektene i stedet for å liste dem opp

Klassisk via dsquery, tilgjengelig på alle DC-er:

dsquery user -disabled -limit 0
Forklaring av alternativer
AlternativVirkning
userObjekttype for søket: brukerkontoer
-disabledbare deaktiverte kontoer
-limit 0ingen begrensning av antall treff (standard: 100)

Gå først videre i totemomail når en av disse testene kjører uten feil.

Trinn 3: Konfigurer LDAP-tilkoblingen i totemomail

Opprett LDAP-katalogen i admin-GUI-et under Directories / LDAP. Bruk nøyaktig de verdiene du testet tidligere:

FeltEksempelverdi
Host / URLldaps://dc01.corp.example.com:636
Bind DNCN=svc-totemomail-ldap,OU=Service Accounts,DC=corp,DC=example,DC=com
Bind PasswordPassord for tjenestekontoen
Base DNDC=corp,DC=example,DC=com
User Filter(&(objectClass=user)(objectCategory=person))
Login AttributesAMAccountName (alternativt mail eller userPrincipalName)

Hvis du bruker LDAPS med en intern CA, må du importere dens rot- eller utstedersertifikat i totemomail-truststore. Ellers feiler TLS-handshake med «certificate verify failed», selv om ldapsearch med -x fungerte tidligere: ldapsearch kontrollerer nemlig ikke sertifikatet strengt i denne formen.

Etter lagring kjører du den innebygde testtilkoblingen. Den bekrefter bind.

Trinn 4: Opprett Cleanup Agent

Under Maintenance → Agents → Add oppretter du en agent av typen «Check presence of internal users in directories».

4.1 Fanen «Schedule»

Agenten kjører her månedlig den 1. kl. 00:30. Via «Agent runs on server» angir du utførende node i klyngen.

FeltAnbefalingBegrunnelse
The agent should runmonthly, dag 1, 00:30utenfor arbeidstiden; månedlig er tilstrekkelig for lisenshygiene
Agent enabledaktiver først etter testkjøringense trinn 5
Produced emails are not sent but cached in a queueaktiver for første kjøringtestkjøring uten e-postsending
Agent runs on serverén node i klyngenjobben skal bare kjøre på én node

4.2 Fanen «Parameters»

Parametrene styrer hvilke interne brukere som slettes, deaktiveres eller opprettes.

ParameterAnbefalingVirkning
Delete inactive users that are not found in a directory?aktiverInaktive interne brukere uten AD-oppføring slettes. Dette er kjernen i lisensoppryddingen.
Delete blocked users that are not found in a directory?aktiverBlokkerte interne brukere uten AD-oppføring slettes også
Delete administrators?la stå tomtAdministratorkontoer skal ikke slettes automatisk
Only set users found in the defined groups to inactivevalgfrittBrukere settes til inaktive i stedet for å slettes. Et innledende ! unntar medlemmene av den angitte gruppen. Skill DN-er med ;.
Additional filter attributevalgfrittEkstra attributt for søket i katalogen, f.eks. proxyAddresses
Delete inactive/blocked users that are found in the defined groupsla stå tomtgjelder bare når gruppeparameteren er satt
Create users based on group membershipvalgfrittoppretter nye interne brukere basert på AD-gruppemedlemskap. Skill flere grupper med ;.

Negasjonen i feltet «Only set users found in the defined groups to inactive» fungerer med et ! foran en gruppe-DN. Medlemmene av denne gruppen unntas fra handlingen:

CN=Mitarbeiter,OU=Groups,DC=corp,DC=example,DC=com;!CN=Dienstkonten,OU=Groups,DC=corp,DC=example,DC=com

I dette eksemplet settes brukere i gruppen Mitarbeiter til inaktive når de ikke finnes i AD, mens medlemmer av gruppen Dienstkonten ikke berøres.

Trinn 5: Testkjøring og validering

Ikke la agenten kjøre mot produksjonsbestanden uten en testkjøring. Gå i stedet frem i denne rekkefølgen:

  1. Aktiver kømodus: via alternativet «Produced emails are not sent but cached in a queue». Agenten identifiserer planlagte handlinger uten å sende e-post.

  2. Kjør manuelt og evaluer agentloggen: Hvor mange brukere ville blitt berørt, og finnes det uventede kontoer som funksjonspostkasser i listen?

  3. Sannsynlighetskontroll mot **ldapsearch**: Antallet brukere som ikke ble funnet i AD, bør samsvare med den manuelle LDAP-spørringen.

  4. Hvis resultatet stemmer, deaktiverer du kømodus, setter Agent enabled og aktiverer planen.

  5. Etter første kjøring i produksjon kontrollerer du Settings → Overview → User Information igjen. Available Users bør da være positivt igjen.

Feilsøking

SymptomÅrsakTiltak
Can't contact LDAP serverPort 636 ikke tilgjengelig / feil vertkontroller med Test-NetConnection eller nc -vz, kontroller brannmuren
Invalid credentials (49)Bind DN eller passord er feilAngi Bind DN som fullstendig DN, ikke som user@domain
certificate verify failedCA-en er ukjent for truststoreimporter rot- eller utstedende CA
Vertsnavn-mismatch i TLSTilkobling via IP i stedet for FQDNbruk sertifikatets CN/SAN som vert
Referral (10)Søket krysser domenegrensenbruk Global Catalog på port 3269 i stedet for DC på 636
Deaktiverte brukere gjenkjennes ikkemanglende userAccountControl-filterbruk bit-matching-regelen :1.2.840.113556.1.4.803:=2
Agenten sletter for mange kontoerFilteret er for bredt / feil Base DNtest i kømodus, begrens Base DN

Med flagget -d 1 gir ldapsearch debug-utdata for tilkoblingsopprettelsen:

ldapsearch -d 1 -x -H ldaps://dc01.corp.example.com:636 ...
Forklaring av alternativer
AlternativVirkning
-d 1Debug-nivå 1: logger prosessen for tilkoblingsopprettelsen, inkludert TLS-handshake, til stderr
-x, -HEnkel bind og LDAP-URI som i spørringene ovenfor

Slik ser du om TLS-handshake eller først bind feiler. Totemomail-GUI-et viser ikke dette skillet bak sin generiske feilmelding.

sikkerhet

  • Skrivebeskyttet tjenestekonto. Bind-brukeren trenger utelukkende lesetilgang.

  • LDAPS i stedet for LDAP. Bruk port 636 eller 3269. LDAP på port 389 overfører bind-passordet i klartekst. Active Directory krever dessuten i økende grad sikrede tilkoblinger med LDAP Channel Binding og Signing.

  • Passordrotasjon. PasswordNeverExpires er praktisk i drift. Dokumenter kontoen og roter passordet etter en plan.

  • Overvåking. Overvåk Available Users (helst med varsling) i stedet for å vente på bjelleadvarselen.

  • Første kjøring i kømodus. Et feilaktig filter kan ramme et stort antall kontoer.

Den sikre prosessen i fire trinn

Å nå lisensgrensen er ikke en teknisk feil, men resultatet av en manglende offboarding-prosess. Den varige løsningen er regelmessig synkronisering med Active Directory som autoritativ kilde. Rekkefølgen er avgjørende:

  1. Verifiser LDAP-tilkoblingen på kommandolinjen (ldapsearch, openssl s_client, Test-NetConnection)

  2. Konfigurer tilkoblingen i totemomail

  3. Valider agenten i kømodus

  4. Sett agenten i produksjon

De som følger denne rekkefølgen, løser det akutte lisensproblemet og hindrer at det kommer tilbake.

Kilder

  1. totemo / Kiteworks – totemomail (Email Protection Gateway)

    Produktdokumentasjon for totemomail (lisensmodell, LDAP-tilkobling, Cleanup Agent); teknologien videreføres hos Kiteworks som Email Protection Gateway.

    https://totemo.com/en/resources/downloads
  2. Microsoft Learn – «UserAccountControl property flags»
  3. Microsoft Learn – «Search Filter Syntax»

    Bitvis LDAP-filter via matching-regel-OID-en 1.2.840.113556.1.4.803 (LDAP_MATCHING_RULE_BIT_AND).

    https://learn.microsoft.com/en-us/windows/win32/adsi/search-filter-syntax
  4. OpenLDAP – «ldapsearch» (Manpage)

    Kallalternativer (-x, -H ldaps://, -D, -W, -b) for bind og søk.

    https://www.openldap.org/software/man.cgi?query=ldapsearch
  5. Microsoft Learn – «Service overview and network port requirements»

Kommentarer

Kommentarene lastes inn fra GitHub / Giscus.