Brekkende feroaringen

Skriuwen · 4 jun 2025

Brekkende feroaringen

Dovecot 2.3 opwurdearje nei 2.4 yn Debian Stable

Ferline wike rûn ik oan tsjin ûnferwachte problemen by gewoan ûnderhâld oan de e-mailynfrastruktuer fan myn bedriuw. Wy ferwurkje alle dagen tûzenen e-mails en brûke Dovecot om ús klanten tagong te jaan ta har berjochten. Dat kaam ynienen ta in skerpe stilstân doe't ik opwurdearre nei ferzje 2.4, dy't brekkende feroaringen hat... o jonge!

⚠️ TL;DR: Dovecot 2.3 → 2.4 opwurdearje op Debian

  • Dovecot 2.4 bringt brekkende feroaringen: Konfiguraasjebestannen fan 2.3 binne net kompatibel. De software start net, útsein as do se opnij skriuwst.
  • Nije konfiguraasjesyntaksis en fariabelesysteem: Parameters as `ssl_cert`, `mail_location` en `%d` hawwe in oare notaasje en betsjutting krigen.
  • Gjin automatisearre migraasjepaad: Hânmjittich neisjen en opnij skriuwen fan de konfiguraasje is nedich, foaral as do SQL-backends, Sieve of oanpaste autentikaasje brûkst.
  • Oanrekommandaasje: Lês de offisjele opwurdearringsgids yn it detail foardat do opwurdearrest, en test konfiguraasjes yn isolaasje.

In kuierke yn it park

Mei it each op wat feiligensupdates en om wat kompatibiliteitsproblemen op te lossen, besleat ik inkelde pakketten by te wurkjen op in Debian GNU/Linux-server dy't ferantwurdlik is foar de e-mailtsjinsten fan myn bedriuw. Dizze distribúsje fan GNU/Linux stiet bekend om syn stabiliteit en betrouberens. Der wie gjin reden om problemen te ferwachtsjen en ik begûn de opwurdearring yn de ferwachting dat it yn in pear minuten klear wêze soe. Gewoan "in kuierke yn it park", wat koe der no mis gean..?

Ferplichte 'dovecot_config_version'

De measte fan de server wie hast daliks wer online, sa lyts wie de fersteuring dat sels de uptime monitor alarm gjin útfal opmurken hie. Útsein Dovecot dan. Dit stik software is ferantwurdlik foar IMAP- en POP3-tagong ta de postfekken. It past as in fyn ôfstimd tsjil yn in gruttere opset dêr't oare programma's as Postfix op fertrouwe om binnenkommende e-mail te akseptearjen. Dat Dovecot net start, joech in rige problemen.

It earste wat do as serverbehearder docht, is de serverdaemons kontrolearje ('systemctl status dovecot') en dan de logs besjen, bygelyks mei 'journalctl -u dovecot'. Dat die gau bliken dat Dovecot wegere te starten, om't der in konfiguraasjeparameter ûntbriek: 'dovecot_config_version'.

Gewoan de parameter tafoegje oan de konfiguraasje yn '/etc/dovecot/dovecot.conf', tinkst? No... NEE. It docht bliken dat de makkers fan Dovecot de flater mei in goede reden ynboud hawwe: de nije ferzje 2.4 fan Dovecot is net kompatibel mei âlde 2.3-konfiguraasjebestannen; do moatst dus in soad ferskillende parameters opnij skriuwe. It giet net allinnich om de nammen fan de konfiguraasjefariabelen, der is ek in folslein nije syntaksis foar it útwreidzjen fan ynstellingsfariabelen. In âlde fariabelewearde as '%d' wurdt no '%{user | domain}'. De list mei feroaringen is lang en der is gjin automatisearre manier om dyn konfiguraasje te migrearjen. Stel dy myn gesicht foar doe't ik de grutte fan myn probleem besefte.

Yntegrearre kompleksiteit: tsjillen yn in masine

De saak mei e-mailtsjinsten is dat it swier is. Net om't ien ûnderdiel dreech is, mar om't do foar in folsleine e-mailstack in soad ferskillende dielen sûnder wriuwing gearwurkje litte moatst. Dit binne inkelde fan de stikken dêr't de mailtsjinst fan myn bedriuw út bestiet:

  • Postfix: De wichtichste SMTP mail transfer agent (MTA), dy't mei oare mailservers praat om e-mail te ûntfangen en te ferstjoeren. Hy moat witte hokker e-mailadressen jildich binne foar it ûntfangen fan post en wa't nije berjochten ferstjoere mei.
  • Amavis-filter: Alle post dy't de server ferwurket giet troch it amavis-filtermeganisme, dat elk berjocht kontrolearret mei SpamAssassin en ClamAV.
  • SpamAssassin: Mei in yngewikkelde set regels en bayesiaanske analyses wurde berjochten automatysk scand op de kâns dat it spam is.
  • ClamAV: Berjochten wurde scand op firussen. Bylagen wurde útpakt en bestân foar bestân analysearre.
  • Reverse DNS-blacklists: Neist it scannen fan de berjochten docht de mailserver ek in eftergrûnkontrôle op eksterne servers dêr't er mei praat. Mailheaders wurde ûntleden en elke tuskenstop wurdt kontrolearre op syn reputaasje.
  • OpenDKIM: Guon berjochten drage in 'domain key'-hantekening, dy't bewiist dat de ferstjoerder autorisearre is. Berjochten mei headers wurde kontrolearre, oare wurde tekene mei in milter-tsjinst dy't oan Postfix keppele is.
  • Sieve: Binnenkommende berjochten wurde automatysk sortearre mei regels per brûker, bygelyks om bepaalde berjochten yn spesifike mappen te bringen. Hy moat witte hokker regels foar hokker adressen jilde.
  • MariaDB / MySQL: De e-mailadressen, jildige logins, brûkersnammen, wachtwurdhashes en aliassen steane yn in sintrale databank. Spesifike SQL-queries binne ynsteld om dingen te kontrolearjen as "is dit in jildich wachtwurd?"
  • Nginx: De e-mailserver hat ek in webserver wêrmei't akkounts beheard wurde kinne en dy't tagong ta e-mail jout fia webmail.
  • NodeJS: De beheerkonsole brûkt in NodeJS-backend, sadat serverbehearders en klanten har adressen en wachtwurden ynstelle kinne.
  • Roundcube: De server brûkt in breed brûkt webmailprogramma, sadat klanten fia de browser by har e-mail kinne.
  • PHP: De webmail hat PHP nedich, ynklusyf inkelde ôfhinklikheden om mei Dovecot (fia IMAP) en MariaDB (fia SQL) te praten.
  • Dovecot: En dan is der Dovecot, it eigentlike stik software dat einbrûkers tagong jout ta har e-mail. Dêrmei krije autentisearre brûkers tagong ta de e-mails dy't op de skiven fan de ynfrastruktuer opslein steane, mei protokollen as IMAP of POP3.
In folsleine mailserverstack bestiet út in soad lytsere ûnderdielen dy't fyn op inoar ôfstimd binne
In folsleine mailserverstack bestiet út in soad lytsere ûnderdielen dy't fyn op inoar ôfstimd binne

Dizze stikken binne allegearre fyn op inoar ôfstimd, as tsjillen yn in yngewikkelde masine dy't krekt yn inoar passe. Har konfiguraasje is op har spesifike rol tarist en hat faak ferbining mei meardere oare stikken. Do kinst dy foarstelle dat in ûnferwachte feroaring yn ien fan dizze tsjillen (lykas Dovecot) behoarlik wat fersteuring feroarsaakje kin!

Der wie gjin flugge oplossing, gjin automatyske konfiguraasje-opwurdearring. Om't dizze fernijing relatyf nij is, hiene de measte grutte taalmodellen (AI) ek gjin antwurd. ChatGPT makke gewoan suggestjes op basis fan de âlde 2.3-dokumintaasje. Om it probleem op te lossen hie ik 'âldskoalske Linux-serverfeardigens' nedich: hânmjittich in nije, op maat makke konfiguraasje meitsje foar Dovecot 2.4.

Stopje om gegevensferlies te foarkommen

Doe.t ik begriep wat it probleem wie, haw ik daliks de measte e-mailtsjinsten stopset (de motor folslein útsette). Dat foarkomt gegevensferlies, want der wurde gjin e-mails mear ferwurke. Oare mailservers sette de e-mails dan yn de wachtrige en jouwe soms 4xx SMTP-flaters (lykas 421, 451, 454 of 455). It ûntwerp fan it wrâldwide e-mailprotokol hâldt rekken mei tydlike útfallen en oare servers besykje it letter gewoan wer.

De konfiguraasje opnij skriuwe mei RTFM

De flaterberjochten yn de logs wiisden my nei de offisjele Dovecot dokumintaasje, en dêr stie it: in giel markearre WARNING dy't de konfiguraasjeferoaringen beskreau. It is in lang dokumint: as PDF telt it 18 siden. Op in gewoane dei kostet it wat muoite om dêr troch te kommen, stel dy foar dat do it dwaan moatst wylst it hûs yn de brân stiet!

De konfiguraasje fan Dovecot bestiet út ferskate bestannen dy't elk in diel fan it gedrach fan de software ynstelle. Lykas hoe't autentikaasje giet, of hoe't it mei in Sieve-filter yntegrearret, of wêr.t it de brûkersnamme en wachtwurdhashes foar de login ophellet. De feroaringen yn Dovecot 2.4 hawwe hast alle parameters oanrekke, om't de makkers in nije syntaksis foar serverfariabelen yntrodusearre hawwe.

Syntaksis fan de fariabelenotaasje

Oarspronklik brûkte de konfiguraasje in fariabelenotaasje as '%u' as plakhâlder foar in brûkersnamme. De nije syntaksis lit fariabelen trochstjoere nei in modifier, wêrmei't normalisaasje en dingen as it selektearjen fan in diel fan in tekenrige mooglik wurde. Bygelyks: om it e-maildomein út in brûkersnamme te heljen brûkst net mear '%d', mar nimst de 'user'-fariabele as basis en stjoerst dy troch nei de domain-modifier mei dizze syntaksis: '%{user | domain}'.

Doe't ik dizze nije taal ienris begriep, wurdearre ik it wurk dat dêrefter sit echt. It is in ferbettering boppe de âlde ôfkoarte fariabelenammen, want do hast gjin wurdboek mear nedich om dingen op te sykjen: yn stee fan wat ûndúdliks as '%r' lês do no '%{remove_ip}'. Fan natuer is it better lêsber, wat ik echt wurdearje.

Fersifering: 'ssl_cert' wurdt 'ssl_server_cert_file'

Oare feroaringen hawwe te meitsjen mei de wize wêrop de konfiguraasje wiist nei eksterne bestannen foar fersifering. Earder hiesto in ynstelling 'ssl_cert' dy't it eigentlike SSL/TLS-sertifikaat as tekenrige befetsje koe. Yn ferzje 2.4 hasto de fariabele 'ssl_server_cert_file' dy't in paad nimt dat nei it sertifikaat op it bestânsysteem wiist. It is net allinnich omneame, de aard fan de wearde is ek nij! Om de konfiguraasje te reparearjen moatst elk fan dizze bywurke parameters langsgean en bepale wat de gefolgen binne foar dyn spesifike opset. It kostet tiid en der wurde maklik flaters makke.

De ynstelling 'mail_location' opdiele

Nij yn 2.4 is dat 'mail_location' opdield is yn meardere lytsere fariabelen. Earder bepaalde ien fariabele wêr't e-mail op skiif bewarre waard. Do moatst dit no opsplitse yn twa fariabelen 'mail_driver' en 'mail_path', EN de nije serverfariabelesyntaksis brûke. As do ien fan dizze ferkeard dochst, ferdwynt alle e-mail (leau my mar!). Ôfhinklik fan dyn spesifike opslachkonfiguraasje wolsto goed neisjen wat der yn it brûkersnammediel stiet (nimst it hiele e-mailadres of allinnich it foarheaksel sûnder domeinnamme?).

mail_location opdiele yn mail_driver en mail_path mei de nije serverfariabelesyntaksis
mail_location opdiele yn mail_driver en mail_path mei de nije serverfariabelesyntaksis

Dovecot mei SQL-backend: passdb en userdb

As dyn Dovecot-ynstallaasje wurket mei in eksterne databank (of opslach) om brûkersnammen en wachtwurden te autentisearjen, moatst de 'auth-sql.conf.ext' yn '/etc/dovecot/conf.d/' opnij skriuwe, dy't oanroppen/opnommen wurdt troch it bestân 10-auth.conf. Yn Dovecot 2.4 is der in nije manier om passdb- en userdb-ynstellingen yn te dielen. Yn myn Dovecot 2.3-opset brûkte ik in ekstern bestân foar de databankqueries en de ferbiningstekenrige. By de autentikaasje wurde de meardere queries brûkt om 1) brûkers te autentisearjen en 2) ynstellingen foar elke brûker te laden, lykas it paad fan de e-mailopslach.

De opwurdearringsynstruksjes foar userdb en passdb binne op it earste gesicht tige nuttich /s
De opwurdearringsynstruksjes foar userdb en passdb binne op it earste gesicht tige nuttich /s
Dovecot 2.3 SQL-backendopset (auth-sql.conf.ext en dovecot-sql.conf.ext)
Dovecot 2.3 SQL-backendopset (auth-sql.conf.ext en dovecot-sql.conf.ext)

Yn de nije ferzje 2.4 moatst de parameters opnij yndiele yn seksjes dy't fuort efter de kaaiwurden 'userdb' en 'passdb' yn de konfiguraasje in oantsjutting fan it backendtype befetsje. As do dus in MySQL-databank as backend brûkst, wurdt 'userdb' dan 'userdb sql'. Do kinst de parameters foar de ferbiningstekenrige direkt yn it bestân 'auth-sql.conf.ext' sette, sadat alle relevante parameters yn ien konfiguraasjebestân steane. Om de kompleksiteit te ferminderjen haw ik de userdb-seksje skreaun mei it 'static' databankstjoerprogramma: dat makket konfiguraasjefariabelen lykas it e-mailpaad fan de brûker op basis fan de brûkersnamme. Sjoch de oparte dokuminten.

Dovecot 2.4 SQL-backendopset (auth-sql.conf.ext), no folle kompakter as de foargonger. Der is no mar ien SQL-query, om't de userdb-seksje no de static-backend brûkt
Dovecot 2.4 SQL-backendopset (auth-sql.conf.ext), no folle kompakter as de foargonger. Der is no mar ien SQL-query, om't de userdb-seksje no de static-backend brûkt

Sieve-plugin

As dyn opset Sieve brûkt om binnenkommende e-mails te sortearjen, moatst dyn opset oanpasse de lokaasje fan it skript, de standertynstellingen en it gedrach oangiet. De nije Dovecot 2.4-ferzje yntrodusearret in konsept mei de namme "Script Storage", wêrmei't dynamysk laden skripts foar ferskillende brûkers by ferskate eveneminten útfierd wurde kinne. Ús opset hat in ienfâldich standert Sieve-skript dat e-mail dy't as spam markearre is automatysk yn in map mei de namme Spam sortearret. De nije syntaksis makket in kompaktere konfiguraasje mooglik:

De Sieve-konfiguraasje yn Dovecot 2.3 (90-sieve.conf) mei de no ferâldere fariabelen sieve_default en sieve_dir
De Sieve-konfiguraasje yn Dovecot 2.3 (90-sieve.conf) mei de no ferâldere fariabelen sieve_default en sieve_dir
De Sieve-konfiguraasje yn Dovecot 2.4 (90-sieve.conf)
De Sieve-konfiguraasje yn Dovecot 2.4 (90-sieve.conf)

De nije konfiguraasje testen

Do kinst yn de ferlieding komme om de server gewoan wer te starten nei't de 2.4-konfiguraasje opnij definiearre is. Mar wês dan tige foarsichtich, want in ferkearde konfiguraasje kin der foar soargje dat klanten de tagong ta al har e-mails kwytreitsje en/of har hiele postfekken opnij downloade moatte. Ik haw dêrom foar in oanpak stap foar stap keazen, dêr't ik de poartenûmers fan IMAP (en POP3) feroare haw yn wat willekeurichs. Sa koe ik de nije opset sels testen, wylst de echte klanten net mei de server ferbine koene. Dat liet my inkelde typflaters reparearje, wat fan de nije serverfariabelesyntaksis ferfine en omgean mei inkelde nuvere logberjochten. Do kinst de poartenûmers fan de server ynstelle fia it bestân '10-master.conf'.

De IMAP- en POP-poartenûmers fan de server ynstelle foar privee/stapsgewize debuggen fan de nije konfiguraasje
De IMAP- en POP-poartenûmers fan de server ynstelle foar privee/stapsgewize debuggen fan de nije konfiguraasje

Konklúzje

Útfallen as dizze binne seldsum, tanksij de stabiliteit fan Debian GNU/Linux, mar net ûnmooglik. Deistige backups en in toetst rampherstelplan binne op oarder foar de e-mailtsjinst Lemmid Online fan myn bedriuw. Hoewol't der dizze kear gjin folsleine failover nedich wie, wiene eardere oefeningen krúsjaal om de konfiguraasje flot oan te passen.

Dit ynsidint wie in oantinken dat sels mei automatisearring en AI djippe systeemkennis, tarieding en hânmjittich debuggen essensjele ark bliuwe as kritike ynfrastruktuerdielen ûnferwachts en sûnder automatisearre migraasjepaden feroarje.

Dovecot 2.4 foarbyldkonfiguraasje

As do dit berjocht fynst, om't do in oplossing sikest foar dyn eigen brutsen mailserver, kinne dizze Dovecot 2.4-foarbyldkonfiguraasjebestannen nuttich wêze. Ik haw se by myn eigen reparaasjewurk fûn en se besparje dy miskien tiid by it útsykjen fan de nije syntaksis: https://source.willem.com/dovecot-2.4-sample-config/

← Mear ferhalen