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).
- 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. - 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.
- 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.
- 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.
- 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.
- 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 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 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.
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
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}{}{}{*}}
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 #####################################################
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
#####################################################
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
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
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:
- algemene transport-opties: bevat opties om bijvoorbeeld extra header-informatie aan mails toe te voegen
- appendfile transport-opties: bevat opties voor transports zoals de local_delivery (zie hierboven).
Sla tot slot de wijzigingen op en sluit de configuratie voor je verder gaat (ctrl + x > y > enter).
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).
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).