Deutsch English
Dein Feedback:
Hat die Seite Deine Erwartung erfüllt? vote3 Ja
vote2 Teilweise
vote1 Nein
Noch ein Kommentar?

Nur falls, Du eine Antwort erwartest, Deine E-Mailadresse

Gegebenenfalls noch Dein Name

Do not change this:
Feedback
Suchen

Exim mit mehreren Smarthosts nutzen

Diese Seite beschäftigt sich mit der Frage wie man den Mailserver Exim (getestet mit Version 4.5) so konfiguriert, dass er Mails die eine bestimmte Absenderadresse haben über einen bestimmten Smarthost verschickt. Diese Problemstellung tritt z.B. dann auf wenn man für Kunden verschiedener Freemail-Anbieter Mails verschicken möchte und Mails (möglichst) nicht direkt ausliefern möchte/kann und keinen Smarthost zur Verfügung hat der Mails unabhängig von der Absenderadresse verschickt.
Optional kann einzelnen Zieladressen ein lokaler Benutzername zugeordnet werden der die Mails dann ohne Umwege direkt erhält.
Außerdem werden auf dieser Seite noch einige praktische Exim Optionen aufgeführt.
05-10-2005 15.05
FIXME /etc/exim4.conf?

Allgemeines

Exim wird normalerweise über die Datei /etc/exim/exim.conf konfiguriert. Alle Beispiele beziehen sich auf diese Datei.
Zusätzlich habe ich noch eine Datei /etc/exim/smtp_users angelegt. In dieser Datei wird in jeder Zeile eine E-Mailadresse zusammen mit einigen Informationen zu dieser Adresse aufgelistet:
userx@example.com:   user=usera   smart_host=mail.example.com   auth_name=u113   auth_pass=secret
  • Damit hat man einen einen User usera der (irgendwo) eine E-Mailadresse userx@example.com hat.
  • Mails an userx@example.com werden nicht mehr dorthin geschickt sonder direkt an den lokalen Benutzer usera.
  • Mails von userx@example.com werden über den Smarthost mail.example.com mit dem Benutzernamen u113 und dem Passwort secret verschickt (cram_md5 verschlüsselt).
userx@example.com:                smart_host=mail.example.com   auth_name=u113   auth_pass=secret
  • Wie oben nur dass die Mails an userx@example.com wirklich dorthin verschickt werden.
userx@example.com:   user=usera   smart_host=mail.example.com   auth_plain=^u113^secret
  • Wie oben nur dass statt cram_md5 das Passwort unverschlüsselt mit plaintext übertragen wird.
userx@example.com:   user=usera                                                          
  • Wie oben nur dass kein Smarthost benutzt wird.
Natürlich sind alle benutzen Namen / Adressen auf dieser Seite frei erfunden und Ähnlichkeiten mit vorhandenen Namen / Adressen rein zufällig.
12-10-2005 02.11

Smarthost / Smarthosts festlegen

  1. In der einfachsten Variante stellt Exim Mails direkt zu. Ein passender Eintrag im Abschnitt "ROUTERS CONFIGURATION" sieht so aus:
    # direct delivery
    smarthost_directly:
    debug_print = "R: dnslookup for $local_part@$domain"
    driver = dnslookup
    domains = ! +local_domains
    transport = remote_smtp
    #same_domain_copy_routing = yes
    #ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8 : 192.168.0.0/16 : 172.16.0.0/12 : 10.0.0.0/8 : 169.254.0.0/16
    no_more
  2. Wenn man die Mails nicht selbst zustellen will oder kann, gibt es die Möglichkeit dies von einem Smarthost erledigen zu lassen. Wenn der Provider den Smarthost mail.example.com anbietet sieht eine passende Konfiguration so aus:
    FIXME
    smarthost:
    driver = domainlist
    transport = remote_smtp
    route_list = "* mail.example.com bydns_a"
  3. Wenn man Smarthosts hat die nur ihre eigenen Absenderadressen akzeptieren kann man die Mails je nach Absenderdomaine verteilen:
    FIXME
    smarthost_alpha:
    condition = ${if eq {${lc:$sender_address_domain}} {example.com} {true} fail }
    driver = domainlist
    transport = remote_smtp
    route_list = "* mail.example.com bydns_a"

    smarthost_beta:
    condition = ${if eq {${lc:$sender_address_domain}} {example.org} {true} fail }
    driver = domainlist
    transport = remote_smtp
    route_list = "* smtp.example.org bydns_a"

    ...
  4. Oder man ordnet jeder einzelnen Absenderadresse einen eigenen Smarthost zu:
    FIXME
    smarthost_alpha:
    condition = ${if eq {${lc:$sender_address}} {usera@example.com} {true} fail }
    driver = domainlist
    transport = remote_smtp
    route_list = "* mail.example.com bydns_a"

    smarthost_beta:
    condition = ${if eq {${lc:$sender_address}} {userb@example.com} {true} fail }
    driver = domainlist
    transport = remote_smtp
    route_list = "* mail.example.com bydns_a"

    ...
  5. Wenn man die anfangs erwähnte Datei nutzt kann man die Adressen automatisch dem passenden Smarthost zuordnen (und bei Bedarf den Rest direkt verschicken):
    smarthost_auto:
    condition = ${extract{smart_host}{${lookup{$sender_address}lsearch{/etc/exim/smtp_users}{$value}fail}}}
    driver = manualroute
    domains = ! +local_domains
    route_list = "* ${extract{smart_host}{${lookup{$sender_address}lsearch{/etc/exim/smtp_users}{$value}fail}}} bydns_a"
    transport = remote_smtp
    # direct delivery
    smarthost_directly:
    debug_print = "R: dnslookup for $local_part@$domain"
    driver = dnslookup
    domains = ! +local_domains
    transport = remote_smtp
    #same_domain_copy_routing = yes
    #ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8 : 192.168.0.0/16 : 172.16.0.0/12 : 10.0.0.0/8 : 169.254.0.0/16
    no_more
05-10-2005 19.51

Adressen umschreiben

  • Folgende Regel stellt alle Mails an irgendeinrechnername@example.com statt dessen an server@example.com zu:
    *@*.example.com      $1@server.example.com    T
  • Folgende Regel sucht zu jeder Empfängeradresse den Namen des dazugehörigen Nutzers aus der oben genannten Datei und anstatt die Mail an die Empfängeradresse zu schicken wird sie lokal an den passeden Nutzer zugestellt:
    *@* "${extract{user} {${lookup{$0}lsearch{/etc/exim/smtp_users}{$value}fail}} {$value} fail}@localhost" T
06-08-2005 13.09

Authentifizierung

  • Rechner host1.example.com, host2.example.net und host3.example.org für Authentifizierung freischalten (alle Smarthosts auflisten bei denen sich exim anmelden darf):
    remote_smtp:
    debug_print = "T: remote_smtp for $local_part@$domain"
    driver = smtp
    hosts_try_auth = host1.example.com:host2.example.net:host3.example.org
  • Authentifizierung bei SMTP mit dem Namen "usera" und dem Password "secrect" (cram_md5):
    cram_md5:
    driver = cram_md5
    public_name = CRAM-MD5
    client_name = usera
    client_secret = secrect
  • Authentifizierung bei SMTP mit dem Namen "usera" und dem Password "secrect" (plaintext):
    plain:
    driver = plaintext
    public_name = PLAIN
    client_send = ^usera^secrect
  • Oder die Namen und Password aus oben genannter Datei auslesen (entscheidet automatisch cram_md5 / plaintext):
    cram_md5:
    driver = cram_md5
    public_name = CRAM-MD5
    client_name = "${extract{auth_name}{${lookup{$sender_address}lsearch{/etc/exim/smtp_users}{$value}fail}}}"
    client_secret = "${extract{auth_pass}{${lookup{$sender_address}lsearch{/etc/exim/smtp_users}{$value}fail}}}"
    plain:
    driver = plaintext
    public_name = PLAIN
    client_send = "${extract{auth_plain}{${lookup{$sender_address}lsearch{/etc/exim/smtp_users}{$value}fail}}}"
05-10-2005 18.16

Nützlich Optionen

Neben den Einstellungen zum Smarthost gibt es noch einige andere Optionen die vielleicht von Interesse sind.
  • ###
    # MAIN CONFIGURATION SETTINGS
    ###
  • Nur Mails mit fehlerfreien Headern akzeptieren (Achtung: OE und Bcc Empfänger):
    FIXME (gibts nicht mehr?)
    headers_check_syntax
  • Nur SMTP Verbindungen vom lokalen Rechner entgegennehmen. Ideal wenn die Mails per pop3 abgeholt werden:
    hostlist relay_from_hosts = 127.0.0.1 : ::::1
    ...
    begin acl
    ...
    accept hosts = +relay_from_hosts
  • Zusätzlich Mails von 10.0.* Adressen entgegennehmen:
    hostlist relay_from_hosts = 127.0.0.1 : ::::1 : 10.0.0.0/16
    ...
    begin acl
    ...
    accept hosts = +relay_from_hosts
  • Vertrauenswürdigen Benutzern erlauben die Absenderadresse zu verändern:
    trusted_users = mail:user1:user2
  • Fehlermeldungen immer auch an den Postmaster schicken:
    freeze_tell_mailmaster
    errors_copy = "*@* postmaster"
  • Mailinglistensoftware verrät Bcc Empfänger nicht:
    FIXME (gibts nicht mehr?)
    always_bcc
  • Mails die den lokalen Rechner verlassen aufheben und erst nach Aufforderung verschicken:
    #queue_smtp_domains = ! +local_domains
    queue_domains = ! +local_domains
  • ###
    # TRANSPORTS CONFIGURATION
    ###
  • Mails statt nach /var/spool/mail/user nach /home/user/Maildir ausliefern:
    FIXME: Nachsehen was mit den Optionen ist die es bei Neu nicht gibt
    local_delivery:
    driver = appendfile
    create_directory = true
    directory_mode = 700
    group = mail
    mode = 0660
    mode_fail_narrower = false
    envelope_to_add = true
    #file = /var/spool/mail/${local_part}
    directory = ${home}/Maildir/
    maildir_format
    Neu:
     transport = maildir_home
    ...

    maildir_home:
    debug_print = "T: maildir_home for $local_part@$domain"
    driver = appendfile
    directory = $home/Maildir
    delivery_date_add
    envelope_to_add
    return_path_add
    maildir_format
    mode = 0600
    mode_fail_narrower = false
  • ###
    # REWRITE CONFIGURATION
    ###
  • Adresse abc@example.com in Adresse def@example.net umschreiben:
    abc@example.com  def@example.net  FLAG
    Dabei gibt FLAG nach folgender Liste an welche Header umgeschrieben werden:
    E Alle envelope, F alle envelope From, T alle envelope To, b Bcc:, c Cc:, f From:, h alle Header, r Reply-To:, s Sender:, t To:
12-10-2005 02.11

Beispiele

Für jede erwähnte Datei findet man hier je ein Beispiel:
Die Rechte der Dateien müssen so gesetzt werden dass exim sie lesen kann. Gleichzeitig sollte die smtp_users vor Zugriffen durch Benutzer geschützt werden. Je nach System könnte das z.B. so aussehen:
-rw-r-----  1  root  mail  ...  smtp_users
26-11-2005 18.36
Powered by PHP Created with Xemacs Valid XHTML 1.0! Valid CSS!