Hulpartikel overzicht

Hulpartikel

Probeer BladeVPS een maand gratis

Maak van jouw volgende website of applicatie een succes op BladeVPS PureSSD. Probeer direct of een self-managed VPS iets voor jou is; de eerste maand krijg je van ons :-)!

Start nu je gratis maand

DKIM gebruiken met Exim in CentOS 7 en 8

Spammers proberen zich vaak uit te geven voor domeinen van derden door die te spoofen. Hoe bekender en vertrouwder de partij waar ze zich voor uitgeven, hoe groter de kans dat een ontvanger de spam leest.

Naast de nodige maatregelen als SPF-controle, kun je gebruik maken van DKIM. DKIM wordt gebruikt om de validiteit van de afzender van e-mails te kunnen controleren. Bij het verzenden van e-mails wordt met DKIM een digitale handtekening meegestuurd. Deze wordt gecontroleerd door middel van de sleutel (of key) die in het DKIM-record is opgenomen.

In deze tutorial laten wij zien hoe je uitgaande mail met DKIM ondertekent op een VPS met CentOS 7 of 8 en Exim. Inkomende mail kun je automatisch laten scannen op DKIM met Spamassassin.

  • Voor de stappen in deze handleiding is een CentOS 7 of CentOS 8 VPS met Exim en Dovecot nodig. In deze handleiding leggen wij uit hoe je Exim en Dovecot opzet. Wij gaan er in deze handleiding vanuit dat je die handleiding hebt doorlopen.
     
  • Voer de commando's in deze tutorial uit met sudo, of als root-user.

 

Stap 1

Verbind met je VPS via SSH of de VPS-console.


Stap 2

Ga naar de Exim-directory en genereer vervolgens een private en public key voor het ondertekenen van je mail:

cd /etc/exim
openssl genrsa -out dkim.private.key

Je bent vrij de directory /etc/exim en de naam dkim.private.key aan te passen. Let wel dat je dezelfde directory en naam gebruikt in de volgende stappen ook gebruikt.


Stap 3

Vervolgens extract je de public key uit de .key-file die je zojuist hebt aangemaakt met het commando:

openssl rsa -in dkim.private.key -out dkim.public.key -pubout -outform PEM

De public key neem je op in de DNS-records van de domeinen die via je mailserver mailen. Hier komen wij in stap 7 op terug.


 

Stap 4

DKIM-support is standaard aanwezig in Exim in CentOS. Je hoeft DKIM dan ook enkel in de configuratie van Exim in te schakelen. Open de configuratie van Exim, bijvoorbeeld met:

nano /etc/exim/exim.conf

 

Stap 5

Zoek onder 'Transports Configuration' naar het stukje:

remote_smtp:
  driver = smtp

Deze transport zorgt voor het sturen van mail vanaf je VPS naar een andere mailserver. Voeg direct onder bovenstaande code het volgende toe:

dkim_canon = relaxed
dkim_domain = ${lc:${domain:$h_from:}}
dkim_private_key = /etc/exim/dkim.private.key
dkim_selector = key
Toelichting
  • dkim_canon: het type algoritme dat gebruikt wordt voor het toevoegen van de DKIM-controle aan de header en body. Dit kan 'simple' of 'relaxed' zijn. Simple tolereert geen modificaties, maar relaxed staat zaken toe zoals whitespace vervanging.
  • dkim_domain = ${sender_address_domain}: gebruikt voor het signen met DKIM het domein van de verzender uit de envelope sender. Dit mag ook een lijst zijn die je in een variabele zet. Alternatief kun je hier ${lc:${domain:$h_from:}} gebruiken als waarde om het domein uit de 'From:' header te gebruiken.
  • dkim_private_key: de locatie waar de private key zich bevindt waar de public key tegen gecontroleerd wordt (zie stap 7 en 8).
  • dkim_selector: de naam van de key selector string (dit mag een lijst zijn). De naam van de dkim_selector met de toevoeging ._domainkey is de naam van het DKIM-record die je aanmaakt in je DNS-instellingen (zie stap 8).

De gehele remote_smtp transport kan er dan als volgt uitzien:

remote_smtp:
  driver = smtp
  message_size_limit = ${if > {$max_received_linelength}{998} {1}{0}}
  dkim_canon = relaxed
  dkim_domain = ${sender_address_domain}
  dkim_private_key = /etc/exim/dkim.private.key
  dkim_selector = key
.ifdef _HAVE_DANE
  dnssec_request_domains = *
  hosts_try_dane = *
.endif
.ifdef _HAVE_PRDR
  hosts_try_prdr = *
.endif

Sla hierna de wijzigingen op en sluit het bestand (ctrl + x > y > enter).


 

Stap 6

Herstart tot slot Exim om de wijzigingen te verwerken:

systemctl restart exim

Stap 7

Voor ieder domein waar je mail mee verstuurt vanaf je VPS, heb je een TXT-record nodig waarin de public key is opgenomen. In stap 3 heb je een aparte .key-file gemaakt met daarin je public key. Print de inhoud van dit bestand met het commando:

cat /etc/exim/dkim.public.key

De output ziet er als volgt uit:

-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQBAA4GNADCBiQKBgQDU4Fi7KotzLl789XQtY7nGU7Pd
sJ7tz1cTrr5JL6NNNO2bICv8rmm6fslxtk0nH0tvomsHY4d7A9IoCVog7QMs67Px
YXubn0sT2Ye5VtxkgHj6yaMpwUCMzQE1TzyLdnn6fYveRrTHBAeeGVE33svW/d1h
n11NKwcRxGtXveqc2QIDAQAB
-----END PUBLIC KEY-----

Kopieer de inhoud in een tekstverwerker (bijvoorbeeld notepad of TextEditor), verwijder de eerste en laatste regel (begin / end public key) en plaats de volledige inhoud op één regel zodat je een lange code krijgt zoals hieronder:

MIGfMA0GCSqGSIb3DQEBAQBAA4GNADCBiQKBgQDU4Fi7KotzLl789XQtY7nGU7PdsJ7tz1cTrr5JL6NNNO2bICv8rmm6fslxtk0nH0tvomsHY4d7A9IoCVog7QMs67PxYXubn0sT2Ye5VtxkgHj6yaMpwUCMzQE1TzyLdnn6fYveRrTHBAeeGVE33svW/d1hn11NKwcRxGtXveqc2QIDAQAB

 

Stap 8

Vervolgens maak je een TXT-record aan in de DNS-instellingen van ieder domein waar je mail voor verstuurt op je VPS met de syntax hieronder.

  • naam: key._domainkey
  • ttl: 5 min
  • type: TXT
  • waarde: v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAADCBiQKBgQDU4etcetera
  • Vervang de waarde achter p= door de waarde van je public key die je in stap 7 hebt genoteerd.
  • Mail je vanaf een subdomein? Dan wordt de naam van je DNS-record key._domainkey.jesubdomein.

In het TransIP-controlepaneel ziet het resultaat er bijvoorbeeld als volgt uit:

domein dkim voorbeeld

Sla je nieuwe record tot slot op. Het duurt daarna maximaal 24 uur (doorgaans niet langer dan een uur) voor de wijzigingen verwerkt zijn. Dit komt door de wereldwijde verwerkingstijd van DNS-wijzigingen en hebben wij helaas geen invloed op.


Public en private keys vernieuwen

 

In deze handleiding heb je met OpenSSL een public en private key gegenereerd. SSL-keys verlopen niet (in tegenstelling tot SSL-certificaten), maar om veiligheidsredenen is het aan te raden om van tijd tot tijd (bijvoorbeeld jaarlijks) je public en private key te vervangen.

Een relatief eenvoudige manier om dit te bereiken is door een constructie met meerdere DKIM-records. Wij gebruiken een dergelijke constructie ook voor TransIP en dit werkt als volgt:

Eerder in dit artikel hebben wij uitgelegd dat de DKIM-selector het eerste deel is van de naam van het DKIM-record. De selector 'key', geeft je dus de subdomeinnaam 'key._domainkey'. Stel dat je wil mailen namens voorbeeld.nl en het domein die je gebruikt als smtp/mx domein mijnmailserver.nl is .

In plaats van een TXT-record met de naam 'key._domainkey', maak je in de DNS-instellingen van ieder domein die mail verstuurt via je VPS (hier voorbeeld.nl) twee CNAME-records aan, bijvoorbeeld de volgende:

dkim cname voorbeeld

  • Voor de DKIM-controle wordt in dit voorbeeld gekeken naar de waarde van key._domainkey.voorbeeld.nl. Dit komt doordat de dkim_selector op 'key' is ingesteld. key1._domainkey.voorbeeld.nl wordt op dit moment dus niet gebruikt.
     
  • key._domainkey.voorbeeld.nl verwijst naar het subdomein dkim_a.mijnmailserver.nl. In de DNS-instellingen van mijnmailserver.nl maak je voor het subdomein dkim_a daadwerkelijk het TXT-record aan waar je public key in is opgenomen, dus bijvoorbeeld:

dkim_a voorbeeld

  • dkim_b.mijnmailserver.nl hoef je op dit moment nog geen record voor aan te maken (wel key1._domainkey die ernaar verwijst). Dat doe je pas wanneer je je keys wil updaten.

Stel nu dat je je public en private key wil updaten. Je genereert dan een nieuwe key (zie stap 2), maar dan voor het dkim_b-record, bijvoorbeeld:

cd /etc/exim
openssl genrsa -out dkim_b.private.key
openssl rsa -in dkim_b.private.key -out dkim_b.public.key -pubout -outform PEM

Vervolgens maak je bij je SMTP-domein (hier mijnmailserver.nl) een TXT-record voor dkim_b aan (zie stap 7 en 8) met de public key die je zojuist hebt gemaakt. Wacht na het aanmaken van dit record voor de zekerheid 24 uur voor je verder gaat, zodat de DNS-wijziging de tijd heeft gehad om te propageren.

Nu pas je in de Exim-configuratie (/etc/exim/exim.conf) de waarde van de private_key en dkim_selector aan, zodat die van key1 / dkim_b worden gebruikt, bijvoorbeeld:

dkim_private_key = /etc/exim/dkim_b.private.key
dkim_selector = key1

Herstart daarna Exim. Er wordt vanaf dat moment gebruik gemaakt van de publick en private key die begint met de naam dkim_b en voor voorbeeld.nl van het DNS-record key1._domainkey, die op zijn beurt verwijst naar dkim_b.mijnmailserver.nl.

Herhaal deze stappen om nieuwe keys te genereren voor dkim.private.key en dkim.public.key, pas het TXT-record van dkim_a.mijnmailserver.nl aan naar de nieuwe public key, en daarna de dkim_selector terugzetten op de waarde 'key'.


 

 

Daarmee zijn we aan het eind gekomen van deze handleiding over het gebruik van DKIM in Exim. Mocht je aan de hand van deze handleiding nog vragen hebben, aarzel dan niet om onze supportafdeling te benaderen. Je kunt hen bereiken via de knop 'Neem contact op' onderaan deze pagina.

Wil je dit artikel met andere gebruikers bespreken, laat dan vooral een bericht achter onder 'Reacties'.

Heb je ook een goed idee?

Stuur jouw idee in! Met genoeg stemmen komt jouw idee op onze wishlist!

Heeft dit artikel je geholpen?

Maak een account aan of log in om een beoordeling achter te laten.

Reacties

Maak een account aan of log in om een reactie te plaatsen.

Kom je er niet uit?

Ontvang persoonlijke hulp van onze supporters

Neem contact op