ABSTRACT: betrieb eines eigenen mailservers mit schwerpunkt "sendmail". AUDIENCE: junior admin SYSTEM: any unix SECTION: basic unix commands AUTHOR: mond COPYRIGHT: GNU Free Documentation Licence http://www.gnu.org/licenses/fdl.txt wie wir schon bei den "email basics" gelernt haben braucht man zum betrieb eines eigenen mailservers ein mailserver programm dass auf port 25 eingehende mails empfaengt und diese eventuell an andere system weiterleiten kann. sendmail ist eines der aeltesten programme im internet. inzwischen gibt es neben dem klassiker sendmail eine reihe anderer mehr oder weniger freier mailserver: * exim: unter GNU licence, default bei debian. reicht fuer ganz einfache systeme * qmail: auf sicherheit und performance getrimmtes mailsystem. problematische licence. * postfix: mailer von IBM. ebenfalls gute performance. keine ideale licence. * sendmail: defaktostandard. keine so hohe performance wie qmail oder postfix. hatte frueher sicherheitsprobleme. sendmail kann man entweder als daemon laufen lassen der am port 25 auf mail wartet oder interaktiv. der interaktive aufruf wird i.a. von lokalen mail clients genutzt um mail zu versenden. im weiteren beschraenke ich mich hier auf sendmail. das hautptkonfigurationsfile von sendmail ist das "sendmail.cf" file. allerdings ist dies so lang und komplex dass es kaum noch per hand editiert wird. ueblicherweise hat man ein sendmail.mc oder sendmail.m4 dass mithilfe der m4 macrosprache und vielen include modulen die erzeugung des sendmail.cf files erledigt. moderne distributionen haben all diese files in /etc/mail ueblicherweise zusammen mit einem Makefile oder einem script dass fuer die erstellung des sendmail.cf zustaendig ist. (in debian: sendmailconfig zur erstellung des Makefiles ) bevor wir zum sendmail selbst bekommen ist wichtig zu wissen welche mail ueberhaupt an unser sendmail gelangt: * mail fuer einen unserere hostnamen. wenn wir im DNS blechkiste.irgendwo.at heissen dann werden andere mailserver veruschen uns mail fuer xyz@blechkiste.irgendwo.at zuzustellen, sofern es nicht einen expliziten MX eintrag gibt der besagt dass diese mail nicht fuer uns ist. heissen wir auch www.irgendwo.at dann bekommen wir auch diese. * mail fuer die es einen MX eintrag gibt der auf unseren rechner zeigt. * wenn irgendjemand unseren server als server fuer ausgehende mails eingetragen hat so fliessen diese mails ebenfalls ueber unser sendmail. generell gibt es dabei zwei wichtige faelle zu entscheiden: a) die mail ist wirklich fuer uns. dann muss sie lokal zugestellt werden. b) dei mail ist NICHT fuer uns. dann muss sie von unserem system in richtung bestimmungsort weitergeleitet werden. man nennt das "relaying" (siehe "email basics") features die fuer uns interessant sind: ======================================= das wichtigste ist die Cw zeile. Cwbleckiste.irgendwo.at irgendwo.at die Cw zeile sagt welche namen als lokal angesehen werden. wenn also unser sendmail mail zustellen soll die xyz@irgendwo.at oder xyz@blechkiste.irgendwo.at heisst dann wird unser sendmail versuchen diese mail lokal an einen user "xyz" oder ein lokales alias zuzustellen. mit einem feature kann man einschalten dass diese namen auch aus einem file gelesen werden. z.b. /etc/mail/local-host-names (es wird eine Fw zeile in sendmail.cf geschrieben) das file ist praktisch wenn man viele lokale domainnamen hat. eine wichtige einstellung sind "relay-domains". also jene domains fuer die wir relaying erlauben. praktisch ist es sendmail mit dem feature "access_db" zu konfigurieren. damit hat man erweiterte moeglichkeinten relaying zu erlauben oder einzuschraenken. schreibt man z.b. im "access" file: 192.168.123 RELAY irgendwo.at RELAY wuerden alle rechner mit IP addresse 192.168.123.xxx den rechner als relay benuetzten duerfen und zusaetzlich wuerde dei domain irgendwo.at erlaubt. wichtig ist auch wie mails aussehen die vom lokalen system weggeschickt werden: MASQUERADE_AS(blabladomain.at) wuerde mail die ueber das system weggeschickt werden so umschreiben dass sie aussehen als ob sie von blabladomain.at kommen wuerden. (mit dem feature MASQUERADE_DOMAIN koennte man auch andere domains masqueraden) hat man sendmail mit dem FEATURE(genericstable) konfiguriert so kann man fuer jeden lokalen usernamen einen anderen namen einstellen der als absenderaddresse verwendet wird. (das gilt allerdings nur fuer mails die nicht schon mit einer vollen absenderaddresse weggeschickt wird.) die einstellung erfolgt i.a. im file /etc/mail/genericstable wichtiger ist meist das FEATURE(virtusertable). damit bekommt man ein file namens /etc/mail/virtusertable in den man je nach domainname der ankommenden mail verschiedene lokale user zuordnen kann: office@blabladomain.at maxmeier office@irgendwo.at ahuber @irgendwoanders.at anna@blechkiste.irgendwo.at im file /etc/aliases bzw /etc/mail/aliases kann man aliase namen einstellen die fuer alle domains gelten. also z.b: max.meier: maxmeier mm: maxmeier mmeier: maxmeier wuerde alias namen fuer maxmeier festlegen. fuer alle die files access, virtusertable, genericstable, aliases gilt: sendmail liest die files i.a. nicht direkt sondern ein datenbankfile dass aus diesen textfiles generiert wird. ruft man im verzeichniss /etc/mail make auf so sollten die entsprechenden .db files aktualisiert werden. (man koennte dies auch handisch mit dem "makemap" programm machen). erst nach dem makemap oder einem aufruf von newaliases (falls sich das alias file geaendert hat) kennt sendmail die neuen einstellungen.) weiters wichtig ist das file /etc/mail/mailertable hier kann man fuer einzelne domains extra mailzustellungsprogramme eintragen. z.b: irgendwo.org smtp:[192.168.123.45] maxprivat.irgendwo.org local:maxmeier blabladomain.com uucp-dom:uubla das wuerde besagen dass mails an xyz@irgendwo.org an die interen IP addresse 192.168.123.45 weitergeleitet werden, wo z.b. ein mailserver stehen koennte der ansonsten nicht direkt erreichbar ist. alle mail an xyz@maxprivat.irgendwo.org wuerde lokal in die mailbox von maxmeier zugestellt. und mail an blabladomain.com wuerde ueber ein, heute nicht mehr sehr gebraeuchliche, aber fuer dialup verbindungen praktisches protokoll namens "uucp" zugestellt unter dem uucp namen "uubla". wir sehen also: sendmail ist ein sehr leistungsfaehiger verteiler von mail. durch direkte aenderungen im sendmail.cf files koennte man noch komplexere aufgaben loesen. i.a. kommt man jedoch mit den folgenden features aus. * Cw, Fw fuer lokale hostnamen * relay-domain und access_db zur kontrolle von relaying * aliases, virtusertable, genericstable fuer aliase, und * mailertable zur verteilung von mails an ganze domains EXERCISES: * sieh dir die mailconfiguration von hosts an auf denen du einen account hast. * konfiguriere ein sendmail das zumindest mails fuer eine domain akzeptiert REFERENCES: /usr/share/doc/sendmail/cf.README.gz /usr/share/doc/sendmail/op.ps.gz http://mailsoftware.cjb.net/ man sendmail man makemap