Mailserver einrichten

Aus Tutorials
Zur Navigation springen Zur Suche springen

Voraussetzungen

Für den Betrieb eines Mailservers ist eine Datenbank Voraussetzung - ich habe mich für MySQL entschieden.

Siehe dazu auch MySQL installieren.

Dovecot

Installation

sudo apt-get install dovecot-core
sudo apt-get install dovecot-imapd dovecot-pop3d
sudo apt-get install dovecot-mysql

Datenbank erstellen

mysql -u root -p 
mysql> create database if not exists mails;
mysql> create user 'mailserver'@'%' identified by '<password>';
mysql> grant usage on *.* to 'mailserver'@'%' identified by '<password>'; 
mysql> grant all privileges on mails.* to 'mailserver'@'%';
mysql> flush privileges; 
mysql> use mails;
mysql> CREATE TABLE users (id INT UNSIGNED AUTO_INCREMENT NOT NULL, username VARCHAR(128) NOT NULL, domain VARCHAR(128) NOT NULL, password VARCHAR(128) NOT NULL, UNIQUE (id), PRIMARY KEY (username, domain));
mysql> quit;

Soll nur von localhost auf die Datenbank zugegriffen werden können, dann folgenden Befehl verwenden:

mysql> create user 'mailserver'@'localhost' identified by '<password>';

Konfiguration

SSL Zertifikat

Hilfe zu Erstellung eines SSL-Zertifikates siehe SSL Zertifikat


Erstelltes Zertifikat in der Datei /etc/dovecot/conf.d/10-ssl.conf eintragen.

ssl = required
ssl_cert = </etc/ssl/certs/dovecot.crt
ssl_key = </etc/ssl/private/dovecot.key

Key und Zeritikat müssen für den Benutzer mail lesbar sein:

sudo chown vmail:vmail /etc/ssl/certs/dovecot.crt
sudo chown vmail:vmail /etc/ssl/private/dovecot.key

Speicherort der Mails

Für die beschriebene Installation werden virtuelle Benutzer verwendet. Virtuelle Benutzer sind Benutzer, die sich nicht am System anmelden können.

Zuerst erstellen wir ein Grundverzeichnis, das dem Benutzer mail gehört. Hier werden später in den entsprechenden Unterverzeichnissen die Mails einsortiert.

sudo mkdir /var/vmails/
sudo chown vmail:vmail /var/vmails/

Das Mailverzeichnis wird in der Datei /etc/dovecot/conf.d/10-mail.conf eingetragen:

mail_location = maildir:/var/vmails/%d/%n
mail_privileged_group = vmail
# 109 = uid of user vmail
first_valid_uid = 109

Weiters wird hier noch das empfohlene Format maildir verwendet, was durch die Voranstellung von maildir: vor dem Pfad gekennzeichnet wird.

%d wird dann im laufenden Betrieb durch die Damain und %n durch den Benutzernamen ersetzt.

Benutzer Authentifizierung

Anlegen eines Benutzergrundverzeichnisses, das dem Benutzer vmail gehört (Benutzer mail muss darauf auch Schreibrechte haben - daher zur Gruppe hinzufügen)

sudo addgroup --system --no-create-home --disabled-login --group vmail
sudo adduser --system --no-create-home --disabled-login --ingroup vmail vmail
sudo mkdir /home/vmail/
sudo chown vmail:vmail /home/vmail/


Datei /etc/dovecot/conf.d/10-auth.conf:

disable_plaintext_auth = yes
auth_mechanisms = plain login

# Folgende Zeile auskommentieren:
# !include auth-system.conf.ext

# Folgende Zeile einkommentieren:
!include auth-sql.conf.ext

In der Datei auth-sql.conf.ext folgende Zeile ausbessern / einkommentieren:

# Database driver: mysql, pgsql, sqlite
userdb {
  driver = static
  args = uid=vmail gid=vmail home=/home/vmails/%u
}

Datei /etc/dovecot/dovecot-sql.conf.ext:

# Database driver: mysql, pgsql, sqlite
driver = mysql

connect = host=localhost dbname=mails user=mailserver password=<password>

password_query = SELECT username, domain, password FROM users WHERE username = '%n' AND domain = '%d'

default_pass_scheme = SHA512-CRYPT
Benutzerdatenbank befüllen

Verschlüsseltes Passwort erstellen:

doveadm pw -s SHA512-CRYPT

Eintrag in Datenbank erstellen:

insert into users (username, domain, password) values ('<benutzer>', '<domain.tld>', '$6$A3ZAyqvdkl4nc8BM$bz8YAW7/0B1DcE2I37epHO/p33MbdVKb0FbGH56Ey1KVO1.m3NPL/s5v35NwFrSZMPTBkrc6DDX6rx2MCQhUa0');

SASL / LMTP

Datei /etc/dovecot/conf.d/10-master.conf:

service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    mode = 0660
    group = postfix
    user = postfix
  }

  user = vmail
}

service auth {
  unix_listener auth-userdb {
    mode = 0666
    user = vmail
    group = vmail
  }

  # Postfix smtp-auth
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }
}

Allgemein

Datei /etc/dovecot/dovecot.conf:

# Enable installed protocols
!include_try /usr/share/dovecot/protocols.d/*.protocol

listen = *, ::

base_dir = /var/run/dovecot/

# Greeting message for clients
login_greeting = Dovecot ready.

!include conf.d/*.conf
!include_try local.donf

# Passedb SQL
passdb {
    driver = sql
    args = /etc/dovecot/dovecot-sql.conf.ext
}

Postfix

Installation

apt-get install postfix postfix-mysql

Konfiguration

Der Übersichtlichkeit halber legen wir ein neues Konfigurationsfile /etc/postfix/main.cf mit nur dem notwendigsten Inhalt an:

cd /etc/postfix/
sudo mv main.cf main.cf_bak
sudo touch main.cf

Die neu erstelle Datei mit folgenden Inhalt befüllen (<local domain> durch den entsprechenden Wert ersetzen):

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no

append_dot_mydomain = no

readme_directory = no

mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mydestination =
mailbox_size_limit = 51200000
message_size_limit = 51200000
recipient_delimiter = localhost.$mydomain, localhost, mail.$mydomain
inet_interfaces = all
myorigin = <local domain>
inet_protocols = all

SSL Zertifikat

Hilfe zu Erstellung eines SSL-Zertifikates siehe SSL Zertifikat

In der Datei /etc/postfix/main.conf folgende Zeilen hinzufügen:

##### TLS parameters ######
smtpd_tls_cert_file=/etc/ssl/certs/postfix.crt
smtpd_tls_key_file=/etc/ssl/private/postfix.key
smtpd_use_tls=yes
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

SASL Auth und Submission aktivieren

Postfix soll bei Dovecot per SASL Authentifizierung nachfragen, ob für die akutellen Benutzer/Passwort-Kombination das Senden/Empfangen erlaubt ist.

Dazu in der Datei /etc/postfix/main.conf folgende Zeilen hinzufügen:

###### SASL Auth ######
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes

In der Datei /etc/postfix/master.cf den submission-Block folgendermassen anpassen bzw. ersetzen:

submission inet n       -       -       -       -       smtpd -v
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth
  -o smtpd_sasl_security_options=noanonymous
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject

LMTP aktivieren

In der Datei /etc/postfix/main.c Zeilen hinzufügen:

###### Use Dovecot LMTP Service to deliver Mails to Dovecot ######
virtual_transport = lmtp:unix:private/dovecot-lmtp

Relay Einstellungen

Mails sollen nur weitergeleited werden, falls der Sender der Server selbst ist oder der Benutzer in die Benutzerdatenbank von Dovecot eingetragen ist.

Dazu in der Datei /etc/postfix/main.c folgende Zeilen hinzufügen:

##### Only allow mail transport if client is authenticated or in own network (PHP Scripts, ...) ######
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

Datenbankanbindung

Datenbank erstellen

mysql -u root -p 
mysql> use mails;
mysql> create table domains (id INT UNSIGNED AUTO_INCREMENT NOT NULL, domain VARCHAR(128) NOT NULL, UNIQUE (id), PRIMARY KEY (domain));
mysql> create table aliases (id INT UNSIGNED AUTO_INCREMENT NOT NULL, source VARCHAR(128) NOT NULL, destination VARCHAR(128) NOT NULL, UNIQUE (id), PRIMARY KEY (source, destination) );
mysql> quit;

Datenbank befüllen

mysql -u root -p 
mysql> use mails;
mysql> insert into domains (domain) values ('domain.tld');
mysql> quit;

Mittels Alias-Mail-Adressen kann man Mail an andere Adressen weiterleiten. Mittels nachfolgenden Datenbankeintrag kann werden Mails an test@domain.tld im Postfach von admin@domain.tld eingeordnet.

insert into aliases (source, destination) values ('test@domain.tld', 'admin@domain.tld');

Konfiguration

In der Datei /etc/postfix/main.cf die Datenbank-Konfigurations-Dateien eintragen:

###### MySQL Connection ######

virtual_alias_maps = mysql:/etc/postfix/virtual/mysql-aliases.cf
virtual_mailbox_maps = mysql:/etc/postfix/virtual/mysql-maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/virtual/mysql-domains.cf
local_recipient_maps = $virtual_mailbox_maps

Eingetragene Dateipfade erstellen:

sudo mkdir /etc/postfix/virtual
sudo chmod 660 /etc/postfix/virtual
sudo touch /etc/postfix/virtual/mysql-aliasis.cf
sudo touch /etc/postfix/virtual/mysql-maps.cf
sudo touch /etc/postfix/virtual/mysql-domains.cf

Datei /etc/postfix/virtual/mysql-aliasis.cf mit folgenden Inhalt befüllen:

user = mailserver
password = <password>
hosts = 127.0.0.1
dbname = mails
query = SELECT destination FROM aliases WHERE source='%s'

Datei /etc/postfix/virtual/mysql-maps.cf mit folgenden Inhalt befüllen:

user = mailserver
password = <password>
hosts = 127.0.0.1
dbname = mails
query = SELECT * FROM users WHERE username='%u' AND domain='%d'

Datei /etc/postfix/virtual/mysql-domains.cf mit folgenden Inhalt befüllen:

user = mailserver
password = <password>
hosts = 127.0.0.1
dbname = mails
query = SELECT * FROM domains WHERE domain='%s'

Mailserver testen

Links

https://wiki.ubuntuusers.de/Dovecot_2/

https://help.ubuntu.com/community/PostfixDovecotSASL

https://thomas-leister.de/internet/mailserver-ubuntu-server-dovecot-postfix-mysql/

http://wiki.dovecot.org/de/


Zurück zu Ubuntu