# ------------------------------------------------------------------- #
# Exim MTA Konfiguration #
# fuer Version 4.8x #
# 13.05.2013 #
# ------------------------------------------------------------------- #
# Dies Exim-Konfiguration besteht grob aus 7 Sektionen, deren Reihen-
# folge teilweise wichtig ist. Ebenso kann die Reihenfolge der Opti-
# onen in den Sektionen wichtig sein. Ich habe mich fuer eine grosse
# Datei entschieden, da dies meiner Meinung nach deutlich lesbarer als
# der "Debian-Stil" mit unzaehligen sich gegenseitig einbindenden
# Dateien ist. Alle Optionen sind ausfuerlich kommentiert, das sollte
# bitte beibehalten werden. Bei Fragen ist die extrem umfangreiche
# Doku immer sehr hilfreich. :)
# ------------------------------------------------------------------- #
# 1. Allgemeine Optionen
# ======================
# Dies sind allgemeine Optionen, die Exim als
# Ganzes betreffen. Teilweise handelt es sich
# um "echte" Einstellungen, teilweise sind es
# aber auch nur Makros, die spaeter erneut
# referenziert werden.
# Der Hostname der Maschine, auf welcher Exim
# laeuft. Wird er hier nicht explizit gesetzt,
# nutzt Exim den Hostnamen des Hosts. In allen
# Faellen muss der Hostname ein FQDN sein!
primary_hostname = workstation1.example.com
# Adresse auf die wir lauschen
local_interfaces = 127.0.0.1
# Eine Liste lokaler Domains, also Domains die
# wir als Master oder Slave verwalten. Die
# einzelnen Eintraege werden durch Doppelpunkte
# getrennt. Dies ist ein Makro.
domainlist local_domains = @
# Eine Liste aller Domains, fuer die wir Mails
# annehmen und weiterleiten (relayen), obwohl
# es sich nicht um eine lokale Domain handelt.
# Die Option ist mit grosser Vorsicht zu
# geniessen, denn man kann hier leicht alle
# Tueren fuer Spammer oeffnen. Die einzelnen
# Eintraege sind durch Doppelpunkte getrennt.
# Dies ist ein Makro.
domainlist relay_to_domains =
# Eine Liste aller Hostnamen, deren Mails wir
# ohne weitere Pruefung weiterleiten. Auch diese
# Option ist extrem gefaehrlich, denn man kann
# mit ihr leicht offene Relays bauen. Die
# einzelnen Eintraege werden durch Doppelpunkte
# getrennt. Dies ist ein Makro.
hostlist relay_from_hosts = localhost
# Name der ACL, welche vor dem Annehmen einer
# Mail (also nachdem zwar der Header aber noch
# kein Body empfangen wurde) ausgefuehrt wird.
acl_smtp_rcpt = acl_check_rcpt
# Name der ACL, die nach dem Empfang einer Mail
# (also nachdem der Body empfangen wurde) aus-
# gefuerht wird.
acl_smtp_data = acl_check_data
# Wenn wir eine Mail ohne FQDN uebergeben bekommen
# - also z.B. "root" statt "root@test.com" - wird
# diese Domain angehaengt um eine valide E-Mail
# zu generieren. Kann theoretisch auf jede Mail
# angewandt werden, in der praxis natuerlich nur
# fuer Mails von lokalen Nutzern relevant.
#qualify_domain = example.com
# Das gleiche wie bei "qualify_domain", lediglich
# fuer den Empfaenger. So wuerde z.B. aus "root"
# wieder "root@test.com" werden und die Mail kann
# zugestellt werden.
#qualify_recipient = example.com
# Der Nutzer, unter dem Exim laeuft
exim_user = mailnull
# Die Gruppe unter der Exim laeuft
exim_group = mail
# Liste der Nutzer unter der Exim
# (bis auf den Master!) niemals
# laufen wird.
never_users = root
# Hosts fuer die ein Rueckwaertsabfrage des
# Hostnames auf Basis der ermittelten IP
# durchgefuert wird. Es ist sehr sinnvoll
# dies fuer alle "*" IP-Adressen zu machen,
# damit sich sinnvolle Logs ergeben. Man
# kann es aber auf einzelne Subnetze
# begrenzen.
host_lookup = *
# Fuer welche Hosts IDENT Lookups durch-
# gefuehrt werden. Sie tun nicht weh und
# wenn wirklich jemand einen solchen Service
# betreiben sollte, fuehrt es zu besseren
# Logs.
rfc1413_hosts = *
# Wie lange bei IDENT Looksups gewartet
# wird, bevor Exim aufgibt. 5 Sekunden
# sind ein guter Wert, da die meisten
# Dienste in der Zeit antworten und es
# die Mail nicht zu lange aufhaelt.
rfc1413_query_timeout = 5s
# Wenn Bounce-Mails gefroren sind, wird nach
# 2 Tagen dennoch ein neuer Zustellversuch
# unternommen. Ist er nicht erfolgreich,
# werden die Fehler ignoriert und die Mail
# in den Muell geworfen.
ignore_bounce_errors_after = 2d
# Verwerfe gefrorene Mails nach dieser Zeit.
# 7 Tage sind ein guter wert, schon deutlich
# ueber den 72h der RFC, aber zugleich noch
# kurz genug um die Queue nicht zu verstopfen.
timeout_frozen_after = 7d
# Die maximale Groesse einer E-Mail. Dabei
# ist zu beachten, dass Exim die Groesse erst
# erkennen kann, wenn diese Menge Daten auch
# tatsaechlich uebertragen wurde.
message_size_limit = 200M
# ------------------------------------------------------------------- #
# 2. ACL
# ======
# ACL pruefen ob eine Mail angenommen wird oder
# nicht. Dabei werden sie von oben nach unten
# durchlaufen, sobald eine Regel greift wird sie
# sie auf die Mail angewandt und die Bearbeitung
# endet.
begin acl
# Die RCPT-ACL, also jene ACL die angewand wird,
# wenn der Header uebertragen wurde, der Body aber
# noch nicht. Sie kann die Mail korrekt ablehnen.
acl_check_rcpt:
# Falls die Mail ueber einen Unix-Socket gekommen
# is (also das Host-Feld leer ist!), nehmen wir sie
# ohne weitere Pruefungen an.
accept control = dkim_disable_verify
# Wir lehnen Mails ab, die ungewoehnliche Zeichen
# in der Adresse haben und an uns gerichtet sind.
# Trifft fast ausschliesslich nicht zustellbaren
# Spam.
deny message = Restricted characters in address
domains = +local_domains
local_parts = ^[.] : ^.*[@%!/|]
# Wie oben lehnt auch diese Regel alle Mails ab, die
# ungewoehnliche Zeichen beinhalten. Aber dieses mal
# sind die Regeln etwas weniger streng, da alle nicht
# an uns gerichteten Mails betroffen sind und dort
# womoeglich einige obskure Zeichen zulaessig sind.
deny message = Restricted characters in address
domains = !+local_domains
local_parts = ^[./|] : ^.*[@%!] : ^.*/\\.\\./
# Mails an Postmaster werden fuer alle lokalen
# Domains akzeptiert.
accept local_parts = postmaster
domains = +local_domains
# Mails von Hosts fuer die wir Relay sind, nehmen wir
# an. Wir markieren sie als "submission", da es sich
# wahrscheinlich um MUA handelt und wir die Mails
# daher auf Standardkonformitaet pruefen und zur Not
# anpassen wollen.
accept hosts = +relay_from_hosts
control = submission
control = dkim_disable_verify
# Mails ueber authentifizierte Verbindungen nehmen
# wir in jedem Fall an. Wieder markieren wir sie
# als "submission".
accept authenticated = *
control = submission
control = dkim_disable_verify
# Alles war jetzt noch uebrig ist und angenommen werden
# soll, ist entweder an uns gerichtet oder an eine
# Domain zu der wir relayen. Entsprechend lehnen
# wir alles andere ab.
require message = relay not permitted
domains = +local_domains : +relay_to_domains
# Pruefung, ob der Empfaenger existiert. Lokal wissen wir
# es, extern schauen wir ob wir den Server erreichen koennen.
# Wenn nicht, lehnen wir ab.
require verify = recipient
# Alles war jetzt noch nach ist, ist legitim und
# wird daher angeommen.
accept
# Die Data-ACL, also jene ACL die auf komplett vorliegende
# Mails angewand wird. Da die Mail zu diesem Zeitpunkt schon
# angenommen ist, koennen wir sie nicht ablehnen und noch
# maximal einen Bounce generieren. Wird vor allem fuer
# Contentfilter genutzt.
acl_check_data:
# Alles was bis hier gekommen ist
# wird ohne weiteres zoegern
# angenommen.
accept
# ------------------------------------------------------------------- #
# 3. Router
# =========
# Router manipulieren E-Mails oder ordnen sie
# einem Transport zu. Anschliessend werden sie
# durch den Transport zugestellt. Eine Mail
# durchlaeuft alle Router von oben nach unten,
# sobald sie von einem Router angenommen wurden,
# werden sie an den Transport uebergeben.
begin routers
# Per Smarthost leiten wir blind
# alle Mails an den Hauptserver
# weiter.
smarthost:
driver = manualroute
transport = smarthost_smtp
domains = *
route_list = * mail.example.com
no_more
# ------------------------------------------------------------------- #
# 4. Transports
# =============
# Transports werden von Routern aufgerufen und
# bearbeiten die Mail weiter, d.h. im Normalfall
# stellen sie diese zu.
begin transports
# Sendet E-Mails per SMTP
# an andere Server.
remote_smtp:
driver = smtp
# Sendet Mails per SMTP an
# den Smarthost. Fuehrt dazu
# eine Authentifizierung durch.
smarthost_smtp:
driver = smtp
protocol=smtps
hosts_require_auth = mail.example.com
hosts_require_tls = mail.example.com
# ------------------------------------------------------------------- #
# 5. Retry
# ========
# Retries spezifizieren, wie lange das
# Zustellen einer nicht zustellbaren
# Mail in welchen Abstaenden versucht
# wird.
begin retry
# - Die ersten 2h alle 15 Minuten
# - Dann fuer 4 Tage erste 1h, jeweils um 1,5 erhoeht
# - Nach 4 Tagen jeweils alle 6h
* * F,2h,15m; G,16h,1h,1.5; F,4d,6h
# ------------------------------------------------------------------- #
# 6. Rewrite
# ==========
# Mit Rewrite-Rules kann man Exim die
# Absender und Empfaenger ein- und
# ausgehender Mails veraendern.
begin rewrite
# ------------------------------------------------------------------- #
# 7. Authenticators
# =================
# Authenticators erlauben es SMTP-Nutzern
# sich gegenueber dem Server zu authentifizieren.
# Muss jeweils fuer ein Protokoll definiert
# werden.
begin authenticators
login:
driver = plaintext
public_name = LOGIN
client_send = ": smtp-username : smtp-paswort"
plain:
driver = plaintext
public_name = PLAIN
client_send = "^smtp-username^smtp-passwort"