Mailserver einrichten: Unterschied zwischen den Versionen

Aus Tutorials
Zur Navigation springen Zur Suche springen
 
(38 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 4: Zeile 4:
Siehe dazu auch [[MySQL installieren]].
Siehe dazu auch [[MySQL installieren]].


== Dovecot ==
== Einrichtung ==


=== Installation ===
[[PostfixAdmin]]
<pre style="white-space: pre-wrap;
white-space: -moz-pre-wrap;
white-space: -pre-wrap;
white-space: -o-pre-wrap;
word-wrap: break-word;">
sudo apt-get install dovecot-core
sudo apt-get install dovecot-imapd dovecot-pop3d
sudo apt-get install dovecot-mysql
</pre>


=== Datenbank erstellen ===
[[Dovecot]]
<pre style="white-space: pre-wrap;
white-space: -moz-pre-wrap;
white-space: -pre-wrap;
white-space: -o-pre-wrap;
word-wrap: break-word;">
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;
</pre>


Soll nur von ''localhost'' auf die Datenbank zugegriffen werden können, dann folgenden Befehl verwenden:
[[Postfix]]
<pre style="white-space: pre-wrap;
white-space: -moz-pre-wrap;
white-space: -pre-wrap;
white-space: -o-pre-wrap;
word-wrap: break-word;">
mysql> create user 'mailserver'@'localhost' identified by '<password>';
</pre>


=== Konfiguration  ===
[[Mailserver Umgebung]]


==== SSL Zertifikat ====
[[Mailserver testen]]


Hilfe zu Erstellung eines SSL-Zertifikates siehe [[SSL Zertifikat]]
[[Webmail]]


[[Amavis-Spam-Virenfilter]]


Erstelltes Zertifikat in der Datei ''/etc/dovecot/conf.d/10-ssl.conf'' eintragen.
[[Sieve Mailfilter]]
<pre style="white-space: pre-wrap;
white-space: -moz-pre-wrap;
white-space: -pre-wrap;
white-space: -o-pre-wrap;
word-wrap: break-word;">
ssl = required
ssl_cert = </etc/ssl/certs/dovecot.crt
ssl_key = </etc/ssl/private/dovecot.key
</pre>


Key und Zeritikat müssen für den Benutzer ''mail'' lesbar sein:
[[Fetchmail]]
<pre style="white-space: pre-wrap;
white-space: -moz-pre-wrap;
white-space: -pre-wrap;
white-space: -o-pre-wrap;
word-wrap: break-word;">
sudo chown vmail:vmail /etc/ssl/certs/dovecot.crt
sudo chown vmail:vmail /etc/ssl/private/dovecot.key
</pre>


==== Speicherort der Mails ====
[[Mailman]]


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


Zuerst erstellen wir ein Grundverzeichnis, das dem Benutzer <code>mail</code> gehört. Hier werden später in den entsprechenden Unterverzeichnissen die Mails einsortiert.
[[Mails verschlüsseln]]
<pre style="white-space: pre-wrap;
white-space: -moz-pre-wrap;
white-space: -pre-wrap;
white-space: -o-pre-wrap;
word-wrap: break-word;">
sudo mkdir /var/vmails/
sudo chown vmail:vmail /var/vmails/
</pre>
 
Das Mailverzeichnis wird in der Datei ''/etc/dovecot/conf.d/10-mail.conf'' eingetragen:
<pre style="white-space: pre-wrap;
white-space: -moz-pre-wrap;
white-space: -pre-wrap;
white-space: -o-pre-wrap;
word-wrap: break-word;">
mail_location = maildir:/var/vmails/%d/%n
mail_privileged_group = vmail
# 109 = uid of user vmail
first_valid_uid = 109
</pre>
 
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)
<pre style="white-space: pre-wrap;
white-space: -moz-pre-wrap;
white-space: -pre-wrap;
white-space: -o-pre-wrap;
word-wrap: break-word;">
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/
</pre>
 
 
Datei <code>/etc/dovecot/conf.d/10-auth.conf</code>:
<pre style="white-space: pre-wrap;
white-space: -moz-pre-wrap;
white-space: -pre-wrap;
white-space: -o-pre-wrap;
word-wrap: break-word;">
disable_plaintext_auth = yes
auth_mechanisms = plain login
 
# Folgende Zeile auskommentieren:
# !include auth-system.conf.ext
 
# Folgende Zeile einkommentieren:
!include auth-sql.conf.ext
</pre>
 
In der Datei <code>auth-sql.conf.ext</code> folgende Zeile ausbessern / einkommentieren:
<pre style="white-space: pre-wrap;
white-space: -moz-pre-wrap;
white-space: -pre-wrap;
white-space: -o-pre-wrap;
word-wrap: break-word;">
# Database driver: mysql, pgsql, sqlite
userdb {
  driver = static
  args = uid=vmail gid=vmail home=/home/vmails/%u
}
</pre>
 
Datei <code>/etc/dovecot/dovecot-sql.conf.ext</code>:
<pre style="white-space: pre-wrap;
white-space: -moz-pre-wrap;
white-space: -pre-wrap;
white-space: -o-pre-wrap;
word-wrap: break-word;">
# 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
</pre>
 
===== Benutzerdatenbank befüllen =====
 
Verschlüsseltes Passwort erstellen:
<pre style="white-space: pre-wrap;
white-space: -moz-pre-wrap;
white-space: -pre-wrap;
white-space: -o-pre-wrap;
word-wrap: break-word;">
doveadm pw -s SHA512-CRYPT
</pre>
 
Eintrag in Datenbank erstellen:
<pre style="white-space: pre-wrap;
white-space: -moz-pre-wrap;
white-space: -pre-wrap;
white-space: -o-pre-wrap;
word-wrap: break-word;">
insert into users (username, domain, password) values ('<benutzer>', '<domain.tld>', '$6$A3ZAyqvdkl4nc8BM$bz8YAW7/0B1DcE2I37epHO/p33MbdVKb0FbGH56Ey1KVO1.m3NPL/s5v35NwFrSZMPTBkrc6DDX6rx2MCQhUa0');
</pre>
 
==== SASL / LMTP ====
 
Datei <code>/etc/dovecot/conf.d/10-master.conf</code>:
<pre style="white-space: pre-wrap;
white-space: -moz-pre-wrap;
white-space: -pre-wrap;
white-space: -o-pre-wrap;
word-wrap: break-word;">
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
  }
}
</pre>
 
==== Allgemein ====
 
 
Datei <code>/etc/dovecot/dovecot.conf</code>:
<pre style="white-space: pre-wrap;
white-space: -moz-pre-wrap;
white-space: -pre-wrap;
white-space: -o-pre-wrap;
word-wrap: break-word;">
# 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
}
</pre>
 
== Postfix ==
 
=== Installation ===
 
<pre style="white-space: pre-wrap;
white-space: -moz-pre-wrap;
white-space: -pre-wrap;
white-space: -o-pre-wrap;
word-wrap: break-word;">
apt-get install postfix postfix-mysql
</pre>
 
=== Konfiguration ===
 
Der Übersichtlichkeit halber legen wir ein neues Konfigurationsfile ''/etc/postfix/main.cf'' mit nur dem notwendigsten Inhalt an:
<pre style="white-space: pre-wrap;
white-space: -moz-pre-wrap;
white-space: -pre-wrap;
white-space: -o-pre-wrap;
word-wrap: break-word;">
cd /etc/postfix/
sudo mv main.cf main.cf_bak
sudo touch main.cf
</pre>
 
Die neu erstelle Datei mit folgenden Inhalt befüllen (''<local domain>'' durch den entsprechenden Wert ersetzen):
<pre style="white-space: pre-wrap;
white-space: -moz-pre-wrap;
white-space: -pre-wrap;
white-space: -o-pre-wrap;
word-wrap: break-word;">
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
</pre>
 
==== SSL Zertifikat ====
 
Hilfe zu Erstellung eines SSL-Zertifikates siehe [[SSL Zertifikat]]
 
In der Datei ''/etc/postfix/main.conf'' folgende Zeilen hinzufügen:
<pre style="white-space: pre-wrap;
white-space: -moz-pre-wrap;
white-space: -pre-wrap;
white-space: -o-pre-wrap;
word-wrap: break-word;">
##### 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
</pre>
 
==== 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:
<pre style="white-space: pre-wrap;
white-space: -moz-pre-wrap;
white-space: -pre-wrap;
white-space: -o-pre-wrap;
word-wrap: break-word;">
###### SASL Auth ######
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
</pre>
 
In der Datei ''/etc/postfix/master.cf'' den ''submission''-Block folgendermassen anpassen bzw. ersetzen:
<pre style="white-space: pre-wrap;
white-space: -moz-pre-wrap;
white-space: -pre-wrap;
white-space: -o-pre-wrap;
word-wrap: break-word;">
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
</pre>
 
==== LMTP aktivieren ====
 
In der Datei ''/etc/postfix/main.c'' Zeilen hinzufügen:
<pre style="white-space: pre-wrap;
white-space: -moz-pre-wrap;
white-space: -pre-wrap;
white-space: -o-pre-wrap;
word-wrap: break-word;">
###### Use Dovecot LMTP Service to deliver Mails to Dovecot ######
virtual_transport = lmtp:unix:private/dovecot-lmtp
</pre>
 
==== 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:
<pre style="white-space: pre-wrap;
white-space: -moz-pre-wrap;
white-space: -pre-wrap;
white-space: -o-pre-wrap;
word-wrap: break-word;">
##### 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
</pre>
 
=== Datenbankanbindung ===
 
==== Datenbank erstellen ====
 
<pre style="white-space: pre-wrap;
white-space: -moz-pre-wrap;
white-space: -pre-wrap;
white-space: -o-pre-wrap;
word-wrap: break-word;">
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;
</pre>
 
==== Datenbank befüllen ====
 
<pre style="white-space: pre-wrap;
white-space: -moz-pre-wrap;
white-space: -pre-wrap;
white-space: -o-pre-wrap;
word-wrap: break-word;">
mysql -u root -p
mysql> use mails;
mysql> insert into domains (domain) values ('domain.tld');
mysql> quit;
</pre>
 
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.
<pre style="white-space: pre-wrap;
white-space: -moz-pre-wrap;
white-space: -pre-wrap;
white-space: -o-pre-wrap;
word-wrap: break-word;">
insert into aliases (source, destination) values ('test@domain.tld', 'admin@domain.tld');
</pre>
 
==== Konfiguration ====
 
In der Datei ''/etc/postfix/main.cf'' die Datenbank-Konfigurations-Dateien eintragen:
 
<pre style="white-space: pre-wrap;
white-space: -moz-pre-wrap;
white-space: -pre-wrap;
white-space: -o-pre-wrap;
word-wrap: break-word;">
###### 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
</pre>
 
Eingetragene Dateipfade erstellen:
 
<pre style="white-space: pre-wrap;
white-space: -moz-pre-wrap;
white-space: -pre-wrap;
white-space: -o-pre-wrap;
word-wrap: break-word;">
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
</pre>
 
Datei ''/etc/postfix/virtual/mysql-aliasis.cf'' mit folgenden Inhalt befüllen:
<pre style="white-space: pre-wrap;
white-space: -moz-pre-wrap;
white-space: -pre-wrap;
white-space: -o-pre-wrap;
word-wrap: break-word;">
user = mailserver
password = <password>
hosts = 127.0.0.1
dbname = mails
query = SELECT destination FROM aliases WHERE source='%s'
</pre>
 
Datei ''/etc/postfix/virtual/mysql-maps.cf'' mit folgenden Inhalt befüllen:
<pre style="white-space: pre-wrap;
white-space: -moz-pre-wrap;
white-space: -pre-wrap;
white-space: -o-pre-wrap;
word-wrap: break-word;">
user = mailserver
password = <password>
hosts = 127.0.0.1
dbname = mails
query = SELECT * FROM users WHERE username='%u' AND domain='%d'
</pre>
 
Datei ''/etc/postfix/virtual/mysql-domains.cf'' mit folgenden Inhalt befüllen:
<pre style="white-space: pre-wrap;
white-space: -moz-pre-wrap;
white-space: -pre-wrap;
white-space: -o-pre-wrap;
word-wrap: break-word;">
user = mailserver
password = <password>
hosts = 127.0.0.1
dbname = mails
query = SELECT * FROM domains WHERE domain='%s'
</pre>
 
== Testen ==
 
Genereller Mailserver-Check:
 
http://mxtoolbox.com/
 
 
Checken des Reverse Lookups der Server-IP:
 
[http://www.dnsqueries.com/en/reverse_lookup.php http://www.dnsqueries.com/en/reverse_lookup.php]
 
 
Reverse DNS Test:
 
[http://www.koepfer.de/index.php/administratoren/utilities http://www.koepfer.de/index.php/administratoren/utilities]


== Links ==
== Links ==
[https://wiki.ubuntuusers.de/Dovecot_2/ https://wiki.ubuntuusers.de/Dovecot_2/]


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


[https://thomas-leister.de/internet/mailserver-ubuntu-server-dovecot-postfix-mysql/ https://thomas-leister.de/internet/mailserver-ubuntu-server-dovecot-postfix-mysql/]
[https://thomas-leister.de/internet/mailserver-ubuntu-server-dovecot-postfix-mysql/ https://thomas-leister.de/internet/mailserver-ubuntu-server-dovecot-postfix-mysql/]
[http://wiki.dovecot.org/de/ http://wiki.dovecot.org/de/]




Zurück zu [[Ubuntu]]
Zurück zu [[Mailserver einrichten (unterschiedliche Versionen)|Mailserver einrichten]]

Aktuelle Version vom 31. Dezember 2019, 12:17 Uhr