DKIM-signering i Exchange Server och Bind

28 Oct 2020

mail utan dkim-signering

Att köra egen e-postserver blir inte lättare med tiden, det är ett som är säkert. Då och då har jag fått frågor från familj och släkt som kör e-post via min server varför vissa mail inte kommer fram till sina mottagare. Det finns givetvis tusentals anledningar till det men när en lyssnare av Björeman//Melin hörde av sig och sa att mail från mig klassades som osäkra kände jag att det var dags att ta tag i detta på allvar.

Det första jag gjorde var att kolla så mina DNS-inställningar för alla domäner var korrekta. SPF-records var inlagda och var korrekta, DMARC likaså och jag hade också lagt in nycklar för DKIM men jag hade uppenbarligen inte läst på ordentligt för jobbet var bara halvgjort.

Vad är då DKIM kanske du undrar? DKIM är enkelt uttryckt ett sätt att signera utgående e-post med ett certifikat. E-postservern signerar varje utgående meddelande och mottagande server ser denna signering (om den kollar efter det) och gör sedan ett uppslag mot DNS-servern/servrarna som hanterar den sändande domänen och kollar om signeringsnyckeln i mailet matchar nyckeln som finns i domäntabellen. Låter enkelt, kan man tycka men det blir raskt mer komplicerat om man som jag kör en gammal Exchange Server och dessutom använder Bind som DNS-servrar.

Det första man måste göra är att ta reda på hur i hela friden man får Exchange Server att signera mailen. Min första ide var att låta mitt spamfilter, det utmärkta Halon MTA från det svenska bolaget Halon Security, låta signera all utgående e-post. Detta är kanske i sig ingen dum idé men jag tänkte att jag först skulle ta reda på om det ens gick att göra med Exchange Server. Det finns, givetvis, inte ett spår av detta i inställnignarna för Exchange Server men ett projekt kallat DKIM-Exchange såg lovande ut och efter att ha laddat ner och installerat programmet kunde jag lägga in alla domäner jag har i min Exchange-server, skapa nya certifikat och sedan koppla dessa till respektive domän. Klick-klick-finish, typ. Detta är givetvis ingen officiell Microsoft-produkt utan ett öppet tredjepartsprojekt och har därför garantier därefter men än så länge har det fungerat utmärkt.

Nästa steg var att formattera och se till att DKIM-informationen i domäntabellerna var korrekt. Olika DNS-servrar hanterar detta olika och jag, som kör Bind 9, hittade gott om guider som talade om hur man gjorde saker och ting “korrekt” men problemet var att inget av det faktiskt fungerade. Det första jag gjorde fel var att hälla in hela certifikatet på en enda lång rad. Bind klagade inte men när jag försökte verifiera att DKIM-informationen i domänen var korrekt så visade det sig att ingen DKIM-information fanns att hämta. Efter ett par timmars meckande och testande kom jag fram till något som fungerar. Det visar sig att man måste lägga in hela DKIM-strängen i DNS-tabellen inom citationstecken och inom paranteser och dessutom göra raderna “lagom” långa, 55-60 tecken långa per rad:

dkim._domainkey.bjoremanmelin.se. IN TXT (“v=DKIM1; k=rsa; p=XXxxXXxxXXxxXXxxXXxxXXxxXXxxXXxxXXxx”
“XXxxXXxxXXxxXXxxXXxxXXxxXXxxXXxxXXxxXXxxXXxxXXxxXXxxXXx”
“XXxxXXxxXXxxXXxxXXxxXXxxXXxxXXxxXXxxXXxxXXxxXXxxXXxxXXx”
“XXxxXXxxXXxxXXxxXXxxXXxxXXxxXXxxXXxxXXxxXXxxXXxxXXxxXXx”
“XXxxXXxxXXxxXXxxXXxxXXxxXXxxXXxxXXxxXXxxXXxxXXxxXXxxXXx”
“XXxxXXxxXXxxXXxxXXxxXXxxXXxxXXxxXXxxXXxxXXxxXXxxXXxxXXx”
“XXxxXXxxXXxxXXxxXXxxXXxxXXxxXXxxXXxxXXxxXXxxXXxxXXxxXXx”
“XXxxXXxxXXxxXXxxXXx”)

Utöver detta behöver man ha ytterligare ett värde inlagt:

domainkey.bjoremanmelin.se. 1 IN TXT “o=-;[email protected]

Den skarpögde noterar att följande tecken är inlagda:
“o=-;”

Detta anger vilken grad av signering som sker på min sida. Följande värden finns att välja mellan:

  1. o=~ Signering är valfri
  2. o=- signering finns men är inte tvingande
  3. o=! Signering krävs
  4. o=. Denna domän skickar inte e-post

Jag har som synes valt alternativ två, mest för att jag misstänker att inte alla servrar jag skickar mail till kommer kunna hantera signerade mail, eller så ignorerar de bara signeringen om de inte verifierar DKIM, jag har inte kollat upp det närmare ännu.

Hur som helst – numera kommer de servrar som verifierar e-post från min domän, min familjs domännamn, min släkts domännamn och min och Fredriks podds domännamn förhoppningsvis inte fastna någonstans.

Har du inte kollat närmare på DKIM så är det hög tid att göra det tillsammans med DMARC och SPF.