Mailserver Ubuntu 16.04 VPS met SSL

June 18th, 2016

Introductie:Dit is een tutorial voor de installatie van een mailserver met SSL op een Ubuntu 16.04 VPS. Hierin maak ik gebruik van Postfix, Dovecot, Amavisd-new, Spamassassin en ClamAV. De SSL certificaten die hier gebruikt worden zijn van Let’s Encrypt. Deze zijn gratis en automatisch te verlengen. Zie daarvoor mijn andere tutorial: https://www.transip.nl/forum/post/prm/4279

Deze tutorial is geschreven met als basis de tutorial van Ronald Mones welke op de volgende lokatie te vinden is: https://www.transip.nl/forum/post/prm/1500

Reverse DNS instellen:

Ik gebruik als DNS naam voor de VPS altijd de vorm vps.domein.nl Dit zal ik dus ook in deze tutorial gebruiken.

Zorg dat je in je DNS manager een A en/of AAAA record hebt naar je ipadressen van je VPS.

Ga daarna naar je “Controlepaneel” -> “VPS & Colocatie”. Klik daar op de knop “IP adressen”

Klik op je ipadres. Vul daar je dns adres in (in mijn voorbeeld dus: vps.domein.nl)

Doe dit voor alle ipadressen.

DNS Instellingen:
Zorg ervoor dat jouw server een MX record heeft. In het voorbeeld gaan we uit van mail.domein.nl. Het MX record is dus mail.domein.nl. Wanneer je bij TransIP een aanvraagt is dit standaard goed ingesteld.

Als je het zelf moet instellen zorg dan voor een A en/of AAAA record voor mail.domein.nl naar de ipadressen van je VPS.

Daarna maak je een MX record aan met prioriteit 10 voor mail.domein.nl

(Geef het een minuutje of 10 om goed te verwerken)

Controleer of alles goed staat via bij voorbeeld: http://mxtoolbox.com/

Certificaat aanmaken:

Voeg hierna aan de ssl aanvraag bij Let’s Encrypt een paar extra aliassen toe (Zie de andere tutorial van mij, maar je kan natuurlijk ook andere certificaten gebruiken.):

sudo letsencrypt certonly –config /etc/letsencrypt/cli.ini –webroot -w /var/www/html/letsencrypt -d domein.nl -d www.domein.nl -d vps.domein.nl -d webmail.domein.nl –rsa-key-size 2048

Wanneer dit allemaal klopt beginnen we met de tutorial.

Mailserver installeren:
Om te beginnen moeten we een mailserver installeren. Hiervoor gebruiken we Postfix. Om dit te installeren gebruiken we het volgende commando:

sudo apt install postfix

Tijdens dit proces worden een aantal vragen gesteld.

Bij General type of mail configuration: Kies hier voor Internet Site.
Daarna zal er gevraagd worden om de System mail name: Hier moet je vps.domein.nl invullen.

Wanneer dit klaar is open je de standaard configuratie. Dit doe je met het volgende commando:

Maak een backup van de originele configuratie:

sudo mv /etc/postfix/main.cf /etc/postfix/main.cf.org

Maak nu een nieuwe configuratie aan:

sudo nano /etc/postfix/main.cf

Plak hierin de volgende configuratie (verander domein.nl overal in je eigen domein)

postscreen_greet_action = enforce
postscreen_access_list = permit_mynetworks
content_filter = smtp-amavis:[127.0.0.1]:10024
home_mailbox = Maildir/
virtual_mailbox_domains = /etc/postfix/vhosts
virtual_mailbox_base = /home/vmail
virtual_mailbox_maps = hash:/etc/postfix/vmaps
virtual_minimum_uid = 1000
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000

# Debian specific: Specifying a file name will cause the first
# line of that file to be used as the name. The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP
biff = no

# appending .domain is the MUA’s job.
append_dot_mydomain = no

# Uncomment the next line to generate “delayed mail” warnings
#delay_warning_time = 4h

readme_directory = no

# TLS parameters
smtpd_tls_cert_file=/etc/letsencrypt/live/domein.nl/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/domein.nl/privkey.pem
smtp_tls_cert_file=/etc/letsencrypt/live/domein.nl/fullchain.pem
smtp_tls_key_file=/etc/letsencrypt/live/domein.nl/privkey.pem
smtp_use_tls=yes
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_tls_protocols = !SSLv2, !SSLv3
smtpd_tls_ciphers = high
smtp_tls_protocols = !SSLv2, !SSLv3
smtp_tls_ciphers = high

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = vps.domein.nl
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = vps.domein.nl, localhost.domein.nl, , localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth-client

Sla daarna het bestand op door de combinatie Control + X te gebruiken en daarna de Y in te drukken.

Aanmaken van virtuele mailboxen:

Bij het maken van deze tutorial ben ik er vanuit gegaan dat er in de toekomst meerdere domeinnamen toegevoegd moeten kunnen worden in de mailserver. Daarom maken we een virtuele mailbox gebruiker aan.

Voor het creëren van de virtuele mailbox gebruiker moeten we een aantal handelingen uitvoeren.

sudo groupadd -g 5000 vmail

En

sudo useradd -m -u 5000 -g 5000 -s /bin/bash vmail

Sla daarna het bestand op door de combinatie Control + X te gebruiken en daarna de Y in te drukken.
Open nu het volgende bestand:

sudo nano /etc/postfix/vhosts

Type hier de domeinnaam/domeinnamen die je wilt gebruiken.

(Voorbeeld)
domein.nl
domein.com
domein.eu

Sla daarna het bestand op door de combinatie Control + X te gebruiken en daarna de Y in te drukken.

Installeren Dovecot IMAP/POP3 server:

Om de e-mail te kunnen lezen in outlook of een andere e-mailcliënt gebruiken we Dovecot. Dat zal hier uitgelegd worden.

Om te beginnen starten we met de installatie van Dovecot. Voer het volgende commando uit:

sudo apt install dovecot-common dovecot-imapd dovecot-pop3d

Bij deze tutorial ga ik er vanuit dat er GEEN gebruik gemaakt wordt van een Self Signed SSL certificaat. Na het starten van het vorige commando krijg je de vraag of je een SSL certificaat wil maken. Kies hier voor No. We gaan namenlijk de certificaten die we via Let’s Encrypt anmaken gebruiken.

We gaan Dovecot gebruik laten maken van onze eigen configuratie. Daarom maken we eerst een back-up van de originele configuratie met het volgende commando:

sudo mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig

Daarna starten we met de configuratie van Dovecot. Voer het volgende commando uit:

sudo nano /etc/dovecot/dovecot.conf

Plak hier de volgende tekst in:

# 2.2.22 (fe789d2): /etc/dovecot/dovecot.conf
# Pigeonhole version 0.4.13 (7b14904)
# OS: Linux 4.4.0-24-generic x86_64 Ubuntu 16.04 LTS ext4
auth_verbose = yes
base_dir = /var/run/dovecot/
disable_plaintext_auth = no
info_log_path = /var/log/dovecot.info
log_path = /var/log/dovecot
log_timestamp = “%Y-%m-%d %H:%M:%S ”
mail_location = maildir:/home/vmail/%d/%n
namespace inbox {
inbox = yes
location =
mailbox Drafts {
special_use = \Drafts
}
mailbox Junk {
special_use = \Junk
}
mailbox Sent {
special_use = \Sent
}
mailbox “Sent Messages” {
special_use = \Sent
}
mailbox Trash {
special_use = \Trash
}
prefix =
}
passdb {
args = /etc/dovecot/passwd
driver = passwd-file
}
passdb {
driver = pam
}
protocols = ” imap pop3″
service auth {
unix_listener /var/spool/postfix/private/auth-client {
group = postfix
mode = 0660
user = postfix
}
user = root
}
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
}
}
ssl_cert = </etc/letsencrypt/live/domein.nl/fullchain.pem
ssl_key = </etc/letsencrypt/live/domein.nl/privkey.pem
userdb {
args = /etc/dovecot/users
driver = passwd-file
}
userdb {
driver = passwd
}

Je kan nu nog steeds zonders SSL connecten met. Als je dit zou willen uitschakelen, kan je in de config hierboven de listeners zonder ssl uit kunnen zetten door er # voor te zetten. Bijvoorbeeld:

#service pop3-login {
#inet_listener pop3 {
#port = 110
#}

Sla daarna het bestand op door de combinatie Control + X te gebruiken en daarna de Y in te drukken.

Spamfilter en Antivirus:

Hierna installeren we nog een spamfilter en antivirus:

sudo apt-get install amavisd-new spamassassin clamav

Nog wat extra packages voor betere spam detectie:

sudo apt-get install libnet-dns-perl libmail-spf-perl pyzor razor

En voor betere scanning in email attachments:

sudo apt-get install arj bzip2 cabextract cpio file gzip lhasa nomarch pax rar unrar unzip zip zoo

Nu voegen we de users voor de packages toe aan de goede groepen:

sudo adduser clamav amavis

sudo adduser amavis clamav

Nu gaan we Spamassassin configureren:

sudo nano /etc/default/spamassassin

Sla de file op met Control + X.

Start de spamassassin deamon:

sudo systemctl start spamassassin.service

Nu gaan we in Amavis-new eerst de spam- en virusscanning aanzetten.

sudo nano /etc/amavis/conf.d/15-content_filter_mode

Pas de file aan, zodat het er hetzelfde uitziet als:

use strict;

# You can modify this file to re-enable SPAM checking through spamassassin
# and to re-enable antivirus checking.

#
# Default antivirus checking mode
# Uncomment the two lines below to enable it
#

@bypass_virus_checks_maps = (
\%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);
#
# Default SPAM checking mode
# Uncomment the two lines below to enable it
#

@bypass_spam_checks_maps = (
\%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);

1; # insure a defined return

Nu controleren we of het “bouncen” van spam berichten uit staat. De meeste spam wordt verstuurd vanaf niet bestaande adressen. Pas de file aan zoals de onderstaande config.

sudo nano /etc/amavis/conf.d/21-ubuntu_defaults

use strict;

#
# These are Ubuntu specific defaults for amavisd-new configuration
#
# DOMAIN KEYS IDENTIFIED MAIL (DKIM)
$enable_dkim_verification = 1;
# Don’t be verbose about sending mail:
@whitelist_sender_acl = qw( .$mydomain );
$final_virus_destiny = D_DISCARD; # (defaults to D_BOUNCE)
$final_banned_destiny = D_DISCARD; # (defaults to D_BOUNCE)
$final_spam_destiny = D_DISCARD; # (defaults to D_REJECT)
$final_bad_header_destiny = D_PASS; # (defaults to D_PASS), D_BOUNCE suggested

$virus_admin = undef;
$spam_admin = undef;
$sa_tag_level_deflt = -999; # add spam info headers if at, or above that level
$sa_tag2_level_deflt = 6.0; # add ‘spam detected’ headers at that level
$sa_kill_level_deflt = 21.0; # triggers spam evasive actions
$sa_dsn_cutoff_level = 4; # spam level beyond which a DSN is not sent

#———— Do not modify anything below this line ————-

Nu gaan we nog de hostname toevoegen:

sudo nano /etc/amavis/conf.d/50-user

Die zou er nu zo uit moeten komen zien:

use strict;

#
# Place your configuration directives here. They will override those in
# earlier files.
#
# See /usr/share/doc/amavisd-new/ for documentation and examples of
# the directives you can use in this file
#
$myhostname = ‘vps.domein.nl’;
@local_domains_acl = qw(.);
#———— Do not modify anything below this line ————-
1; # ensure a defined return

Nu geven we Amavisd-new een herstart.

sudo systemctl restart amavis.service

Nu moet postfix nog met amavis-new connecten:

sudo postconf -e ‘content_filter = smtp-amavis:[127.0.0.1]:10024’

Controleer nu of onderstaande config overeenkomt met de master.cf van postfix:

sudo nano /etc/postfix/master.cf

Hier zou de volgende config nu moeten staan (helemaal onderaan):

smtp-amavis unix – – y – 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes
-o max_use=20

127.0.0.1:10025 inet n – y – – smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_delay_reject=no
-o smtpd_client_restrictions=permit_mynetworks,reject
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o smtpd_data_restrictions=reject_unauth_pipelining
-o smtpd_end_of_data_restrictions=
-o mynetworks=127.0.0.0/8
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
-o smtpd_client_connection_count_limit=0
-o smtpd_client_connection_rate_limit=0
-o receive_override_options=no_header_body_checks,no_unknown_recipient_checks

En onder het kopje pickup:

-o content_filter=
-o receive_override_options=no_header_body_checks

Nu hebben we Postfix en Dovecot geinstalleerd. En herstart Postfix en Dovecot met het volgende commando:

service postfix restart && service dovecot restart

Gebruikers aanmaken:

Wanneer dit allemaal gedaan is moeten we de gebruikers gaan aanmaken die gebruik kunnen maken van Dovecot en hun e-mailbox.

Hiervoor is een klein script gemaakt. Deze voeren we uit met het volgende commando:

sudo nano /usr/local/sbin/addmailuser

Voer hier het volgende toe:

#!/bin/sh
if [ ! $# = 1 ]
then
echo “Gebruik: $0 gebruikersnaam@domeinnaam”
exit 1
else
user=`echo “$1” | cut -f1 -d “@”`
domain=`echo “$1” | cut -s -f2 -d “@”`
if [ -x $domain ]
then
echo “Geen domeinnaam opgegeven\nGebruik: $0 gebruikersnaam@domeinnaam”
exit 2
fi
echo “Gebruiker toevoegen $user@$domain in /etc/dovecot/users”
echo “$user@$domain::5000:5000::/home/vmail/$domain/$user/:/bin/false::” >> /etc/dovecot/users

echo “Aanmaken van de maildirectory /home/vmail/$domain/$user”

if [ ! -x /home/vmail/$domain ]
then
mkdir /home/vmail/$domain
chown 5000:5000 /home/vmail/$domain
chmod 700 /home/vmail/$domain
fi
/usr/bin/maildirmake.dovecot /home/vmail/$domain/$user 5000:5000

/usr/bin/maildirmake.dovecot /home/vmail/$domain/$user/.Drafts 5000:5000
/usr/bin/maildirmake.dovecot /home/vmail/$domain/$user/.Sent 5000:5000
/usr/bin/maildirmake.dovecot /home/vmail/$domain/$user/.Junk 5000:5000
/usr/bin/maildirmake.dovecot /home/vmail/$domain/$user/.Trash 5000:5000

echo “Gebruiker toevoegen aan /etc/postfix/vmaps”
echo $1 $domain/$user/ >> /etc/postfix/vmaps
postmap /etc/postfix/vmaps
postfix reload
fi
echo “\nVoer een wachtwoord in voor de mailbox”
#SWAP THE FOLLOWING passwd LINES IF USING A UBUNTU VERSION PRIOR TO 12.04
#passwd=`dovecotpw`
passwd=`doveadm pw -u $user`
echo “Wachtwoord instellen voor $user@$domain in /etc/dovecot/passwd”
if [ ! -x /etc/dovecot/passwd ]
then
touch /etc/dovecot/passwd
chmod 640 /etc/dovecot/passwd
fi
echo “$user@$domain:$passwd” >> /etc/dovecot/passwd

exit 0

Sla daarna het bestand op door de combinatie Control + X te gebruiken en daarna de Y in te drukken.

Voordat we dit kunnen gebruiken moeten we het uitvoerbaar maken. Dit doen we met het commando:

sudo chmod +x /usr/local/sbin/addmailuser

Dan kun je een gebruiker toevoegen met het volgende commando:

sudo addmailuser naam@domein.nl

Gebruikers verwijderen:
Voor het verwijderen van gebruikers en hun e-mailbox is ook een script gemaakt. Maak deze met het volgende commando:

sudo nano /usr/local/sbin/deletemailuser

Voer hier het volgende toe:

#!/bin/bash
if [ ! $# = 1 ]
then
echo -e “Gebruik het volgende: $0 gebruikersnaam@jouwdomein”
exit 1
else
user=`echo “$1” | cut -f1 -d “@”`
domain=`echo “$1” | cut -s -f2 -d “@”`
if [ -x $domain ]
then
echo -e “Geen domein ingevoerd\nGebruik: $0 gebruikersnaam@jouwdomein: ”
exit 2
fi
fi
read -n 1 -p “Verwijder $user@$domain van de server? [Y/N]? ”
echo
case $REPLY in
y | Y)
new_users=`grep -v $user@$domain /etc/dovecot/users`
new_passwd=`grep -v $user@$domain /etc/dovecot/passwd`
new_vmaps=`grep -v $user@$domain /etc/postfix/vmaps`
echo “Verwijder $user@$domain van /etc/dovecot/users”
echo “$new_users” > /etc/dovecot/users
echo “Verwijder $user@$domain van /etc/dovecot/passwd”
echo “$new_passwd” > /etc/dovecot/passwd
echo “Verwijder $user@$domain van /etc/postfix/vmaps”
echo “$new_vmaps” > /etc/postfix/vmaps
postmap /etc/postfix/vmaps
postfix reload
read -n1 -p “Verwijder alle bestanden in /home/vmail/$domain/$user? [Y/N]? ” DELETE
echo
case $DELETE in
y | Y)
echo “Verwijder bestanden in /home/vmail/$domain/$user”
rm -fr /home/vmail/$domain/$user
;;
* )
echo “Bestanden niet verwijderd in /home/vmail/$domain/$user”
;;
esac
;;
* )
echo “Afsluiten…”
;;
esac

Sla daarna het bestand op door de combinatie Control + X te gebruiker en daarna de Y in te drukken.

Voordat we dit kunnen gebruiken moeten we het uitvoerbaar maken. Dit doen we met het commando:

sudo chmod +x /usr/local/sbin/deletemailuser

Dan kun je een gebruiker verwijderen met het volgende commando:

sudo deletemailuser gebruikersnaam@jouwdomein.nl

Als je nu je gebruiker hebt aangemaakt, kan je ook nog aliassen toevoegen aan die mail user:

sudo nano /etc/postfix/vmaps

Voeg dan een regel toe:

alias@domein.nl domein.nl/info/ (dit wordt dan een alias van info@domein.nl)

Sluit de editor af met Control + X. En voer daarna het volgende commando uit:

sudo postmap /etc/postfix/vmaps

Hierdoor worden de nieuwe mailaliassen aan de database toegevoegd.

 

Nu werkt de mailserver en kan je zelfs met Outlook of Thunderbird of welke e-mailcliënt dan ook e-mailen.
De gegevens voor een e-mailcliënt zijn als volgt:

inkomende mailserver: vps.domein.nl
uitgaande mailserver: vps.domein.nl

Zorg ervoor dat bij de uitgaande e-mail ingesteld hebt dat je verificatie nodig hebt voor de uitgaande mailserver en de poort van de uitgaande mailserver is 587

Webmail:
Mocht je geen e-mailcliënt willen gebruiken of als backup webmail gebruiken. We gebruiken in dit voorbeeld Squirrelmail, maar er zijn ook andere opties zoals Roundcube. Gebruik hiervoor het volgende commando:

sudo apt-get install squirrelmail

Na de installatie voer het volgende commando uit:

sudo /usr/sbin/squirrelmail-configure

Druk op de letter D daarna Enter
Type dan in: dovecot druk op Enter en daarna nogmaals op Enter.
Type daarna S in en druk op Enter en nogmaals op Enter.
Type daarna Q en daarna Enter.

Voer daarna de volgende commando’s uit:

sudo cp /etc/squirrelmail/apache.conf /etc/apache2/conf-enabled/squirrelmail.conf
sudo /etc/init.d/apache2 restart

Daarna is de email te benaderen via https://domein.nl/squirrelmail en kan er ingelogd worden met de e-mailadressen.

Wil je dit niet, maar gebruikmaken van https://webmail.domein.nl dan moet je een paar extra handelingen uitvoeren:

Maak als eerste in je DNS een A en/of AAAA record aan voor webmail.domein.nl

Voeg daarna aan de apache site configuratie een stukje toe (Verander overal domein.nl in e eigen domein):

sudo nano /etc/apache2/sites-available/domein.nl.conf

<VirtualHost *:443>
ServerAdmin webmaster@domein.nl
ServerName webmail.domein.nl

DocumentRoot /usr/share/squirrelmail/
<Directory /usr/share/squirrelmail>
Options +MultiViews
AllowOverride AuthConfig Options FileInfo Limit
</Directory>
SSLCertificateFile /etc/letsencrypt/live/domein.nl/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/domein.nl/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/domein.nl/chain.pem
</VirtualHost>

 

Nu heb je een volledige mailserver met SSL ondersteuning en Spam en Virus bestrijding.

Comments are closed.