Grundlagen Anleitung E-Mail-Server unter Linux

Kernel, Tools, Software, Distributionen, Installation, Treiber, Einstellungen

Moderatoren: coolmann, chillmensch, Xploder270, schmidtsmikey, Yurrderi

Benutzeravatar
Jensomio
Moderator
Beiträge: 1008
Registriert: 28.08.2005, 12:01
Wohnort: Irgendwo
Kontaktdaten:

Grundlagen Anleitung E-Mail-Server unter Linux

Beitragvon Jensomio » 26.09.2011, 13:22

In kürze werde ich hier beschreiben, wie man einen Postfix für den Mailversand konfiguriert. Für die Verwaltung der Postfächer wird Dovecot eingesetzt. Da ich für dieses Tutorial einen frischen Mailserver aufsetzen werde, lege ich mir schon einmal diesen Beitrag an um darin arbeiten zu können.

Einleitung:
In diesem Tutorial werden wir gemeinsam einen Mailserver erstellen. Als Betriebssystem benutzen wir Debian. Wir benötigen eine Domain und eine statische IP-Adresse. Im Laufe dieses Tutorials werde ich als fiktive Domain "example.com" benutzen.

Voraussetzungen:
  • Webserver mit statischer IP
  • Domain
  • Debian 6 (squeeze)
  • Texteditor z.B. nano

Installation von Postfix
Jetzt installieren wir die Pakete "policyd-weight" und "postfix" und deren Abhängigkeiten.
Policyd-weight ist ein in Perl geschriebener Dienst, der die Header der ankommenden E-Mails überprüft und eine Bewertung in den Header schreibt. Der beste Wert, den eine E-Mail erreichen kann ist standardmäßig -8,5. Es wird z.B. geprüft, ob die Domain der Reverse-DNS die selbe ist, wie der Mailserver der die E-Mail geschickt hat.

Bei der Installation von Postfix wird uns das System auffordern den Konfigurationstyp zu wählen (No Configuration, Internet Site, Internet with smarthost, Satellite system, Local only) Wir wählen No Configuration.

Code: Alles auswählen

# apt-get install policyd-weight postfix


Konfiguration von Postfix

Als ersten bearbeiten wir die /etc/postfix/main.cf

Code: Alles auswählen

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
append_dot_mydomain = no



Für TLS werden wir zum Testen die snakeoil Zertifikate benutzen, es wird dringend empfohlen sie später durch eigene Zertifikate zu ersetzen.


Code: Alles auswählen

smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_auth_only = 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_discard_ehlo_keywords = silent-discard, dsn


Mit folgender Einstellung schreiben wir den Benutzername von dem Absender in den Header der von uns Versandten E-Mail.

Code: Alles auswählen

smtpd_sasl_authenticated_header = yes


Jetzt legen wir den Hostname vom Mailserver fest

Code: Alles auswählen

myhostname = example.com


In mydestination geben wir die Domains für die lokale Auslieferung an

Code: Alles auswählen

mydestination = $myhostname, localhost


Und in mynetworks werden die IP-Adressen der rechner angegeben, welche diesen Mailserver als relay benutzen dürfen. In unserem Fall bleibt diese Variable vorerst leer.

Code: Alles auswählen

mynetworks =


Jetzt geben wir die Alias Tabellen an. Weiter Infos gibt es später.

Code: Alles auswählen

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
virtual_alias_maps = hash:/etc/postfix/virtual


In den folgenden Zeilen konfigurieren wir den Mailempfang und die Authentifizierung durch dovecot

Code: Alles auswählen

mailbox_command = /usr/lib/dovecot/deliver -e
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain =

broken_sasl_auth_clients = yes

relay_domains = $mydestination


Jetzt kommen wir zu ein paar Richtlinien. Wichtig zu wissen ist, dass alles der Reihe nach geprüft wird. Wenn z.B. "permit_mynetworks" sagt, dass der Client aus "$mynetworks" stammt, dann wird die E-Mail geschickt, ohne das die Prüfungen danach noch stattfinden. Wenn "reject_sender_login_mismatch" den Versand der E-Mail unterbindet, weil ein eingeloggter User versucht einen Absender eines anderen Users zu verwenden, dann werden die Regeln im Anschluss nicht mehr geprüft.
Ich habe jetzt nur die für mich am wichtigsten Regeln mit einer Beschreibung versehen, alle anderen kann man im Handbuch nachschlagen: http://www.postfix.org/postconf.5.html# ... strictions und http://www.postfix.org/postconf.5.html# ... strictions

Code: Alles auswählen


smtpd_recipient_restrictions =
        permit_mynetworks,                    # Gewährt Zugriff, wenn der Client in der Liste von $mynetworks ist.
        reject_sender_login_mismatch,      # Verweigert den Zugriff, wenn der benutze Absender nicht dem eingeloggten Benutzer gehört
        permit_sasl_authenticated,           # Gewährt den Zugriff, wenn der Client eingeloggt ist
        reject_invalid_hostname,              # Verweigert den Zugriff, wenn der Hostname ungültig ist
        reject_non_fqdn_hostname,         
        reject_non_fqdn_sender,
        reject_non_fqdn_recipient,
        reject_unknown_sender_domain,
        reject_unknown_recipient_domain,
        reject_unauth_pipelining,
        reject_unauth_destination

smtpd_sender_restrictions =
    permit_sasl_authenticated,              # E-Mails werden versandt, wenn sie von einem eingeloggten Benutzer stammen.
    permit_mynetworks,                       # E-Mails werden versandt, wenn der Client in der Liste von $mynetworks ist.
    reject_unauth_destination,       
    reject_non_fqdn_sender,
    reject_non_fqdn_recipient,
    reject_unknown_recipient_domain,
    reject_unauth_pipelining


Als Nächstes müssen wir noch "/etc/aliases" und "/etc/postfix/virtual" bearbeiten.

In "/etc/aliases" legen wir die Aliase für den Benutzer root fest, also unser Admin. Er heißt in unserem Fall mustermann_max. Wir leiten einfach alle Mails die an einige Systemdienste gehen an den admin weiter.

Code: Alles auswählen

# /etc/aliases
mailer-daemon: postmaster
postmaster: root
nobody: root
hostmaster: root
usenet: root
news: root
webmaster: root
www: root
ftp: root
abuse: root
noc: root
security: root
admin: root
root: mustermann_max


Wichtige Anmerkung: Immer nachdem wir die Datei "/etc/aliases" bearbeitet haben, müssen wir folgendes ausführen:

Code: Alles auswählen

postalias /etc/aliases


Unsere E-Mailadressen legen wir in der "/etc/postfix/virtual" fest. Links steht die Adresse und rechts steht der Systembenutzer, der die E-Mails über diese Adresse empfangen soll. Unser admin bekommt hierbei wieder alle restlichen E-Mails, da wir ihn mit einem @$DOMAIN als Catchall definieren. Vorsicht: Wenn wir das über die anderen Adressen setzen würden, würde er alle Mails empfangen.

Code: Alles auswählen

example.com           any
spud.bencer@example.com               bencer_spud
@example.com                          mustermann_max


Wichtige Anmerkung: Immer nachdem wir die Datei "/etc/postfix/virtual" bearbeitet haben, müssen wir folgendes ausführen:

Code: Alles auswählen

postmap /etc/postfix/virtual


Damit sind wir mit der Konfiguration von Postfix vorerst durch.

Installation von Dovecot

Code: Alles auswählen

apt-get install dovecot-common dovecot-imapd


Konfiguration von Dovecot

Dovecot ist auf unserem Mailserver für folgende Aufgaben zuständig:

  • Authentifizierung für postfix für den Versand von Mails
  • Zustellen der von Postfix empfangenen Mails an die Postfächer
  • Bereitstellung der imap(s)
  • Sieve, damit jeder Benutzer direkt auf dem Server Scripte definieren kann (Z.B Filterregeln zum Sortieren der Mails)

Für TLS werden wir zum Testen die snakeoil Zertifikate benutzen, es wird dringen dempfohlen sie später durch eigene Zertifikate zu ersetzen.
Als unterstütztes Protokoll verwenden wir imaps. Es wird von davon abgeraten unverschlüsselte Protokolle zu verwenden! Die folgenden Blocke sind in der "/etc/dovecot/dovecot.conf" einzutragen!

Code: Alles auswählen

protocols = imaps
mbox_write_locks =
disable_plaintext_auth = no
ssl_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
ssl_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

auth_debug = yes
auth_debug_passwords=yes


Als Standort der E-Mails verwenden wir Maildir im ordner des Users z.B.: /home/mustermann_max/Maildir

Code: Alles auswählen

mail_location = maildir:~/Maildir


Es folgt nun die Konfiguration für die Authentifizierung:
Wir benutzen hierfür PAM und eine eigene Konfiguration, welche wir später unter "/etc/pam.d/mail" anlegen werden.

Code: Alles auswählen

auth default {
        user = root
        mechanisms = plain login

        userdb passwd {
                args = blocking=yes
        }
        passdb pam {
                 args = mail  # eigene PAM konfiguration
        }

        socket listen {
                client {
                        path = /var/spool/postfix/private/auth
                        mode = 0660
                        user = postfix
                        group = postfix
                }
                master {
                        path = /var/run/dovecot/auth-master
                        mode = 0660
                        user = mail
                        group = mail
                }
        }
}





Code: Alles auswählen

protocol lda {
        user=postfix
        group=postfix
        postmaster_address = root@clou-point.de #Hier legen wir den Absender für Benachrichtigen fest, falls E-Mails abgewiesen werden.
        hostname = example.com #wieder unser hostname vom Mailserver
        sendmail_path = /usr/sbin/sendmail
}


Konfiguration von PAM


Zuerst legen wir die Datei "/etc/pam.d/mail" mit folgendem Inhalt an:

Code: Alles auswählen

#%PAM-1.0

auth  required pam_access.so accessfile=/etc/security/mailaccess.conf

@include common-auth
@include common-account
@include common-session


Jetzt legen wir unser Accessfile "/etc/security/mailaccess.conf" an. Darin bestimmen wir, welche Benutzergruppe E-Mails versenden darf und Zugriff auf IMAP hat. In unserem Fall ist das die Gruppe mailusers.

Code: Alles auswählen

+: mailusers:ALL
-:ALL:ALL


FORTSETZUNG FOLGT!
Zuletzt geändert von Jensomio am 08.02.2013, 07:31, insgesamt 6-mal geändert.
AMD Ryzen 7 5800X
64GB RAM
RTX 3070ti

Benutzeravatar
schmidtsmikey
Site Admin
Beiträge: 8969
Registriert: 08.12.2003, 21:50
Wohnort: Hamburg
Kontaktdaten:

Re: Grundlagen Anleitung E-Mail-Server unter Linux

Beitragvon schmidtsmikey » 27.09.2011, 17:22

Respekt! Werde demnächst meinen Käse auch dazu geben. Andere sind auch herzlichst dazu eingeladen...

Benutzeravatar
Jensomio
Moderator
Beiträge: 1008
Registriert: 28.08.2005, 12:01
Wohnort: Irgendwo
Kontaktdaten:

Re: Grundlagen Anleitung E-Mail-Server unter Linux

Beitragvon Jensomio » 28.09.2011, 10:28

Ja gib ruhig deinen Senf dazu :) Ich hab das Tutorial noch ein wenig erweitert. Als nächstes steht die Dovecot Konfiguration an.
AMD Ryzen 7 5800X
64GB RAM
RTX 3070ti

Benutzeravatar
Jensomio
Moderator
Beiträge: 1008
Registriert: 28.08.2005, 12:01
Wohnort: Irgendwo
Kontaktdaten:

Re: Grundlagen Anleitung E-Mail-Server unter Linux

Beitragvon Jensomio » 28.09.2011, 11:01

So Dovecot Anleitung ist jetzt fertig. Jetzt fehlt im Prinzip nur noch das Anlegen der Benutzer und der mailusers Gruppe.
AMD Ryzen 7 5800X
64GB RAM
RTX 3070ti

Benutzeravatar
schmidtsmikey
Site Admin
Beiträge: 8969
Registriert: 08.12.2003, 21:50
Wohnort: Hamburg
Kontaktdaten:

Re: Grundlagen Anleitung E-Mail-Server unter Linux

Beitragvon schmidtsmikey » 30.09.2011, 06:17

Sehr gut, wie gesagt, wenn ich dazu komme, werde ich auch einmal meinen Senf dazu abgeben.

phpspace
Beiträge: 4
Registriert: 08.10.2011, 23:56
Kontaktdaten:

Re: Grundlagen Anleitung E-Mail-Server unter Linux

Beitragvon phpspace » 09.10.2011, 08:46

Wow, das ist ja mal sehr umfangreicher Beitrag um einen E-Mail-Server einzurichten. Ich werde diesen mir mal bookmarken und sobald ich meine Debiansysteme von Lenny auf Debian Squeeze umstell, zur Hilfe verwenden.

Joyrider
Beiträge: 4570
Registriert: 27.09.2006, 08:45

Re: Grundlagen Anleitung E-Mail-Server unter Linux

Beitragvon Joyrider » 09.10.2011, 10:51

Sieht super aus bisher, wirkt allerdings sehr komplex, aber bei E-Mails muss halt viel beachtet werden.

:thx: :respekt:

Benutzeravatar
schmidtsmikey
Site Admin
Beiträge: 8969
Registriert: 08.12.2003, 21:50
Wohnort: Hamburg
Kontaktdaten:

Re: Grundlagen Anleitung E-Mail-Server unter Linux

Beitragvon schmidtsmikey » 04.03.2012, 17:17

Du verwendest Unix-Systembenutzer für die Postfächer. Ich habe das ganze mit MySQL gelöst, so dass ich keine Unix-Benutzer benötige. Warum hast Du Dich dafür entschieden?

P.S.: Nochmals rieeesen Respekt für den Artikel

Benutzeravatar
Jensomio
Moderator
Beiträge: 1008
Registriert: 28.08.2005, 12:01
Wohnort: Irgendwo
Kontaktdaten:

Re: Grundlagen Anleitung E-Mail-Server unter Linux

Beitragvon Jensomio » 04.03.2012, 18:04

Ich habe einen LDAP Server, auf dem ich alle Gruppen und User zentral verwalte, außerdem habe ich einen Kerberos server, der die Passwörter verwaltet. So muss/kann sich der User für alle Dienste das Passwort setzen.
Kerberos ist ein single-sign-on system, welches auf größter Sicherheit ausgelegt ist. Wenn ich mich einmal einlogge, kann ich sofort auf Email subversion apache ssh einloggen, ohne mein Passwort angeben zu müssen. Vor allem bei so vielen ssh servern ist das ein riesen Vorteil, da man keine keys verteilen muss, sondern einmalig den Kerberos einrichten muss. Natürlich kann ich alle Dienste auch mit Passworteingabe benutzen, sollte ich an einem Fremden Rechner sein.
AMD Ryzen 7 5800X
64GB RAM
RTX 3070ti

Joyrider
Beiträge: 4570
Registriert: 27.09.2006, 08:45

Re: Grundlagen Anleitung E-Mail-Server unter Linux

Beitragvon Joyrider » 04.03.2012, 21:46

LDAP habe ich auch noch nicht eingerichtet, Kerberos auch nicht.

Muss ich beim Mail-Server bezüglich der Domains was beachten? Speziell beim Empfang?

Generell kann ja sonst jeder kommen und behaupten für meine "domain.tld" zuständig zu sein.

Benutzeravatar
Jensomio
Moderator
Beiträge: 1008
Registriert: 28.08.2005, 12:01
Wohnort: Irgendwo
Kontaktdaten:

Re: Grundlagen Anleitung E-Mail-Server unter Linux

Beitragvon Jensomio » 05.03.2012, 09:23

Für die Domain des Mailservers muss ein korrekter reverse lookup möglich sein. Außerdem musst du den Domains den MX-Record einstellen, der muss auf die Domain des Mailserver zeigen.

Mögliches Szenario:

Webserver: examle.com
MX1: mail.example.com

Mailserver: mail.example.com


Auch möglich:

Webserver: example.com
MX1: mailserver.com

Mailserver: mailserver.com


LDAP und kerberos brauchst du bei der Konfiguration nicht zwingend. Der Teil fehlr ja auch in der Anleitung ;)
AMD Ryzen 7 5800X
64GB RAM
RTX 3070ti


Zurück zu „Linux“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast