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!