Kontakt:
Thorsten Gunkel
63456 Hanau
Deutschland
Mail
Stimm ab und hilf mit diese Seite zu verbessern!Hat die Seite Deine Erwartung erfüllt?
Schreibe Deinen Kommentar doch einfach in das
Gästebuch.
Letzte Änderung: 26-11-2005 18.36
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?
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
- 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
- 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"
- 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"
...
- 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"
...
- 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
- 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
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
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