Winkelwagen

    Sorry, we konden geen resultaten vinden voor jouw zoekopdracht.

    Exim & Dovecot installeren en configureren in CentOS 7

    Op Linux mailservers wordt meestal Exim en Postfix (MTA) in combinatie met Dovecot (MDA) gebruikt. Exim en Postfix zorgen voor het versturen van mail van de ene mailserver naar de andere. Dovecot zorgt dat mail die aan je VPS wordt geleverd, daadwerkelijk bij het juiste mailadres uit komt.

    In deze tutorial laten wij zien hoe je Exim en Dovecot installeert op een VPS met CentOS 7 of CentOS 8. Hiervoor gebruik je niet enkel systeem accounts, maar laten wij zien hoe je een lijst van 'virtual domains' gebruikt om voor specifieke domeinen mail te verwerken. Daarnaast laten wij zien hoe je SSL (TLS) van Let's Encrypt gebruikt om de verbinding te beveiligen en je firewall configureert voor je mailserver.

    • Voor de stappen in deze handleiding heb je nodig:
       
    • Voer de stappen in dit artikel uit met sudo, of als root-user.
       
    • Dit is vrij complexe materie. Het is aan te raden van tevoren een snapshot van je VPS te maken zodat je een terugval punt hebt bij eventuele configuratiefouten.

    Exim installeren en configureren

     

    Stap 1

    Verbind met je VPS via SSH of de VPS-console in het TransIP-controlepaneel.


     

    Stap 2

    Update je VPS zodat je de meest recente software tot je beschikking hebt:

    yum -y update

    Wij raden aan na een update je VPS te herstarten. Veel updates worden pas daadwerkelijk doorgevoerd na een reboot. Daarnaast komen eventuele problemen in de configuratie van je server daarna snel aan het licht en kun je eventueel nog een back-up terugplaatsen.


     

    Stap 3

    Installeer Exim met het commando:

    yum -y install exim

     

    Stap 4

    Vervolgens pas je de configuratie aan van Exim. Open hiervoor /etc/exim/exim.conf, bijvoorbeeld met:

    nano /etc/exim/exim.conf

    Stap 5

    Pas in het geopende bestand de volgende opties aan. Ze staan niet allemaal onder elkaar dus je moet hiervoor door het bestand scrollen / zoeken (ctrl + in nano of /<woordwaaropjezoektin vim).

     

    no_local_from_check

    Exim vertrouwt systeem-users op je server niet en zal het 'From'-veld in de headers herschrijven om de hostname te bevatten wanneer je namens een systeem-user wil mailen. Op zich is dit geen probleem aangezien je in deze handleiding virtual domains gebruikt om mailadressen aan te maken.

    Wil je toch met systeem-users kunnen mailen zonder dat de headers worden herschreven (en je bijvoorbeeld met mail@<jehostname> mailt)? Voeg dan bovenaan (e.g. onder het blok 'Runtime configuration file for Exim') in het geopende bestand de volgende twee regels toe om user-accounts wel te vertrouwen:

    no_local_from_check
    untrusted_set_sender = *
    

     

    Algemeen

    domainlist local_domains = lsearch;/etc/listofdomains
    tls_certificate = /etc/letsencrypt/live/mail.jedomein.nl/fullchain.pem
    tls_privatekey = /etc/letsencrypt/live/mail.jedomein.nl/privkey.pem
    auth_advertise_hosts = ${if eq {$tls_in_cipher}{}{}{*}}
    Toelichting
    • domainlist local_domains: een lijst met alle domeinen waar mail naar gestuurd mag worden op je VPS. Met 'lsearch;/etc/listofdomains' stel je in dat die lijst in een bestand op je VPS is opgenomen. Hier komen wij in Stap 6 en 7 op terug.
       
    • tls_certificate & tls_privatekey: geef een locatie op waar je SSL-certificaat komt te staan, in dit voorbeeld is dat de directory waar Let's Encrypt het certificaat zal genereren (zie vanaf Stap 1 onder een SSL-certificaat toevoegen).
      Het subdomein dat je hier opgeeft, is het subdomein dat uiteindelijk gebruikt wordt in mail software / apps bij het instellen van een inkomende en uitgaande server. Het is belangrijk dat de DNS van dit subdomein correct naar je VPS verwijst.
       
    • auth_advertise_hosts:  als een client probeert te authenticeren op je mailserver adverteert Exim o.a. 'AUTH' in het antwoord, zolang de host overeenkomt met de waarde die hier is ingesteld.
      De waarde '${if eq{$tls_in_cipher}{}{}{*}}' zorgt ervoor dat de beschikbaarheid van AUTH enkel wordt geadverteerd door je server als niet enkel de host overeenkomt, maar ook TLS-encryptie gebruikt wordt door de client.
      Dit is de meest veilige methode om je mailserver te configureren, maar als je ook verbindingen zonder TLS-encryptie wil accepteren, gebruik je hier enkel de waarde *

    virtual_router

    Scroll naar het eind van het 'router configuration'-deel en plaats onderstaande code direct boven het onderdeel 'localuser'.

    virtual_router:
      driver = accept
      require_files = +/home/vmail/$local_part@$domain/
      transport = virtual_transport
    Toelichting

    De functie van routers

    De routers die je vindt onder 'routers configuration' bevatten voorwaarden die bepalen onder welke condities er 'iets' met de mail gebeurd. Wat er vervolgens gebeurt wordt bepaald door de transports onder 'transport configuration'.

    Zo is er bijvoorbeeld de local user die met check_local_user kijkt of er een mail naar je server gestuurd wordt die gericht is aan een systeem-account (dit zijn de accounts die je bijvoorbeeld ziet met cat /etc/shadow). Zo ja, dan wordt de onder de local_user gestelde transport (in het onderdeel 'Transports configuration' geactiveerd, dat op zijn beurt bepaald waar de mail geleverd wordt (e.g. in welke folder, met welke header toevoegingen e.d.)

    Binnenkomende mail wordt door alle geconfigureerde routers gecontroleerd in volgorde waarop ze geconfigureerd zijn. Vindt de eerste router een match? Dan wordt de bijbehorende transport geactiveerd, Zo niet, dan controleert de tweede router de match.

     

    virtual_router

    De router die er voor zorgt dat je met virtuele domeinen kunt werken. Dit betekent dat je niet beperkt bent tot systeem accounts, maar nauwkeurig kunt instellen dat een mailadres behorend bij een specifiek domein (e.g. naam@voorbeeld.nl) mails kan sturen en ontvangen vanaf je server.

    • driver = accept: accepteerd alle mail die voldoen aan de voorwaarden zoals ingesteld in de algemene configuratie van /etc/exim/exim.conf
    • require_files = +/home/vmail/$local_part@$domain/: bestaat er een directory in de map /home/vmail/ met de naam van het e-mailadres waarvandaan de mail naar/van je Exim-server wordt gestuurd? Dan wordt deze router geactiveerd.
    • transport = virtual_transport: gebruikt de virtual_transport wanneer een mail de virtual_router activeert.

     

    local_delivery

    Scroll naar het deel 'transports configuration' en zoek daaronder naar 'local_delivery'. De opties die onder local_delivery staan beïnvloeden hoe Exim de mail aflevert aan local users. Zoek in het bestand op local_delivery en pas de opties aan zodat die er uit komen te zien als in het voorbeeld hieronder.

    local_delivery
      driver = appendfile
      directory = $home/Maildir
      maildir_format
      delivery_date_add
      envelope_to_add
      return_path_add
      group = mail
      mode = 0660
    Toelichting
    • local_delivery: Levert mail af aan mailadressen in BSD mailbox formaat. Dit wordt uitgevoerd onder de uid en gid van de lokale gebruiker.
       
    • driver = appendfile: de transport-tool die zorgt voor de levering van de mail.
       
    • directory = $home/Maildir: mail wordt afgeleverd in de Maildir folder in de home directory van de gebruiker waarvan het mailadres is (op gebruikers komen we verderop terug). Voor iedere mail wordt een nieuw bestand gemaakt. Wil je liever één enkel bestand waar alle mail in komt? Vervang dan directory door file. Exim maakt benodigde parent directories by default aan.
       
    • maildir_format: werkt enkel als je directory (zie hierboven) gebruikt. Mail wordt in het maildir formaat geleverd, dat door veel mail-software gebruikt wordt.
       
    • delivery_date_add: voegt de datum / tijd waarop de mail afgeleverd wordt toe aan de mail.
       
    • envelope_to_add: voegt de envelope_to headers aan de mail toe. Doorgaans is dit het adres waar de mail naar verstuurd wordt.
       
    • return_path_add: voegt een return_path header toe aan de mail: dit is een adres waar notificaties heen gestuurd worden bij fouten in het versturen van de mail (e.g. een onbereikbare ontvanger).
       
    • group = mail & mode = 0660: Dit zijn twee opties die bij elkaar horen. Deze optie zorgt ervoor dat de groep waar een gebruiker toe behoort schrijfrechten heeft tot de directory waar de mail van de gebruiker in terecht komt. Verwijder je deze twee opties, dan heeft enkel de gebruiker, de directory eigenaar en de root-gebruiker rechten tot die directory.

    virtual_transport

    Door de virtual_transport toe te voegen, bepaal je wat er gebeurd met de mail die door de virtual_router wordt aangemerkt voor levering aan je server.

    Plaats onderstaande code direct boven het onderdeel local_delivery:

    virtual_transport:
      driver = appendfile
      directory = /home/vmail/$local_part@$domain/
      maildir_format
      delivery_date_add
      envelope_to_add
      return_path_add
      user = vmail
      group = vmail
      mode = 0660
      mode_fail_narrower = false
    Toelichting

    driver = appendfile: de transport-tool die zorgt voor de levering van de mail.

    directory = /home/vmail/$local_part@$domain/ mail wordt afgeleverd in de map /home/vmail/jemailadres/ (komen we verderop op terug). Dit betekent dat in /home/vmail voor ieder mailadres dat je specifiek aanmaakt er een map zal zijn waar de mail in terecht komt.

    maildir_format: werkt enkel als je directory gebruikt. Mail wordt in het maildir formaat geleverd, dat door veel mail-software gebruikt wordt.

    delivery_date_add: voegt de datum / tijd waarop de mail afgeleverd wordt toe aan de mail.

    envelope_to_add: voegt de envelope_to headers aan de mail toe. Doorgaans is dit het adres waar de mail naar verstuurd wordt.

    return_path_add: voegt een return_path header toe aan de mail: dit is een adres waar notificaties heen gestuurd worden bij fouten in het versturen van de mail (e.g. een onbereikbare ontvanger).

    user & group = vmail: de user en group waaronder mail wordt opgeslagen. De gebruiker en groep maak je verderop in deze handleiding aan.

    group = mail & mode = 0660: Dit zijn twee opties die bij elkaar horen. Deze optie zorgt ervoor dat de groep waar een gebruiker toe behoort schrijfrechten heeft tot de directory waar de mail van de gebruiker in terecht komt. Verwijder je deze twee opties, dan heeft enkel de gebruiker, de directory eigenaar en de root-gebruiker rechten tot die directory.

    mode_fail_narrower = false: heeft een mailbox bestand niet de 0660 mode? dan doet Exim toch een poging de mail te leveren

     

    Dovecot authenticator

    Scroll naar het eind van het bestand (shortcut in nano: ctrl + shift + > ctrl + v, of in vi(m): shift + G) en voeg het onderstaande toe:

    #Dovecot Authenticator
     
    dovecot_login:
      driver = dovecot
      public_name = LOGIN
      server_socket = /var/run/dovecot/auth-client
      server_set_id = $auth1
    
    dovecot_plain:
      driver = dovecot
      public_name = PLAIN
      server_socket = /var/run/dovecot/auth-client
      server_set_id = $auth1 
    Toelichting

    De bovenstaande code is de 'Dovecot Authenticator': het gaat hier om een interface om de authenticatie-tools van Dovecot te kunnen gebruiken. Dovecot moet hiervoor auth-client en niet auth-userdb gebruiken.

    $auth1 bevat de identiteit van de gebruiker nadat die succesvol door de authenticatie van de SMTP-verbinding is gekomen.
     

    driver = dovecot: gebruik dovecot om inkomende mails aan af te leveren

    public_name: geeft het authenticatie mechanisme een naam

    server_socket: specificeert de socket die overeenkomt met de Dovecot-authenticatie interface.

    server_set_id: als de authenticatie slaagt, wordt de identiteit van de gebruiker opgeslagen in de variabele $auth1.

    Er zijn enkele aanvullende opties in de Exim-configuratie die je afhankelijk van je use case mogelijk nog verder wil aanpassen. Voor een volledig overzicht raden wij aan Exim's eigen documentatie te raadplegen. De meeste opties vind je op de volgende plekken:

    Sla tot slot de wijzigingen op en sluit de configuratie voor je verder gaat (ctrl + > > enter).


    Stap 6

    Maak het bestand /etc/listofdomains aan met het commando:

    nano /etc/listofdomains

     

    Stap 7

    In het bestand voeg je een lijst toe van alle domeinen (+ je hostname) die op je VPS mail mogen ontvangen. Staat een domein niet in dit bestand, dan kan Exim er geen mail voor verwerken. Ieder domein plaats je op een afzonderlijke regel, bijvoorbeeld:

    server.example.com
    example.com
    voorbeeld.nl
    

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


    IPv6

    Gebruik je IPv6, dan zal Exim eerst je IPv6-adres proberen. Hier wil Exim nog wel eens gebruik maken van een ander IPv6-adres dan je primaire IPv6-adres. Mocht je merken dat dit het geval is, controleer dan je IPv6-adressen met het commando:

    ip a

    Of stuur een e-mail naar jezelf en controleer welk IPv6-adres er gebruikt wordt. Zorg dat je deze vervolgens ook opneemt in je SPF-record en reverse DNS voor instelt in het TransIP-controlepaneel.

    Schakel je liever IPv6 uit? Voeg dan de code hieronder toe onder 'Runtime configuration file for Exim' aan /etc/exim/exim.conf:

    disable_ipv6 = true

    Dovecot installeren en configureren

     

    Stap 1

    Installeer Dovecot met het commando:

    yum -y install dovecot

     

    Stap 2

    De configuratie van Dovecot is verspreid over meerdere specifieke bestanden. Eerst pas je de SSL-configuratie in het bestand 10-ssl.conf:

    nano /etc/dovecot/conf.d/10-ssl.conf

     

    Stap 3

    Voeg onderstaande inhoud toe aan het bestand:

    ssl_cert = </etc/letsencrypt/live/mail.jedomein.nl/fullchain.pem 
    ssl_key = </etc/letsencrypt/live/mail.jedomein.nl/privkey.pem

    Sla daarna je wijzigingen op en sluit het bestand (ctrl + > > enter).

    Toelichting

    ssl_cert & ssl_key: verwijzen naar de locatie waar je Let's Encrypt SSL-certificaat staat.

    • Verander mail.jedomein.nl naar het subdomein die je wil gebruiken als server-naam voor inkomende en uitgaande mail.
       
    • Het certificaat genereer je in de laatste paragraaf van deze handleiding.
       

    Aanvullende informatie

    Je komt hier bij veel hanleidingen meestal de optie SSL = yes tegen. Standaard staat Dovecot ingesteld op SSL = required. SSL = required vereist in alle gevallen SSL/TLS. Dit is een veilige optie en daarom laten wij die op required staan.

    Wanneer je gebruik maakt van SSL = yes en disable_plaintext_auth=no (plaintext in deze context is een niet versleuteld wachtwoord), is je verbinding onveilig tenzij je enkel plaintext mechanismes gebruikt (e.g. auth { mechanisms = plain login }). Dan werkt SSL = yes in essentie hetzelfde als SSL = required. Er is dus geen reden om een andere optie dan 'required' te gebruiken.


     

    Stap 4

    Vervolgens open je de mail-configuratie. Hierin geef je aan waar de mailbox zich bevindt op je server.

    nano /etc/dovecot/conf.d/10-mail.conf

     

    Stap 5

    Pas in het bestand #mail_location = aan naar:

    mail_location = maildir:/home/vmail/%u

    Sla daarna je wijzigingen op en sluit het bestand (ctrl + > > enter).

    Toelichting

    Bij de configuratie van Exim heb je opgegeven het maildir-format te gebruiken in de directory /home/vmail/<mailadres>.

    Met maildir: geef je aan dat je het maildir-format gebruikt. /home/vmail/%u geeft aan de folder te gebruiken die overeenkomt met /home/vmail/<mailadres> (%u is een variabele die automatisch het gebruikte mailadres invult).


     

    Stap 6

    In stap 5 van de configuratie van Exim heb je een Dovecot-authenticator ingesteld. Je geeft Exim toestemming om Dovecot's authenticatiesysteem te gebruiken in 10-master.conf:

    nano /etc/dovecot/conf.d/10-master.conf

     

    Stap 7

    Voeg onderstaande inhoud toe onderaan in het geopende bestand.

    service auth {
       unix_listener auth-client {
          mode = 0660
          user = exim
       }
    }

    Sla daarna je wijzigingen op en sluit het bestand (ctrl + > > enter).

    Toelichting
    • Voegt een aanvullende service genaamd 'auth' toe.
       
    • De service gebruikt een unix listener: deze luistert in 0660-mode naar communicatie door een andere service met Dovecot. In dit geval via de dovecot authenticator uit het eerdere Exim-onderdeel).
       
    • User= bepaalt welke user (exim in dit geval) de service (hier de Dovecot authenticator) gebruikt die met Dovecot communiceert.

     

    Stap 8

    Open het bestand waar de authenticatie in wordt verzorgt:

    nano /etc/dovecot/conf.d/10-auth.conf

     

    Stap 9

    Pas de bestaande configuratie aan zodat auth_mechanisms er zo uit ziet als hieronder:

    auth_mechanisms = plain login

    Sla daarna je wijzigingen op en sluit het bestand (ctrl + > > enter).

    Toelichting
    auth_mechanisms = plain login: voegt ondersteuning voor plain en login toe. Dit zijn authenticatiemethodes die door (nagenoeg) alle mailsoftware ondersteund wordt.

     

    Stap 10

    Open tot slot het bestand /etc/dovecot/conf.d/auth-system.conf.ext. Hierin pas je de authenticatiemethode voor Dovecot aan, zodat je daadwerkelijke met virtuele domeinen kunt werken.

    nano /etc/dovecot/conf.d/auth-system.conf.ext

     

    Stap 11

    Plaats comments voor de bestaande passdb en userdb delen en voeg voor beide een nieuwe toe zoals in het voorbeeld hieronder:

    #passdb {
    #  driver = pam
      # [session=yes] [setcred=yes] [failure_show_msg=yes] [max_requests=<n>]
      # [cache_key=<key>] [<service name>]
      #args = dovecot
    #}
    
    passdb {
      driver = passwd-file
      args = /etc/dovecot/imap.passwd
    }
    
    #userdb {
      # <doc/wiki/AuthDatabase.Passwd.txt>
    #  driver = passwd
      # [blocking=no]
      #args =
    #
      # Override fields from passwd
      #override_fields = home=/home/virtual/%u
    #}
    
    userdb {
      driver = static
      args = uid=vmail gid=vmail home=/home/vmail/%u
    }
    Toelichting

    Door # te plaatsen voor de bestaande regels commentarieer je ze uit en worden ze niet meer toegepast. De nieuwe regels doen het volgende:

    • passdb: authenticeert de gebruiker. Eventuele aanvullende informatie zoals welke server de gebruiker naar geproxie wordt, of de gebruiker mag inloggen, etc. Meer informatie over de uitgebreide mogelijkheden vind je hier.
       
    • driver = passwd-file: ondersteund voor authenticatie een wachtwoord-bestand. Deze mag dezelfde structuur hanteren als /etc/passwd.
       
    • args = /etc/dovecot/imap.passwd: de locatie van het bestand waar het wachtwoord en mailadres in staat. Hier komen we verderop op terug.
       
    • userdb: haalt user specifieke informatie op wanneer het inloggen via passdb geslaagd is. Dit kan gaan om zaken als mailbox locatie, quota limiet, etc.
       
    • driver = static: gebruik één enkele UID en GUID voor alle mail-users en optioneel de home directories.
       
    • args = uid=vmail guid=vmail home=/home/vmail/%u: gebruik vmail als uid en guid (die maak je verderop aan) en specificeert dat alle mail te vinden is in /home/vmail/%u waarbij %u tijdens de authenticatie vervangen wordt door het e-mailadres waar van/naar gemaild wordt.

    Sla daarna de wijzigingen op en sluit het bestand (ctrl + > > enter).


    Firewall en aanverwante instellingen

    Voor de correcte werking van je mail en het genereren van Let's Encrypt certificaten, is het nodig enkele poorten open te zetten. Dit doe je met de commando's:

    firewall-cmd --zone=public --permanent --add-port=80/tcp
    firewall-cmd --zone=public --permanent --add-port=443/tcp
    firewall-cmd --zone=public --permanent --add-port=25/tcp
    firewall-cmd --zone=public --permanent --add-port=465/tcp
    firewall-cmd --zone=public --permanent --add-port=587/tcp
    firewall-cmd --zone=public --permanent --add-port=993/tcp
    firewall-cmd --zone=public --permanent --add-port=995/tcp
    firewall-cmd --reload
    • Poort 80 en 443 zijn nodig voor de Let's Encrypt-validatie (de acme-challenge).
    • Poort 993 en 995 zijn respectievelijk de IMAP- en POP3-poorten die Dovecot gebruikt voor TLS-verbindingen.
    • Poort 25, 465 en 587 zijn de poorten die Exim gebruikt voor het versturen en ontvangen van e-mail.

    Optionele tip: wil je poort 25 geheel kunnen sluiten? Dan is een aanpassingen in /etc/services nodig en van de variabele daemon_smtp_ports in /etc/exim/exim.conf


     

    Selinux

    Gebruik je Selinux (te controleren met 'sestatus')? Voeg dan de nodige poorten ook hierin toe met:

    semanage port --add -t ssh_port_t -p tcp 80
    semanage port --add -t ssh_port_t -p tcp 443
    semanage port --add -t ssh_port_t -p tcp 25
    semanage port --add -t ssh_port_t -p tcp 465
    semanage port --add -t ssh_port_t -p tcp 587
    semanage port --add -t ssh_port_t -p tcp 993
    semanage port --add -t ssh_port_t -p tcp 995

     

    Uitgaande mailpoorten openzetten

    Bij nieuwe VPS'en zijn de mailpoorten om veiligheidsredenen gesloten in het TransIP-controlepaneel. In dit artikel

    Kom je er niet uit?

    Ontvang persoonlijke hulp van onze supporters

    Neem contact op