Martin Werthmöller
Der Autor übernimmt keinerlei Haftung für die Richtigkeit der Aussagen dieses Dokuments und nätürlich auch keinerlei Haftung für das Eintreten von Folgeschäden durch Anwendung dieser Doku.
Der MTA Sendmail wird mit Hilfe der im folgenden beschriebenen Dateien
konfiguriert. Die Grundkonfiguration erfolgt in der sendmail.cf
,
die in der Regel aber nicht direkt bearbeitet werden muß, sondern mit
Hilfe von m4-Makros erzeugt wird. Die eigentlichen Anpassungen für
einzelne Sites erfolgen in anderen Dateien.
Einige der dieser Configfiles müssen in ein .db Datenbankfile gewandelt werden. Dieses erfolgt mit Hilfe des Befehls makemap (bzw. newaliases)1. Nach Änderungen der Konfiguration muß der sendmail Prozeß veranlaßt werden, die Dateien neu einzulesen.
ankommende Mail | | | v n Liste der Hosts (IP-Addr.) access.db ----->550 von denen Email akzeptiert, | bzw. weitergeleitet wird. y | | v n local-host-names ---------+ Liste der lokalen Domains (sendmail.cw) | | | y | | | | v | virtusertable.db v Zuordnung Emailadresse -> | | mailboxname y | | anderer@neuedomain.org | | v | aliases.db ------>-----+ username: user@neuedomain.org | | user: anderer, nocheiner | | | | | v Weiterleitung f. Domain | mailertable <domain> smtp:[IP-Addr.] | | []->keine DNS-Abfr. f. Domain v | /var/spool/mail | (lokal) | | | v Envelope (Received: from.. by) genericstable.db maskieren fuer: | user nuser@neuedom.org | user@domain nuser@neuedom.org | | v SMTP-Versand
makemap hash access < access
Beispiel:
---------------------------------------------------- # /etc/mail/access # localhost RELAY 127.0.0.1 RELAY ourdomain.de RELAY 192.168.1.1 RELAY spammer.com 550 We don't accept spam ----------------------------------------------------
username@sitename.de
) in eine andere Adresse. Der
Namensteil der Adresse entspricht einem in der /etc/passwd
eingetragenen Usernamen.
newaliases
Beispiel:
---------------------------------------------------- # /etc/mail/aliases # root: me@domain.com postmaster: root admins: me@domain.com, fellow@domain.com # append to file myboss: /var/tmp/garbage # pipe mail to program info: |/usr/local/bin/autoanswer.pl important: "|/usr/local/bin/impmail important" ----------------------------------------------------
makemap hash genericstable < genericstable
Beispiel:
---------------------------------------------------- # /etc/mail/genericstable # user user@absenderdomain.org user@localhost user@absenderdomain.org user@localhost.localdomain user@absenderdomain.org ----------------------------------------------------
makemap hash mailertable < mailertable
Beispiel:
---------------------------------------------------- # mailertable # domain.org smtp:[nnn.xxx.yyy.zzz] host.domain.org smtp:[nnn.xxx.yyy.zzz] anotherdomain.org smtp:smtp.another.org # create a smarthost . smtp:smarthost.domain.com ----------------------------------------------------
/var/spool/mail/<username>
)oder eine Weiterleitung an einen andere
Adresse.
makemap hash virtusertable < virtusertable
Beispiel:
---------------------------------------------------- # virtusertable # user@domain.org username anderer@andere.org foo@bar.com @diesedomain.org %1@anderedomain.com ----------------------------------------------------
Der Catch-all Eintrag muß nicht ans Ende der Datei geschrieben werden. Sendmail erkennt wählt den passendsten Eintrag aus.
/etc/aliases
) weitergeleitet werden. Die Datei wird bei neueren
Versionen auch als /etc/mail/local-host-names gespeichert.
Beispiel:
---------------------------------------------------- # /etc/mail/sendmail.cw # local.domain.net .domain.net my.domain.org ----------------------------------------------------
eclipse:martin$ sendmail -v -t To: foo@bar.com From: baz@spam.com Subject: Test mail Testline1 Testline2 ^D baz@spam.com... Connecting to smtp.bar.com. via smtp... 220 smtp.bar.com ESMTP Sendmail 8.9.3/8.9.3; Wed, 26 Sep 2001 21:35:41 +0200 >>> EHLO piggy.bar.com 250-smtp.bar.com Hello piggy.bar.com [217.4.140.61], pleased to meet you 250-8BITMIME 250-SIZE 104857600 250-DSN 250-ONEX 250-XUSR 250 HELP >>> MAIL From: SIZE=72 250 ... Sender ok >>> RCPT To: 250 ... Recipient ok >>> DATA 354 Enter mail, end with "." on a line by itself >>> . 250 VAA05714 Message accepted for delivery foo@bar.com... Sent (VAA05714 Message accepted for delivery) Closing connection to smtp.bar.com. >>> QUIT 221 smpt.bar.com closing connection
Die einzelnen Rulesets können wie oben schon gelistet mit sendmail -bt getestet werden. Anbei einige Beispiele:
echo '$=w' | sendmail -bt'
echo '/map access @meine-domain.de' | sendmail -bt echo '3,0 info@meine-domain.de' | sendmail -bt -d21.4
Die Tests können auch interaktiv durchgeführt werden:
sendmail -bt # Ist die Domain in der class w? $=w # funktioniert das Virtusertable mapping? /map virtuser joe@yourdomain.com /map virtuser jane@yourdomain.com /map virtuser @yourdomain.com # und das Rewriting? 3,0 joe@yourdomain.com 3,0 some@yourdomain.com
Achtung:
Falls beim Test 3,0.. oder im Logfile festgestellt wird,
daß sendmail anscheinend versucht, Email für einen lokalen Empfänger mit
verdoppeltem Domaintail (die Domain mit einem Punkt angehängt wie:
user@domain.de.domain.de) zuzustellen, sollte geprüft werden, ob der
MX-Record auf diesen Host zeigt!
Mit Hilfe des Schalters -X /tmp/SMTP.log wird die komplette ein- und ausgehende SMTP-Kommunikation mit anderen Hosts in die Datei /tmp/SMTP.log geschrieben. Achtung: Erzeugt ein hohes Datenaufkommen und sollte daher nur für die Fehlersuche eingesetzt werden.
/usr/sbin/sendmail -bd -X /tmp/SMTP.log
Die erweiterten Konfigurationsoptionen können in den Konfigurationsdateien (m4 oder sendmail.cf) eingetragen oder auch per Kommandozeilenschalte übergeben werden.
Mit Hilfe der Option DaemonPortOptions2 kann u.a. das Binden an einzelne Adressen konfiguriert werden. Um den Socket nur an ein lokales Interface zu binden wird je nach Konfiguration wie folgt vorgegangen:
Im m4 File werden Zeilen mit dem folgenden Aufbau eingefügt:
DAEMON_OPTIONS(`field1=value1,field2=value2,...')
Um den Daemon an das lokale Interface 10.10.0.1 zu binden wird die folgende Zeile in die m4 Konfigurationsdatei eingetragen:
DAEMON_OPTIONS(`Name=MTA, Addr=10.10.0.1')
Es können auch mehrere Adressen in der Form Addr=1.2.3.4, Addr=1.2.3.5 übergeben werden.
In der aus diesem Makrofile erzeugten sendmail.cf wird die Optionszeile
# SMTP daemon options O DaemonPortOptions=Name=MTA, Addr=10.10.0.1eingefügt.
Der Daemon ist jetzt nur an die Adresse 10.10.0.1 gebunden. Anfragen an Port 25 anderer lokal konfigurierter Adressen dieses Rechners werden nicht beantwortet.
border:cf# sendmail -bd -q20m -O DaemonPortOptions=Addr=192.168.1.1 \ -O DaemonPortOptions=Addr=127.0.0.1
Das Logging kann mit Hilfe der Option LogLevel genau eingestellt werden. Der LogLevel ist in der Defaulteinstellung auf 9 eingestellt, kann aber mit Hilfe der Konfigurationsdatei oder einem Kommandozeilenschalter verändert werden:
define(`confLOG_LEVEL', `15')stellt den LogLevel auf 15 ein. Es erzeugt einen Eintrag der Form
# log level O LogLevel=15in der sendmail.cf.
border:cf# sendmail -bd -q20m -O LogLevel=15
Je nach eingestelltem LogLevel werden die Aktionen von sendmail unterschiedlich ausführlich in das Log geschrieben. Die einzelnen Werte habe folgende Bedeutung. Werte größer 64 sind für das Debugging des sendmail selbst reserviert und haben für den Produktionseinsatz keinen Sinn.
Die maximale Größe einer Nachricht (in Byte) kann mit der Option MaxMessageSize eingestellt werden. Wenn die Größe, die bei der ESMTP HELO Antwort übermittelt wird, größer ist als dieser Wert, wird die Annahme zurückgewiesen.
define(`confMAX_MESSAGE_SIZE', `10000000')stellt die Größe auf 10MB ein und erzeugt folgenden Eintrag
# maximum message size O MaxMessageSize=10000000in der sendmail.cf.
border:cf# sendmail -bd -q20m -O MaxMessageSize=10000000