Winkelwagen

/ VPS-Infrastructuur

Alles over de zelfontwikkelde VPS-infrastructuur

Register now

/ Up to date

/ Nieuws

Lancering PerformanceVPS

Meer info
Hulp nodig?

    Sorry, we konden geen resultaten vinden voor jouw zoekopdracht.

    DKIM gebruiken met Exim in Ubuntu en Debian

    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 Ubuntu / Debian en Exim. Inkomende mail kun je automatisch laten scannen op DKIM met Spamassassin.

    • Voor de stappen in deze tutorial is een VPS met Ubuntu of Debian met Exim en Dovecot nodig. In deze handleiding leggen wij uit hoe je Exim en Dovecot installeert. 
       
    • Wij gaan ervan uit dat je één groot configuratiebestand gebruikt voor Exim in plaats van een gespreide configuratie. 
       
    • 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/exim4
    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

    Het bestand dkim.private.key komt met enkel lees en schrijfrechten voor de root-user, waardoor Exim er geen gebruik van kan maken. Pas daarom de rechten aan zodat Exim het bestand kan lezen met:

    chmod 644 /etc/exim4/dkim.private.key

     

    Stap 5

    DKIM-support is standaard aanwezig in Exim. Je hoeft DKIM dan ook enkel in de configuratie van Exim in te schakelen. Open de configuratie van Exim, bijvoorbeeld (bij één groot configuratiebestand voor Exim) met:

    nano /etc/exim4/exim4.conf.template

     

    Stap 6

    Zoek onder 'Transports Configuration' naar het stukje:

    remote_smtp:
      debug_print = "T: remote_smtp for $local_part@$domain"
      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/exim4/dkim.private.key
    dkim_selector = key
    • 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:
      debug_print = "T: remote_smtp for $local_part@$domain"
      driver = smtp
      message_size_limit = ${if > {$max_received_linelength}{998} {1}{0}}
      dkim_canon = relaxed
      dkim_domain = ${sender_address_domain}
      dkim_private_key = /etc/exim4/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 > > enter).


     

    Stap 7

    Herstart Exim om de wijzigingen te verwerken:

    update-exim4.conf
    systemctl restart exim4

    Stap 8

    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/exim4/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 9

    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/exim4/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.

    Kom je er niet uit?

    Ontvang persoonlijke hulp van onze supporters

    Neem contact op