Re: sendmail timeouts

From: Oliver Fromme <olli(at)lurza.secnetix.de>
Date: Thu, 12 Oct 2006 09:03:06 +0200 (CEST)

Christian Lackas wrote:
> ich habe seit kurzem ein Problem mit meinem sendmail. Ein Mailserver
> (auf den ich keinen Einfluss habe) möchte eine ganze Reihe von Mails
> zustellen, allerdings geht dabei irgendetwas schief und er scheint die
> Daten nicht wirklich zu schicken. Die Verbindung bleibt aber einfach
> offen und nach 15 Kindern lehnt sendmail dann jede weitere Verbindung
> ab.
>
> Im Logfile steht folgendes:
>
> Oct 12 06:37:14 xxx sendmail[14125]: rejecting connections on daemon MTA: 15 children, max 15
>
> Die Prozessliste zeigt sowas:
>
> root 16156 0.0 0.2 7232 3688 ? S 06:37 0:00 sendmail: k9C4b3mS016156 zam837.fz-juelich.de [134.94.100.69]: DATA
> root 16157 0.0 0.2 7232 3688 ? S 06:37 0:00 sendmail: k9C4b3Wm016157 zam837.fz-juelich.de [134.94.100.69]: DATA
> root 16158 0.0 0.2 7232 3672 ? S 06:37 0:00 sendmail: k9C4b3IO016158 zam837.fz-juelich.de [134.94.100.69]: DATA
>
> Und strace zeigt bei den Prozessen dies hier:
>
> Process 16157 attached - interrupt to quit
> select(8, [7], NULL, [7], {3049, 220000}
>
> Ich weiss nicht genau wie der Timeout im select zu interpretieren ist,
> aber er ist ziemlich hoch, weil sich das System auch nicht mehr von
> selbst fängt.

Es handelt sich um einen "struct timeval" (siehe die Man-
pages select(2) und gettimeofday(2)), der aus einem Tupel
{Sekunden, Mikrosekunden} besteht. In diesem Fall sind es
also noch 3049,22 Sekunden (ca. 51 Minuten). Vermutlich
war der ursprüngliche Timeout 1 Stunde.

> Mittels tcpdump sehe ich auch keinerlei Daten von aussen kommen.

Hm, seltsam. Entweder ist das ein »Protokollmissverständ-
nis« aufgrund eines Bugs bei einem der Beteiligten, oder
(was ich eher für unwahrscheinlich halte) ein DoS-Angriff
nach dem »Teergrubenprinzip« o.ä.

> Wie kann ich sendmail beibringen eine Verbindung zu beenden, wenn da
> eine angemessene Zeit keine Daten mehr kommen?

Siehe unten. Allerdings wäre es vielleicht sinnvoller,
zu untersuchen, was die eigentliche Ursache des Problems
ist. Darf ich fragen, was für eine Netzwerkkarte dort
beteiligt ist, und welche OS-Version im Einsatz ist?

Man kann die Timeouts bei sendmail sehr fein granuliert
einstellen; für die *.mc-Datei gibt es da eine ganze
Reihe von Einstellungen. Sie sind alle dokumentiert in
src/contrib/sendmail/cd/README.

Im vorliegenden Fall vermute ich, dass zwei Timeouts in
Frage kommen: confTO_DATABLOCK (Timeout während der
Übertragung der eigentlichen E-Mail) und confTO_COMMAND
(Timeout während des Wartens auf ein SMTP-Kommando).
Bei beiden ist der Default 1h. Außerdem wäre vielleicht
noch das Limit für die Anzahl der Children interessant;
die mc-Variable dafür heißt confMAX_DAEMON_CHILDREN.
Deren Default ist allerdings unbegrenzt, nicht 15 (was
mir recht wenig erscheint); vielleicht wird die ja bei
Dir bereits irgendwo auf 15 gesetzt.

Mit folgenden Einträgen in Deiner *.mc-Datei würdest Du
(testweise) die genannten Timeouts auf 5 Minuten und das
Children-Limit auf 50 setzen:

define(`confMAX_DAEMON_CHILDREN', `50')
define(`confTO_DATABLOCK', `5m')
define(`confTO_COMMAND', `5m')

Wenn Du's nur rasch testen willst, kannst Du die Optionen
auch beim Starten von sendmail auf der Kommandozeile
angeben (bzw. in /etc/rc.conf einstellen):
-O MaxDaemonChildren=50 -O Timeout.datablock=5m -O Timeout.command=5m

Gruß
   Olli

-- 
Oliver Fromme,  secnetix GmbH & Co. KG, Marktplatz 29, 85567 Grafing
Dienstleistungen mit Schwerpunkt FreeBSD: http://www.secnetix.de/bsd
Any opinions expressed in this message may be personal to the author
and may not necessarily reflect the opinions of secnetix in any way.
"In My Egoistical Opinion, most people's C programs should be indented
six feet downward and covered with dirt."
        -- Blair P. Houghton
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Thu 12 Oct 2006 - 09:05:00 CEST

search this site