Op Linux mailservers wordt meestal Exim of 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 Postfix en Dovecot installeert op een Linux-VPS met AlmaLinux 9, CentOS Stream 9, Rocky Linux 9, Ubuntu 22.04+, of Debian 12+ . In deze tutorial laten wij zien hoe je een lijst van 'virtual domains en mailboxes' gebruikt om mail te verwerken. Hiervoor maken wij gebruik van een database die beheerd wordt via MariaDB. 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, Debian, CentOS, AlmaLinux of Rocky Linux, waarop (bij CentOS, Alma en Rocky) 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.
- MariaDB moet geïnstalleerd zijn op je VPS. Hoe je MariaDB installeert en configureert leggen we in deze handleidingen uit voor CentOS Stream, AlmaLinux, Rocky Linux, Ubuntu en Debian.
Een database aanmaken
Voor de virtuele mailadressen raden wij aan een database te gebruiken. Hiermee is het eenvoudiger om domeinen en mailadressen toe te voegen dan vanuit de Postfix-configuratie zelf, bijvoorbeeld als je zelf een controlepaneel aanbiedt van waaruit mensen dit zelf kunnen doen. Je kunt dan eenvoudig gebruik maken van SQL statements.
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:
Ubuntu & Debian:
apt -y update && apt -y upgrade
CentOS, AlmaLinux & Rocky Linux:
dnf -y update
Wij raden aan na een update je VPS te herstarten. Veel updates worden pas daadwerkelijk doorgevoerd na een reboot. Hierdoor komen eventuele problemen in de configuratie van je server dan sneller aan het licht en kun je eventueel nog een back-up terugplaatsen.
Stap 3
Start nu eerst een SQL-shell. Een nadere toelichting van SQL-commando's vind je in ons artikel over MariaDB beheren via command-line.
mysql -u root -p
Vervolgens genereer je de SQL-gebruiker, database en tabelen voor je mailserver. Eerst maak je de database aan met het volgende commando. Je bent vrij de naam 'mailserver' aan te passen.
CREATE DATABASE mailserver;
Maak de gebruiker aan met het commando (vervang 'user' en 'password' naar wens):
GRANT SELECT ON mailserver.* TO 'user'@'127.0.0.1' IDENTIFIED BY 'password';
Pas deze wijziging toe met het commando:
FLUSH PRIVILEGES;
Stap 6
Schakel over naar de database 'mailserver' die je zojuist hebt aangemaakt met het commando:
USE mailserver;
Stap 7
Maak vervolgens een tabel aan voor respectievelijk de virtuele domeinen, e-mailadressen (inclusief wachtwoord) en aliassen. De code hieronder kun je in zijn geheel kopiëren en plakken in Putty.
CREATE TABLE virtual_domains ( DomainId INT NOT NULL AUTO_INCREMENT PRIMARY KEY, DomainName VARCHAR(50) NOT NULL ); CREATE TABLE virtual_mailboxes ( MailId INT NOT NULL AUTO_INCREMENT PRIMARY KEY, DomainId INT NOT NULL, password VARCHAR(255) NOT NULL, Email VARCHAR(100) UNIQUE KEY NOT NULL, FOREIGN KEY (DomainId) REFERENCES virtual_domains(DomainId) ON DELETE CASCADE ); CREATE TABLE virtual_aliases ( AliasId INT NOT NULL AUTO_INCREMENT PRIMARY KEY, DomainId INT NOT NULL, Source VARCHAR(100) NOT NULL, Destination VARCHAR(100) NOT NULL,FOREIGN KEY (DomainId) REFERENCES virtual_domains(DomainId) ON DELETE CASCADE
);
Stap 8
Sluit voor nu de SQL-shell met:
exit
Postfix installeren en configureren
Stap 1
Installeer Postfix met het commando:
Ubuntu & Debian:
dnf -y install postfix postfix-mysql
policycoreutils-python-utils
Je krijgt na de installatie automatisch een korte installatiewizard te zien. Er wordt gevraagd om je hostname, die standaard al ingevuld wordt.
Vervolgens moet je een mail server configuration type selecteren. Kies hier voor 'internet site'.
CentOS, AlmaLinux & Rocky Linux :
dnf -y install postfix postfix-mysql
policycoreutils-python-utils
Het kan zijn dat Postfix al aanwezig is op je VPS. Bij een minimal install van oudere CentOS-versies was dit het geval.
Stap 2
De configuratie van Postfix wordt aangestuurd via /etc/postfix/main.cf. Open dit bestand, bijvoorbeeld met:
nano /etc/postfix/main.cf
Stap 3
Pas de volgende waardes aan/voeg ze toe in het geopende bestand. Een deel van deze opties zijn optioneel. In de toelichting onder de code leggen wij de functie van deze opties uit en welke waardes je kunt gebruiken.
Een overzicht van alle beschikbare configuratieopties voor Postfix vind je hier.
Heb je voor de installatie van je VPS een SSH, one time password, of Cloud-Init installatie gebruikt? Stel dan voor de correcte werking van mydestination eerst je hostname in, zie deze handleidingen voor Ubuntu en CentOS.
myhostname = mail.example.com
mydomain = example.com
myorigin = $mydomain
smtp_bind_address = 123.123.123.123
smtp_bind_address6 = 2a01:7c8:d001:2::1
inet_interfaces = all
inet_protocols = all
mydestination = $myhostname, localhost.$mydomain, localhost
smtpd_recipient_restrictions = permit_mynetworks
home_mailbox = Maildir/
Stap 4
De Postfix-configuratie heeft (bijna) geen default of uitgecommentarieerde code voor SSL/TLS. Scroll naar het eind van het bestand en voeg de volgende code toe/pas de bestaande waardes aan. In de toelichting leggen wij de code nader toe.
Let op: In de versie van december 2021 van Postfix is er een kopje 'TLS parameters' aanwezig. Voeg de onderstaande code daar toe / pas de bestaande code aan waar nodig.
#TLS configuration options append_dot_mydomain = no biff = no
config_directory = /etc/postfix dovecot_destination_recipient_limit = 1smtp_tls_security_level = may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scachesmtpd_tls_cert_file=/etc/letsencrypt/live/mail.example.com/fullchain.pem smtpd_tls_key_file=/etc/letsencrypt/live/mail.example.com/privkey.pem
smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous, noplaintext smtpd_sasl_tls_security_options = noanonymous smtpd_tls_auth_only = yes smtpd_tls_security_level = may
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtpd_use_tls=yes
Stap 5
In deze stap voeg je de benodigde code toe om gebruik te maken van virtual mailboxes. Voeg aan het eind van het bestand de volgende code toe. In de toelichting leggen wij virtual mailboxes en de code nader toe.
# Virtual mail settings
virtual_transport = dovecot
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
virtual_mailbox_domains = mysql:/etc/postfix/virtual-mailbox-domains.conf
virtual_mailbox_maps = mysql:/etc/postfix/virtual-mailbox-users.conf
virtual_alias_maps = mysql:/etc/postfix/virtual-alias-maps.conf
Sla hierna de wijzigingen op en sluit het bestand (ctrl + x > y > enter).
Stap 6
In de vorige stap heb je de locatie opgegeven van de virtual_mailbox_domains-, virtual_mailbox_maps- en virtual_alias_maps-configuratiebestanden. Met de code hieronder maak je deze bestanden aan en configureer je ze.
Pas de waardes 'user', 'password' en 'mailserver' aan naar respectievelijk de naam en het wachtwoord van de database-gebruiker en de databse naam die je in stap 5 en 4 van het eerste onderdeel hebt ingesteld.
Tip: Je kunt de code bijvoorbeeld naar een tekst editor kopiëren en plakken, waar nodig de gegevens aanpassen en daarna in Putty plakken.
echo 'user = user' > /etc/postfix/virtual-mailbox-domains.conf
echo 'password = password' >> /etc/postfix/virtual-mailbox-domains.conf
echo 'hosts = 127.0.0.1' >> /etc/postfix/virtual-mailbox-domains.conf
echo 'dbname = mailserver' >> /etc/postfix/virtual-mailbox-domains.conf
echo "query = SELECT 1 FROM virtual_domains WHERE DomainName ='%s'" >> /etc/postfix/virtual-mailbox-domains.conf
echo 'user = user' > /etc/postfix/virtual-mailbox-users.conf
echo 'password = password' >> /etc/postfix/virtual-mailbox-users.conf
echo 'hosts = 127.0.0.1' >> /etc/postfix/virtual-mailbox-users.conf
echo 'dbname = mailserver' >> /etc/postfix/virtual-mailbox-users.conf
echo "query = SELECT 1 FROM virtual_mailboxes WHERE Email='%s'" >> /etc/postfix/virtual-mailbox-users.conf
echo 'user = user' > /etc/postfix/virtual-alias-maps.conf
echo 'password = password' >> /etc/postfix/virtual-alias-maps.conf
echo 'hosts = 127.0.0.1' >> /etc/postfix/virtual-alias-maps.conf
echo 'dbname = mailserver' >> /etc/postfix/virtual-alias-maps.conf
echo "query = SELECT Destination FROM virtual_aliases WHERE Source='%s'" >> /etc/postfix/virtual-alias-maps.conf
Stap 7
Pas de rechten aan op de bestanden zodat de root-user ze kan lezen en schrijven en de groep ze kan lezen:
chmod 640 /etc/postfix/virtual-mailbox-domains.conf chmod 640 /etc/postfix/virtual-mailbox-users.conf chmod 640 /etc/postfix/virtual-alias-maps.conf
Stap 8
Open /etc/postfix/master.cf:
nano /etc/postfix/master.cf
Stap 9
De configuratie in dit bestand beheerst alle processen die door Postfix worden gestart. Pas de configuratie aan, zodat het eerste deel er uit ziet als in het voorbeeld hieronder.
# # Postfix master process configuration file. For details on the format # of the file, see the master(5) manual page (command: "man 5 master" or # on-line: http://www.postfix.org/master.5.html). # # Do not forget to execute "postfix reload" after editing this file. # # ========================================================================== # service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (no) (never) (100) # ========================================================================== smtp inet n - n - - smtpd #smtp inet n - n - 1 postscreen #smtpd pass - - n - - smtpd #dnsblog unix - - n - 0 dnsblog #tlsproxy unix - - n - 0 tlsproxy submission inet n - n - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_tls_auth_only=yes -o smtpd_reject_unlisted_recipient=no # -o smtpd_client_restrictions=$mua_client_restrictions # -o smtpd_helo_restrictions=$mua_helo_restrictions # -o smtpd_sender_restrictions=$mua_sender_restrictions -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject # -o smtpd_relay_restrictions=permit_sasl_authenticated,reject -o milter_macro_daemon_name=ORIGINATING #smtps inet n - n - - smtpd # -o syslog_name=postfix/smtps # -o smtpd_tls_wrappermode=yes # -o smtpd_sasl_auth_enable=yes # -o smtpd_reject_unlisted_recipient=no # -o smtpd_client_restrictions=$mua_client_restrictions # -o smtpd_helo_restrictions=$mua_helo_restrictions # -o smtpd_sender_restrictions=$mua_sender_restrictions # -o smtpd_recipient_restrictions= # -o smtpd_relay_restrictions=permit_sasl_authenticated,reject # -o milter_macro_daemon_name=ORIGINATING #628 inet n - n - - qmqpd pickup unix n - n 60 1 pickup cleanup unix n - n - 0 cleanup qmgr unix n - n 300 1 qmgr #qmgr unix n - n 300 1 oqmgr tlsmgr unix - - n 1000? 1 tlsmgr rewrite unix - - n - - trivial-rewrite bounce unix - - n - 0 bounce defer unix - - n - 0 bounce trace unix - - n - 0 bounce verify unix - - n - 1 verify flush unix n - n 1000? 0 flush proxymap unix - - n - - proxymap proxywrite unix - - n - 1 proxymap smtp unix - - n - - smtp relay unix - - n - - smtp -o syslog_name=postfix/$service_name # -o smtp_helo_timeout=5 -o smtp_connect_timeout=5 showq unix n - n - - showq error unix - - n - - error retry unix - - n - - error discard unix - - n - - discard local unix - n n - - local virtual unix - n n - - virtual lmtp unix - - n - - lmtp anvil unix - - n - 1 anvil scache unix - - n - 1 scache
Ga naar het eind van het bestand en voeg daar nog de volgende regels toe:
Ubuntu & Debian:
dovecot unix - n n - - pipe flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${recipient}
CentOS, AlmaLinux & Rocky Linux:
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}
Sla tot slot je wijzigingen op en sluit het bestand (ctrl + x > y > enter).
Dovecot installeren en configureren
Stap 1
Installeer Dovecot met het commando:
Ubuntu & Debian:
apt -y install dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-mysql
CentOS, AlmaLinux & Rocky Linux:
dnf -y install dovecot dovecot-mysql
Stap 2
De configuratie van Dovecot is verspreid over meerdere specifieke bestanden. Eerst pas je de algemene configuratie aan in /etc/dovecot/dovecot.conf.
nano /etc/dovecot/dovecot.conf
Stap 3
Pas de waardes van de onderstaande opties aan in het bestand zodat die overeenkomen met dit voorbeeld.
Ubuntu & Debian:
!include_try /usr/share/dovecot/protocols.d/*.protocol listen = *, :: !include conf.d/*.conf !include_try local.conf
CentOS, AlmaLinux & Rocky Linux:
protocols = imap pop3 lmtp listen = *, :: !include conf.d/*.conf !include_try local.conf
Sla de wijzigingen op en sluit tot slot het bestand (ctrl + x > y > enter).
Optioneel:
Optioneel kun je in hetzelfde bestand met de onderstaande code de log output van Dovecot naar een ander bestand laten wegschrijven dan waar Postfix naar wegschrijft. Zo houd je je logbestanden overzichtelijker in geval van problemen.
log_path = /var/log/dovecot.log
Maak het opgegeven logbestand aan en pas de rechten aan, zodat Dovecot er gegevens naar kan wegschrijven.
touch /var/log/dovecot.log chmod 666 /var/log/dovecot.log
Sla de wijzigingen op en sluit tot slot het bestand (ctrl + x > y > enter).
Stap 4
Open de SSL-configuratie in het bestand 10-ssl.conf:
nano /etc/dovecot/conf.d/10-ssl.conf
Stap 5
Voeg onderstaande inhoud toe aan het bestand/pas de bestaande waarde aan:
ssl_cert = </etc/letsencrypt/live/mail.voorbeeld.nl/fullchain.pem
ssl_key = </etc/letsencrypt/live/
mail.voorbeeld.nl/privkey.pem
Sla daarna je wijzigingen op en sluit het bestand (ctrl + x > y > enter).
Stap 6
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 7
Pas in het bestand de onderstaande variabelen aan waar nodig:
mail_location =
maildir:/home/vmail/%d/%n/Maildir
namespace inbox {
inbox = yes
}
mail_privileged_group = mail
mbox_write_locks = fcntl
Sla daarna je wijzigingen op en sluit het bestand (ctrl + x > y > enter).
Stap 8
Je geeft Postfix toestemming om Dovecot's authenticatiesysteem te gebruiken in 10-master.conf. Open dit bestand met:
nano /etc/dovecot/conf.d/10-master.conf
Stap 9
Pas de inhoud aan zodat de services die hieronder staan in je configuratie overeenkomen. De uitgecommentarieerde stukken, herkenbaar aan dat de regels beginnen met #, hebben wij voor leesbaarheid er uit gelaten.
service imap-login {
inet_listener imap {
port = 143
}
inet_listener imaps {
port = 993
ssl = yes
}
}
service pop3-login {
inet_listener pop3 {
port = 110
}
inet_listener pop3s {
port = 995
ssl = yes
}
}
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
mode = 0600
user = postfix
group = postfix
}
}
service auth {
unix_listener auth-userdb {
mode = 0600
user = vmail
}
unix_listener /var/spool/postfix/private/auth
{
mode = 0666
user = postfix
group = postfix
}
user = dovecot
}
service auth-worker {
user = vmail
}
service dict {
unix_listener dict {
}
}
Stap 10
Open het bestand waar de authenticatie in wordt verzorgt:
nano /etc/dovecot/conf.d/10-auth.conf
Stap 11
Pas in dit bestand de volgende waardes aan zodat die er uit zien zoals hieronder:
disable_plaintext_auth = yes auth_mechanisms = plain login #!include auth-system.conf.ext !include auth-sql.conf.ext
Sla daarna je wijzigingen op en sluit het bestand (ctrl + x > y > enter).
Stap 12
Open vervolgens het bestand auth-sql.conf.ext:
nano /etc/dovecot/conf.d/auth-sql.conf.ext
Stap 13
Pas de passdb- en userdb-driver aan als volgt:
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
driver = static
args = uid=vmail gid=vmail home=/home/vmail/%d/%n/Maildir
}
Sla je wijzigingen op en sluit het bestand (ctrl + x > y > enter).
Stap 14
in auth-sql.conf.ext zag je misschien al dat passdb verwijst naar /etc/dovecot/dovecot-sql.conf.ext. Dit bestand bestaat nog niet maar hierin moeten de gegevens voor de MySQL-verbinding komen. Maak het aan met de commando's hieronder, waarbij je de waardes 'mailserver', 'user' en 'password' in de 2e regel vervangt door de gegevens zoals je die in stap 4 en 5 van het eerste deel van deze handleiding hebt ingesteld.
echo 'driver = mysql' > /etc/dovecot/dovecot-sql.conf.ext
echo 'connect = "host=127.0.0.1 dbname=mailserver user=user password=password"' >> /etc/dovecot/dovecot-sql.conf.ext
echo 'default_pass_scheme = SHA512-CRYPT' >> /etc/dovecot/dovecot-sql.conf.ext
echo "password_query = SELECT Email as User, password FROM virtual_mailboxes WHERE Email='%u';" >> /etc/dovecot/dovecot-sql.conf.ext
Vmail-gebruiker aanmaken
In de stappen hierboven heb je een paar keer als user 'vmail' ingesteld. In de stappen hieronder maak je deze user aan en pas je waar nodig rechten tot directories e.d. aan.
Stap 1
Maak de vmail user, group en bijbehorende home directory aan met:
useradd -u 5000 vmail -d /home/vmail/
usermod -a -G vmail vmail
groupmod -g 5000 vmail
mkdir /home/vmail/
Het mkdir-commando is normaal gesproken niet nodig, maar uit voorzorg toegevoegd mocht je OS niet met het -d argument bij useradd de home directory correct aanmaken.
Stap 2
Pas de rechten van de vmail-user aan voor /home/vmail en /etc/dovecot als volgt:
chown -R vmail:vmail /home/vmail
chown -R vmail:dovecot /etc/dovecot
chmod -R o-rwx /etc/dovecot
Firewall en gerelateerde 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:
Ubuntu & Debian:
ufw allow 80
ufw allow 443
ufw allow 25
ufw allow 465
ufw allow 587
ufw allow 993
ufw allow 995
CentOS Stream, AlmaLinux & Rocky Linux:
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 Postfix gebruikt voor het versturen en ontvangen van e-mail.
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 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 Postfix-jail is /var/log/maillog
SSL
In dit onderdeel maak je een SSL-certificaat aan met Let's Encrypt en automatiseer je het vernieuwen ervan.
Stap 1
Installeer Let's Encrypt met het commando:
Ubuntu & Debian:
apt -y install certbot
CentOS Stream, AlmaLinux & Rocky Linux:
yum -y install certbot
Stap 2
In deze stap genereer je een standalone certificaat met het onderstaande commando. Vervang hier mail.voorbeeld.nl door het subdomein dat je wil gebruiken om in je mailclient in te stellen als server voor inkomend en uitgaand verkeer.
Er zal je 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
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
De eerste keer dat je crontab start wordt gevraagd wat voor type editor je wil gebruiken. Wij gebruiken hier vi voor, waarbij Crontab in command mode opent en je overschakelt 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 (of gebruik de bestaande /var/log/letsencrypt/letsencrypt.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
Postfix en Dovecot hebben geen rechten tot de mappen waar de certificaten in zijn opgeslagen en tot het privkey1.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/privkey1.pem chmod 755
/etc/letsencrypt/live chmod 755 /etc/letsencrypt/live/mail.voorbeeld.nl
Een e-mailadres aanmaken
Stap 1
Maak eerst een directorie aan in /home/vmail/ voor het domein namens welke je mail gaat versturen en pas de eigenaar van die directorie aan, bijvoorbeeld:
mkdir -p /home/vmail/voorbeeld.nl/
Stap 2
Maak een directorie aan voor de mail van de gebruiker en pas de eigenaar van deze en de onderliggende directorie aan:
mkdir /home/vmail/voorbeeld.nl/gebruiker
chown -R vmail:vmail /home/vmail/voorbeeld.nl/
Stap 3
Start vervolgens een SQL-shell:
mysql -u root -p
Stap 4
Als je een mailadres wil toevoegen voor een domein dat nog niet in je database voorkomt (zoals wanneer je deze handleiding voor het eerst doorloopt), voeg je eerst het domein toe.
De huidige domeinen in je database controleer je met het commando:
SELECT * FROM mailserver.virtual_domains;
Een nieuw domein voeg je vervolgens toe met:
INSERT INTO mailserver.virtual_domains (DomainName) VALUES ('voorbeeld.nl');
Vervang hier 'voorbeeld.nl' door de naam van het domein dat je wil toevoegen
Stap 5
Voeg vervolgens een e-mailadres toe met de onderstaande code.
- Vervang 1 (de DomainId) door het id van het domein in de virtual_domains tabel, te controleren met:
SELECT * FROM mailserver.virtual_domains;
- Vervang transip@voorbeeld.nl en password door respectievelijk het gewenste mailadres en wachtwoord.
INSERT INTO mailserver.virtual_mailboxes
(DomainId, Email, Password)
VALUES
('1', 'transip@voorbeeld.nl', ENCRYPT('password', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))));
of in één regel:
INSERT INTO mailserver.virtual_mailboxes (DomainId, Email, Password) VALUES ('1', 'transip@voorbeeld.nl', ENCRYPT('password', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))));
Stap 6
Sluit vervolgens de SQL-shell met:
exit
Wanneer je voortaan een nieuw mailadres voor een bestaand domein aanmaakt, herhaal je stap 2, 3, 5 en 6 van dit onderdeel.
Alles inschakelen
Gefeliciteerd! Je bent nu klaar bent met de configuratie van je mailserver. Het enige dat nog resteert, is je mailserver in te schakelen en in je e-mail clients je mailadres toe te voegen. Schakel eerst je mailserver in met:
systemctl enable postfix systemctl enable dovecot systemctl restart postfix systemctl restart dovecot
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.
- 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 Postfix en Dovecot met TLS-beveiliging via Let's Encrypt behandelt. Voor de beveiliging van je mailserver raden wij aan ook nog de volgende documentatie door te nemen:
- Postfix anti-virus beveiliging met ClamAV
- Postfix antispam met spamassassin
- Blacklist-controle en geavanceerde anti-spam voor Postfix
- DKIM gebruiken met Postfix
1717655739780-postfix.sh1717655739782-postfixuninstall.sh