Hulpartikel overzicht

Hulpartikel

Exim & Dovecot installeren en configureren in Ubuntu en Debian

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 dit artikel laten wij zien hoe je Exim en Dovecot installeert en configureert op een VPS met Ubuntu of Debian. 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:
     
    • Een VPS met Ubuntu of Debian. Wij hebben deze stappen getest met Ubuntu 18.04 en Debian 10.
    • Correct ingestelde reverse-DNS.
    • Een domein waarvan de DNS naar je VPS verwijst, bijvoorbeeld via mail.voorbeeld.nl. In deze handleiding  (onder 'mail') geven wij een voorbeeld hoe je de DNS van je VPS voor e-mail naar je VPS verwijst.
       
  • Voer de commando's in dit artikel uit met sudo, of als root-user.

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:

apt -y update && apt -y upgrade

Wij raden aan na een update je VPS te herstarten. Veel updates en configuratiewijzingen worden pas daadwerkelijk doorgevoerd na een reboot / herstart van de betreffende service. Eventuele problemen in de configuratie van je server komen na een herstarten snel aan het licht en je kunt dan eventueel nog een back-up terugplaatsen.


 

Stap 3

Installeer Exim met het commando:

apt -y install exim4-daemon-heavy

 

Stap 4

De globale configuratie wordt via een user interface uitgevoerd. Je start deze met het commando:

dpkg-reconfigure exim4-config

 

Stap 5

Een configuratiewizard wordt gestart. De screenshots komen uit Ubuntu, maar de stappen zijn hetzelfde in Debian. In deze stap nemen we alle schermen door die je in dit proces tegen komt.

  • Als eerste kies je een mail server configuratie type. Selecteer 'Internet site; mail is sent and received directly using SMTP.' Exim zorgt voor het versturen en ontvangen van mail vanaf de ene mail server naar de andere. Deze eerste optie is daarop gericht. De andere opties zijn vooral bedoelt voor systemen met dynamische IP-adressen (wat je VPS niet gebruikt).
    exim configuration - select type
  • Vervolgens geef je de naam op van het domein dat toegevoegd wordt aan mailadressen die geen domeinnaam hebben (stel dat je mailt namens mail in plaats van mail@voorbeeld.nl).

    Het kan hier bijvoorbeeld gaan om mail die een programma op je VPS stuurt, bijvoorbeeld als automatische reactie op het blokkeren van een IP-adres. Gebruik hiervoor een domeinnaam waarvan de DNS naar je VPS verwijst, bijvoorbeeld je hostname.
    exim configuration - mail name
  • In het volgende scherm wordt gevraagd op welke IP-adressen Exim moet luisteren. Standaard staat hier enkel je localhost ingevuld, wat er voor zorgt dat Exim geen enkele externe verbinding accepteert en dus geen mail kan ontvangen van, of versturen naar externe servers. Maak dit veld dan ook leeg, of geef handmatig je primaire IPv4- en IPv6-adres op.
    exim configuration - select ip's
  • Hierna kun je een lijst met local domains opgeven. Dit zijn domeinen waar mail aan geleverd kan worden op je server. De werking is echter onhandig omdat mail@voorbeeld.com en mail@example.com aan beide zouden worden afgeleverd. Laat daarom in deze stap enkel je hostname staan en geef geen ander domein op. Verderop in deze handleiding gebruiken wij hiervoor een virtual domain lijst.
    exim configuration - local domains
  • Vervolgens krijg je de optie om een lijst van domeinen op te geven die via je server mail mogen relayen. Voor deze handleiding gaan wij ervan uit dat je mailserver enkel dient voor domeinen die rechtstreeks via je VPS mail versturen en ontvangen. Laat het veld hier voor dit scenario leeg en ga verder naar de volgende optie.
    exim configuration - relay domains
  • Je krijgt hierna dezelfde vraag, maar dan voor IP-adressen die via je server mogen relayen. Laat deze ook leeg en druk op 'enter' om verder te gaan.
    exim configuration - ip relays
  • Voor DNS-lookups kan Exim een Dial-On-Demand systeem gebruiken, maar dat is enkel relevant voor systemen met een internetverbinding die niet altijd actief is. Je VPS is in principe altijd online, dus kies hier voor 'No'.
    exim configuration - dns lookups
  • Exim kan gebruik maken van het mbox- of maildir-mailformat. Maildir splitst mail in losse bestanden en Mbox stopt mail in één groot bestand. Maildir is nieuwer en kan beter overweg met grotere mailboxes en clusters van mailservers, wat het schaalbaarder maakt. Wij kiezen om deze reden voor 'Maildir format in home directory', waarmee mail in de home directory van gebruikers (i.e. systeemaccounts) terecht komt.
    exim configuration - mbox or maildir
  • Exim kan de configuratie in (voornamelijk) één groot bestand plaatsen, of in ongeveer 50 kleine. Voor de stappen in deze en onze andere Exim-handleidingen gaan wij ervan uit dat je één bestand gebruikt en hier 'No' selecteert.

    Wij gebruiken liever één groot bestand (met de zoekfunctionaliteit van vi / nano zijn opties nog steeds snel te vinden). Veel kleine bestanden is geschikter voor kleinere wijzigingen, maar maakt het vinden van configuratieopties minder overzichtelijk.
    exim configuration - split config


Stap 6

Je bent nu weer teruggekomen in de command-line. Exim gebruikt standaard enkel poort 25. Je schakelt poort 465 en 587 in met het volgende commando:

echo "dc_local_interfaces='<; [0.0.0.0]:25; [0.0.0.0]:465; [0.0.0.0]:587; [::0]:25; [::0]:465; [::0]:587'" >> /etc/exim4/update-exim4.conf.conf

De opties die je hebt gekozen in stap 5 zijn opgenomen in /etc/exim4/update-exim4.conf.conf. Met dit commando voeg je een extra regel toe waarin je aangeeft dat Exim ook poort 465 en 587 moet gebruiken via je ipv4- en ipv6-interfaces.


 

Stap 7

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

nano /etc/exim4/exim4.conf.template

Stap 8

Pas in het geopende bestand de volgende opties aan / voeg ze toe. Ze staan niet allemaal onder elkaar dus je moet hiervoor door het bestand scrollen / zoeken (ctrl + w in nano of /<woordwaaropjezoekt> in vim). In bold staat aangegeven onder welke secties je ze vindt / toevoegt:

Main configuration settings

Pas de domainlist-optie aan en voeg auth_advertise_hosts toe.

domainlist local_domains = MAIN_LOCAL_DOMAINS : lsearch;/etc/listofdomains
auth_advertise_hosts = ${if eq{$tls_cipher}{}{}{*}}
Toelichting
  • domainlist local_domains is een lijst met alle domeinen waar mail naar gestuurd mag worden op je VPS. MAIN_LOCAL_DOMAINS zijn de domeinen die je in stap 4 als local domains hebt ingesteld (bij de 4e screenshot). Dat zou enkel je localhost moeten zijn.

    Met 'lsearch;/etc/listofdomains' stel je in dat de local_domains verder in een lijst in een bestand op je VPS zijn opgenomen. Hier komen wij in Stap 9 en 10op terug.
     
  • auth_advertise_hosts: Voeg deze optie ook in het 'main configuration settings'-deel toe. Het doet het volgende:

    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 *

main/03_exim4-config_tlsoptions

Scroll naar het kopje 'main/03_exim4-config_tlsoptions' en pas dit aan zoals hieronder om TLS in te schakelen:

#####################################################
### main/03_exim4-config_tlsoptions
#####################################################

MAIN_TLS_ENABLE = yes

 

main/03_exim4-config_tlsoptions

Een klein stukje verder naar beneden kom je het kopje 'main/03_exim4-config_tlsoptions' tegen met daaronder o.a. de optie 'tls_advertise_hosts ='. Pas dit stukje aan en breid het uit zodat het er uitziet zoals hieronder (en TLS via poort 465 geadverteerd wordt voor je server).

tls_advertise_hosts = *
tls_on_connect_ports = 465

 

virtual_router

Scroll onder het 'routers configuration'-deel naar het einde van de 850-router (end router/850_exim4-config_lowuid) en het begin van de 900-router en plaats onderstaande code direct daartussen

#####################################################
### virtual router configuration 
#####################################################

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

#####################################################
### end virtual router configuration 
#####################################################

Het resultaat ziet er dan als volgt uit:

#####################################################
### end router/850_exim4-config_lowuid
#####################################################
#####################################################
### virtual router configuration 
#####################################################

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

#####################################################
### end virtual router configuration
#####################################################
#####################################################
### router/900_exim4-config_local_user
#####################################################
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

De local_user-router gebruikt de waarde van de LOCAL_DELIVERY variabele om te bepalen hoe het de mail aflevert. Deze staat ingestelt om de mail_spool transport te gebruiken. Zoek naar de regel 'LOCAL_DELIVERY=mail_spool' (ctrl + shift + _ + w). Pas de waarde aan naar:

LOCAL_DELIVERY=local_delivery

Zoek nu naar de mail_spool transport en voeg tussen de 30_exim4-config_address_reply en 30_exim4-config_mail_spool comments het volgende toe:

#####################################################
### transport that handles delivery to local users
#####################################################

local_delivery:
  debug_print = "T:appendfile for $local_part@domain"
  driver = appendfile
  directory = $home/Maildir
  maildir_format
  delivery_date_add
  envelope_to_add
  return_path_add
  group = mail
  mode = 0660

#####################################################
### end local_delivery transport
#####################################################

Het resultaat ziet er als volgt uit:

#####################################################
### end transport/30_exim4-config_address_reply
#####################################################
#####################################################
### transport that handles delivery to local users
#####################################################

local_delivery
  debug_print = "T:appendfile for $local_part@domain"
  driver = appendfile
  directory = $home/Maildir
  maildir_format
  delivery_date_add
  envelope_to_add
  return_path_add
  group = mail
  mode = 0660

#####################################################
### end local_delivery transport
#####################################################
#####################################################
### transport/30_exim4-config_mail_spool
#####################################################
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 gebeurt 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 (of zoek op) het 'AUTHENTICATION CONFIGURATION'-deel van het bestand en voeg het onderstaande toe onder 'begin authenticators':

#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 + x > y > enter).


Stap 9

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

nano /etc/listofdomains

 

Stap 10

In het bestand voeg je een lijst toe van alle domeinen (+ je hostname) die op je VPS mail mogen ontvangen / versturen. 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 + x > y > enter).

Hiermee is de installatie en configuratie van Exim klaar. Start Exim echter nog niet tot je ook klaar bent met Dovecot en de SSL-configuratie.


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

Stuur alternatief 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/exim4/exim4.conf.template:

disable_ipv6 = true

Dovecot installeren en configureren

 

Stap 1

Installeer Dovecot met het commando:

apt -y install dovecot-core dovecot-imapd dovecot-pop3d

 

Stap 2

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

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

 

Stap 3

Pas in het bestand de locatie van je SSL-certificaten aan (zie de toelichting):

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 + x > y > 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 verderop in deze handleiding. 

 

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 + x > y > 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 8 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

Pas de bestaande auth-service aan zodat die de delen hieronder bevat en plaats een # voor de regels die over auth-userdb gaan, oftewel:

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

}

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

Toelichting
  • De service gebruikt een unix listener: een soort  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 + x > y > 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 (of pas de bestaande er op aan):

#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 + x > y > 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:

ufw allow 80/tcp
ufw allow 443/tcpufw allow 25/tcp
ufw allow 465/tcp
ufw allow 587/tcp
ufw allow 993/tcp
ufw allow 995/tcp
  • 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.

 

Uitgaande mailpoorten openzetten

 

Bij nieuwe VPS'en zijn de mailpoorten om veiligheidsredenen gesloten in het TransIP-controlepaneel. In dit artikel laten wij zien hoe je ze open zet.


 

VPS-firewall

Gebruik je de VPS-firewall in het TransIP-controlepaneel? Zet dan ook daarin de poorten 80, 443, 993, 995 en 587 open.


 

Fail2ban

Gebruik je Fail2Ban? De logpath voor de Exim-jail is /var/log/exim4/mainlog


Een SSL-certificaat toevoegen

De basis-configuratie van Exim en Dovecot is voltooid. In de eerdere stappen heb je de configuratie zo aangepast dat SSL (TLS) vereist is. In dit onderdeel maak je een SSL-certificaat aan en automatiseer je het vernieuwen ervan.

 

Stap 1

Als SSL(TLS)-certificaat gebruiken we een Let's Encrypt-certificaat. Als je nog geen Let's Encrypt geïnstalleerd hebt, installeer je het eerst met het commando:

apt -y install certbot

 

Stap 2

In deze stap genereer je een standalone certificaat. Vervang in het commando hieronder mail.voorbeeld.nl door het subdomein dat je hebt ingesteld in stap 9 van het vorige onderdeel.

Er zal de eerste keer dat je dit commando gebruikt op je VPS om een e-mailadres en toestemming gevraagd worden voor de algemene voorwaarden, en voor het delen van je e-mailadres met de Electronic Frontier Foundation (optioneel).

certbot certonly --standalone -d mail.voorbeeld.nl

Host je een webserver op je VPS? Dan zal het commando hierboven een melding geven dat poort 80 in gebruik is. Gebruik in dat geval het commando hieronder (vervang /var/www/html/ door /usr/share/nginx/html als je Nginx gebruikt).

certbot certonly --webroot -w /var/www/html/ -d mail.voorbeeld.nl

 

Stap 3

Je Let's Encrypt-certificaat en keyfile zijn opgeslagen in /etc/letsencrypt/live/<hostname>/ (de exacte locatie staat in de output van het commando in stap 2).

Het voordeel van Let's Encrypt is dat je het verlengen van de certificaten kunt automatiseren. Dit doe je middels een cronjob die je aanmaakt met:

crontab -e

 

Stap 4

Crontab werkt praktisch hetzelfde als vi. Het opent in command mode en je schakelt over op insert mode met de toets 'i'. Voeg daarna de inhoud hieronder toe.

SHELL=/bin/bash
HOME=/
@monthly certbot -q renew >> /var/log/le.log
  • De cronjob wordt iedere maand om 0:00 uitgevoerd.
  • -q zorgt ervoor dat er geen output wordt gegenereerd, behalve bij errors.
  • renew vernieuwt alle Let's Encrypt-certificaten die binnen 30 dagen verlopen. Let's Encrypt certificaten zijn 90 dagen geldig, dus hiermee wordt elke twee maanden een nieuw certificaat gegenereerd.
  • >> /var/log/le.log stuurt de output naar het bestand le.log. Deze maak je aan met het commando: touch /var/log/le.log

Door achtereenvolgens esc > :wq! te typen sluit je de crontab en sla je je wijzigingen op. Als alles goed gaat krijg je de volgende bevestiging te zien:

crontab: installing new crontab

 

Stap 6

Exim en Dovecot hebben geen rechten tot de mappen waar de certificaten in zijn opgeslagen en tot het privkey.pem bestand. Pas de rechten aan zodat beide er gebruik van kunnen maken:

chmod 755 /etc/letsencrypt/archive
chmod 755 /etc/letsencrypt/archive/mail.voorbeeld.nl
chmod 644 /etc/letsencrypt/archive/mail.voorbeeld.nl/privkey.pem
chmod 755 /etc/letsencrypt/live
chmod 755 /etc/letsencrypt/live/mail.voorbeeld.nl

 

Stap 7

Exim gebruikt in Ubuntu en Debian standaard /etc/exim4/exim.crt en /etc/exim4/exim.key als tls certificaat en private key. Deze bestaan nog niet en de benodigde bestanden heb je in de vorige stappen met Let's Encrypt gegenereerd. Om deze bestanden te gebruiken kun je een symbolic link gebruiken waarbij je exim.key en exim.crt verwijst naar de Let's Encrypt certificaten:

ln -s /etc/letsencrypt/live/mail.jedomein.nl/fullchain.pem /etc/exim4/exim.crt
ln -s /etc/letsencrypt/live/mail.jedomein.nl/privkey.pem /etc/exim4/exim.key

 

E-mailadressen aanmaken

 

De laatste voorbereiding

Voor je daadwerkelijk e-mailadressen kunt aanmaken is er nog enige voorbereiding nodig: het aanmaken van de Vmail user en groep. Alle mail wordt opgeslagen in de home directory van deze gebruiker, bijvoorbeeld /home/vmail/mail@voorbeeld.nl/.

Daarnaast maak je het bestand aan waar de authenticatiegegevens van gebruikers in terecht komen en stel je een locatie in waar alle mail die naar de root-user op je VPS gestuurd wordt heen kan.

 

Stap 1

Eerder in deze handleiding hebben wij ingesteld dat alle mail wordt opgeslagen in de /home/vmail/<mailadres> directories. Om hier gebruik van te kunnen maken maak je eerst de vmail gebruiker en groep aan:

useradd -m vmail
usermod -a -G vmail vmail

(De home directory voor Vmail wordt automatisch aangemaakt).


 

Stap 2

Maak vervolgens het bestand waar de namen van de mailadressen en bijbehorende inloggegevens in worden opgeslagen.

touch /etc/dovecot/imap.passwd

 

Stap 3

Open het bestand /etc/aliases. Hierin staat ingesteld waar mail naar specifieke systeem-users naartoe gaat.

nano /etc/aliases

 

Stap 4

Standaard staat de gebruiker die je hebt aangemaakt ingesteld om mail te ontvangen die aan de root-user is gericht. Je kunt dit aanpassen zoals in het voorbeeld hieronder om een specifiek mailadres op te geven.

root:           mail@voorbeeld.nl

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


 

Stap 5

Nu de (basis) opties goed staan ingesteld en de vmail user bestaat, genereer je de Exim master configuration file met het commando:

update-exim4.conf
  • Door in Stap 5 op te geven dat je één enkel configuratiebestand gebruikt, wordt het bestand /etc/exim4/exim4.conf.template leidend voor de configuratie van Exim.
     
  • Het commando update-exim4.conf voert aanpassingen in /etc/exim4/exim4.conf.template door. Gebruik dit iedere keer wanneer je dit bestand aanpast.
     
  • Alternatief kun je zelf een configuratiebestand maken. Hiervoor gebruik je /etc/exim4/exim4.conf (als Exim een bestand met deze naam ziet, is die leidend voor je configuratie). Dit bestand is standaard niet aanwezig en kun je de exim4.conf.template als basis voor gebruiken, bijvoorbeeld met:
cp /etc/exim4/exim4.conf.template /etc/exim4/exim4.conf

 

Stap 6

Schakel tot slot Exim en Dovecot in en stel beide in om automatisch te starten met een reboot van je VPS:

systemctl enable exim4
systemctl enable dovecot
systemctl start exim4
systemctl start dovecot

 

E-mailadressen aanmaken

Om het jezelf makkelijk te maken, is het handig een script te maken die je kunt gebruiken om nieuwe adressen aan te maken. Daarmee bespaar je jezelf de moeite om iedere keer dat je een e-mailadres aanmaakt alle bijbehorende code te typen. Een dergelijk script maak je als volgt aan:

Stap 1

Open/maak het bestand /etc/dovecot/create_mail.sh (of kies een andere lokatie/naam):

nano /etc/dovecot/create_mail.sh

Vervang de locatie / naam van het bestand naar wens, de .sh extensie moet wel behouden blijven.


 

Stap 2

Geef het bestand de inhoud hieronder.

#!/bin/bash
read -p " Enter user's mailaddress: " mailaddress
read -sp " Enter password: " passwd

sudo mkdir /home/vmail/$mailaddress
sudo chown vmail:vmail /home/vmail/$mailaddress
sudo chmod go-rwx /home/vmail/$mailaddress
sudo echo $mailaddress:`dovecot pw -s SHA256-CRYPT -p $passwd` >> /etc/dovecot/imap.passwd

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

Toelichting
  • read - p: Deze regels prompten je voor respectievelijk het nieuwe mailadres en het bijbehorende wachtwoord. Je input wordt als variabele ($mailaddress en $passwd) opgeslagen. Met -s wordt het wachtwoord niet getoond.
     
  • mkdir /home/vmail/$mailaddress: maakt de directory /home/vmail/$mailaddress aan, waarbij $mailaddress het nieuwe e-mailadres is.
     
  • chown etc: maakt de gebruiker en groep vmail eigenaar van /home/vmail/$mailaddress. Dit is nodig omdat deze gebruiker en groep door Exim en Dovecot gebruikt worden voor het verwerken van mail.
     
  • chmod etc: verwijdert read, write en execute permissies van de groep en andere user. Vmail behoudt wel de rechten.
     
  • echo $mailaddress:'dovecot pw etc: plaatst een regel onder de nieuwste regel in het bestand /etc/dovecot/imap.passwd met de structuur: mail@voorbeeld.nl:{SHA256-CRYPT}$5$eNq1qHXAgVmetc//

    Via dovecot pw -s SHA256-CRYPT -p $passwd` wordt de $passwd variabele omgezet in een SHA256 encrypted string. Je kunt dit bijvoorbeeld ook veranderen naar SHA512-CRYPT als je er een schepje bovenop wil doen.
  • Er zijn meer mogelijkheden dan in bovenstaand voorbeeld. Je zou bijvoorbeeld een extra prompt kunnen inbouwen om het wachtwoord te bevestigen: read -sp " Confirm password: " passwd1. Je kunt dan een if then else constructie maken waarbij $passwd en $passwd 1 met elkaar vergelijken worden. Matchen ze niet, dan laat je bijvoorbeeld de gebruiker het opnieuw opgeven.
     
  • Je zou ook een tweede script kunnen maken om wachtwoorden te veranderen (e.g. met een SED-commando). Let wel dat je daarvoor ook dovecot pw gebruikt.

 

Stap 3

Geef jezelf rechten om ook daadwerkelijk het script uit te mogen voeren met:

chmod 700 /etc/dovecot/create_mail.sh

Op deze manier heeft enkel de eigenaar rechten het script uit te voeren. Stel dat je meer gebruikers toegang wil geven tot het uitvoeren van dit script, dan zou je bijvoorbeeld een aparte groep aanmaken daarvoor, met chmod die groep uitvoerrechten geven (chmod 750), met chown de groep aanpassen die eigendom heeft tot het bestand, en met usermod de gewenste gebruikers aan die groep toevoegen.


 

Stap 4

Voer nu het script uit om een e-mailadres aan te maken:

sudo /etc/dovecot/create_mail.sh

 

Problemen met het aanmaken van mailadressen? De rechten en eigendom voor de /home/vmail/ directory moeten als volgt staan (te controleren met ls -lah /home/):

drwxr-x-r-x   vmail vmail 

E-mail instellen in mail software en apps

Voor deze handleiding hebben wij een domein gebruikt waarbij het MX-record de waarde 10 mail heeft en het subdomein mail naar de VPS verwijst. Wij gaan ervan uit dat je dezelfde structuur aanhoudt, zo niet, pas dan onderstaande aan naar je eigen scenario.

Voor het instellen van je mailadres in je mailsoftware gebruik je de volgende gegevens:

  • E-mailadres: het gewenste e-mailadres waar je mee wil mailen. Die moet bestaan in /etc/dovecot/imap.passwd
  • Username: hetzelfde e-mailadres als hierboven
  • Password: het bijbehorende (niet versleutelde) wachtwoord
  • Account naam: nogmaals hetzelfde e-mailadres
  • Send message using the name: De naam waarvan je wilt dat die verschijnt voor je e-mails.
     
  • Incoming server: mail.voorbeeld.nl (het subdomein dat verwijst naar je VPS)
  • Account type: imap of pop3. De verschillen worden hier uitgelegd.
  • Incoming port: 993 (IMAP) of 995 (POP3)
  • Require SSL: yes, of SSL/TLS
     
  • Outgoing (smtp) server: mail.voorbeeld.nl (het subdomein dat verwijst naar je VPS)
  • Outgoing port: 465 of 587
  • Require SSL: yes, of SSL/TLS
  • Outgoing server requires authentication: yes
  • Use the same user name and password for sending mail: yes

 

Daarmee zijn wij aan het eind gekomen van deze handleiding. Hierin hebben wij de basis van het opzetten van een mailserver met Exim en Dovecot met TLS-beveiliging via Let's Encrypt behandelt. Voor aanvullende features zoals  antivirus, antispam, en DKIM, zie ons overzicht van mail-documentatie voor VPS'en

Mocht je aan de hand van dit artikel 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.

0
krjanssen 15 augustus 2022 (#8597)

Er staat dat de rechten van de folder drwxr-x-r-x vmail vmail moet zijn. Zou dat niet drwxr--xr-x vmail vmail moeten zijnchmod 715 vmail?

0
Matthijs van Beek Admin 26 februari 2021 (#5416)

@robsel,

Bedankt voor het compliment! Poort 25 is inderdaad bedoelt voor het ontvangen van mail (en versturen zonder SSL). De andere poorten zijn noodzakelijk voor het versturen, maar als je enkel mail wil ontvangen is poort 25 voldoende.

0
robsel 22 januari 2021 (#5272)

Hoi, goede duidelijke manual, ik heb er veel van geleerd.

Ik heb nog wel even een vraagje. Ik ga Exim niet instellen als uitgaande server voor mailclients, alleen voor het ontvangen van mail. Volstaat het om dan poort 25 open te zetten in de firewall?

Groet Rob

0
Matthijs van Beek Admin 10 november 2020 (#4990)

@stacium,

Graag gedaan! Dit moest inderdaad live zijn in plaats van archive. We hebben zojuist het artikel hierop aangepast.

0
stacium 16 oktober 2020 (#4924)

Dank voor deze handleiding! Wel een vraag bij SSL-stap7, waarom linken jullie naar archive en niet naar /etc/letsencrypt/live/..? Ik blijk nu een verlopen certificaat te gebruiken terwijl certbot aangaf dat de key (uit /live/) up to date was

0
flextravel 9 maart 2020 (#4167)

Ik heb het al gevonden waardoor het komt. Als je in jullie beheersysteem icm google-chrome iets kopieert en plakt in de console verdwijnen de accolades. Daar moet je op letten dat je die er weer handmatig bij zet.

0
Matthijs van Beek Admin 9 maart 2020 (#4165)

@flextravel,

Ik heb net je bericht vanuit het controlepaneel beantwoord en zie nu pas je reactie hier. Ik stel voor het verder vanuit het controlepaneel op te pikken.

Zou je in je reactie ook kunnen aangeven wat er precies op regel 32 in je configuratie staat? Ik keek net bij een Ubuntu test-VPS in /etc/exim4/exim4.conf.template en zie daar iets anders op regel 32.

De user Debian-exim klopt inderdaad ook. Ubuntu is gebaseerd op Debian en daar is dit van afgeleid.

0
flextravel 9 maart 2020 (#4164)

@Matthijs van Beek, Ik heb nog een opmerking bij het hoofdstuk E-mail adressen aanmaken. Bij stap 5 update-exim4.conf kreeg ik ook een foutmelding dat er een ';' werd verwacht Dat leek me vreemd dus ik heb aanhaling teken toegevoegd op regel 32 ",; en achter 587" Toen leek de update goed te gaan. Misschien moet je daar ook nog even naar kijken?

Nog een opmerking: Bij Dovecot stap 5 staat: user = Debian-exim Klopt dat ook bij een Ubuntu installatie?

0
Matthijs van Beek Admin 9 maart 2020 (#4160)

@flextravel,

Bedankt voor je feedback! Wij hebben het artikel een update gegeven om dit te verduidelijken. Voor het gemak ook hier:

1) De naam klopt inderdaad niet in het voorbeeld en hebben wij aangepast. De exacte plek waar je een transport plaatst maakt verder overigens niet uit, zolang die zich maar in het onderdeel 'Transports configuration' bevindt. Enkel routers worden in chronologische volgorde afgegaan bij inkomende mail (daar is dus de volgorde zeer belangrijk). Matched een inkomend bericht met een router, dan wordt de bijbehorende transport gebruikt, ongeacht waar in het transports deel die is geconfigureerd.

2) Dit moet /etc/exim4/exim4.conf.template zijn als je één enkel configuratiebestand gebruikt zoals in de handleiding, zie stap 5 van 'een e-mailadres aanmaken'.

3) Zou je de rechten kunnen controleren van de /home/vmail directory (ls -lah /home/) en de output naar onze supportafdeling sturen? Om verdere problemen met rechten te voorkomen kun je het script het beste uitvoeren met sudo /etc/dovecot/create_mail.sh

4) Het klinkt alsof een andere router wordt geactiveerd. Zou je kunnen kijken of je ziet wat er met de mail gebeurd in /var/log/mail.log en dat doorsturen naar onze supportafdeling via 'neem contact op' onderaan dit artikel? Mocht je in je log niets terugzien, stuur dan ook gerust de volledige inhoud van /etc/exim4/exim4.conf.template mee.

0
flextravel 6 maart 2020 (#4153)

Ik heb nog wel een paar opmerkingen:

  1. Er staat: Zoek nu naar de mail_spool transport en voeg tussen de 30_exim4-config_address_reply en 30_exim4-config_mail_spool comments het volgende toe:

Het resultaat ziet er als volgt uit: #####################################################

end router/850_exim4-config_lowuid

Dat klop volgens mij niet en moet zijn 30_exim4-config_mail_spool comments of ik zit helemaal verkeerd.

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

Volgens mij moet dat exim4.conf zijn

  1. Het script om emailadressen aan te maken maakt bij mij geen directories aan

  2. Ik krijg overigens de mailserver nog niet aan het werk. Mail lijkt wel binnen te komen maar verdwijnt.

Gr. Rob

0
bazary 3 maart 2020 (#4143)

Super!

Kom je er niet uit?

Ontvang persoonlijke hulp van onze supporters

Neem contact op