Dialup mit mehr als einem Provider

Die Aufgabe

Wir konstruieren hier einfach mal einen Worst-Case. Keines der Probleme ist frei erfunden, obwohl sie nicht alle gleichzeitig auftraten, habe ich jedes davon lösen müssen. Man kann etwas derartiges aber durchaus brauchen, wenn man mehr als eine Email-Adresse besitzt und über verschiedene Provider Mail versenden will. Zudem zeigt dies deutlich die Möglichkeiten von Sendmail. Man stelle sich nur einmal vor, alles das jedem einzelnen Mailprogramm beibringen zu müssen, falls das überhaupt geht.

Die Lösung

Mein System ist mit M4-Makros konfiguriert. Hier das File dazu:

include(`../m4/cf.m4')
define(`SMART_HOST',`smtp:studserv.uni-leipzig.de')
define(`confCON_EXPENSIVE',`True')
define(`confDONT_EXPAND_CNAMES',`True')
define(`confDONT_PROBE_INTERFACES',`True')
define(`confSERVICE_SWITCH_FILE',`/etc/service.switch')
define(`confHOSTS_FILE',`/etc/hosts')
define(`confTO_QUEUEWARN',2d)
define(`confTO_QUEUERETURN',14d)
define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')

FEATURE(nodns)
FEATURE(nocanonify)
FEATURE(mailertable,`hash -o /etc/mailertable')
FEATURE(use_cw_file)
FEATURE(local_procmail)

OSTYPE(linux)
undefine(BITNET_RELAY)
undefine(DECNET_RElAY)

MAILER(smtp)
MAILER(uucp)
MAILER(zconnect)
MAILER(bsmtp)

Die Mailertable sieht beispielhaft so aus:

zaphod                          local
zaphod.UUCP                     local
zaphod.sax.sub.de               local

arthur                          local
arthur.UUCP                     local
arthur.sax.sub.de               local

.sax.sub.de                     bsmtp:cap
.east.de                        zconnect:elektron.east.de
.nikoma.de                        smtp:smtp.nikoma.de

Und das .cw-File etwa so:

arthur
arthur.sax.sub.de
zaphod
zaphod.sax.sub.de

Damit ist praktisch alles gelöst, abgesehen von der Maskerade der Absenderadressen. Zwar gibt es FEATURE(masquerade) und FEATURE(allmasquerade), aber die gehen nur für einen User und einen Mailer. Zudem ändern sie den Usernamen nicht. Also ist Handarbeit angesagt: Einen eigenen Mailer definieren. Die Idee dazu hatte ich ursprünglich aus einer FAQ bei Delix, auch dort hatte man die Genericstable offenbar übersehen.

ifdef(`confMASQUERADEDB',`dnl
# define lookup database for pointnames outside the local net
Kmasqdb btree confMASQUERADEDB
undefine(`confMASQUERADEDB')')


######################################
###   MSMTP Mailer specification   ###
######################################

Mmsmtp,      P=[IPC], F=CONCAT(meDFMuX, SMTP_MAILER_FLAGS), 
   S=81,R=ifdef(`_ALL_MASQUERADE_', `21/31', `21'), E=\r\n, L=990,
   _OPTINS(`SMTP_MAILER_MAX', `M=', `, ')
   _OPTINS(`SMTP_MAILER_CHARSET', `C=', `, ')T=DNS/RFC822/SMTP, A=IPC $h


##############################################################
### Ruleset 81, rewrite sender header & envelope for Mmsmtp ##
##############################################################
#Thanks to Bjart Kvarme 

S81
R$-                $1 < @ $j . >                         user => user@localhost
R$- < @ $* > $*    $: $1 < @ $2 > $3 ?? $1               user@something?
R$+ ?? $+          $: $1 ?? $(masqdb $2 : smtp $: @ $)
R$+ ?? @           $@ $1                                 Not found
R$+ ?? $+          $>3 $2                                Found, rewrite

Etwas ähnliches wird noch für ZConnect definiert, dann kommen noch drei Zeilen in das .mc-Makrofile:

define(`confMASQUERADEDB',`/etc/masqueradedb')
MAILER(zconnect)
MAILER(mzconnect)

Dann noch eine entsprechende Datenbank aufsetzen (makemap), Config generieren (m4 arthur.mc), fertig.

Zum Testen der Konfiguration sollte man den Adreßtest-Modus von Sendmail benutzen. Man ruft ihn mit sendmail -bt auf. Er erwartet als Eingabe eine kommagetrennte Liste von Rulesets und eine Adresse. Um also zu checken, dass Mail an udo@arthur.sax.sub.de wirklich per UUCP versendet wird, gibt man ein:

sendmail -bt
3,0 udo@arthur.sax.sub.de
Und die letzte Zeile sollte den bsmtp-Mailer selektiert haben.

Berühmte letzte Worte

Beschaff dir einen eigenen Domainnamen, und alle Probleme sind weg. Wenn du es schaffst, einen echten Domainnamen zu bekommen (normalerweise kauft man ihn einfach, aber das geht eben nicht mit einem Wegwerfprovider) und dein Provider das ETRN-Verfahren zum Abholen der Mail für ganze Domains anbietet, sind alle Probleme ohne Konfigurationsaufwand gelöst.

Ebenfalls eine saubere Lösung ist UUCP. Mit UUCP kommt man auch zu einer ordentlichen Adresse (udo@arthur.sax.sub.de ist so eine) und die Konfiguration ist mit Bordmitteln (sprich M4-Makros) gelöst.



© 05/2001 Marvin