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:
- Een VPS met CentOS 7 of 8 waarop de EPEL-repository is toegevoegd.
- 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 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
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 + w in nano of /<woordwaaropjezoekt> in 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}{}{}{*}}
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
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
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
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
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 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 + x > y > 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 + 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).
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 + x > y > enter).
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).
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 }
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:
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