orm@doc-tcpip.org | Erstellt: April 2001 - Letzte Modifikation: August 2003 |
Sendmail kann als Deamon Mail empfangen. Für das Versenden von Mail wird Sendmail einzeln gestartet.
Der User generiert eine Mail mit Hilfe eines MUA (Mail User Agent), also Netscape, mail, Pine, kmail etc.. Der Sender-MUA generiert Headers für die Mail MUA des Senders gibt die Mail an den MTA (Mail Transfer Agent), also sendmail, Postfix, Exim etc.. Jetzt müßen zwei Fälle unterschieden werden:
Sendmail modifiziert eventuell den Header und bestimmt den Hostnamen.
Sendmail prüft den Hostnamen über DNS.
Sendmail schreibt die Mail nach /var/spool/mqueue.
Der lokale Sendmail öffnet eine Port 25 Verbindung zu einem entfernten MTA (z.B. sendmail im Deamon-Mode). Das Protokoll ist SMTP.
Der remote Sendmail checkt den User und empfängt die Mail. Hier geht es dann wie im lokalen Fall weiter.
Empfangene Mail:
Liegt meist in /var/spool/mail/userid.
Versandte Mail:
Liegt in /var/spool/mqueue.
Hier finden sich pro Mail verschiedene Files.
dfxxxxx Daten
qfxxxxx Header
lfxxxxx Lockfile während des Sendens.
txxxxx wird angelegt, wenn das qfxxxxx neu geschrieben wird.
xxxxxx wird während einer Session offen gehalten und protokolliert.
Unzustellbare Mail:
Als dead.letter File im Home-Verzeichnis des Users.
$HOME/dead.letter.
Geöffnete Mail:
$HOME/mbox.
Mit Sendmail kann man direkt Statistiken erstellen. Diese sind umfangreich, und am besten schreibt man sich eine Reihe Skripte, um die Ausgabe auszuwerten und grafisch (z.B. Gnuplot) darzustellen.
Das Statistik-Kommando des Mailers ist mailstats. Man kann ein spezielles Sendmail-Configfile spezifizieren (Schalter -C), ein spezielles Statistik-File angeben (Schalter -f) sowie die Angabe des Mailers in der Ausgabe unterdrücken (Schalter -o). Ausserdem ist es möglich, die Ausgabe in einer maschinenlesbaren Form anzugeben und danach die Zähler auf Null zu setzen (Schalter -p ).
Die Lage des Statusfiles findet man in der sendmail.cf, der Eintrag ist StatusFile. Wenn man es setzt, muß man sendmail refreshen.
Die Abfrage funktioniert erst nach dem Empfang einer ersten Mail, sonst gibt es einen Fehler.
Die Ausgabe sieht so aus:
Wed Feb 13 15:00:00 CET 2002 Statistics from Thu Sep 27 05:48:00 2001 M msgsfr bytes_from msgsto bytes_to msgsrej msgsdis Mailer 3 7647921 9049490K 1717 2541K 67 0 local 5 10359496 32123393K 10623543 33829538K 196384 0 esmtp ============================================================= T 18007417 41172883K 10625260 33832079K 196451 0 C 18007417 10625260 196451
Die beiden Datums-Zeilen wirken zuerst etwas eigenartig. Die erste Zeile ist das aktuelle Datum der folgenden Werte, wird also auch hochgezählt. Die zweite Zeile gibt den Moment an, zu dem die Statistik des Sendmail-Daemons zuletzt resettet wurde. (Ich bin jetzt nicht sicher, ob das auch einen Reboot überlebt, glaube aber ja.)
Die Bedeutung der einzelnen Felder ist:
M = Mailernummer
msgsfr = Anzahl der Mails, die die Maschine von der Maschine M empfangen hat.
bytes_from = Anzahl an Bytes, die die Maschine von der Maschine M empfangen hat.
msg_to = Anzahl der Mails, die die Maschine an die Maschine M gesendet hat.
bytes_to = Anzahl der Bytes, die die Maschine an die Maschine M gesendet hat.
msgsrej = Anzahl der abgewiesenen Mails.
msgsdis = Anzahl der verworfenen Mails.
Mailer = Name des Mailers.
Die Werte werden pro Mailer angegeben. Nach der Doppellinie erfolgt die Angabe der Summe jeder Spalte, also über alle Mailer (Zeile T).
Die Zeile C listet alle Verbindungen auf.
Man kann die einzelnen Werte nicht einfach addieren, da eine Mail von Remote auch als Local auftaucht.
Durch Skriptgesteuertes Absetzen des Mailstat-Kommandos im Intervall und Auswertung per Skript kann man einmal die Verteilung der Mails über den Tag, die Quelle und die durchschnittliche Größe ermitteln.
Das geht mit dem sendmail-Kommando direkt:
/usr/lib/sendmail -bv list |grep -v deliverable
/usr/lib/sendmail -bt -d0.4 < /dev/null
sendmail -bp
Wenn die Mailqueue sehr voll ist, dann läuft dieses
Kommando eventuell ins Leere. Dann ist besser das
mailq-Kommando zu benutzen:
mailq -OMaxQueueRunsize=1
/usr/lib/sendmail -q -OTimeout.queuereturn=33d
Steht der Server, weil er mit der Mail-Queue nicht mehr zurechtkommt, führt man folgende Schritte durch:
Stoppen von Sendmail
Kopieren der Queue:
mv /var/spool/mqueue /var/spool/mqueue_full
Starten von Sendmail
Man kann nun abwarten, bis die Lastspitze abgeklungen
ist und dann die kopierte Queue abarbeiten lassen:
/usr/sbin/sendmail -oQ/var/spool/mqueue_full -q (-v)
Ist die Queue sehr voll, dann hat Sendmail viel damit zu tun, die Queue neu zuordnen und abzuarbeiten. Es kann eventuell nötig werden, das Verzeichnis /var/spool/mqueue_full in geeignete Pakete aufzuteilen.
startsrc -s sendmail -a "-bd -q15"
MaxMessageSize=1000000 (das ist 1MB pro Message).
B Body Type. 7 Bit oder 8BITMIME. Default 7 Bit
C Controlling User. Wird auf den Besitzer des Files bzw. des Direktories gesetzt, in das geschrieben wird. Sendmail läuft dann mit diesen Rechten.
F Envelope Flags w, r, 8, b
w EF_WARNING
r RESPONSE
8 HAS8BIT
b DELETE_BCC
H Heading Information wie in sendmail.cf, Reihenfolge bestimmt Sequenz.
I Inode und Device Informationen (Schutz gegen Crash)
K Zeit in Sekunden des letzten Zustell-Versuches
M Hier stehen Fehlermeldungen, warum die Mail in der Queue sitzt.
N Gesamtzahl der Zustellversuche
O Setzt das ursprüngliche MTS (Message Transfer System) auf ESMTP. Dient zum Übertragen der Delivery Status Notifications
P Priorität der Mail. Die Priorität ordnet die Queue. (Je höher die Nummer, desto niedriger die Priorität). Die Anfangspriorität hängt von der Größe der Mail und der Klasse der Mail ab. Wartezeit steigert die Priorität.
Q ESTMP Transaction Specification. Enthält den originalen Empfänger, und bezieht sich auf eine direkt folgende R-Zeile. Hat Bedeutung im Zusammenhang mit Delivery Status Notifications.
R Enthält eine Empfänger-Adresse. Es können viele derartige Zeilen definiert werden.
S Enthält die Sender-Adresse. Es kann nur eine derartige Zeile geben.
T Message Creation Time. Dient zum Time-Out der Mail.
V Version Number des Queue File Format. Muß in der ersten Zeile stehen.
Z Setzt die ursprüngliche ID des Envelopes (in ESMTP). Nur mit D, S und N.
$ Macro-Definitionen. Verschiedene Makros werden beim Abarbeiten der Queue mit angezogen.
Man kann Mails bevorzugt abarbeiten:
sendmail -qIstring
Sendet alle Mails mit dieser Queue-ID.
Geht auch mit Sendern oder Empfängern:
sendmail -qRuser-ID
sendmail -qSuser-ID
Es kann unter Umständen nötig sein, Mail zu filtern. Dazu bietet Sendmail in den neueren Versionen viele Möglichkeiten. Man kann es im Notfall auch schnell und zu Fuß machen.
Dazu wird Sendmail so konfiguriert, daß alle Mail in eine Queue läuft. Diese filtert man mit einem eigenen Skript nach Schlüsselwörtern und wirft solche Mails einfach raus. Dann wird per cron die Queue abgearbeitet.
Zuerst wird die /etc/sendmail.cf editiert. Die Zeile DeliveryMode=background wird in DeliveryMode=queue geändert. Das zeigt dem Sendmail Dämon an, daß er die Mails nicht sofort zustellen, sondern in die Queue legen soll. Der Dämon muß jetzt gestoppt und gestartet werden:
stopsrc -s sendmail startsrc -s sendmail -a "-bd -odq"Alle Mail (Senden und Empfangen) geht jetzt nach /var/spool/mqueue - man muß also Platz vorsehen...
Jetzt muß ein einfaches Skript erstellt werden, daß regelmäßig über alle Dateien geht, und diese nach den Schlüsselwörtern durchsucht. In der Regel kann man das auf die Betreff-Zeile beschränken. Diese Files werden dann gelöscht.
Wie weiter oben erläutert, ist jede Mail (Nachricht) Nachricht durch mehrere Files vertreten. Die Files werden mit der Nummer der Mail benannt, sowie vorangestellten Buchstaben, die die Aufgabe des Files abgeben. Das File qfxxxxxx enthält den Header, das File dfxxxxxx enthält die eigentliche Nachricht. Alle Files, die zu einer Nachricht gehören (also diesselbe ID tragen) müßen gelöscht werden.
[ Allgemein | UNIX | AIX | TCP-IP | TCP | ROUTING | DNS | NTP | NFS | FreeBSD | Linux | RPi | SMTP | Tracing | GPS | LW ]
Copyright 2001-2021 by Orm Hager - Es gilt die GPL