|
|
Zeile 4: |
Zeile 4: |
| Siehe dazu auch [[MySQL installieren]]. | | Siehe dazu auch [[MySQL installieren]]. |
|
| |
|
| == Dovecot ==
| | [[Dovecot]] |
| | |
| === 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;">
| |
| sudo apt-get install dovecot-core
| |
| sudo apt-get install dovecot-imapd dovecot-pop3d
| |
| sudo apt-get install dovecot-mysql
| |
| </pre>
| |
| | |
| === 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> 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:
| |
| <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 ===
| |
| | |
| ==== SSL Zertifikat ====
| |
| | |
| Hilfe zu Erstellung eines SSL-Zertifikates siehe [[SSL Zertifikat]]
| |
| | |
| | |
| Erstelltes Zertifikat in der Datei ''/etc/dovecot/conf.d/10-ssl.conf'' 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;">
| |
| 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:
| |
| <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 ====
| |
| | |
| 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 <code>mail</code> gehört. Hier werden später in den entsprechenden Unterverzeichnissen die Mails einsortiert.
| |
| <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.conf
| |
| | |
| postmaster_address = <valid mail address>
| |
| | |
| # Passedb SQL
| |
| passdb {
| |
| driver = sql
| |
| args = /etc/dovecot/dovecot-sql.conf.ext
| |
| }
| |
| </pre>
| |
|
| |
|
| == Postfix == | | == Postfix == |
Voraussetzungen
Für den Betrieb eines Mailservers ist eine Datenbank Voraussetzung - ich habe mich für MySQL entschieden.
Siehe dazu auch MySQL installieren.
Dovecot
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-aliases.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 = <server ip>
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 = <server ip>
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 = <server ip>
dbname = mails
query = SELECT * FROM domains WHERE domain='%s'
Ports
Service
|
Port verschlüsselt
|
Port unverschlüsselt
|
imap
|
993
|
143
|
pop
|
995
|
110
|
smtp
|
465 (veraltet) / 587 (für Mail-Clients)
|
25
|
SPF-Eintrag
TXT "v=spf1 mx -all"
http://wiki.hetzner.de/index.php/DNS_SPF
Testen
Mailserver testen
Webmail
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/
http://www.scriptworker.com/details/article//postfix-mailqueue-aufraeumen-update/
Zurück zu Ubuntu